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 ();
...
}
...
}