type=page
status=published
title=Tuning Your Application
next=tuning-glassfish.html
prev=overview.html
~~~~~~
Tuning Your Application
=======================

[[GSPTG00004]][[abebe]]


[[tuning-your-application]]
2 Tuning Your Application
-------------------------

This chapter provides information on tuning applications for maximum
performance. A complete guide to writing high performance Java and Java
EE applications is beyond the scope of this document.

The following topics are addressed here:

* link:#abebf[Java Programming Guidelines]
* link:#abebp[Java Server Page and Servlet Tuning]
* link:#abebw[EJB Performance Tuning]

[[abebf]][[GSPTG00052]][[java-programming-guidelines]]

Java Programming Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~

This section covers issues related to Java coding and performance. The
guidelines outlined are not specific to GlassFish Server, but are
general rules that are useful in many situations. For a complete
discussion of Java coding best practices, see the
http://www.oracle.com/technetwork/java/javaee/blueprints/index.html[Java
Blueprints]
(`http://www.oracle.com/technetwork/java/javaee/blueprints/index.html`).

The following topics are addressed here:

* link:#abebg[Avoid Serialization and Deserialization]
* link:#abebh[Use `StringBuilder` to Concatenate Strings]
* link:#abebi[Assign null to Variables That Are No Longer Needed]
* link:#abebj[Declare Methods as final Only If Necessary]
* link:#abebk[Declare Constants as static final]
* link:#abebl[Avoid Finalizers]
* link:#abebm[Declare Method Arguments final]
* link:#abebn[Synchronize Only When Necessary]
* link:#abebo[Use DataHandlers for SOAP Attachments]

[[abebg]][[GSPTG00161]][[avoid-serialization-and-deserialization]]

Avoid Serialization and Deserialization
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Serialization and deserialization of objects is a CPU-intensive
procedure and is likely to slow down your application. Use the
`transient` keyword to reduce the amount of data serialized.
Additionally, customized `readObject()` and `writeObject()` methods may
be beneficial in some cases.

[[abebh]][[GSPTG00162]][[use-stringbuilder-to-concatenate-strings]]

Use `StringBuilder` to Concatenate Strings
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To improve performance, instead of using string concatenation, use
`StringBuilder.append()`.

String objects are immutable - that is, they never change after
creation. For example, consider the following code:

[source,oac_no_warn]
----
String str = "testing";
str = str + "abc";
str = str + "def";
----

The compiler translates this code as:

[source,oac_no_warn]
----
String str = "testing";
StringBuilder tmp = new StringBuilder(str);
tmp.append("abc");
str = tmp.toString();
StringBulder tmp = new StringBuilder(str);
tmp.append("def");
str = tmp.toString();
----

This copying is inherently expensive and overusing it can reduce
performance significantly. You are far better off writing:

[source,oac_no_warn]
----
StringBuilder tmp = new StringBuilder("testing");
tmp.append("abc");
tmp.append("def");
String str = tmp.toString();
----

[[abebi]][[GSPTG00163]][[assign-null-to-variables-that-are-no-longer-needed]]

Assign null to Variables That Are No Longer Needed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Explicitly assigning a null value to variables that are no longer needed
helps the garbage collector to identify the parts of memory that can be
safely reclaimed. Although Java provides memory management, it does not
prevent memory leaks or using excessive amounts of memory.

An application may induce memory leaks by not releasing object
references. Doing so prevents the Java garbage collector from reclaiming
those objects, and results in increasing amounts of memory being used.
Explicitly nullifying references to variables after their use allows the
garbage collector to reclaim memory.

One way to detect memory leaks is to employ profiling tools and take
memory snapshots after each transaction. A leak-free application in
steady state will show a steady active heap memory after garbage
collections.

[[abebj]][[GSPTG00164]][[declare-methods-as-final-only-if-necessary]]

Declare Methods as final Only If Necessary
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Modern optimizing dynamic compilers can perform inlining and other
inter-procedural optimizations, even if Java methods are not declared
`final`. Use the keyword `final` as it was originally intended: for
program architecture reasons and maintainability.

Only if you are absolutely certain that a method must not be overridden,
use the `final` keyword.

[[abebk]][[GSPTG00165]][[declare-constants-as-static-final]]

Declare Constants as static final
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The dynamic compiler can perform some constant folding optimizations
easily, when you declare constants as `static final` variables.

[[abebl]][[GSPTG00166]][[avoid-finalizers]]

Avoid Finalizers
^^^^^^^^^^^^^^^^

Adding finalizers to code makes the garbage collector more expensive and
unpredictable. The virtual machine does not guarantee the time at which
finalizers are run. Finalizers may not always be executed, before the
program exits. Releasing critical resources in `finalize()` methods may
lead to unpredictable application behavior.

[[abebm]][[GSPTG00167]][[declare-method-arguments-final]]

Declare Method Arguments final
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Declare method arguments `final` if they are not modified in the method.
In general, declare all variables `final` if they are not modified after
being initialized or set to some value.

[[abebn]][[GSPTG00168]][[synchronize-only-when-necessary]]

Synchronize Only When Necessary
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Do not synchronize code blocks or methods unless synchronization is
required. Keep synchronized blocks or methods as short as possible to
avoid scalability bottlenecks. Use the Java Collections Framework for
unsynchronized data structures instead of more expensive alternatives
such as`java.util.HashTable`.

[[abebo]][[GSPTG00169]][[use-datahandlers-for-soap-attachments]]

Use DataHandlers for SOAP Attachments
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Using a `javax.activation.DataHandler` for a SOAP attachment will
improve performance.

JAX-RPC specifies:

* A mapping of certain MIME types to Java types.
* Any MIME type is mappable to a `javax.activation.DataHandler` .

As a result, send an attachment (`.gif` or XML document) as a SOAP
attachment to an RPC style web service by utilizing the Java type
mappings. When passing in any of the mandated Java type mappings
(appropriate for the attachment's MIME type) as an argument for the web
service, the JAX-RPC runtime handles these as SOAP attachments.

For example, to send out an `image/gif` attachment, use
`java.awt.Image`, or create a `DataHandler` wrapper over your image. The
advantages of using the wrapper are:

* Reduced coding: You can reuse generic attachment code to handle the
attachments because the `DataHandler` determines the content type of the
contained data automatically. This feature is especially useful when
using a document style service. Since the content is known at runtime,
there is no need to make calls to
`attachment.setContent(stringContent, "image/gif")`, for example.
* Improved Performance: Informal tests have shown that using
`DataHandler` wrappers doubles throughput for `image/gif` MIME types,
and multiplies throughput by approximately 1.5 for `text/xml` or
`java.awt.Image` for `image/*` types.

[[abebp]][[GSPTG00053]][[java-server-page-and-servlet-tuning]]

Java Server Page and Servlet Tuning
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Many applications running on the GlassFish Server use servlets or
JavaServer Pages (JSP) technology in the presentation tier. This section
describes how to improve performance of such applications, both through
coding practices and through deployment and configuration settings.

[[abebq]][[GSPTG00170]][[suggested-coding-practices]]

Suggested Coding Practices
^^^^^^^^^^^^^^^^^^^^^^^^^^

This section provides some tips on coding practices that improve servlet
and JSP application performance.

The following topics are addressed here:

* link:#abebr[General Guidelines]
* link:#abebs[Avoid Shared Modified Class Variables]
* link:#abebt[HTTP Session Handling]
* link:#abebu[Configuration and Deployment Tips]

[[abebr]][[GSPTG00082]][[general-guidelines]]

General Guidelines
++++++++++++++++++

Follow these general guidelines to increase performance of the
presentation tier:

* Minimize Java synchronization in servlets.
* Do not use the single thread model for servlets.
* Use the servlet's `init()` method to perform expensive one-time
initialization.
* Avoid using `System.out.println()` calls.

[[abebs]][[GSPTG00083]][[avoid-shared-modified-class-variables]]

Avoid Shared Modified Class Variables
+++++++++++++++++++++++++++++++++++++

In the servlet multithread model (the default), a single instance of a
servlet is created for each application server instance. All requests
for a servlet on that application instance share the same servlet
instance. This can lead to thread contention if there are
synchronization blocks in the servlet code. Therefore, avoid using
shared modified class variables because they create the need for
synchronization.

[[abebt]][[GSPTG00084]][[http-session-handling]]

HTTP Session Handling
+++++++++++++++++++++

Follow these guidelines when using HTTP sessions:

* Create sessions sparingly. Session creation is not free. If a session
is not required, do not create one.
* Use `javax.servlet.http.HttpSession.invalidate()` to release sessions
when they are no longer needed.
* Keep session size small, to reduce response times. If possible, keep
session size below 7 kilobytes.
* Use the directive `<%page session="false"%>` in JSP files to prevent
the GlassFish Server from automatically creating sessions when they are
not necessary.
* Avoid large object graphs in an `HttpSession`. They force
serialization and add computational overhead. Generally, do not store
large objects as `HttpSession` variables.
* Do not cache transaction data in an `HttpSession`. Access to data in
an `HttpSession` is not transactional. Do not use it as a cache of
transactional data, which is better kept in the database and accessed
using entity beans. Transactions will rollback upon failures to their
original state. However, stale and inaccurate data may remain in
`HttpSession` objects. GlassFish Server provides "read-only"
bean-managed persistence entity beans for cached access to read-only
data.

[[abebu]][[GSPTG00085]][[configuration-and-deployment-tips]]

Configuration and Deployment Tips
+++++++++++++++++++++++++++++++++

Follow these configuration tips to improve performance. These tips are
intended for production environments, not development environments.

* To improve class loading time, avoid having excessive directories in
the server `CLASSPATH`. Put application-related classes into JAR files.
* HTTP response times are dependent on how the keep-alive subsystem and
the HTTP server is tuned in general. For more information, see
link:tuning-glassfish.html#abeet[HTTP Service Settings].
* Cache servlet results when possible. For more information, see
"link:../application-development-guide/webapps.html#GSDVG00009[Developing Web Applications]" in GlassFish Server Open
Source Edition Application Development Guide.
* If an application does not contain any EJB components, deploy the
application as a WAR file, not an EAR file.

[[gfqnu]][[GSPTG00009]][[optimize-ssl]]

Optimize SSL

Optimize SSL by using routines in the appropriate operating system
library for concurrent access to heap space. The library to use depends
on the version of the Solaris Operating System (SolarisOS) that you are
using. To ensure that you use the correct library, set the `LD_PRELOAD`
environment variable to specify the correct library file. For more
information, refer to the following table.

[width="100%",cols="<23%,<23%,<54%",options="header",]
|=======================================================================
|Solaris OS Version |Library |Setting of `LD_PRELOAD` Environment
Variable
|10 |`libumem3LIB` |`/usr/lib/libumem.so`

|9 |`libmtmalloc3LIB` |`/usr/lib/libmtmalloc.so`
|=======================================================================


To set the `LD_PRELOAD` environment variable, edit the entry for this
environment variable in the `startserv` script. The `startserv` script
is located is located in the `bin/startserv` directory of your domain.

The exact syntax to define an environment variable depends on the shell
that you are using.

[[abebv]][[GSPTG00010]][[disable-security-manager]]

Disable Security Manager

The security manager is expensive because calls to required resources
must call the `doPrivileged()` method and must also check the resource
with the `server.policy` file. If you are sure that no malicious code
will be run on the server and you do not use authentication within your
application, then you can disable the security manager.

See "link:../application-development-guide/securing-apps.html#GSDVG00373[Enabling and Disabling the Security Manager]" in
GlassFish Server Open Source Edition Application Development Guide for
instructions on enabling or disabling the security manager. If using the
GlassFish Server Administration Console, navigate to the
Configurations>configuration-name>Security node and check or uncheck the
Security Manager option as desired. Refer to the Administration Console
online help for more information.

[[abebw]][[GSPTG00054]][[ejb-performance-tuning]]

EJB Performance Tuning
~~~~~~~~~~~~~~~~~~~~~~

The GlassFish Server's high-performance EJB container has numerous
parameters that affect performance. Individual EJB components also have
parameters that affect performance. The value of individual EJB
component's parameter overrides the value of the same parameter for the
EJB container. The default values are designed for a single-processor
computer system. Modify these values as appropriate to optimize for
other system configurations.

The following topics are addressed here:

* link:#abebx[Goals]
* link:#abeby[Monitoring EJB Components]
* link:#abeca[General Guidelines]
* link:#abecg[Using Local and Remote Interfaces]
* link:#abecj[Improving Performance of EJB Transactions]
* link:#abecs[Using Special Techniques]
* link:#abecv[Tuning Tips for Specific Types of EJB Components]
* link:#abedd[JDBC and Database Access]
* link:#abedi[Tuning Message-Driven Beans]

[[abebx]][[GSPTG00171]][[goals]]

Goals
^^^^^

The goals of EJB performance tuning are:

* Increased speed: Cache as many beans in the EJB caches as possible to
increase speed (equivalently, decrease response time). Caching
eliminates CPU-intensive operations. However, since memory is finite, as
the caches become larger, housekeeping for them (including garbage
collection) takes longer.
* Decreased memory consumption: Beans in the pools or caches consume
memory from the Java virtual machine heap. Very large pools and caches
degrade performance because they require longer and more frequent
garbage collection cycles.
* Improved functional properties: Functional properties such as user
timeout, commit options, security, and transaction options, are mostly
related to the functionality and configuration of the application.
Generally, they do not compromise functionality for performance. In some
cases, you might be forced to make a "trade-off" decision between
functionality and performance. This section offers suggestions in such
cases.

[[abeby]][[GSPTG00172]][[monitoring-ejb-components]]

Monitoring EJB Components
^^^^^^^^^^^^^^^^^^^^^^^^^

When the EJB container has monitoring enabled, you can examine
statistics for individual beans based on the bean pool and cache
settings.

For example, the monitoring command below returns the Bean Cache
statistics for a stateful session bean.

[source,oac_no_warn]
----
asadmin get --user admin --host e4800-241-a --port 4848
-m specjcmp.application.SPECjAppServer.ejb-module.
   supplier_jar.stateful-session-bean.BuyerSes.bean-cache.*
----

The following is a sample of the monitoring output:

[source,oac_no_warn]
----
resize-quantity = -1
 cache-misses = 0
 idle-timeout-in-seconds = 0
 num-passivations = 0
 cache-hits = 59
 num-passivation-errors = 0
 total-beans-in-cache = 59
 num-expired-sessions-removed = 0
 max-beans-in-cache = 4096
 num-passivation-success = 0
----

The monitoring command below gives the bean pool statistics for an
entity bean:

[source,oac_no_warn]
----
asadmin get --user admin --host e4800-241-a --port 4848
-m specjcmp.application.SPECjAppServer.ejb-module.
   supplier_jar.stateful-entity-bean.ItemEnt.bean-pool.*
idle-timeout-in-seconds = 0
steady-pool-size = 0
total-beans-destroyed = 0
num-threads-waiting = 0
num-beans-in-pool = 54
max-pool-size = 2147483647
pool-resize-quantity = 0
total-beans-created = 255
----

The monitoring command below gives the bean pool statistics for a
stateless bean.

[source,oac_no_warn]
----
asadmin get --user admin --host e4800-241-a --port 4848
-m test.application.testEjbMon.ejb-module.slsb.stateless-session-bean.slsb.bean-pool.*
idle-timeout-in-seconds = 200
steady-pool-size = 32
total-beans-destroyed = 12
num-threads-waiting = 0
num-beans-in-pool = 4
max-pool-size = 1024
pool-resize-quantity = 12
total-beans-created = 42
----

Tuning the bean involves charting the behavior of the cache and pool for
the bean in question over a period of time.

If too many passivations are happening and the JVM heap remains fairly
small, then the `max-cache-size` or the `cache-idle-timeout-in-seconds`
can be increased. If garbage collection is happening too frequently, and
the pool size is growing, but the cache hit rate is small, then the
`pool-idle-timeout-in-seconds` can be reduced to destroy the instances.


[width="100%",cols="<100%",]
|=======================================================================
a|
Note:

Specifying a `max-pool-size` of zero (0) means that the pool is
unbounded. The pooled beans remain in memory unless they are removed by
specifying a small interval for `pool-idle-timeout-in-seconds`. For
production systems, specifying the pool as unbounded is NOT recommended.

|=======================================================================


[[abebz]][[GSPTG00086]][[monitoring-individual-ejb-components]]

Monitoring Individual EJB Components
++++++++++++++++++++++++++++++++++++

To gather method invocation statistics for all methods in a bean, use
the following command:

[source,oac_no_warn]
----
asadmin get -m monitorableObject.*
----

where monitorableObject is a fully-qualified identifier from the
hierarchy of objects that can be monitored, shown below.

[source,oac_no_warn]
----
serverInstance.application.applicationName.ejb-module.moduleName
----

where moduleName is `x_jar` for module `x.jar`.

* `.stateless-session-bean.beanName .bean-pool .bean-method.methodName`
* `.stateful-session-bean.beanName .bean-cache .bean-method.methodName`
* `.entity-bean.beanName .bean-cache .bean-pool .bean-method.methodName`
* `.message-driven-bean.beanName .bean-pool .bean-method.methodName (methodName = onMessage)`

For standalone beans, use this pattern:

[source,oac_no_warn]
----
serverInstance.application.applicationName.standalone-ejb-module.moduleName
----

The possible identifiers are the same as for `ejb-module`.

For example, to get statistics for a method in an entity bean, use this
command:

[source,oac_no_warn]
----
asadmin get -m serverInstance.application.appName.ejb-module.moduleName
.entity-bean.beanName.bean-method.methodName.*
----

For more information about administering the monitoring service in
general, see "link:../administration-guide/monitoring.html#GSADG00011[Administering the Monitoring Service]" in
GlassFish Server Open Source Edition Administration Guide. For
information about viewing comprehensive EJB monitoring statistics, see
"link:../administration-guide/monitoring.html#GSADG00651[EJB Statistics]" in GlassFish Server Open Source
Edition Administration Guide.

To configure EJB monitoring using the GlassFish Server Administration
Console, navigate to the Configurations>configuration-name>Monitoring
node. After configuring monitoring, you can view monitoring statistics
by navigating to the server (Admin Server) node and then selecting the
Monitor tab. Refer to the Administration Console online help for
instructions on each of these procedures.

Alternatively, to list EJB statistics, use the `asadmin list`
subcommand. For more information, see link:../reference-manual/list.html#GSRFM00145[`list`(1)].

For statistics on stateful session bean passivations, use this command:

[source,oac_no_warn]
----
asadmin get -m serverInstance.application.appName.ejb-module.moduleName
.stateful-session-bean.beanName.bean-cache.*
----

From the attribute values that are returned, use this command:

`num-passivationsnum-passivation-errorsnum-passivation-success`

[[abeca]][[GSPTG00173]][[general-guidelines-1]]

General Guidelines
^^^^^^^^^^^^^^^^^^

The following guidelines can improve performance of EJB components. Keep
in mind that decomposing an application into many EJB components creates
overhead and can degrade performance. EJB components are not simply Java
objects. They are components with semantics for remote call interfaces,
security, and transactions, as well as properties and methods.

[[abecb]][[GSPTG00087]][[use-high-performance-beans]]

Use High Performance Beans
++++++++++++++++++++++++++

Use high-performance beans as much as possible to improve the overall
performance of your application. For more information, see
link:#abecv[Tuning Tips for Specific Types of EJB Components].

The types of EJB components are listed below, from the highest
performance to the lowest:

1.  Stateless Session Beans and Message Driven Beans
2.  Stateful Session Beans
3.  Container Managed Persistence (CMP) entity beans configured as
read-only
4.  Bean Managed Persistence (BMP) entity beans configured as read-only
5.  CMP beans
6.  BMP beans

For more information about configuring high availability session
persistence, see "link:../ha-administration-guide/session-persistence-and-failover.html#GSHAG00011[Configuring High Availability Session
Persistence and Failover]" in GlassFish Server Open Source Edition High
Availability Administration Guide. To configure EJB beans using the
GlassFish Server Administration Console, navigate to the
Configurations>configuration-name>EJB Container node and then refer to
the Administration Console online help for detailed instructions.

