EJB container system properties
In addition to the settings that are accessible from the console, we can set EJB system properties using command-line scripting.
We can use the properties page to define the following EJB container system properties:
- com.ibm.websphere.ejbcontainer.allowEarlyInsert
- com.ibm.websphere.ejbcontainer.checkEJBApplicationConfiguration
- com.ibm.websphere.ejbcontainer.declaredUncheckedAreSystemExceptions
- com.ibm.websphere.ejbcontainer.defaultSessionAccessTimeout
- com.ibm.websphere.ejbcontainer.defaultStatefulSessionTimeout
- com.ibm.websphere.ejbcontainer.EE5Compatibility
- com.ibm.websphere.ejbcontainer.excludeRootExceptionOnRollback
- com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor
- com.ibm.websphere.ejbcontainer.poolSize
com.ibm.websphere.ejbcontainer.allowEarlyInsert
This property is applicable to container managed persistence (CMP) 1.1 beans only. By default, the EJB container creates the entity bean representation in the database only after the method, ejbPostCreate(...), is called.
Supported configurations: CMP beans are not supported in EJB 3.x modules.
Some applications might rely on method, ejbCreate(...), to have created the entity bean in the database. For such a requirement, setting the JVM property, com.ibm.websphere.ejbcontainer.allowEarlyInsert, to true overrides the default behavior.
com.ibm.websphere.ejbcontainer.checkEJBApplicationConfiguration
Specifies a server-wide setting that indicates the container should complete additional application configuration validation to ensure the application is consistent with the Java EE specification.
Supported configurations: We can also specify this property as an application custom property.
This property is intended for use during development of an application to assist in identifying improper configurations, which might result in unexpected behavior. For example, applying the javax.ejb.Asynchronous annotation to an interface is not supported by the specification and is typically ignored. When this property is enabled, an error is logged, and an exception occurs when the bean is processed. This failure is useful during development to understand why the methods are not working asynchronously.
Additional configuration validation is completed and might result in multiple configuration warnings and errors being logged when this property is enabled. Typically, this additional validation is for scenarios that incur extra overhead to run, which is unnecessary for stable applications on a production server. For minor deviations from the specification, only warnings are logged. For more significant issues, an error is logged, and the application cannot run until the error is corrected.
When the com.ibm.websphere.ejbcontainer.checkEJBApplicationConfiguration property is enabled, some of the issues that were reported as warnings are displayed as errors, which prevents the application from starting.gotcha
Supported configurations: The embeddable container and servers configured for development mode perform the additional validation that is associated with this property; however, all identified issues are reported as warnings, rather than errors, unless this property is specifically enabled.
com.ibm.websphere.ejbcontainer.declaredUncheckedAreSystemExceptions
Enable you to indicate whether exceptions that are declared on the throws clause of an EJB method should are treated as application exceptions or as system runtime exceptions. When true, these exceptions are treated like system runtime exceptions, and causes an EJBException to be issued on the client side.
If this property is not specified, or if this property is set to false, exceptions that are declared on the throws clause of an EJB method are treated as application exceptions.
The default value for this property is false.
transition: In Version 7, the default value for this property is true.
com.ibm.websphere.ejbcontainer.defaultSessionAccessTimeout
Enable you to specify the default session concurrency access timeout value for all session beans on a server. The value is specified in milliseconds.
Specify a Long data type value to disable or enable session concurrency:
- A 0 value disables session concurrency (no wait).
- A positive long value (1, 2, 3, and so on) enables session concurrency and sets the timeout value to the specified milliseconds.
If this property is set, the specified session bean concurrency access timeout is used server wide instead of the default value of -1 (wait forever). This applies to both stateful and singleton session beans. At the individual session bean level, the timeout can be overridden using the @AccessTimeout annotation on the bean class or method or using the access-timeout deployment descriptor element.
com.ibm.websphere.ejbcontainer.defaultStatefulSessionTimeout
Specifies a server-wide timeout for stateful session beans, which indicates how long a stateful session bean is retained by the server.
Supported configurations: The property applies only to EJB 3.1 modules and later.
This is a system property that we can add directly to the server.xml file or as a generic JVM argument using the console.
The property is specified in minutes, the only valid unit. The default value is 10 minutes. A value of zero specifies that the server uses the default value of 10 minutes. A negative value is not valid. Any zero or greater value is valid. If a non-valid value is specified, a warning is issued to SystemOut, and the default value is used.
The stateful session bean timeout duration can be specified on a per-bean basis using annotations or xml. If a timeout duration is explicitly specified for a particular bean, this takes precedence over any server-wide timeout setting.
If no bean-specific timeout duration exists for a particular bean, then the server-wide timeout setting is applied to that bean.
If no bean-specific timeout duration exists for a particular bean, and no server-wide timeout setting exists, then the default timeout setting is applied to that bean.
com.ibm.websphere.ejbcontainer.EE5Compatibility
Specifies a server-wide setting that indicates the EJB container provides default behaviors that are consistent with the Java Enterprise Edition (Java EE) 5.0 specification.
This is a system property that we can add directly to the server.xml file or as a generic JVM argument using the console.
The Java EE specification includes improvements to the EJB programming model that have resulted in minor changes to some default behaviors. In general, these changes provide more intuitive or more reliable behavior. However, if an application has been written to rely on one or more of the Java EE 5.0 behaviors, this system property might be set to revert the EJB container back to the Java EE 5.0 default behaviors.
Set the property to true overrides the following behaviors:
- @ApplicationException annotations are not inherited. Starting with the Java EE 6.0 specification, the default behavior for the @ApplicationException annotation was changed, indicating that the annotation is inherited by subclass exception classes. When this system property is specified, the @ApplicationException annotation is not inherited by subclass exception classes. Alternatively, we can change the @ApplicationException declaration to specify 'inherited=false'.
- Concurrent access to stateful session beans is prohibited, and results in the exception, javax.ejb.ConcurrentAccessException. Starting with the Java EE 6.0 specification, the default behavior for stateful session concurrency was changed to allow concurrent access, though each concurrent request is serialized by the container, blocking access to the bean instance indefinitely until the instance lock may be obtained. When this system property is specified, all stateful session beans that do not have an explicit access-timeout value specified assume the default access-timeout value of 0 (the Java EE 5.0 default). Alternatively, we can modify the stateful session bean to define an access-timeout value of 0.
- The Java type, Class, and any subclass of Enum are treated as resource environment references instead of simple environment entries. Starting with the Java EE 6.0 specification, the Java type, Class, and any subclass of Enum were added to the set of supported simple environment entry types. In prior versions of Java EE, these types would have been treated as resource environment references and a binding would have been required in the ibm-ejb-jar-bnd.xml file or ibm-web-bnd.xml file. Now that these data types are supported as simple environment entries, a platform-specific binding is no longer required. Instead, we can specify the value directly in the deployment descriptor. When this system property is specified, applications that use the javax.annotation.Resource annotation for the Java type, Class, or any subclass of Enum is treated as resource environment references, and the referenced value will be obtained using the binding file information. Installing the application is not effected by this property, and therefore, binding information is not entered during installation. Instead, you must manually enter the binding information in the binding file.
com.ibm.websphere.ejbcontainer.excludeRootExceptionOnRollback
By default, the EJB container will set the root cause of the exception that occurs during transaction rollback. If true, the EJB container will not set the root cause. This is useful if the application does not expect to find a cause, or if the application logs exceptions and is now logging significantly more data.
com.ibm.websphere.ejbcontainer.extendSetRollbackOnlyBehaviorToInstanceFor
Allow the user to specify application names in which they want to have the EJBs in their EJB 3.x modules demonstrate the pre-EJB 3.0 setRollbackOnly behavior.
The pre-EJB 3.0 setRollbackOnly behavior is described in Change applications to WebSphere version specific setRollbackOnly behavior.
com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor
Allow the user to specify application names in which they want to have the EJBs in their EJB 3.x modules demonstrate the EJB 3.x setRollbackOnly behavior.
The EJB 3.x setRollbackOnly behavior is described in Change applications to WebSphere version specific setRollbackOnly behavior.
com.ibm.websphere.ejbcontainer.poolSize
Specifies the size of the pool for the specified bean type. This property applies to stateless, message-driven, and entity beans. If we do not specify a default value, the container default value, 50 and 500, are used.
Set the pool size for a given entity bean as:
beantype=[H]min,[H]max [:beantype=[H]min,[H]max...]
The beantype element is the Java EE name of the bean, formed by concatenating the application name, the # character, the module name, the # character, and the name of the bean, that is, the string assigned to the <ejb-name> field in the deployment descriptor of the bean. The min and max elements are the minimum and maximum pool sizes for that bean type. Do not specify the square brackets shown in the previous prototype; they denote optional additional bean types that we can specify after the first bean type. Each bean type specification is delimited by a colon (:).
Use an asterisk (*) as the value of beantype to indicate that all bean types are to use those values unless overridden by an exact bean-type specification somewhere else in the string; for example:
*=30,100
To specify a default value, omit either the min or max value but retain the comma (,) between the two values; for example:
The following example displayed on multiple lines for publication purposes.
SMApp#PerfModule#TunerBean=54, :SMApp#SMModule#TypeBean=100,200
We can specify the bean types in any order within the string.
We can designate the maximum configured EJB pool size as a hard limit by inserting the character, H, directly in front of the max value. Without the H character, the maximum value indicates how many EJB instances can be pooled and does not limit the number of EJB instances that can be created or in use. Inserting the H character before the max value indicates a hard limit, and the EJB container blocks creation of more instances when that limit is reached. Further threads must wait until an instance becomes available or until the transaction times out.
We can designate the minimum configured EJB pool size as a hard limit by inserting the character, H, directly in front of the min value. Without the H character, the minimum value indicates how many EJB instances are maintained in the pool when the EJB type is not actively in use, but does not preload the pool when the application is started. Typically, the minimum pool size is not reached until the minimum number of EJB instances has been accessed concurrently by the application. Inserting the H character before the min value indicates a hard limit, and the EJB container preloads the pool with the minimum number of EJB instances when the application is started.
For example, to indicate that no more than 200 EJB instances are created, and that additional requests must wait for an instance and might time out while waiting, then enter:
SMApp#SMModule#TypeBean=100,H200
To indicate that the EJB container preloads the pool with a minimum of 100 EJB instances when the application is started, then enter:
SMApp#SMModule#TypeBean=H100,200
Supported configurations: The hard limit indicator is only available to EJB Version 2.0 or higher stateless session beans.
Related concepts
EJB containers Java EE application resource declarations
Related tasks
Change applications to WebSphere version specific setRollbackOnly behavior Manage EJB containers
Related information:
EJB container settings