Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Performance Tuning Guide

- Previous: Monitoring EJB Components
- Next: Using Local and Remote Interfaces

## 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.

### Use High Performance Beans

Use high-performance beans as much as possible to improve the overall performance of your application. For more information, see 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

### 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.

### 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 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Troubleshooting Guidefor more details.

### Remove Unneeded Stateful Session Beans

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

### 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 Pre-fetching Container Managed Relationship (CMR) Beans

- Identify read-only beans: Configure read-only entity beans for read only operations. For more information, see Read-Only Entity Beans

- Previous: Monitoring EJB Components
- Next: Using Local and Remote Interfaces

- © 2010, Oracle Corporation and/or its affiliates