权衡Apache Geronimo EJB事务选项,第2部分: Bean管理事务 - 编程入门网
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 SagorinGeronimo 配置 要与 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 标识
注意:用于指定容器管理的事务属性的 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |