事务管理 -JTA_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 事务管理 -JTA

事务管理 -JTA

 2014/5/21 22:09:42  hanhan8020  程序员俱乐部  我要评论(0)
  • 摘要:JTA和JTSJava事务API(JTA:JavaTransactionAPI)和它的同胞Java事务服务(JTS:JavaTransactionService),为J2EE平台提供了分布式事务服务(distributedtransaction)。一个分布式事务(distributedtransaction)包括一个事务管理器(transactionmanager)和一个或多个资源管理器(resourcemanager)。一个资源管理器(resourcemanager
  • 标签:

class="headline-2">JTA和JTS

Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式事务服务(distributed transaction)。 一个分布式事务(distributed transaction)包括一个事务管理器(transaction manager)和一个或多个资源管理器(resource manager)。 一个资源管理器(resource manager)是任意类型的持久化数据存储。 事务管理器(transaction manager)承担着所有事务参与单元者的相互通讯的责任

JTA与JDBC

JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接、JDO PersistenceManager 对象、JMS 队列、JMS 主题、企业JavaBeans(EJB)、一个用J2EE Connector Architecture 规范编译的资源分配器。

划分

要用JTA来划分一个事务,应用程序调用javax.transaction.UserTransaction接口中的方法。 示例4显示了一个典型的JNDI搜索的UseTransaction对象。 import javax.transaction.*; import javax.naming.*; // ... InitialContext ctx = new InitialContext(); Object txObj = ctx.lookup(";java:comp/UserTransaction";); UserTransaction utx = (UserTransaction) txObj; 应用程序有了UserTransaction对象的引用之后,就可以象示例5那样来起动事务。 utx.begin(); // ... DataSource ds = obtainXADataSource(); Connection conn = ds.getConnection(); pstmt = conn.prepareStatement(";UPDATE MOⅥES ...";); pstmt.setString(1, ";Spinal Tap";); pstmt.executeUpdate(); // ... utx.commit(); // ... 当应用程序调用commit()时,事务管理器使用两段提交协议来结束事务。 JTA事务控制的方法: .javax.transaction.UserTransaction接口提供

使用

应用程序调用begin()来起动事务,即可调用commit()也可以调用rollback()来结束事务。 开发人员经常使用JDBC来作为DAO类中的底层数据操作。 如果计划使用JTA来划分事务,你将需要一个实现了javax.sql.XADataSource,javax.sql.XAConnection和javax.sql.XAResource接口JDBC的驱动。 实现了这些接口的驱动将有能力参与到JTA事务中。 一个XADataSource对象是一个XAConnection对象的工厂。XAConnections是参与到JTA事务中的连接。你需要使用应用程序服务器管理工具来建立XADataSource对象。

特殊指令

对于特殊的指令请参考应用程序服务器文档和JDBC驱动文档。 J2EE应用程序使用JNDI来查找数据源。 一旦应用程序有了一个数据源对象的引用,这会调用javax.sql.DataSource.getConnection()来获得数据库的连接。

连接

XA 连接区别于非XA连接。要记住的是XA连接是一个JTA事务中的参与者。这就意味着XA连接不支持JDBC的自动提交特性。也就是说应用程序不必在XA连 接上调用java.sql.Connection.commit()或java.sql.Connection.rollback()。相反,应用程序应 该使用UserTransaction.begin()、UserTransaction.commit()和 UserTransaction.rollback().

注意

让我们来关注下面的话: “用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。XAConnection s 是参与 JTA 事务的 JDBC 连接。” 要使用JTA事务,必须使用XADataSource来产生数据库连接,产生的连接为一个XA连接。 XA连接(javax.sql.XAConnection)和非XA(java.sql.Connection)连接的区别在于:XA可以参与JTA的事务,而且不支持自动提交。 Note: Oracle,Sybase,DB2,SQL Server等大型数据库才支持XA,支持分布事务。 My SQL 连本地都支持不好,更别说分布事务了。 MySql 在5.0的版本后增加了对xa的支持
参考:
http://baike.baidu.com/link?url=XyJuG3vKGXVEXAwGWZygdistGMIHKZe4sUvA4X9WzC8hbR0b7nKcjZ9YciAv0cmS#1_1 http://www.ibm.com/developerworks/cn/java/j-lo-jta/
上一篇: airship-cli-0.11-tests.jar包下载 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名