java transaction api
DESCRIPTION
Java Transaction API. Sean C. Sullivan sean seansullivan com July 2003. 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. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/1.jpg)
Java Transaction API
Sean C. Sullivansean <at> seansullivan <dot> comJuly 2003
![Page 2: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/2.jpg)
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
![Page 3: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/3.jpg)
The J2EE platform
source: http://java.sun.com/j2ee
![Page 4: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/4.jpg)
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)
![Page 5: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/5.jpg)
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 typicaltransaction modifies shared resources.”
(source: The Open Group’s XA specification)
![Page 6: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/6.jpg)
Transaction types
• Local transactions
• Distributed transactions
![Page 7: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/7.jpg)
Local transaction
Oracle DBApplication
![Page 8: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/8.jpg)
Distributed transaction
IBMMQSeries
Application Transactionmanager
Oracle DB
ERPsystem
![Page 9: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/9.jpg)
J2EE transaction specifications
• Java Transaction API (JTA)
• Java Transaction Service (JTS)
![Page 10: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/10.jpg)
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/
![Page 11: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/11.jpg)
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/
![Page 12: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/12.jpg)
J2EE transaction packages
JTA
• javax.transaction
• javax.transaction.xa
JTS
• javax.jts
• org.omg.CORBA
• org.omg.CosTransactions
• org.omg.CosTSPortability
![Page 13: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/13.jpg)
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();
}
![Page 14: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/14.jpg)
Resource managers
Resourcemanager
Application Transactionmanager
Resourcemanager
Resourcemanager
![Page 15: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/15.jpg)
Transaction terminology
• Transaction manager
• Resource manager
• Resource enlistment
• XA
• Two phase commit (2PC)
![Page 16: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/16.jpg)
Two phase commit
Transactionmanager Resource
Manager
Prepare
Prepare
Prepare
![Page 17: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/17.jpg)
Two phase commit (cont.)
Transactionmanager Resource
Manager
Prepared
Prepared
Prepared
![Page 18: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/18.jpg)
Two phase commit (cont.)
Transactionmanager Resource
Manager
Commit
Commit
Commit
![Page 19: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/19.jpg)
Two phase commit (cont.)
Transactionmanager Resource
Manager
Done
Done
Done
![Page 20: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/20.jpg)
Transaction demarcation
• Start a transaction
• End a transaction
![Page 21: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/21.jpg)
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
![Page 22: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/22.jpg)
Package: javax.transaction
• javax.transaction.Status
• javax.transaction.Synchronization
• javax.transaction.Transaction
• javax.transaction.TransactionManager
• javax.transaction.UserTransaction
![Page 23: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/23.jpg)
javax.transaction.UserTransaction
Methods:• public void begin()• public void commit()• public void rollback()• public void setRollbackOnly()• public void setTransactionTimeout(int)• public int getStatus()
![Page 24: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/24.jpg)
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;
// …
![Page 25: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/25.jpg)
Obtaining a UserTransaction in EJB
import javax.transaction.*;
import javax.ejb.*;
// …
private EJBContext ec;
// …
utx = ec.getUserTransaction();
// …
![Page 26: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/26.jpg)
EJB transactions
• Declarative– Container-Managed Transactions (CMT)– Transaction attributes declared in EJB
deployment descriptor (ejb-jar.xml)
• Programmatic– Bean-Managed Transactions (BMT)
![Page 27: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/27.jpg)
Transactional EJB’s
• Session beans– either CMT or BMT
• Entity beans– always CMT
• Message driven beans– either CMT or BMT
![Page 28: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/28.jpg)
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();
}
}
![Page 29: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/29.jpg)
JTA and JDBC
If the JDBC driver implements the XADataSource interface, the database can participate as a resource manager in a JTA transaction
![Page 30: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/30.jpg)
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()
![Page 31: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/31.jpg)
JTA and JMS
If the JMS provider supports the XAResource interface, JMS can participate as a resource manager in a JTA transaction
![Page 32: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/32.jpg)
Example: JTA with JMS
import javax.jms.*;
import javax.transaction.*;
//
TopicSession tsess = …;
Topic top = …;
UserTransaction utx = lookupUsingJNDI();
utx.begin();
TopicPublisher publisher = tsess.createPublisher(top);
// …
![Page 33: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/33.jpg)
Example: JTA with JMS (cont).
TextMessage msg =
tsess.createTextMessage(“Hello!”);
publisher.publish(msg);
utx.commit();
// …
![Page 34: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/34.jpg)
Java Data Objects (JDO)
• javax.jdo.PersistenceManagerFactory
• javax.jdo.PersistenceManager– method: currentTransaction()
• javax.jdo.Transaction– method: begin()– method: commit()– method: rollback()
![Page 35: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/35.jpg)
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();
}
![Page 36: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/36.jpg)
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();
}
![Page 37: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/37.jpg)
Transactions for web services
• Protocol specifications:– WS-Transaction– OASIS Business Transaction Protocol (BTP)
• Java API– JAXTX (JSR-156)
![Page 38: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/38.jpg)
Additional topics…
• Transaction isolation levels
• Optimistic transactions
• Nested transactions
• Extended transaction models (JSR-95)
![Page 39: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/39.jpg)
Open source projects
JBossTX– http://www.jboss.org/
JOTM– http://jotm.objectweb.org/
Tyrex– http://tyrex.sourceforge.net/
![Page 40: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/40.jpg)
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/
![Page 41: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/41.jpg)
Summary
• If your application accesses multiple data resources, consider using JTA
• For more details, read the JTA specification
![Page 42: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/42.jpg)
Backup slides
These additional slides are backup material.
![Page 43: Java Transaction API](https://reader036.vdocuments.mx/reader036/viewer/2022062301/568158ce550346895dc61992/html5/thumbnails/43.jpg)
Properties of transactions
• Atomicity
• Consistentcy
• Isolated
• Durable