+

Search Tips   |   Advanced Search

 

Use component-managed transactions

 

This topic describes how to enable a session bean, servlet, or application client component to use component-managed transactions, to manage its own transactions directly instead of letting the container manage the transactions.

 

Overview

Entity beans cannot manage transactions (so cannot use bean-managed transactions).

To enable a session bean, servlet, or application client component to use component-managed transactions, complete the following steps:

 

Procedure

  1. For session beans, set the Transaction type attribute in the component's deployment descriptor to Bean, as described in Setting transactional attributes in the deployment descriptor.

  2. For application client components, enable support for transaction demarcation by setting the Allow JTA Demarcation attribute in the component's deployment descriptor, as described in Setting transactional attributes in the deployment descriptor.

  3. Write the component code to actively manage transactions

    For stateful session beans, a transaction started in a given method does not need to be completed (that is, committed or rolled back) before completing that method. The transaction can be completed at a later time, for example on a subsequent call to the same method, or even within a different method. However, constructing the application so a transaction is begun and completed within the same method call is usually preferred, because it simplifies application debugging and maintenance. The following code extract shows the standard code required to obtain an object encapsulating the transaction context, and involves the following basic steps:

    • A javax.transaction.UserTransaction object is created by calling a lookup on "java:comp/UserTransaction".

    • The UserTransaction object is used to demarcate the boundary of a transaction by using transaction methods such as begin and commit as needed. If an application component begins a transaction, it must also complete that transaction either by invoking the commit method or the rollback method.

    Code example: Getting an object that encapsulates a transaction context

    ... import javax.transaction.*; import javax.naming.InitialContext; import javax.naming.NamingException;
    ...
        public float doSomething(long arg1)throws NamingException {
            InitialContext initCtx = new InitialContext();
            UserTransaction userTran = (UserTransaction)initCtx.lookup(
               "java:comp/UserTransaction");
            ...
            //Use userTran object to call transaction methods
            userTran.begin ();
            //Do transactional work
            ...
            userTran.commit ();
            ...
        }
        ...
    }
    


 

Related concepts


Client support for transactions

 

Related tasks


Using the transaction service
Developing a component to use transactions

 

Related Reference


Use local transactions