快速业务通道

权衡Apache Geronimo EJB事务选项,第2部分: Bean管理事务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
/ Start our transaction here     ut.begin();      dbOneStatement.executeUpdate();      dbTwoStatement.executeUpdate();     // commit the transaction     ut.commit();     // cleanup     dbOneStatement.close();     dbTwoStatement.close();     dbOneConnection.close();     dbTwoConnection.close();     }     catch (Exception e) {        //something went wrong        try {        //rollback the exception        ut.rollback();        } catch (SystemException se) {          //Rollback has failed!          throw new EJBException        ("Attempted to rollback, but it failed: "     +   se.getMessage());     }     //Lastly throw an exception to report what went wrong     throw new EJBException        ("Transaction failed: " + ex.getMessage());     }    }

如您所见,JTA bean 管理的事务的基本实现非常简单。在事务启动、提交和回滚时,所有您要做的就是明确控制事务。

权衡Apache Geronimo EJB事务选项,第2部分: Bean管理事务(3)

时间:2011-03-13 IBM Jonathan Sagorin

JDBC 事务

如果您过去曾经编写过 JDBC 代码,那么实现 JDBC 事务对于您来说应该很熟悉。只有在具有现有的 JDBC 代码,并且必须在企业 bean 实现中使用它时,才使用 JDBC 事务,不过,这被认为是传统处理方式。让我们更近一步了解这类事务。

在执行一个正常地 JDBC 更新时,所有 SQL 语句都被自动提交。为了自己控制事务边界,在使用前可通过在 Connection 对象上发布 setAutoCommmit(false) 语句将该功能关闭。如果需要更好控制 SQL 执行,请使用该选项。

由 java.sql.Connection 接口提供 commit 和 rollback 方法,并由数据库的事务管理器(而不是 EJB 容器)来控制 JDBC 事务。下面的 清单 3 阐明了这一点,显示了一个虚构的会话 bean 方法,该方法使用标准 JDBC 预备语句更新数据库中客户的名字。

注意,这里没有抽象。所有代码都是使用顶级 bean 编写的。不能使用重用和零委托。请不要将这作为一种方法使用。记住,我将演示如何声明事务边界,以便更好地实现 JDBC 遗留代码的事务控制。

清单 3. JDBC 事务的用法

public void updateFirstName (int customerId, String firstName) {   try {     //getConnection creates a JDBC connection for us     Connection con = getConnection();     con.setAutoCommit(false);     String sql = "update customer set firstName = ? where customerId = ?";     PreparedStatement updateCustomerName = con.prepareStatement(sql); updateCustomerName.setString(1,firstName);   updateCustomerName.setInt(2,customerId); updateCustomerName.executeUpdate();     con.commit();   } catch (Exception ex) {     try {       con.rollback();       throw new EJBException("Customer name update    failed: " + ex.getMessage());     } catch (SQLException sqx) {       throw new EJBException("Rollback failed: " +         sqx.getMessage());     }   } }

因此可以用来封装遗留 JDBC 代码的常用方法是:

在连接对象上将 setAutoCommit 属性设置为 false。

在执行 SQL 之后调用连接上的 commit 方法。

如果出现任何错误,则调用连接上的 rollback 方法。

此外,JDBC 事务不是实现 be

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号