[[abecc]][[GSPTG00088]][[use-caching]]

Use Caching
+++++++++++

Caching can greatly improve performance when used wisely. For example:

* Cache EJB references: To avoid a JNDI lookup for every request, cache
EJB references in servlets.
* Cache home interfaces: Since repeated lookups to a home interface can
be expensive, cache references to `EJBHomes` in the `init()` methods of
servlets.
* Cache EJB resources: Use `setSessionContext()` or `ejbCreate()` to
cache bean resources. This is again an example of using bean lifecycle
methods to perform application actions only once where possible.
Remember to release acquired resources in the `ejbRemove()` method.

[[abecd]][[GSPTG00089]][[use-the-appropriate-stubs]]

Use the Appropriate Stubs
+++++++++++++++++++++++++

The stub classes needed by EJB applications are generated dynamically at
runtime when an EJB client needs them. This means that it is not
necessary to generate the stubs or retrieve the client JAR file when
deploying an application with remote EJB components. When deploying an
application, it is no longer necessary to specify the `--retrieve`
option, which can speed up deployment.

If you have a legacy rich-client application that directly uses the
CosNaming service (not a recommended configuration), then you must
generate the stubs for your application explicitly using RMIC. For more
information, see the link:../troubleshooting-guide/toc.html#GSTSG[GlassFish Server Open Source Edition
Troubleshooting Guide] for more details.

[[abece]][[GSPTG00090]][[remove-unneeded-stateful-session-beans]]

Remove Unneeded Stateful Session Beans
++++++++++++++++++++++++++++++++++++++

Removing unneeded stateful session beans avoids passivating them, which
requires disk operations.

[[abecf]][[GSPTG00091]][[cache-and-pool-tuning-tips]]

Cache and Pool Tuning Tips
++++++++++++++++++++++++++

Follow these tips when using the EJB cache and pools to improve
performance:

* Explicitly call `remove()`: Allow stateful session EJB components to
be removed from the container cache by explicitly calling of the
`remove()` method in the client.
* Tune the entity EJB component's pool size: Entity Beans use both the
EJB pool and cache settings. Tune the entity EJB component's pool size
to minimize the creation and destruction of beans. Populating the pool
with a non-zero steady size before hand is useful for getting better
response for initial requests.
* Cache bean-specific resources: Use the `setEntityContext()` method to
cache bean specific resources and release them using the
`unSetEntityContext()` method.
* Load related data efficiently for container-managed relationships
(CMRs). For more information, see link:#abedc[Pre-Fetching Container
Managed Relationship (CMR) Beans].
* Identify read-only beans: Configure read-only entity beans for read
only operations. For more information, see link:#abeda[Read-Only Entity
Beans].

[[abecg]][[GSPTG00174]][[using-local-and-remote-interfaces]]

Using Local and Remote Interfaces
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This section describes some considerations when EJB components are used
by local and remote clients.

[[abech]][[GSPTG00092]][[prefer-local-interfaces]]

Prefer Local Interfaces
+++++++++++++++++++++++

An EJB component can have remote and local interfaces. Clients not
located in the same application server instance as the bean (remote
clients) use the remote interface to access the bean. Calls to the
remote interface require marshalling arguments, transportation of the
marshalled data over the network, un-marshaling the arguments, and
dispatch at the receiving end. Thus, using the remote interface entails
significant overhead.

If an EJB component has a local interface, then local clients in the
same application server instance can use it instead of the remote
interface. Using the local interface is more efficient, since it does
not require argument marshalling, transportation, and un-marshalling.

If a bean is to be used only by local clients then it makes sense to
provide only the local interface. If, on the other hand, the bean is to
be location-independent, then you should provide both the remote and
local interfaces so that remote clients use the remote interface and
local clients can use the local interface for efficiency.

[[abeci]][[GSPTG00093]][[using-pass-by-reference-semantics]]

Using Pass-By-Reference Semantics
+++++++++++++++++++++++++++++++++

By default, the GlassFish Server uses pass-by-value semantics for
calling the remote interface of a bean, even if it is co-located. This
can be expensive, since clients using pass-by-value semantics must copy
arguments before passing them to the EJB component.

However, local clients can use pass-by-reference semantics and thus the
local and remote interfaces can share the passed objects. But this means
that the argument objects must be implemented properly, so that they are
shareable. In general, it is more efficient to use pass-by-reference
semantics when possible.

Using the remote and local interfaces appropriately means that clients
can access EJB components efficiently. That is, local clients use the
local interface with pass-by-reference semantics, while remote clients
use the remote interface with pass-by-value semantics.

However, in some instances it might not be possible to use the local
interface, for example when:

* The application predates the EJB 2.0 specification and was written
without any local interfaces.
* There are bean-to-bean calls and the client beans are written without
making any co-location assumptions about the called beans.

For these cases, the GlassFish Server provides a pass-by-reference
option that clients can use to pass arguments by reference to the remote
interface of a co-located EJB component.

