{anchor: containers}
h2. Containers
{anchor:Default CMP Container-container}
h3. Default CMP Container
    || Property Name || Description ||
    | CmpEngineFactory | Default value is _org.apache.openejb.core.cmp.jpa.JpaCmpEngineFactory_.||

{anchor:Default BMP Container-container}
h3. Default BMP Container
    || Property Name || Description ||
    | PoolSize | Specifies the size of the bean pools for this\\ bmp entity container.\\ \\ Default value is _10_.||

{anchor:Default Stateless Container-container}
h3. Default Stateless Container
    || Property Name || Description ||
    | TimeOut | Specifies the time to wait between invocations. This\\ value is measured in milliseconds. A value of 5 would\\ result in a time\-out of 5 milliseconds between invocations.\\ A value of zero would mean no timeout.\\ \\ Default value is _0_.||
    | PoolSize | Specifies the size of the bean pools for this\\ stateless SessionBean container.\\ \\ Default value is _10_.||
    | StrictPooling | StrictPooling tells the container what to do when the pool\\ reaches it's maximum size and there are incoming requests\\ that need instances.\\ \\ With strict pooling, requests will have to wait for instances\\ to become available. The pool size will never grow beyond the\\ the set PoolSize value.\\ \\ Without strict pooling, the container will create temporary\\ instances to meet demand. The instances will last for just one\\ method invocation and then are removed.\\ \\ Default value is _true_.||

{anchor:Default Stateful Container-container}
h3. Default Stateful Container
    || Property Name || Description ||
    | Passivator | The passivator is responsible for writing beans to disk\\ at passivation time. Different passivators can be used\\ by setting this property to the fully qualified class name\\ of the PassivationStrategy implementation. The passivator\\ is not responsible for invoking any callbacks or other\\ processing, its only responsibly is to write the bean state\\ to disk.\\ \\ Known implementations:\\ org.apache.openejb.core.stateful.RAFPassivater\\ org.apache.openejb.core.stateful.SimplePassivater\\ \\ Default value is _org.apache.openejb.core.stateful.SimplePassivater_.||
    | TimeOut | Specifies the time to wait between invocations. This\\ value is measured in minutes. A value of 5 would\\ result in a time\-out of 5 minutes between invocations.\\ A value of zero would mean no timeout.\\ \\ Default value is _20_.||
    | PoolSize | Specifies the size of the bean pools for this\\ stateful SessionBean container.\\ \\ Default value is _1000_.||
    | BulkPassivate | Property name that specifies the number of instances\\ to passivate at one time when doing bulk passivation.\\ \\ Default value is _100_.||

{anchor:Default MDB Container-container}
h3. Default MDB Container
    || Property Name || Description ||
    | ResourceAdapter | The resource adapter delivers messages to the container\\ \\ Default value is _Default JMS Resource Adapter_.||
    | MessageListenerInterface | Specifies the message listener interface handled by this container\\ \\ Default value is _javax.jms.MessageListener_.||
    | ActivationSpecClass | Specifies the activation spec class\\ \\ Default value is _org.apache.activemq.ra.ActiveMQActivationSpec_.||
    | InstanceLimit | Specifies the maximum number of bean instances that are\\ allowed to exist for each MDB deployment.\\ \\ Default value is _10_.||


