Use this task to share connections to benefit from one-phase commit
optimization.
Why and when to perform this task
Messaging engines store
persistent data in a database, using a JDBC data source to interact with that
database. Some JMS applications also store persistent data in a database,
for example if the application uses entity Enterprise Java Beans (EJBs). Typically,
such applications use two-phase commit transactions to coordinate updates
to the JMS and JDBC resources involved.
You can configure your application
to share the JDBC connection used by a messaging engine,
which enables you to use one-phase commit transactions and improve the performance
of your application. You can benefit from the one-phase commit optimization
in the following circumstances:
- Your application must use the assured persistent reliability
attribute for its JMS messages.
- Your application must use CMP entity beans that are bound to the same
JDBC data source that the messaging engine uses
for its data store.
Restriction: You cannot benefit from the one-phase commit
optimization in the following circumstances:
- If your application uses a reliability attribute other than assured persistent for
its JMS messages.
- If your application uses BMP entity beans, or JDBC clients.
Before you configure your system, ensure that you consider
all of the components of your J2EE application that might be affected by one-phase
commits. To optimize for one-phase commit transactions, perform the following
steps:
Steps for this task
- Select the assured persistent reliability
attribute for your JMS messages.
- Deploy all CMP EJBs involved in one-phase commit transactions with res-auth set
to Container.
- Deploy all CMP EJBs involved in one-phase commit transactions with
an AccessIntent that maps to a transaction isolation
level of JDBC Read Committed. You can choose
any of the following values for AccessIntent:
- WSOptimisticUpdate
- WSOptimisticRead
- WSPessimisticUpdate-NoCollisions
Oracle tip: All values for AccessIntent,
except WSPessimisticUpdateExclusive, map to the JDBC
Read Committed transaction isolation level.
DB2 tip: You can use any value for AccessIntent,
because WebSphere exploits the DB2 dynamic transaction isolation level support.
- Ensure that you use the same authentication alias for both your
CMP EJBs and the messaging engine data store.
- When you configure your JDBC data source, ensure that you select
the option: Use data source for CMP beans.
- Set the value of the JDBC data source custom property jmsOnePhaseOptimization to true.
- Set the value of the JMS connection factory property shareDataSourceWithCMP to true.
- When you create your JDBC provider and set the Select
the implementation type field, ensure that you select Connection
pool data source (and not XA data source).
- Set the value of the JMS activation specification property shareDataSourceWithCMP to true.
Tip: Use the J2C activation specification panels or commands
to set the shareDataSourceWithCMP property. For this
release, you cannot set this property with the JMS activation specification
panels or commands.