You can specify the pass-by-reference option for an entire application
or a single EJB component. When specified at the application level, all
beans in the application use pass-by-reference semantics when passing
arguments to their remote interfaces. When specified at the bean level,
all calls to the remote interface of the bean use pass-by-reference
semantics. See "link:../application-development-guide/ejb.html#GSDVG00145[Value Added Features]" in GlassFish
Server Open Source Edition Application Development Guide for more
details about the pass-by-reference flag.

To specify that an EJB component will use pass by reference semantics,
use the following tag in the `sun-ejb-jar.xml` deployment descriptor:

[source,oac_no_warn]
----
<pass-by-reference>true</pass-by-reference>
----

This avoids copying arguments when the EJB component's methods are
invoked and avoids copying results when methods return. However,
problems will arise if the data is modified by another source during the
invocation.

[[abecj]][[GSPTG00175]][[improving-performance-of-ejb-transactions]]

Improving Performance of EJB Transactions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This section provides some tips to improve performance when using
transactions.

The following topics are addressed here:

* link:#abeck[Use Container-Managed Transactions]
* link:#abecl[Do Not Encompass User Input Time]
* link:#abecm[Identify Non-Transactional Methods]
* link:#abecn[Use `TX_REQUIRED` for Long Transaction Chains]
* link:#abeco[Use Lowest Cost Database Locking]
* link:#abecp[Use XA-Capable Data Sources Only When Needed]
* link:#abecq[Configure JDBC Resources as One-Phase Commit Resources]
* link:#abecr[Use the Least Expensive Transaction Attribute]

[[abeck]][[GSPTG00094]][[use-container-managed-transactions]]

Use Container-Managed Transactions
++++++++++++++++++++++++++++++++++

Container-managed transactions are preferred for consistency, and
provide better performance.

[[abecl]][[GSPTG00095]][[do-not-encompass-user-input-time]]

Do Not Encompass User Input Time
++++++++++++++++++++++++++++++++

To avoid resources being held unnecessarily for long periods, a
transaction should not encompass user input or user think time.

[[abecm]][[GSPTG00096]][[identify-non-transactional-methods]]

Identify Non-Transactional Methods
++++++++++++++++++++++++++++++++++

Declare non-transactional methods of session EJB components with
`NotSupported` or `Never` transaction attributes. These attributes can
be found in the `ejb-jar.xml` deployment descriptor file. Transactions
should span the minimum time possible since they lock database rows.

[[abecn]][[GSPTG00097]][[use-tx_required-for-long-transaction-chains]]

Use `TX_REQUIRED` for Long Transaction Chains
+++++++++++++++++++++++++++++++++++++++++++++

For very large transaction chains, use the transaction attribute
`TX_REQUIRED.` To ensure EJB methods in a call chain, use the same
transaction.

[[abeco]][[GSPTG00098]][[use-lowest-cost-database-locking]]

Use Lowest Cost Database Locking
++++++++++++++++++++++++++++++++

Use the lowest cost locking available from the database that is
consistent with any transaction. Commit the data after the transaction
completes rather than after each method call.

[[abecp]][[GSPTG00099]][[use-xa-capable-data-sources-only-when-needed]]

Use XA-Capable Data Sources Only When Needed
++++++++++++++++++++++++++++++++++++++++++++

When multiple database resources, connector resources or JMS resources
are involved in one transaction, a distributed or global transaction
needs to be performed. This requires XA capable resource managers and
data sources. Use XA capable data sources, only when two or more data
source are going to be involved in a transaction. If a database
participates in some distributed transactions, but mostly in local or
single database transactions, it is advisable to register two separate
JDBC resources and use the appropriate resource in the application.

[[abecq]][[GSPTG00100]][[configure-jdbc-resources-as-one-phase-commit-resources]]

Configure JDBC Resources as One-Phase Commit Resources
++++++++++++++++++++++++++++++++++++++++++++++++++++++

To improve performance of transactions involving multiple resources, the
GlassFish Server uses last agent optimization (LAO), which allows the
configuration of one of the resources in a distributed transaction as a
one-phase commit (1PC) resource. Since the overhead of multiple-resource
transactions is much higher for a JDBC resource than a message queue,
LAO substantially improves performance of distributed transactions
involving one JDBC resource and one or more message queues. To take
advantage of LAO, configure a JDBC resource as a 1PC resource. Nothing
special needs to be done to configure JMS resources.

In global transactions involving multiple JDBC resources, LAO will still
improve performance, however, not as much as for one JDBC resource. In
this situation, one of the JDBC resources should be configured as 1PC,
and all others should be configured as XA.

[[abecr]][[GSPTG00101]][[use-the-least-expensive-transaction-attribute]]

Use the Least Expensive Transaction Attribute
+++++++++++++++++++++++++++++++++++++++++++++

Set the following transaction attributes in the EJB deployment
descriptor file (`ejb-jar.xml`). Options are listed from best
performance to worst. To improve performance, choose the least expensive
attribute that will provide the functionality your application needs:

1.  `NEVER`
2.  `TX_NOTSUPPORTED`
3.  `TX_MANDATORY`
4.  `TX_SUPPORTS`
5.  `TX_REQUIRED`
6.  `TX_REQUIRESNEW`

[[abecs]][[GSPTG00176]][[using-special-techniques]]

Using Special Techniques
^^^^^^^^^^^^^^^^^^^^^^^^

Special performance-enhancing techniques are discussed in the following
sections:

* link:#abect[Version Consistency]
* link:#abecu[Request Partitioning]

[[abect]][[GSPTG00102]][[version-consistency]]

Version Consistency
+++++++++++++++++++


[width="100%",cols="<100%",]
|=======================================================================
a|
Note:

The technique in section applies only to the EJB 2.1 architecture. In
the EJB 3.0 architecture, use the Java Persistence API (JPA).

|=======================================================================


Use version consistency to improve performance while protecting the
integrity of data in the database. Since the application server can use
multiple copies of an EJB component simultaneously, an EJB component's
state can potentially become corrupted through simultaneous access.

The standard way of preventing corruption is to lock the database row
associated with a particular bean. This prevents the bean from being
accessed by two simultaneous transactions and thus protects data.
However, it also decreases performance, since it effectively serializes
all EJB access.

Version consistency is another approach to protecting EJB data
integrity. To use version consistency, you specify a column in the
database to use as a version number. The EJB lifecycle then proceeds
like this:

