|
A Transaction forms a unit of work. The Transaction manages what happens within that unit of work, and
when an error occurs the Transaction can roll back any changes performed. Transactions can be managed by
the users application, or can be managed by a framework (such as Spring), or can be managed by a J2EE
container. These are described below.
See also :-
When using a JDO/JPA implementation such as JPOX in a normal Java environment (with no J2EE
container), the Transactions are known as
Locally Managed Transactions
. The users code
(or a framework such as Spring) will manage the transactions by starting, and commiting the
transaction itself. With these transactions with JDO
you would do something like
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try
{
tx.begin();
{users code to persist objects}
tx.commit();
}
finally
{
if (tx.isActive())
{
tx.rollback();
}
}
pm.close();
and with JPA
EntityManager em = emf.getEntityManager();
EntityTransaction tx = em.getTransaction();
try
{
tx.begin();
{users code to persist objects}
tx.commit();
}
finally
{
if (tx.isActive())
{
tx.rollback();
}
}
em.close();
When you use a framework like Spring
you would not need to specify the
tx.begin(), tx.commit(), tx.rollback()
since that would be
done for you. The basic idea with
Locally Managed transactions
is that you are managing the
transaction start and end.
When using a J2EE container you are giving over control of the transactions to the container.
Here you have
Container Managed Transactions
. In terms of your code, you would do like the
previous example
except
that you would OMIT the
tx.begin(), tx.commit(), tx.rollback()
since the J2EE container will be doing this for you.
|
|