Declarable in openejb.xml via
<Container id="Foo" type="STATELESS">
</Container>
Declarable in properties via
Foo = new://Container?type=STATELESS
Specifies the time an invokation should wait for an instance of the pool to become available.
After the timeout is reached, if an instance in the pool cannot be obtained, the method invocation will fail.
Usable time units: nanoseconds, microsecons, milliseconds, seconds, minutes, hours, days. Or any combination such as "1 hour and 27 minutes and 10 seconds"
Any usage of the javax.ejb.AccessTimeout annotation will
override this setting for the bean or method where the
annotation is used.
Specifies the size of the bean pools for this stateless SessionBean container. If StrictPooling is not used, instances will still be created beyond this number if there is demand, but they will not be returned to the pool and instead will be immediately destroyed.
Specifies the minimum number of bean instances that should be in
the pool for each bean. Pools are prefilled to the minimum on
startup. Note this will create start order dependencies between
other beans that also eagerly start, such as other @Stateless
beans with a minimum or @Singleton beans using @Startup. The
start order.
The minimum pool size is rigidly maintained. Instances in the
minimum side of the pool are not eligible for IdleTimeout or
GarbageCollection, but are subject to MaxAge and flushing.
If the pool is flushed it is immediately refilled to the minimum
size with MaxAgeOffset applied. If an instance from the minimum
side of the pool reaches its MaxAge, it is also immediately
replaced. Replacement is done in a background queue using the
number of threads specified by CallbackThreads.
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 MaxSize value. The maximum amount of time a request should
wait is specified via the AccessTimeout setting.
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.
Setting StrictPooling to false and MaxSize to 0 will result in
no pooling. Instead instances will be created on demand and live
for exactly one method call before being removed.
Specifies the maximum time that an instance should live before it should be retired and removed from use. This will happen gracefully. Useful for situations where bean instances are designed to hold potentially expensive resources such as memory or file handles and need to be periodically cleared out.
Usable time units: nanoseconds, microsecons, milliseconds,
seconds, minutes, hours, days. Or any combination such as
1 hour and 27 minutes and 10 seconds
When ReplaceAged is enabled, any instances in the pool that
expire due to reaching their MaxAge will be replaced immediately
so that the pool will remain at its current size. Replacement
is done in a background queue so that incoming threads will not
have to wait for instance creation.
The aim of his option is to prevent user requests from paying
the instance creation cost as MaxAge is enforced, potentially
while under heavy load at peak hours.
Instances from the minimum side of the pool are always replaced
when they reach their MaxAge, this setting dictates the
treatment of non-minimum instances.
When ReplaceFlushed is enabled, any instances in the pool that
are flushed will be replaced immediately so that the pool will
remain at its current size. Replacement is done in a background
queue so that incoming threads will not have to wait for
instance creation.
The aim of his option is to prevent user requests from paying the instance creation cost if a flush performed while under heavy load at peak hours.
Instances from the minimum side of the pool are always replaced when they are flushed, this setting dictates the treatment of non-minimum instances.
A bean may flush its pool by casting the SessionContext to
Flushable and calling flush(). See SweepInterval for details on
how flush is performed.
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import java.io.Flushable;
import java.io.IOException;
public class MyBean {
private SessionContext sessionContext;
public void flush() throws IOException {
((Flushable) sessionContext).flush();
}
}
Applies to MaxAge usage and would rarely be changed, but is a nice feature to understand.
When the container first starts and the pool is filled to the
minimum size, all those "minimum" instances will have the same
creation time and therefore all expire at the same time dictated
by the MaxAge setting. To protect against this sudden drop
scenario and provide a more gradual expiration from the start
the container will spread out the age of the instances that fill
the pool to the minimum using an offset.
The MaxAgeOffset is not the final value of the offset, but
rather it is used in creating the offset and allows the
spreading to push the initial ages into the future or into the
past. The pool is filled at startup as follows:
for (int i = 0; i < poolMin; i++) {
long ageOffset = (maxAge / poolMin * i * maxAgeOffset) % maxAge;
pool.add(new Bean(), ageOffset));
}
The default MaxAgeOffset is -1 which causes the initial
instances in the pool to live a bit longer before expiring. As
a concrete example, let's say the MinSize is 4 and the MaxAge is
100 years. The generated offsets for the four instances created
at startup would be 0, -25, -50, -75. So the first instance
would be "born" at age 0, die at 100, living 100 years. The
second instance would be born at -25, die at 100, living a total
of 125 years. The third would live 150 years. The fourth 175
years.
A MaxAgeOffset of 1 would cause instances to be "born" older
and therefore die sooner. Using the same example MinSize of 4
and MaxAge of 100 years, the life spans of these initial four
instances would be 100, 75, 50, and 25 years respectively.
A MaxAgeOffset of 0 will cause no "spreading" of the age of the
first instances used to fill the pool to the minimum and these
instances will of course reach their MaxAge at the same time.
It is possible to set to decimal values such as -0.5, 0.5, -1.2,
or 1.2.
Specifies the maximum time that an instance should be allowed to sit idly in the pool without use before it should be retired and removed.
Usable time units: nanoseconds, microsecons, milliseconds, seconds, minutes, hours, days. Or any combination such as "1 hour and 27 minutes and 10 seconds"
Allows Garbage Collection to be used as a mechanism for shrinking
the pool. When set to true all instances in the pool, excluding
the minimum, are eligible for garbage collection by the virtual
machine as per the rules of java.lang.ref.SoftReference and can be
claimed by the JVM to free memory. Instances garbage collected
will have their @PreDestroy methods called during finalization.
In the OpenJDK VM the -XX:SoftRefLRUPolicyMSPerMB flag can adjust
how aggressively SoftReferences are collected. The default
OpenJDK setting is 1000, resulting in inactive pooled instances
living one second of lifetime per free megabyte in the heap, which
is very aggressive. The setting should be increased to get the
most out of the GarbageCollection feature of the pool. Much
higher settings are safe. Even a setting as high as 3600000 (1
hour per free MB in the heap) does not affect the ability for the
VM to garbage collect SoftReferences in the event that memory is
needed to avoid an OutOfMemoryException.
The frequency in which the container will sweep the pool and
evict expired instances. Eviction is how the IdleTimeout,
MaxAge, and pool "flush" functionality is enforced. Higher
intervals are better.
Instances in use are excluded from sweeping. Should an instance
expire while in use it will be evicted immediately upon return
to the pool. Effectively MaxAge and flushes will be enforced as
a part of normal activity or sweeping, while IdleTimeout is only
enforcable via sweeping. This makes aggressive sweeping less
important for a pool under moderate load.
Usable time units: nanoseconds, microsecons, milliseconds,
seconds, minutes, hours, days. Or any combination such as
1 hour and 27 minutes and 10 seconds
When sweeping the pool for expired instances a thread pool is
used to process calling @PreDestroy on expired instances as well
as creating new instances as might be required to fill the pool
to the minimum after a Flush or MaxAge expiration. The
CallbackThreads setting dictates the size of the thread pool and
is shared by all beans deployed in the container.
PostConstruct methods are invoked on all instances in the pool
when the bean is undeployed and its pool is closed. The
CloseTimeout specifies the maximum time to wait for the pool to
close and PostConstruct methods to be invoked.
Usable time units: nanoseconds, microsecons, milliseconds,
seconds, minutes, hours, days. Or any combination such as
1 hour and 27 minutes and 10 seconds
<Container id="Default Stateless Container" type="STATELESS">
AccessTimeout = 30 seconds
MaxSize = 10
MinSize = 0
StrictPooling = true
MaxAge = 0 hours
ReplaceAged = true
ReplaceFlushed = false
MaxAgeOffset = -1
IdleTimeout = 0 minutes
GarbageCollection = false
SweepInterval = 5 minutes
CallbackThreads = 5
CloseTimeout = 5 minutes
</Container>
Declarable in openejb.xml via
<Container id="Foo" type="STATEFUL">
</Container>
Declarable in properties via
Foo = new://Container?type=STATEFUL
Specifies the maximum time an invocation could wait for the
@Stateful bean instance to become available before giving up.
After the timeout is reached a javax.ejb.ConcurrentAccessTimeoutException
will be thrown.
Usable time units: nanoseconds, microsecons, milliseconds, seconds, minutes, hours, days. Or any combination such as "1 hour and 27 minutes and 10 seconds"
Any usage of the javax.ejb.AccessTimeout annotation will
override this setting for the bean or method where the
annotation is used.
The cache is responsible for managing stateful bean instances. The cache can page instances to disk as memory is filled and can destroy abandoned instances. A different cache implementation can be used by setting this property to the fully qualified class name of the Cache implementation.
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:
Specifies the time a bean can be idle before it is removed by the container.
This value is measured in minutes. A value of 5 would result in a time-out of 5 minutes between invocations. A value of -1 would mean no timeout. A value of 0 would mean a bean can be immediately removed by the container.
Any usage of the javax.ejb.StatefulTimeout annotation will
override this setting for the bean where the annotation is used.
Specifies the frequency (in seconds) at which the bean cache is checked for idle beans.
Specifies the size of the bean pools for this stateful SessionBean container.
Property name that specifies the number of instances to passivate at one time when doing bulk passivation.
<Container id="Default Stateful Container" type="STATEFUL">
AccessTimeout = 30 seconds
Cache = org.apache.openejb.core.stateful.SimpleCache
Passivator = org.apache.openejb.core.stateful.SimplePassivater
TimeOut = 20
Frequency = 60
Capacity = 1000
BulkPassivate = 100
</Container>
Declarable in openejb.xml via
<Container id="Foo" type="SINGLETON">
</Container>
Declarable in properties via
Foo = new://Container?type=SINGLETON
Specifies the maximum time an invocation could wait for the
@Singleton bean instance to become available before giving up.
After the timeout is reached a javax.ejb.ConcurrentAccessTimeoutException
will be thrown.
Usable time units: nanoseconds, microsecons, milliseconds,
seconds, minutes, hours, days. Or any combination such as
1 hour and 27 minutes and 10 seconds
Any usage of the javax.ejb.AccessTimeout annotation will
override this setting for the bean or method where the
annotation is used.
<Container id="Default Singleton Container" type="SINGLETON">
AccessTimeout = 30 seconds
</Container>
Declarable in openejb.xml via
<Container id="Foo" type="MESSAGE">
</Container>
Declarable in properties via
Foo = new://Container?type=MESSAGE
The resource adapter delivers messages to the container
Specifies the message listener interface handled by this container
Specifies the activation spec class
Specifies the maximum number of bean instances that are allowed to exist for each MDB deployment.
<Container id="Default MDB Container" type="MESSAGE">
ResourceAdapter = Default JMS Resource Adapter
MessageListenerInterface = javax.jms.MessageListener
ActivationSpecClass = org.apache.activemq.ra.ActiveMQActivationSpec
InstanceLimit = 10
</Container>
Declarable in openejb.xml via
<Container id="Foo" type="MANAGED">
</Container>
Declarable in properties via
Foo = new://Container?type=MANAGED
No properties.
Declarable in openejb.xml via
<Container id="Foo" type="CMP_ENTITY">
</Container>
Declarable in properties via
Foo = new://Container?type=CMP_ENTITY
No description.
<Container id="Default CMP Container" type="CMP_ENTITY">
CmpEngineFactory = org.apache.openejb.core.cmp.jpa.JpaCmpEngineFactory
</Container>
Declarable in openejb.xml via
<Container id="Foo" type="BMP_ENTITY">
</Container>
Declarable in properties via
Foo = new://Container?type=BMP_ENTITY
Specifies the size of the bean pools for this bmp entity container.
<Container id="Default BMP Container" type="BMP_ENTITY">
PoolSize = 10
</Container>
Declarable in openejb.xml via
<Resource id="Foo" type="javax.sql.DataSource">
</Resource>
Declarable in properties via
Foo = new://Resource?type=javax.sql.DataSource
No description.
Determines wether or not this data source should be JTA managed
or user managed. If set to 'true' it will automatically be enrolled
in any ongoing transactions. Calling begin/commit/rollback or setAutoCommit
on the datasource or connection will not be allowed. 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'Driver class name
Url for creating connections
Default user name
Default password
No description.
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.
The default auto-commit state of new connections
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)
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:
NONEREAD_COMMITTEDREAD_UNCOMMITTEDREPEATABLE_READSERIALIZABLENote: Most JDBC drivers do not support all isolation levels
The initial number of connections that are created when the pool is started
The maximum number of active connections that can be allocated from this pool at the same time, or a negative number for no limit.
The maximum number of connections that can remain idle in the pool, without extra ones being released, or a negative number for no limit.
The minimum number of connections that can remain idle in the pool, without extra ones being created, or zero to create none.
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.
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.
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.
If true connections will be validated before being returned to the pool. 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.
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.
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.
The number of connectionss to examine during each run of the idle connection evictor thread (if any).
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).
If true, a statement pool is created for each Connection and PreparedStatements created by one of the following methods are pooled:
public PreparedStatement prepareStatement(String sql);
public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
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.
If true the raw physical connection to the database can be accessed using the following construct:
Connection conn = ds.getConnection();
Connection rawConn = ((DelegatingConnection) conn).getInnermostDelegate();
...
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. Be careful and only use when you need direct access to driver specific extensions.
NOTE: Do NOT close the underlying connection, only the original logical connection wrapper.
<Resource id="Default JDBC Database" type="javax.sql.DataSource">
Definition =
JtaManaged = true
JdbcDriver = org.hsqldb.jdbcDriver
JdbcUrl = jdbc:hsqldb:file:data/hsqldb/hsqldb
UserName = sa
Password =
PasswordCipher = PlainText
ConnectionProperties =
DefaultAutoCommit = true
DefaultReadOnly =
DefaultTransactionIsolation =
InitialSize = 0
MaxActive = 20
MaxIdle = 20
MinIdle = 0
MaxWait = -1
ValidationQuery =
TestOnBorrow = true
TestOnReturn = false
TestWhileIdle = false
TimeBetweenEvictionRunsMillis = -1
NumTestsPerEvictionRun = 3
MinEvictableIdleTimeMillis = 1800000
PoolPreparedStatements = false
MaxOpenPreparedStatements = 0
AccessToUnderlyingConnectionAllowed = false
</Resource>
Declarable in openejb.xml via
<Resource id="Foo" type="ActiveMQResourceAdapter">
</Resource>
Declarable in properties via
Foo = new://Resource?type=ActiveMQResourceAdapter
Broker configuration
Broker address
DataSource for persistence messages
<Resource id="Default JMS Resource Adapter" type="ActiveMQResourceAdapter">
BrokerXmlConfig = broker:(tcp://localhost:61616)?useJmx=false
ServerUrl = vm://localhost?async=true
DataSource = Default Unmanaged JDBC Database
</Resource>
Declarable in openejb.xml via
<Resource id="Foo" type="javax.jms.ConnectionFactory">
</Resource>
Declarable in properties via
Foo = new://Resource?type=javax.jms.ConnectionFactory
No description.
Specifies if the connection is enrolled in global transaction allowed values: xa, local or none
Maximum number of physical connection to the ActiveMQ broker
Minimum number of physical connection to the ActiveMQ broker
Maximum amount of time to wait for a connection
Maximum amount of time a connection can be idle before being reclaimed
<Resource id="Default JMS Connection Factory" type="javax.jms.ConnectionFactory">
ResourceAdapter = Default JMS Resource Adapter
TransactionSupport = xa
PoolMaxSize = 10
PoolMinSize = 0
ConnectionMaxWaitMilliseconds = 5000
ConnectionMaxIdleMinutes = 15
</Resource>
Declarable in openejb.xml via
<Resource id="Foo" type="javax.jms.Queue">
</Resource>
Declarable in properties via
Foo = new://Resource?type=javax.jms.Queue
Specifies the name of the queue
<Resource id="Default Queue" type="javax.jms.Queue">
destination =
</Resource>
Declarable in openejb.xml via
<Resource id="Foo" type="javax.jms.Topic">
</Resource>
Declarable in properties via
Foo = new://Resource?type=javax.jms.Topic
Specifies the name of the topic
<Resource id="Default Topic" type="javax.jms.Topic">
destination =
</Resource>
Declarable in openejb.xml via
<Resource id="Foo" type="org.omg.CORBA.ORB">
</Resource>
Declarable in properties via
Foo = new://Resource?type=org.omg.CORBA.ORB
No properties.
Declarable in openejb.xml via
<Resource id="Foo" type="javax.mail.Session">
</Resource>
Declarable in properties via
Foo = new://Resource?type=javax.mail.Session
No properties.