* The first time the bean is used, the `ejbLoad()` method loads the bean
as normal, including loading the version number from the database.
* The `ejbStore()` method checks the version number in the database
versus its value when the EJB component was loaded.

** If the version number has been modified, it means that there has been
simultaneous access to the EJB component and `ejbStore()` throws a
`ConcurrentModificationException`.

** Otherwise, `ejbStore()` stores the data and completes as normal. +
The `ejbStore()` method performs this validation at the end of the
transaction regardless of whether any data in the bean was modified.

Subsequent uses of the bean behave similarly, except that the
`ejbLoad()` method loads its initial data (including the version number)
from an internal cache. This saves a trip to the database. When the
`ejbStore()` method is called, the version number is checked to ensure
that the correct data was used in the transaction.

Version consistency is advantageous when you have EJB components that
are rarely modified, because it allows two transactions to use the same
EJB component at the same time. Because neither transaction modifies the
data, the version number is unchanged at the end of both transactions,
and both succeed. But now the transactions can run in parallel. If two
transactions occasionally modify the same EJB component, one will
succeed and one will fail and can be retried using the new values—which
can still be faster than serializing all access to the EJB component if
the retries are infrequent enough (though now your application logic has
to be prepared to perform the retry operation).

To use version consistency, the database schema for a particular table
must include a column where the version can be stored. You then specify
that table in the `sun-cmp-mapping.xml` deployment descriptor for a
particular bean:

[source,oac_no_warn]
----
<entity-mapping>
    <cmp-field-mapping>
        ...
    </cmp-field-mapping>
    <consistency>
        <check-version-of-accessed-instances>
            <column-name>OrderTable.VC_VERSION_NUMBER</column-name>
        </check-version-of-accessed-instances>
    </consistency>
</entity-mapping>
----

In addition, you must establish a trigger on the database to
automatically update the version column when data in the specified table
is modified. The GlassFish Server requires such a trigger to use version
consistency. Having such a trigger also ensures that external
applications that modify the EJB data will not conflict with EJB
transactions in progress.

For example, the following DDL illustrates how to create a trigger for
the `Order` table:

[source,oac_no_warn]
----
CREATE TRIGGER OrderTrigger
  BEFORE UPDATE ON OrderTable
  FOR EACH ROW
  WHEN (new.VC_VERSION_NUMBER = old.VC_VERSION_NUMBER)
  DECLARE
  BEGIN
    :NEW.VC_VERSION_NUMBER := :OLD.VC_VERSION_NUMBER + 1;
  END;
----

[[abecu]][[GSPTG00103]][[request-partitioning]]

Request Partitioning
++++++++++++++++++++

Request partitioning enables you to assign a request priority to an EJB
component. This gives you the flexibility to make certain EJB components
execute with higher priorities than others.

An EJB component which has a request priority assigned to it will have
its requests (services) executed within an assigned threadpool. By
assigning a threadpool to its execution, the EJB component can execute
independently of other pending requests. In short, request partitioning
enables you to meet service-level agreements that have differing levels
of priority assigned to different services.

Request partitioning applies only to remote EJB components (those that
implement a remote interface). Local EJB components are executed in
their calling thread (for example, when a servlet calls a local bean,
the local bean invocation occurs on the servlet's thread).

[[gacmw]][[GSPTG00037]][[to-enable-request-partitioning]]

To Enable Request Partitioning

Follow this procedure.

1.  Configure additional threadpools for EJB execution. +
Using the GlassFish Server Administration Console, navigate to the
Configurations>configuration-name>Thread Pools node. Refer to the
Administration Console online help for more information. Alternatively,
you can follow the instructions in "link:../administration-guide/threadpools.html#GSADG00008[Administering
Thread Pools]" in GlassFish Server Open Source Edition Administration
Guide. +
Configure the threadpools as follows:
1.  Add the additional threadpool IDs to the GlassFish Server's ORB. +
This can be done on the Configurations>configuration-name>ORB node in
the Administration Console. +
For example, enable threadpools named `priority-1` and `priority-2` to
the `<orb>` element as follows: +
[source,oac_no_warn]
----
<orb max-connections="1024" message-fragment-size="1024"
    use-thread-pool-ids="thread-pool-1,priority-1,priority-2">
----
2.  Include the threadpool ID in the `use-thread-pool-id` element of the
EJB component's `sun-ejb-jar.xml` deployment descriptor. +
For example, the following `sun-ejb-jar.xml` deployment descriptor for
an EJB component named "`TheGreeter`" is assigned to a thread pool named
`priority-2`: +
[source,oac_no_warn]
----
<sun-ejb-jar>
  <enterprise-beans>
    <unique-id>1</unique-id>
    <ejb>
      <ejb-name>TheGreeter</ejb-name>
      <jndi-name>greeter</jndi-name>
      <use-thread-pool-id>priority-1</use-thread-pool-id>
    </ejb>
  </enterprise-beans>
</sun-ejb-jar>
----
2.  Restart the GlassFish Server.

[[abecv]][[GSPTG00177]][[tuning-tips-for-specific-types-of-ejb-components]]

Tuning Tips for Specific Types of EJB Components
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This section provides tips for tuning various specific types of EJB
components:

* link:#abecw[Entity Beans]
* link:#abecx[Stateful Session Beans]
* link:#abecz[Stateless Session Beans]
* link:#abeda[Read-Only Entity Beans]
* link:#abedc[Pre-Fetching Container Managed Relationship (CMR) Beans]

These components can all be configured in the GlassFish Server
Administration Console from the Configurations>configuration-name>EJB
Container node. Alternatively, you can perform these configurations by
following the instructions in "link:../ha-administration-guide/rmi-iiop.html#GSHAG00013[RMI-IIOP Load Balancing
and Failover]" in GlassFish Server Open Source Edition High Availability
Administration Guide.

[[abecw]][[GSPTG00104]][[entity-beans]]

Entity Beans
++++++++++++

Depending on the usage of a particular entity bean, one should tune
`max-cache-size` so that the beans that are used less frequently (for
example, an order that is created and never used after the transaction
is over) are cached less, and beans that are used frequently (for
example, an item in the inventory that gets referenced very often), are
cached more.

[[abecx]][[GSPTG00105]][[stateful-session-beans]]

Stateful Session Beans
++++++++++++++++++++++

When a stateful bean represents a user, a reasonable `max-cache-size` of
beans is the expected number of concurrent users on the application
server process. If this value is too low (in relation to the steady load
of users), beans would be frequently passivated and activated, causing a
negative impact on the response times, due to CPU intensive
serialization and deserialization as well as disk I/O.

Another important variable for tuning is `cache-idle-timeout-in-seconds`
where at periodic intervals of `cache-idle-timeout-in-seconds`, all the
beans in the cache that have not been accessed for more than
`cache-idle-timeout-in-seconds` time, are passivated. Similar to an HTTP
session timeout, the bean is removed after it has not been accessed for
`removal-timeout-in-seconds`. Passivated beans are stored on disk in
serialized form. A large number of passivated beans could not only mean
many files on the disk system, but also slower response time as the
session state has to be de-serialized before the invocation.

[[abecy]][[GSPTG00011]][[checkpoint-only-when-needed]]

Checkpoint only when needed

In high availability mode, when using stateful session beans, consider
checkpointing only those methods that alter the state of the bean
significantly. This reduces the number of times the bean state has to be
checkpointed into the persistent store.

[[abecz]][[GSPTG00106]][[stateless-session-beans]]

Stateless Session Beans
+++++++++++++++++++++++

Stateless session beans are more readily pooled than entity or the
stateful session beans. Valid values for `steady-pool-size`,
`pool-resize-quantity` and `max-pool-size` are the best tunables for
these type of beans. Set the `steady-pool-size` to greater than zero if
you want to pre-populate the pool. This way, when the container comes
up, it creates a pool with `steady-pool-size` number of beans. By
pre-populating the pool it is possible to avoid the object creation time
during method invocations.

Setting the `steady-pool size` to a very large value can cause unwanted
memory growth and can result in large garbage collection times.
`pool-resize-quantity` determines the rate of growth as well as the rate
of decay of the pool. Setting it to a small value is better as the decay
behaves like an exponential decay. Setting a small `max-pool-size` can
cause excessive object destruction (and as a result excessive object
creation) as instances are destroyed from the pool if the current pool
size exceeds `max-pool-size`.

[[abeda]][[GSPTG00107]][[read-only-entity-beans]]

Read-Only Entity Beans
++++++++++++++++++++++

Read-only entity beans cache data from the database. GlassFish Server
supports read-only beans that use both bean-managed persistence (BMP)
and container-managed persistence (CMP). Of the two types, CMP read-only
beans provide significantly better performance. In the EJB lifecycle,
the EJB container calls the `ejbLoad()` method of a read-only bean once.
The container makes multiple copies of the EJB component from that data,
and since the beans do not update the database, the container never
calls the `ejbStore()` method. This greatly reduces database traffic for
these beans.

If there is a bean that never updates the database, use a read-only bean
in its place to improve performance. A read-only bean is appropriate if
either:

* Database rows represented by the bean do not change.
* The application can tolerate using out-of-date values for the bean.

For example, an application might use a read-only bean to represent a
list of best-seller books. Although the list might change occasionally
in the database (say, from another bean entirely), the change need not
be reflected immediately in an application.

The `ejbLoad()` method of a read-only bean is handled differently for
CMP and BMP beans. For CMP beans, the EJB container calls `ejbLoad()`
only once to load the data from the database; subsequent uses of the
bean just copy that data. For BMP beans, the EJB container calls
`ejbLoad()` the first time a bean is used in a transaction. Subsequent
uses of that bean within the transaction use the same values. The
container calls `ejbLoad()` for a BMP bean that doesn't run within a
transaction every time the bean is used. Therefore, read-only BMP beans
still make a number of calls to the database.

To create a read-only bean, add the following to the EJB deployment
descriptor `sun-ejb-jar.xml`:

[source,oac_no_warn]
----
<is-read-only-bean>true</is-read-only-bean>
<refresh-period-in-seconds>600</refresh-period-in-seconds>
----

[[abedb]][[GSPTG00012]][[refresh-period]]

Refresh Period

An important parameter for tuning read-only beans is the refresh period,
represented by the deployment descriptor entity
`refresh-period-in-seconds`. For CMP beans, the first access to a bean
loads the bean's state. The first access after the refresh period
reloads the data from the database. All subsequent uses of the bean uses
the newly refreshed data (until another refresh period elapses). For BMP
beans, an `ejbLoad()` method within an existing transaction uses the
cached data unless the refresh period has expired (in which case, the
container calls `ejbLoad()` again).

This parameter enables the EJB component to periodically refresh its
"snapshot" of the database values it represents. If the refresh period
is less than or equal to 0, the bean is never refreshed from the
database (the default behavior if no refresh period is given).

[[abedc]][[GSPTG00108]][[pre-fetching-container-managed-relationship-cmr-beans]]

Pre-Fetching Container Managed Relationship (CMR) Beans
+++++++++++++++++++++++++++++++++++++++++++++++++++++++

If a container-managed relationship (CMR) exists in your application,
loading one bean will load all its related beans. The canonical example
of CMR is an order-orderline relationship where you have one `Order` EJB
component that has related `OrderLine` EJB components. In previous
releases of the application server, to use all those beans would require
multiple database queries: one for the `Order` bean and one for each of
the `OrderLine` beans in the relationship.

In general, if a bean has n relationships, using all the data of the
bean would require n+1 database accesses. Use CMR pre-fetching to
retrieve all the data for the bean and all its related beans in one
database access.

For example, you have this relationship defined in the `ejb-jar.xml`
file:

[source,oac_no_warn]
----
<relationships>
    <ejb-relation>
        <description>Order-OrderLine</description>
        <ejb-relation-name>Order-OrderLine</ejb-relation-name>
        <ejb-relationship-role>
            <ejb-relationship-role-name>
                Order-has-N-OrderLines
            </ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
                <ejb-name>OrderEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
                <cmr-field-name>orderLines</cmr-field-name>
                <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
        </ejb-relationship-role>
    </ejb-relation>
</relationships>
----

When a particular `Order` is loaded, you can load its related
`OrderLines` by adding this to the `sun-cmp-mapping.xml` file for the
application:

