快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
an 管理的事务的首选方式。如果不需要重用现有 JDBC 代码,则应该考虑使用 JTA 事务。

提交事务或回滚事务

因为由您来控制事务边界,所以当提交或回滚 bean 管理的事务时,有些特定的规则您必须知道:

在从业务方法中返回或发生 ejbTimeout 之前,无状态会话 bean 必须提交或回滚事务。容器可能会检测事务启动时的情况,但是不会提交事务。在这种情况下,容器将回滚事务并抛出一个异常。

在从业务方法中返回之前,有状态会话 bean 不必提交或回滚事务。这是因为事务可以跨越几个客户端调用。有状态会话 bean 表示了会话状态。EJB 容器将等待会话 bean 实例提交或回滚事务。

在消息监听器方法或 ejbTimeout 方法返回之前,MDB 必须提交事务。在这种情况下,容器将回滚事务并抛出一个异常。

注意,对于 JTA 事务,如果数据库在多个调用之间打开或关闭数据库连接,则仍将保留事务。但是,对于 JDBC 事务,将不保留事务。

避免使用的方法

在处于事务中时,不要调用 java.sql.Connection 或 javax.jms.Session 接口的 commit() 或 rollback()。

同样,不要调用 EJBContext 接口的 getRollBackOnly() 和 setRollBackOnly()。容器将抛出一个异常,原因是:

您可以通过调用 javax.transaction.UserTransaction 的 getStatus() 方法来获得事务的状态。这等同于调用 getRollBackOnly。

可以使用 javax.transaction.UserTransaction 接口的 rollback() 方法来回滚事务。这等同于调用 setRollbackonly()。

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

时间:2011-03-13 IBM Jonathan Sagorin

Geronimo 配置

要与 Geronimo 一起使用 bean 管理的事务时,没有很多配置工作需要您做!因为事务边界是通过编程控制的,您要像本文前一小节中所显示的那样,在代码中处理大部分工作。

OpenEJB 是 Geronimo 的 EJB 容器实现。您只需要负责配置好 OpenEJB 来使用 bean 管理的事务即可。可以用部署描述符对每个企业 bean 进行配置。

要使用 bean 管理的事务,则需要使用 EJB 部署描述符中的 <transaction-type> 元素来指定值 Bean。

您可以使用 XDoclet 来生成实现和使用 EJB 框架所需的编程工件中更单调的方面。这包括 EJB 部署描述符。因此要指定 bean 管理的事务,则需要使用 XDoclet 的类似 JavaDoc 的标识语言。

要为每个企业 bean 指示 bean 管理的事务,可以使用 XDoclet 标识来设置 @ejb.bean transaction-type="Bean"。

清单 4 显示了一个会话 bean,它使用 XDoclet 来声明事务类型标识(粗体显示)。

清单 4. bean 管理的会话 bean 的 XDoclet 标识

package org.my.package.ejb; /** * Sample session bean. * Declare all my XDoclet tags here * ... * ... * @ejb.bean name="SampleSession" *  type="Stateless" *  local-jndi-name="java:comp/env/ejb/SampleSessionLocal" *  jndi-name="org.my.package.ejb/SampleSessionLocal/Home" *  view-type="both" *  transaction-type="Bean" * ... * ... */ public abstract class SampleSessionBean implements javax.ejb.SessionBean { ... }

注意:用于指定容器管理的事务属性的 XDoclet 标记与上述标记非常相似,因此不会被迷惑:

容器管理的事务 @ejb.transaction type="Required"

bean 管理的事务 @ejb.bean transaction-type="Bean"

如果没有使用 XDoclet 标识指定 @ejb.bean 标签,将使用默认事务边界(这是容器管理的事务)。

清单 5 是名为 SampleSession 的无状态会话 bean 生成 ejbjar.xml 的清单示例。在 Java 代码中指定了 @ejb.bean tr

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