{anchor: resources}
h2. Resources
{anchor:Default JDBC Database-resource}
h3. Default JDBC Database
    || Property Name || Description ||
    | JtaManaged | Determines wether or not this data source should be JTA managed\\ or user managed.{html}&nbsp;&nbsp;{html}If set to 'true' it will automatically be enrolled\\ in any ongoing transactions.{html}&nbsp;&nbsp;{html}Calling begin/commit/rollback or setAutoCommit\\ on the datasource or connection will not be allowed.{html}&nbsp;&nbsp;{html}If you need to perform\\ these functions yourself, set JtaManaged to 'false'\\ \\ In terms of JPA persistence.xml:\\ "JtaManaged=true" can be used as a 'jta\-data\-source'\\ "JtaManaged=false" can be used as a 'non\-jta\-data\-source'\\ \\ Default value is _true_.||
    | JdbcDriver | Driver class name\\ \\ Default value is _org.hsqldb.jdbcDriver_.||
    | JdbcUrl | Url for creating connections\\ \\ Default value is _jdbc:hsqldb:{html}file:{html}data/hsqldb/hsqldb_.||
    | UserName | Default user name\\ \\ Default value is _sa_.||
    | Password | Default password|
    | ConnectionProperties | The connection properties that will be sent to the JDBC\\ driver when establishing new connections\\ \\ Format of the string must be \[propertyName=property;\]\*\\ \\ NOTE \- The "user" and "password" properties will be passed\\ explicitly, so they do not need to be included here.|
    | DefaultAutoCommit | The default auto\-commit state of new connections\\ \\ Default value is _true_.||
    | DefaultReadOnly | The default read\-only state of new connections\\ If not set then the setReadOnly method will not be called.\\ \(Some drivers don't support read only mode, ex: Informix\)|
    | DefaultTransactionIsolation | The default TransactionIsolation state of new connections\\ If not set then the setTransactionIsolation method will not\\ be called. The allowed values for this property are:\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} NONE\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} READ\_COMMITTED\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} READ\_UNCOMMITTED\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} REPEATABLE\_READ\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} SERIALIZABLE\\ \\ Note: Most JDBC drivers do not support all isolation levels|
    | InitialSize | The initial number of connections that are created when the\\ pool is started\\ \\ Default value is _0_.||
    | MaxActive | The maximum number of active connections that can be\\ allocated from this pool at the same time, or a negative\\ number for no limit.\\ \\ Default value is _20_.||
    | MaxIdle | The maximum number of connections that can remain idle in\\ the pool, without extra ones being released, or a negative\\ number for no limit.\\ \\ Default value is _20_.||
    | MinIdle | The minimum number of connections that can remain idle in\\ the pool, without extra ones being created, or zero to\\ create none.\\ \\ Default value is _0_.||
    | MaxWait | The maximum number of milliseconds that the pool will wait\\ \(when there are no available connections\) for a connection\\ to be returned before throwing an exception, or \-1 to wait\\ indefinitely.\\ \\ Default value is _\-1_.||
    | ValidationQuery | The SQL query that will be used to validate connections from\\ this pool before returning them to the caller. If specified,\\ this query MUST be an SQL SELECT statement that returns at\\ least one row.|
    | TestOnBorrow | If true connections will be validated before being returned\\ from the pool. If the validation fails, the connection is\\ destroyed, and a new conection will be retrieved from the\\ pool \(and validated\).\\ \\ NOTE \- for a true value to have any effect, the\\ ValidationQuery parameter must be set.\\ \\ Default value is _true_.||
    | TestOnReturn | If true connections will be validated before being returned\\ to the pool.{html}&nbsp;&nbsp;{html}If the validation fails, the connection is\\ destroyed instead of being returned to the pool.\\ \\ NOTE \- for a true value to have any effect, the\\ ValidationQuery parameter must be set.\\ \\ Default value is _false_.||
    | TestWhileIdle | If true connections will be validated by the idle connection\\ evictor \(if any\). If the validation fails, the connection is\\ destroyed and removed from the pool\\ \\ NOTE \- for a true value to have any effect, the\\ timeBetweenEvictionRunsMillis property must be a positive\\ number and the ValidationQuery parameter must be set.\\ \\ Default value is _false_.||
    | TimeBetweenEvictionRunsMillis | The number of milliseconds to sleep between runs of the idle\\ connection evictor thread. When set to a negative number, no\\ idle connection evictor thread will be run.\\ \\ Default value is _\-1_.||
    | NumTestsPerEvictionRun | The number of connectionss to examine during each run of the\\ idle connection evictor thread \(if any\).\\ \\ Default value is _3_.||
    | MinEvictableIdleTimeMillis | The minimum amount of time a connection may sit idle in the\\ pool before it is eligable for eviction by the idle\\ connection evictor \(if any\).\\ \\ Default value is _1800000_.||
    | PoolPreparedStatements | If true, a statement pool is created for each Connection and\\ PreparedStatements created by one of the following methods are\\ pooled:\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}public PreparedStatement prepareStatement\(String sql\);\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}public PreparedStatement prepareStatement\(String sql,\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}int resultSetType,\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}int resultSetConcurrency\)\\ \\ Default value is _false_.||
    | MaxOpenPreparedStatements | The maximum number of open statements that can be allocated\\ from the statement pool at the same time, or zero for no\\ limit.\\ \\ NOTE \- Some drivers have limits on the number of open\\ statements, so make sure there are some resources left\\ for the other \(non\-prepared\) statements.\\ \\ Default value is _0_.||
    | AccessToUnderlyingConnectionAllowed | If true the raw physical connection to the database can be\\ accessed using the following construct:\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} Connection conn = ds.getConnection\(\);\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} Connection rawConn = \(\(DelegatingConnection\) conn\).getInnermostDelegate\(\);\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} ...\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} conn.close\(\)\\ \\ Default is false, because misbehaving programs can do harmfull\\ things to the raw connection shuch as closing the raw\\ connection or continuing to use the raw connection after it\\ has been assigned to another logical connection.{html}&nbsp;&nbsp;{html}Be carefull\\ and only use when you need direct access to driver specific\\ extentions.\\ \\ NOTE: Do NOT close the underlying connection, only the\\ original logical connection wrapper.\\ \\ Default value is _false_.||

{anchor:Default Unmanaged JDBC Database-resource}
h3. Default Unmanaged JDBC Database
    || Property Name || Description ||
    | JtaManaged | Default value is _false_.||
    | JdbcDriver | Driver class name\\ \\ Default value is _org.hsqldb.jdbcDriver_.||
    | JdbcUrl | Url for creating connections\\ \\ Default value is _jdbc:hsqldb:{html}file:{html}data/hsqldb/hsqldb_.||
    | UserName | Default user name\\ \\ Default value is _sa_.||
    | Password | Default password|
    | ConnectionProperties | The connection properties that will be sent to the JDBC\\ driver when establishing new connections\\ \\ Format of the string must be \[propertyName=property;\]\*\\ \\ NOTE \- The "user" and "password" properties will be passed\\ explicitly, so they do not need to be included here.|
    | DefaultAutoCommit | The default auto\-commit state of new connections\\ \\ Default value is _true_.||
    | DefaultReadOnly | The default read\-only state of new connections\\ If not set then the setReadOnly method will not be called.\\ \(Some drivers don't support read only mode, ex: Informix\)|
    | DefaultTransactionIsolation | The default TransactionIsolation state of new connections\\ If not set then the setTransactionIsolation method will not\\ be called. The allowed values for this property are:\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} NONE\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} READ\_COMMITTED\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} READ\_UNCOMMITTED\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} REPEATABLE\_READ\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} SERIALIZABLE\\ \\ Note: Most JDBC drivers do not support all isolation levels|
    | InitialSize | The initial number of connections that are created when the\\ pool is started\\ \\ Default value is _0_.||
    | MaxActive | The maximum number of active connections that can be\\ allocated from this pool at the same time, or a negative\\ number for no limit.\\ \\ Default value is _10_.||
    | MaxIdle | The maximum number of connections that can remain idle in\\ the pool, without extra ones being released, or a negative\\ number for no limit.\\ \\ Default value is _10_.||
    | MinIdle | The minimum number of connections that can remain idle in\\ the pool, without extra ones being created, or zero to\\ create none.\\ \\ Default value is _0_.||
    | MaxWait | The maximum number of milliseconds that the pool will wait\\ \(when there are no available connections\) for a connection\\ to be returned before throwing an exception, or \-1 to wait\\ indefinitely.\\ \\ Default value is _\-1_.||
    | ValidationQuery | The SQL query that will be used to validate connections from\\ this pool before returning them to the caller. If specified,\\ this query MUST be an SQL SELECT statement that returns at\\ least one row.|
    | TestOnBorrow | If true connections will be validated before being returned\\ from the pool. If the validation fails, the connection is\\ destroyed, and a new conection will be retrieved from the\\ pool \(and validated\).\\ \\ NOTE \- for a true value to have any effect, the\\ ValidationQuery parameter must be set.\\ \\ Default value is _true_.||
    | TestOnReturn | If true connections will be validated before being returned\\ to the pool.{html}&nbsp;&nbsp;{html}If the validation fails, the connection is\\ destroyed instead of being returned to the pool.\\ \\ NOTE \- for a true value to have any effect, the\\ ValidationQuery parameter must be set.\\ \\ Default value is _false_.||
    | TestWhileIdle | If true connections will be validated by the idle connection\\ evictor \(if any\). If the validation fails, the connection is\\ destroyed and removed from the pool\\ \\ NOTE \- for a true value to have any effect, the\\ timeBetweenEvictionRunsMillis property must be a positive\\ number and the ValidationQuery parameter must be set.\\ \\ Default value is _false_.||
    | TimeBetweenEvictionRunsMillis | The number of milliseconds to sleep between runs of the idle\\ connection evictor thread. When set to a negative number, no\\ idle connection evictor thread will be run.\\ \\ Default value is _\-1_.||
    | NumTestsPerEvictionRun | The number of connectionss to examine during each run of the\\ idle connection evictor thread \(if any\).\\ \\ Default value is _3_.||
    | MinEvictableIdleTimeMillis | The minimum amount of time a connection may sit idle in the\\ pool before it is eligable for eviction by the idle\\ connection evictor \(if any\).\\ \\ Default value is _1800000_.||
    | PoolPreparedStatements | If true, a statement pool is created for each Connection and\\ PreparedStatements created by one of the following methods are\\ pooled:\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}public PreparedStatement prepareStatement\(String sql\);\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}public PreparedStatement prepareStatement\(String sql,\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}int resultSetType,\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}{html}&nbsp;&nbsp;&nbsp;&nbsp;{html}int resultSetConcurrency\)\\ \\ Default value is _false_.||
    | MaxOpenPreparedStatements | The maximum number of open statements that can be allocated\\ from the statement pool at the same time, or zero for no\\ limit.\\ \\ NOTE \- Some drivers have limits on the number of open\\ statements, so make sure there are some resources left\\ for the other \(non\-prepared\) statements.\\ \\ Default value is _0_.||
    | AccessToUnderlyingConnectionAllowed | If true the raw physical connection to the database can be\\ accessed using the following construct:\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} Connection conn = ds.getConnection\(\);\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} Connection rawConn = \(\(DelegatingConnection\) conn\).getInnermostDelegate\(\);\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} ...\\{html}&nbsp;&nbsp;&nbsp;&nbsp;{html} conn.close\(\)\\ \\ Default is false, because misbehaving programs can do harmfull\\ things to the raw connection shuch as closing the raw\\ connection or continuing to use the raw connection after it\\ has been assigned to another logical connection.{html}&nbsp;&nbsp;{html}Be carefull\\ and only use when you need direct access to driver specific\\ extentions.\\ \\ NOTE: Do NOT close the underlying connection, only the\\ original logical connection wrapper.\\ \\ Default value is _false_.||

{anchor:Default JMS Resource Adapter-resource}
h3. Default JMS Resource Adapter
    || Property Name || Description ||
    | BrokerXmlConfig | Broker configuration\\ \\ Default value is _broker:\(tcp://localhost:61616\)\?useJmx=false_.||
    | ServerUrl | Broker address\\ \\ Default value is _vm://localhost\?async=true_.||
    | DataSource | DataSource for persistence messages\\ \\ Default value is _Default Unmanaged JDBC Database_.||
    | ThreadPoolSize | Specifies the size of the thread pool available to AciveMQ.\\ \\ Default value is _30_.||

{anchor:Default JMS Connection Factory-resource}
h3. Default JMS Connection Factory
    || Property Name || Description ||
    | ResourceAdapter | Default value is _Default JMS Resource Adapter_.||
    | TransactionSupport | Specifies if the connection is enrolled in global transaction\\ allowed values: xa, local or none\\ \\ Default value is _xa_.||
    | PoolMaxSize | Maximum number of physical connection to the ActiveMQ broker\\ \\ Default value is _10_.||
    | PoolMinSize | Minimum number of physical connection to the ActiveMQ broker\\ \\ Default value is _0_.||
    | ConnectionMaxWaitMilliseconds | Maximum amount of time to wait for a connection\\ \\ Default value is _5000_.||
    | ConnectionMaxIdleMinutes | Maximum amount of time a connection can be idle before being reclaimed\\ \\ Default value is _15_.||

{anchor:Default Queue-resource}
h3. Default Queue
    || Property Name || Description ||
    | destination | Specifies the name of the queue|

{anchor:Default Topic-resource}
h3. Default Topic
    || Property Name || Description ||
    | destination | Specifies the name of the topic|

{anchor:Default ORB-resource}
h3. Default ORB
No properties.

{anchor:Default Mail Session-resource}
h3. Default Mail Session
No properties.

