= StatefulContainer Configuration
:index-group: Unrevised
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published


A StatefulContainer can be declared via xml in the
`<tomee-home>/conf/tomee.xml` file or in a `WEB-INF/resources.xml` file
using a declaration like the following. All properties in the element
body are optional.

[source,xml]
----
<Container id="myStatefulContainer" type="STATEFUL">
    accessTimeout = 30 seconds
    bulkPassivate = 100
    cache = org.apache.openejb.core.stateful.SimpleCache
    capacity = 1000
    frequency = 60
    passivator = org.apache.openejb.core.stateful.SimplePassivater
    timeOut = 20
</Container>
----

Alternatively, a StatefulContainer can be declared via properties in the
`<tomee-home>/conf/system.properties` file or via Java VirtualMachine
`-D` properties. The properties can also be used when embedding TomEE
via the `jakarta.ejb.embeddable.EJBContainer` API or `InitialContext`

[source,properties]
----
myStatefulContainer = new://Container?type=STATEFUL
myStatefulContainer.accessTimeout = 30 seconds
myStatefulContainer.bulkPassivate = 100
myStatefulContainer.cache = org.apache.openejb.core.stateful.SimpleCache
myStatefulContainer.capacity = 1000
myStatefulContainer.frequency = 60
myStatefulContainer.passivator = org.apache.openejb.core.stateful.SimplePassivater
myStatefulContainer.timeOut = 20
----

Properties and xml can be mixed. Properties will override the xml
allowing for easy configuration change without the need for $\{} style
variable substitution. Properties are not case sensitive. If a property
is specified that is not supported by the declared StatefulContainer a
warning will be logged. If a StatefulContainer is needed by the
application and one is not declared, TomEE will create one dynamically
using default settings. Multiple StatefulContainer declarations are
allowed. # Supported Properties

Property

Type

Default

Description

accessTimeout

time

30 seconds

Specifies the maximum time an invocation could wait for the `@Stateful`
bean instance to become available before giving up.

bulkPassivate

int

100

Property name that specifies the number of instances to passivate at one
time when doing bulk passivation.

cache

String

org.apache.openejb.core.stateful.SimpleCache

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.

capacity

int

1000

Specifies the size of the bean pools for this stateful SessionBean
container.

frequency

int

60

Specifies the frequency (in seconds) at which the bean cache is checked
for idle beans.

passivator

String

org.apache.openejb.core.stateful.SimplePassivater

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.

timeOut

time

20

Specifies the time a bean can be idle before it is removed by the
container.

== accessTimeout

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
`jakarta.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 `jakarta.ejb.AccessTimeout` annotation will override this
setting for the bean or method where the annotation is used.

== 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

== timeOut

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 `jakarta.ejb.StatefulTimeout` annotation will override
this setting for the bean where the annotation is used.
