# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# all this properties are added at JVM system properties at startup
# here some default Apache TomEE system properties
# for more information please see http://tomee.apache.org/properties-listing.html

# allowed packages to be deserialized, by security we denied all by default, tune tomee.serialization.class.whitelist packages to change it
# tomee.remote.support = true
tomee.serialization.class.blacklist = *
# tomee.serialization.class.whitelist = my.package
# Johnzon prevents too big string to be unserialized by default
# You can either configure it by Mapper/Parser instance or globally
# With this property:
# org.apache.johnzon.max-string-length = 8192

# Should a jar with at least one EJB activate CDI for this module?
# Spec says so but this can imply more (permgen) memory usage
# openejb.cdi.activated-on-ejb = true

# openejb.check.classloader = false
# openejb.check.classloader.verbose = false

# Activate EE default resources (ManagedExecutorService, JMSConnectionFactory if JMS is there...)openejb.environment.default = true

# tomee.jaxws.subcontext = webservices
# tomee.jaxws.oldsubcontext = false

# if you want to propagate a deployment on a cluster when a tomcat cluster is defined
# tomee.cluster.deployment = false

# openejb.system.apps = true
# openejb.servicemanager.enabled = true
# openejb.jmx.active = false
# openejb.descriptors.output = false
# openejb.strict.interface.declaration = false
# openejb.conf.file = conf/tomee.xml
# openejb.debuggable-vm-hackery = false
# openejb.validation.skip = false
# openejb.webservices.enabled = true
# openejb.validation.output.level = MEDIUM
# openejb.user.mbeans.list = *
# openejb.deploymentId.format = {appId}/{ejbJarId}/{ejbName}
# openejb.jndiname.format = {deploymentId}{interfaceType.annotationName}
# openejb.deployments.package.include = .*
# openejb.deployments.package.exclude = 
# openejb.autocreate.jta-datasource-from-non-jta-one = true
# openejb.altdd.prefix = 
# org.apache.openejb.default.system.interceptors = 
# openejb.jndiname.failoncollision = true
# openejb.wsAddress.format = /{ejbDeploymentId}
# org.apache.openejb.server.webservices.saaj.provider = 
# openejb.nobanner = true
# openejb.offline = false
# openejb.jmx.active = true
# openejb.exclude-include.order = include-exclude
# openejb.additional.exclude =
# openejb.additional.include =
# openejb.crosscontext = false
# openejb.jsessionid-support = 
# openejb.myfaces.disable-default-values = true
# openejb.web.xml.major = 
# openjpa.Log = 
# openejb.jdbc.log = false
# javax.persistence.provider = org.apache.openjpa.persistence.PersistenceProviderImpl
# javax.persistence.transactionType = 
# javax.persistence.jtaDataSource = 
# javax.persistence.nonJtaDataSource = 
#
# Properties for JAS RS
# openejb.jaxrs.application = 
# openejb.cxf-rs.wadl-generator.ignoreRequests = false
# openejb.cxf-rs.wadl-generator.ignoreMessageWriters = true
# Replace the Jonhzon JSON Providers with the following classes [comma seperated, no spaces]
# openejb.jaxrs.jsonProviders =
#
# These properties are only for cxf service (SOAP webservices) and TomEE+
# If you don't use special tricks and sun default implementation, uncommenting these 4 lines forces TomEE to use it without overhead at all = 
# javax.xml.soap.MessageFactory = com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
# javax.xml.soap.SOAPFactory = com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl
# javax.xml.soap.SOAPConnectionFactory = com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory
# javax.xml.soap.MetaFactory = com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl
