+

Search Tips   |   Advanced Search

 

Requirements for setting isolation level

 

This article discusses the criteria and effects of setting isolation levels for data access components that comprise EJB 2.x modules.

Isolation level requirements for different code specifications

In an EJB 1.1 module, you can set the isolation level at the method level or bean level. This capability also applies to container-managed persistence (CMP) 1.1 beans that you assemble into EJB 2.x modules. (WAS permits the deployment descriptor of a CMP bean to declare the version level of 1.1, regardless of the overall module version.)

However, the ability to set isolation level at the method or bean level does not apply to other enterprise beans within an EJB 2.x module, including CMP 2.x beans. WAS V5.0 removed this capability from EJB 2.0 modules to deliver an architecture that ultimately provides more efficient connection use. Consequently, versions 5.x and 6.x of the product enforce the following restrictions on declaring isolation level for CMP 2.x beans—as well as session beans, message-driven beans, and bean managed persistence (BMP) beans that you assemble into EJB 2.x modules:

Isolation level on connections used by 2.x CMP beans

In a EJB 2.x module, when a CMP 2.x bean uses a new data source to access a backend database, the isolation level is determined by the WebSphere Application Server run time, based on the type of access intent assigned to the bean or the calling method. Other non-CMP connection users can access this same data source and also use the access intent and application profile support to manage their concurrency control.

Connections used by other 2.x enterprise beans and other non-CMP components

For all other JDBC connection instances (connections other than those used by CMP beans), you can specify an isolation level on the data source resource reference. For shareable connections that run in global transactions, this method is the only way to set the isolationLevel for connections. Trying to directly set the isolation level through the setTransactionIsolation() method on a shareable connection that runs in a global transaction is not allowed. To use a different isolation level on connections, provide a different resource reference. Set these defaults through your assembly tool.

Each resource reference associates with one isolation level. When your application uses this resource reference Java Naming and Directory Interface (JNDI) name to look up a data source, every connection returned from this data source using this resource reference has the same isolation level.

Components needing to use shareable connections with multiple isolation levels can create multiple resource references, giving them different JNDI names, and have their code look up the appropriate data source for the isolation level they need. In this way, you use separate connections with the different isolation levels enabled on them. It is possible to map these multiple resource references to the same configured data source. The connections still come from the same underlying pool, however; the connection manager does not allow sharing of connections requested by resource references with different isolation levels. Consider the following scenario:

If your application wants to update the tables or a BMP bean updates some attributes, it can use the jdbc/RRResRef JNDI name to look up the data source instance. All connections returned from the data source instance have a RepeatableRead isolation level. If the application wants to perform a query for read only, then it is better to use the jdbc/RCResRef JNDI name to look up the data source.

If you do not specify the isolation level:

WAS does not require you to set the isolation level on a data source resource reference for a non-CMP application module. If you do not specify isolation level on the resource reference, or if you specify TRANSACTION_NONE, the WAS run time uses a default isolation level for the data source. Application Server uses a default setting based on the JDBC driver.

For most drivers, WAS uses an isolation level default of TRANSACTION_REPEATABLE_READ. For Oracle drivers, however, Application Server uses an isolation level of TRANSACTION_READ_COMMITTED. Use the following table for quick reference:

Database: DB2 Oracle Sybase Informix Cloudscape SQL Server
Default isolation level:

(for connections used by non-CMP entities)

RR RC RR RR RR RR




Sub-topics


Data source lookups for enterprise beans and Web modules

Direct and indirect JNDI lookup methods for data sources

Access intent and isolation level

 

Related concepts


Data sources
Unshareable and shareable connections

 

Related tasks


Creating or changing a resource reference using the assembly tool
Accessing data from application clients
Configure data access for the Application Client
Assembling data access applications using the assembly tool
Accessing data using J2EE Connector Architecture connectors
Migrating applications to use data sources of the current J2EE Connector Architecture (JCA)
Configure a JDBC provider and data source