[source,oac_no_warn]
----
<entity-mapping>
    <ejb-name>Order</ejb-name>
    <table-name>...</table-name>
    <cmp-field-mapping>...</cmp-field-mapping>
    <cmr-field-mapping>
        <cmr-field-name>orderLines</cmr-field-name>
        <column-pair>
            <column-name>OrderTable.OrderID</column-name>
            <column-name>OrderLineTable.OrderLine_OrderID</column-name>
        </column-pair>
        <fetched-with>
            <default>
        </fetched-with>
    </cmr-field-mapping>
</entity-mappping>
----

Now when an `Order` is retrieved, the CMP engine issues SQL to retrieve
all related `OrderLines` with a `SELECT` statement that has the
following `WHERE` clause:

[source,oac_no_warn]
----
OrderTable.OrderID = OrderLineTable.OrderLine_OrderID
----

This clause indicates an outer join. These `OrderLines` are pre-fetched.

Pre-fetching generally improves performance because it reduces the
number of database accesses. However, if the business logic often uses
`Orders` without referencing their `OrderLines`, then this can have a
performance penalty, that is, the system has spent the effort to
pre-fetch the `OrderLines` that are not actually needed.

Avoid pre-fetching for specific finder methods; this can often avoid
that penalty. For example, consider an order bean has two finder
methods: a `findByPrimaryKey` method that uses the `Orderlines`, and a
`findByCustomerId` method that returns only order information and
therefore does not use the `Orderlines`. If you have enabled CMR
pre-fetching for the `Orderlines`, both finder methods will pre-fetch
the `Orderlines`. However, you can prevent pre-fetching for the
`findByCustomerId` method by including this information in the
`sun-ejb-jar.xml` descriptor:

[source,oac_no_warn]
----
<ejb>
    <ejb-name>OrderBean</ejb-name>
    ...
    <cmp>
        <prefetch-disabled>
            <query-method>
                <method-name>findByCustomerId</method-name>
            </query-method>
        </prefetch-disabled>
     </cmp>
</ejb>
----

[[abedd]][[GSPTG00178]][[jdbc-and-database-access]]

JDBC and Database Access
^^^^^^^^^^^^^^^^^^^^^^^^

The following are some tips to improve the performance of database
access:

* link:#abede[Use JDBC Directly]
* link:#abedf[Encapsulate Business Logic in Entity EJB Components]
* link:#abedg[Close Connections]
* link:#abedh[Minimize the Database Transaction Isolation Level]

[[abede]][[GSPTG00109]][[use-jdbc-directly]]

Use JDBC Directly
+++++++++++++++++

When dealing with large amounts of data, such as searching a large
database, use JDBC directly rather than using Entity EJB components.

[[abedf]][[GSPTG00110]][[encapsulate-business-logic-in-entity-ejb-components]]

Encapsulate Business Logic in Entity EJB Components
+++++++++++++++++++++++++++++++++++++++++++++++++++

Combine business logic with the Entity EJB component that holds the data
needed for that logic to process.

[[abedg]][[GSPTG00111]][[close-connections]]

Close Connections
+++++++++++++++++

To ensure that connections are returned to the pool, always close the
connections after use.

[[abedh]][[GSPTG00112]][[minimize-the-database-transaction-isolation-level]]

Minimize the Database Transaction Isolation Level
+++++++++++++++++++++++++++++++++++++++++++++++++

Use the default isolation level provided by the JDBC driver rather than
calling `setTransactionIsolationLevel()`, unless you are certain that
your application behaves correctly and performs better at a different
isolation level.

Reduce the database transaction isolation level when appropriate.
Reduced isolation levels reduce work in the database tier, and could
lead to better application performance. However, this must be done after
carefully analyzing the database table usage patterns.

To set the database transaction isolation level using the GlassFish
Server Administration Console, navigate to the Resources>JDBC>JDBC
Connection Pools>pool-name node. Refer to the Administration Console
online help for complete instructions. Alternatively, follow the
instructions in "link:../administration-guide/jdbc.html#GSADG00015[Administering Database Connectivity]"
in GlassFish Server Open Source Edition Administration Guide. For more
information on tuning JDBC connection pools, see
link:tuning-glassfish.html#abehq[JDBC Connection Pool Settings].

[[abedi]][[GSPTG00179]][[tuning-message-driven-beans]]

Tuning Message-Driven Beans
^^^^^^^^^^^^^^^^^^^^^^^^^^^

This section provides some tips to improve performance when using JMS
with message-driven beans (MDBs).

[[abedj]][[GSPTG00113]][[use-getconnection]]

Use `getConnection()`
+++++++++++++++++++++

JMS connections are served from a connection pool. This means that
calling `getConnection()` on a Queue connection factory is fast.

[[abedk]][[GSPTG00114]][[tune-the-message-driven-beans-pool-size]]

Tune the Message-Driven Bean's Pool Size
++++++++++++++++++++++++++++++++++++++++

The container for message-driven beans (MDB) is different than the
containers for entity and session beans. In the MDB container, sessions
and threads are attached to the beans in the MDB pool. This design makes
it possible to pool the threads for executing message-driven requests in
the container.

Tune the Message-Driven bean's pool size to optimize the concurrent
processing of messages. Set the size of the MDB pool to, based on all
the parameters of the server (taking other applications into account).
For example, a value greater than 500 is generally too large.

To configure MDB pool settings in the GlassFish Server Administration
Console, navigate to the Configurations>configuration-name>EJB Container
node and then select the MDB Settings tab. Refer to the Administration
Console online help for more information. Alternatively, you can set the
MDB pool size by using the following `asadmin set` subcommand:

[source,oac_no_warn]
----
asadmin set server.mdb-container.max-pool-size = value
----

[[abedl]][[GSPTG00115]][[cache-bean-specific-resources]]

Cache Bean-Specific Resources
+++++++++++++++++++++++++++++

Use the `setMessageDrivenContext()` or `ejbCreate()` method to cache
bean specific resources, and release those resources from the
`ejbRemove()` method.

[[abedm]][[GSPTG00116]][[limit-use-of-jms-connections]]

Limit Use of JMS Connections
++++++++++++++++++++++++++++

When designing an application that uses JMS connections make sure you
use a methodology that sparingly uses connections, by either pooling
them or using the same connection for multiple sessions.

The JMS connection uses two threads and the sessions use one thread
each. Since these threads are not taken from a pool and the resultant
objects aren't pooled, you could run out of memory during periods of
heavy usage.

One workaround is to move `createTopicConnection` into the `init` of the
servlet.

Make sure to specifically close the session, or it will stay open, which
ties up resources.
