快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
料 部分,获得 Sun 公司的 JavaDocs 中有关 UserTransaction 和 UserStatus 接口的链接。

如何使用 bean 方法获得 UserTransaction 的最初引用呢?基于企业 bean 的类型,您可从 bean 上下文中获得接口:

对于会话 bean,可从 javax.ejb.EJBContext 调用 getUserTransaction()。

对于 MDB,可从 MessageDrivenContext.getUserTransaction() 调用 getUserTransaction()。

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

时间:2011-03-13 IBM Jonathan Sagorin

您也可以通过 JNDI 检索接口。清单 1 显示了一个例子。

清单 1. 如何通过 JNDI 获取 UserTransaction 接口

public MySessionBean implements SessionBean { public someMethodOnMyBean() {     Context initCtx = new InitialContext();     UserTransaction utx = (UserTransaction)initCtx.lookup(     "java:comp/UserTransaction");     utx.begin();     ...     utx.commit();     }    ... }

通常,在同一个方法中启动事务并提交该事务是一个好主意。这有助于您跟踪事务开始和结束的地方。同样,要使事务开放的时间尽可能的短。事务需要系统资源,因此如果保持事务长时间的开放,可能会影响多用户性能。

使用 JTA 事务的最大好处是它允许您跨越多个不同数据库的多个更新。但要记住,JTA 实现不支持嵌套事务。

清单 2 显示了会话 bean 更新两个不同数据库的例子。数据源是通过 JNDI 进行检索的。您可以像往常一样检索数据库连接并准备语句。

(注意,我在演示 JTA 事务的基本实现(用粗体显示)。为了实现这一点,我将用顶级方法来显示所有代码。不要尝试使用任何重用形式的普通抽象。)

清单 2. 会话 bean Java 代码示例

public class MySessionEJB implements SessionBean { EJBContext ejbContext; public void updateTwoDatabases(...) {     DataSource dbOneDataSource = null;     DataSource dbTwoDataSource = null;     Connection dbOneConnection = null;     Connection dbTwoConnection= null;     Statement dbOneStatement = null;     Statement dbTwoStatement = null;     String sqlUpdateDbOne = null;     String sqlUpdateDbTwo = null;     javax.transaction.UserTransaction ut = null;     try {     InitialContext initCtx = new InitialContext();     // retrieve our first Connection and     // prepare a statement     dbOneDataSource = (javax.sql.DataSource)     initCtx.lookup("java:comp/env/jdbc/dbOneDS");     dbOneConnection = dbOneDataSource.getConnection();     // setup SQL here,     // perhaps we''re using parameterized queries     sqlUpdateDbOne = ...     dbOneStatement =     dbOneConnection.prepareStatement(sqlUpdateDbOne);     // retrieve our second Connection and     // prepare a statement     dbTwoDataSource = (javax.sql.DataSource)     initCtx.lookup("java:comp/env/jdbc/dbTwoDS");     dbTwoConnection = dbTwoDataSource.getConnection();     // setup SQL here,     // perhaps we''re using parameterized queries     sqlUpdateDbTwo = ...     dbTwoStatement =       dbTwoConnection.prepareStatement(sqlUpdateDbTwo);     // Now setup a JTA transaction to encompass both     // database updates //     ut = ejbContext.getUserTransaction();     /

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