快速业务通道

高级DAO编程 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
eateWarehouseProfile(profile);    dao.updateWarehouseStatus(id1, status1);    dao.updateWarehouseStatus(id2, status2);    tx.commit();  // end the transaction

这种事务界定策略对于需要在一个事务中访问多个 DAO 的应用程序特别有用。

可以用 JDBC API 或者 Java 事务 API(Java Transaction API JTA)实现事务界定。 JDBC 事务界定比 JTA 事务界定要简单,但是 JTA 提供了更多的灵活性。在下面一节中我将更深入地分析事务界定的机制。

用 JDBC 进行事务界定

JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。 java.sql.Connection 提供了以下控制事务的方法:

public void setAutoCommit(boolean)

public boolean getAutoCommit()

public void commit()

public void rollback()

高级DAO编程(3)

时间:2011-02-08 IBM Sean C. Sullivan

清单 3 显示了如何用 JDBC API 界定一个事务:

清单 3. 用 JDBC API 进行事务界定

import java.sql.*;    import javax.sql.*;    // ...    DataSource ds = obtainDataSource();    Connection conn = ds.getConnection();    conn.setAutoCommit(false);    // ...    pstmt = conn.prepareStatement("UPDATE MOVIES ...");    pstmt.setString(1, "The Great Escape");    pstmt.executeUpdate();    // ...    conn.commit();    // ...

使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。在下面,我们将看一下如何用 JTA 进行事务界定。因为 JTA 不像 JDBC 那样有名,所以我们首先做一个简介。

JTA简介

Java 事务 API(JTA) 及其同门兄弟 Java 事务服务(Java Transaction Service JTS)为 J2EE 平台提供了分布式事务服务。一个 分布式的事务涉及一个事务管理器和一个或者多个资源管理器。一个 资源管理器是任何类型的持久性的数据存储。事务管理器负责协调所有事务参与者之间的通信。事务管理器与资源管理器之间的关系如图 2 所示:

图 2. 一个事务管理器和资源管理器

高级DAO编程 - 编程入门网

JTA 事务比 JDBC 事务功能更强。JDBC 事务局限为一个数据库连接,而 JTA 事务可以有多个参与者。所有下列 Java 平台组件都可以参与 JTA 事务:

JDBC 连接

JDO PersistenceManager 对象

JMS 队列

JMS 主题

企业 JavaBeans

符合 J2EE 连接体系结构(J2EE Connector Architecture)规范的资源适配器

高级DAO编程(4)

时间:2011-02-08 IBM Sean C. Sullivan

使用 JTA 的事务界定

要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。清单 4 显示了对 UserTransaction 对象的典型 JNDI 查询:

清单 4. 一个对 UserTransaction 对象的 JDNI 查询

import javax.transaction.*;    import javax.naming.*;    // ...    InitialContext ctx = new InitialContext();    Object txObj = ctx.lookup("java:comp/UserTransaction");    UserTransaction utx = (UserTransaction) txObj;

当应用程序找到了 UserTransaction 对象后,就可以开始事务了,如清单 5 所示:

清单 5. 用 JTA 开始一个事务

utx.begin();    // ...    DataSource ds = obtainXADataSource();    Connection conn = ds.getConnection();    pstmt = conn.prepareStatement("UPDATE MOVIES ...");    pstmt.setString(1, "Spinal Tap");    pstmt.executeUpda

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号