快速业务通道

Java理论和实践: 理解JTS ― 平衡安全性和性能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
状态 ― 调用方法是否早已在事务中被征用 ― 决定了当 EJB 方法被调用时容器应该进行下面几个操作中的哪一个:

征用现有事务中的方法。

创建一个新事务,并征用该事务中的方法。

不征用任何事务中的方法。

抛出一个异常。

清单 2. 样本 EJB 装配描述符

<assembly-descriptor>  ...  <container-transaction>   <method>    <ejb-name>MyBean</ejb-name>    <method-name>*</method-name>   </method>   <trans-attribute>Required</trans-attribute>  </container-transaction>  <container-transaction>   <method>    <ejb-name>MyBean</ejb-name>    <method-name>logError</method-name>   </method>   <trans-attribute>RequiresNew</trans-attribute>  </container-transaction>  ... </assembly-descriptor>

Java理论和实践: 理解JTS ― 平衡安全性和性能(3)

时间:2011-02-04 Brian Goetz

J2EE 规范定义了六种事务模式: Required 、 RequiresNew 、 Mandatory 、 Supports 、 NotSupported 和 Never 。表 1 概述了每种模式的行为 ― 在现有事务中被调用和不在事务内调用时的行为 ― 并描述了每种模式受哪些类型的 EJB 组件支持。(一些容器可能允许您在选择事务模式时有更多的灵活性,但这种使用要依赖特定于容器的功能,因此不适合跨容器的情况)。

表 1. 事务模式

事务模式 Bean 类型 在事务 T 内被调用时的行为 在事务外被调用时的行为
Required 会话、实体、消息驱动 在 T 中征用 新建事务
RequiresNew 会话、实体 新建事务 新建事务
Supports 会话、消息驱动 在 T 中征用 不带事务运行
Mandatory 会话、实体 在 T 中征用 出错
NotSupported 会话、消息驱动 不带事务运行 不带事务运行
Never 会话、消息驱动 出错 不带事务运行

在只使用容器管理的事务的应用程序中,只有组件调用事务模式为 Required 或 RequiresNew 的 EJB 方法时才启动事务。如果容器创建一个事务作为调用事务性方法的结果,当该方法完成时将关闭该事务。如果方法正常返回,容器将提交事务(除非应用程序已经要求回滚事务)。如果方法通过抛出一个异常退出,容器将回滚事务并传播该异常。如果在现有事务 T 中调用了一个方法,并且事务模式指定应该不带事务运行该方法或者在新事务中运行该方法,那么事务 T 将被暂挂,一直到方法完成,然后先前的事务 T 被恢复。

选择一种事务模式

那么我们应该为自己的 bean 方法选择哪种模式呢?对于会话 bean 和消息驱动 bean,您通常想使用 Required 来确保每个调用都被作为事务的一部分执行,但仍将允许方法作为一个更大的事务的组件。请小心使用 RequiresNew ;只有在确定自己的方法的行为应该与调用您的方法的行为分开提交时,才应该使用这种模式。 RequiresNew 一般情况下只和与系统中其它对象关系很少或没什么关系的对象(比如日志对象)一起使用。(把 RequiresNew 与日志对象一起使用比较有意义,因

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