Professional Documents
Culture Documents
Jta 1
Jta 1
Properties of transactions
• Atomicity
• Consistentcy
• Isolated
• Durable
Agenda
source: http://java.sun.com/j2ee
Definition: Transaction
• Local transactions
• Distributed transactions
Local transaction
Application Oracle DB
Distributed transaction
IBM
MQSeries
Application Transaction
Oracle DB
manager
ERP
system
J2EE transaction specifications
source: http://java.sun.com/
JTS
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
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
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
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…
JBossTX
– http://www.jboss.org/
JOTM
– http://jotm.objectweb.org/
Tyrex
– http://tyrex.sourceforge.net/
Summary
• 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/