Download as pdf or txt
Download as pdf or txt
You are on page 1of 42

Java Transaction API

Properties of transactions

• Atomicity
• Consistentcy
• Isolated
• Durable
Agenda

• Java Transaction API (JTA)


• Using JTA with EJB
• Using JTA with JDBC
• Using JTA with JMS
• Using JTA with JDO
• Transactions for Web services
The J2EE platform

source: http://java.sun.com/j2ee
Definition: Transaction

“A transaction is a series of operations that


appear to execute as one large, atomic
operation.”

(source: Roman et al, Mastering Enterprise JavaBeans)


Definition: Transaction

“A transaction is a complete unit of work. It


may comprise many computational tasks,
which may include user interface, data
retrieval, and communications. A typical
transaction modifies shared resources.”

(source: The Open Group’s XA specification)


Transaction types

• Local transactions
• Distributed transactions
Local transaction

Application Oracle DB
Distributed transaction

IBM
MQSeries

Application Transaction
Oracle DB
manager

ERP
system
J2EE transaction specifications

• Java Transaction API (JTA)


• Java Transaction Service (JTS)
JTA

“JTA is a high level, implementation


independent, protocol independent API that
allows applications and application servers
to access transactions.”

source: http://java.sun.com/
JTS

“JTS specifies the implementation of a


Transaction Manager which supports JTA
and implements the Java mapping of the
OMG Object Transaction Service (OTS) 1.1
specification at the level below the API. JTS
propagates transactions using the Internet
Inter-ORB Protocol (IIOP).”

source: http://java.sun.com/
J2EE transaction packages

JTA
• javax.transaction
• javax.transaction.xa
JTS
• javax.jts
• org.omg.CORBA
• org.omg.CosTransactions
• org.omg.CosTSPortability
JTA in action
UserTransaction utx = …;
try
{
utx.begin();
transferFunds(your_account,
my_swissbank_account,
1000000, US_DOLLARS);
travelAgent.purchaseTicket(PDX, MEXICO_CITY);
utx.commit()
}
catch (Exception ex)
{
utx.rollback();
}
Resource managers

Resource
manager

Application Transaction Resource


manager manager

Resource
manager
Transaction terminology

• Transaction manager
• Resource manager
• Resource enlistment
• XA
• Two phase commit (2PC)
Two phase commit

Prepare

Transaction Prepare
manager
Resource
Prepare
Manager
Two phase commit (cont.)

Prepared

Transaction Prepared
manager
Prepared Resource
Manager
Two phase commit (cont.)

Commit

Transaction Commit
manager
Resource
Commit
Manager
Two phase commit (cont.)

Done

Transaction Done
manager
Done Resource
Manager
Transaction demarcation

• Start a transaction
• End a transaction
Techniques for transaction
demarcation

• Declarative
– programmer declares transaction attributes
– runtime environment uses attributes to
manage transactions
• Programmatic
– programmer is responsible for coding
transaction logic
– application controls a transaction via an API
Package: javax.transaction

• javax.transaction.Status
• javax.transaction.Synchronization
• javax.transaction.Transaction
• javax.transaction.TransactionManager
• javax.transaction.UserTransaction
javax.transaction.UserTransaction

Methods:
• public void begin()
• public void commit()
• public void rollback()
• public void setRollbackOnly()
• public void setTransactionTimeout(int)
• public int getStatus()
Obtaining a UserTransaction
via JNDI

import javax.transaction.*;
import javax.naming.*;
// …
InitialContext ctx = new InitialContext();
obj = ctx.lookup(
“java:/comp/UserTransaction”);
UserTransaction tx = (UserTransaction) obj;
// …
Obtaining a UserTransaction
in EJB

import javax.transaction.*;
import javax.ejb.*;
// …
private EJBContext ec;
// …
utx = ec.getUserTransaction();
// …
EJB transactions

• Declarative
– Container-Managed Transactions (CMT)
– Transaction attributes declared in EJB
deployment descriptor (ejb-jar.xml)
• Programmatic
– Bean-Managed Transactions (BMT)
Transactional EJB’s

• Session beans
– either CMT or BMT
• Entity beans
– always CMT
• Message driven beans
– either CMT or BMT
Example: JTA and EJB

public void deposit(double amount) {


UserTransaction utx = ctx.getUserTransaction();
try {
utx.begin();
updateAccount(amount);
utx.commit();
}
catch (Exception ex) {
utx.rollback();
}
}
JTA and JDBC

If the JDBC driver implements the


XADataSource interface, the database can
participate as a resource manager in a JTA
transaction
Using JTA and JDBC

1) Configure an XA DataSource
2) Lookup DataSource via JNDI
3) Lookup UserTransaction via JNDI
4) Invoke utx.begin()
5) Invoke DataSource.getConnection()
6) Execute SQL statements
7) Invoke utx.commit()
8) Invoke java.sql.Connection.close()
JTA and JMS

If the JMS provider supports the XAResource


interface, JMS can participate as a resource
manager in a JTA transaction
Example: JTA with JMS

import javax.jms.*;
import javax.transaction.*;
//
TopicSession tsess = …;
Topic top = …;
UserTransaction utx = lookupUsingJNDI();
utx.begin();
TopicPublisher publisher =
tsess.createPublisher(top);
// …
Example: JTA with JMS (cont).

TextMessage msg =
tsess.createTextMessage(“Hello!”);
publisher.publish(msg);
utx.commit();
// …
Java Data Objects (JDO)

• javax.jdo.PersistenceManagerFactory
• javax.jdo.PersistenceManager
– method: currentTransaction()
• javax.jdo.Transaction
– method: begin()
– method: commit()
– method: rollback()
Example: JDO local transaction
import javax.jdo.*;
PersistenceManagerFactory pmf = …;
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
// ...
shirt.setColor(WHITE);
tx.commit();
}
catch (Exception ex) {
tx.rollback();
}
Example: JDO and JTA

import javax.jdo.*;
import javax.transaction.*;
UserTransaction utx = …;
try {
utx.begin();
PersistenceManager pm = pmf.getPersistenceManager();
// …
shirt.setColor(BLUE);
utx.commit();
}
catch (Exception ex) {
utx.rollback();
}
Transactions for web services

• Protocol specifications:
– WS-Transaction
– OASIS Business Transaction Protocol (BTP)
• Java API
– JAXTX (JSR-156)
Additional topics…

• Transaction isolation levels


• Optimistic transactions
• Nested transactions
• Extended transaction models (JSR-95)
Open source projects

JBossTX
– http://www.jboss.org/

JOTM
– http://jotm.objectweb.org/

Tyrex
– http://tyrex.sourceforge.net/
Summary

• If your application accesses multiple data


resources, consider using JTA
• For more details, read the JTA specification
Additional resources

• http://java.sun.com/products/jta/
• http://java.sun.com/products/jts/
• http://java.sun.com/products/jdbc/
• http://java.sun.com/products/jdo/
• http://java.sun.com/products/jms/
• http://java.sun.com/products/ejb/
• http://java.sun.com/j2ee/

You might also like