- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何正确处理EJB事务
如何正确处理EJB事务
ejb 中如何正确处理事务 发表时间: 2007-11-24 15:42
一、前言
在语音门户的开发过程中,出现了在发生异常的情况下事务没有正确会滚,导致数据的不一致型,在分析过程中发现是由于在处理异常方法不正确导致,所抛出的异常未能使事物回滚,那么怎样处理异常才能正确使事物回滚,下面将就EJB中的事务管理做出一些说明
二、EJB中事务处理的两种方式
在EJB中处理事务有两种方式,一种是由容器管理事务,一种是由Bean管理事务,在任何Bean中都可以使用容器管理事务,会话Bean和消息驱动Bean可以使用Bean管理事务,实体Bean不能使使用Bean管理事务。
(一)、容器管理事务
容器管理事务简化了开发,因为企业Bean不用编码来显式制定事务界限。代码不包括开始结束事务的语句。典型的,容器会在一个企业Bean的方法被调用前立即开始一个事务,在这个方法退出以前提交这个事务。每个方法都关联一个事务。在一个方法中不允许嵌套或多个的事务存在。容器管理事务不需要所有的方法都关联事务。当部署一个Bean时,通过设定部署描述符中的事务属性来决定方法是否关联事务和如何关联事务
1、 事务的属性
一个事务的属性控制了事务的使用范围。图 1-1说明了为什么控制事务的范围很重要。图中,method-A开始一个事务然后调用Bean-2中的method-B.它运行在method-A开始的事务中还是重新执行一个新的事务?结果要看method-B中的事务属性
图 1-1
一个事务属性可能有下面的属性之一:
?☆ Required
??☆ RequiresNew
??☆ Mandatory
??☆ NotSupported
??☆ Supports
??☆ Never
Required
??如果客户端正在一个运行的事务中调用一个企业Bean的方法,这个方法就在这个客户端的事务中执行。如果客户端不关联一个事务,这个容器在运行该方法前开始一个新的事务。
?Required属性在许多事务环境中可以很好的工作,因此你可以把它作为一个默认值,至少可以在早期开发中使用。因为事务的属性是在部署描述符中声明的,在以后的任何时候修改它们都很容易。
RequiresNew
??如果客户端在一个运行的事务中调用企业Bean的方法,容器的步骤是:
??1.挂起客户端的事务
??2.开始一个新的事务
??3.代理方法的调用
??4.方法完成后重新开始客户端的事务
??如果客户端不关联一个事务,容器运行这个方法以前同样开始一个新的事务。如果你想保证该方法在任何时候都在一个新事物中运行,使用RequiresNew属性。
Mandatory
??如果客户端在一个运行的事务中调用企业Bean的方法,这个方法就在客户端的事务中执行。如果客户端不关联事务,容器就抛出TransactionRequiredException 异常。
如果企业Bean的方法必须使用客户端的事务,那么就使用Mandatory属性。
NotSupported
??如果客户端在一个运行的事务中调用企业Bean的方法,这个容器在调用该方法以前挂起客户端事务。方法执行完后,容器重新开始客户端的事务。
??如果客户端不关联事务,容器在方法运行以前不会开始一个新的事务。为不需要事务的方法使用NotSupported属性。因为事务包括整个过程,这个属性可以提高性能。
Supports
??如果客户端在一个运行的事务中调用企业Bean的方法,这个方法在客户端的事务中执行,如果这个客户端不关联一个事务,容器运行该方法前也不会开始一个新的事务。因为该属性使方法的事务行为不确定,你应该谨慎使用Supports属性。
Never
??如果客户端在一个运行的事务中调用企业Bean的方法,容器将抛出RemoteException异常。如果这个客户端不关联一个事务,容器运行该方法以前不会开始一个新的事务。
Summary of Transaction Attributes(事务属性概要)
??表 1-1 列出了事务属性的影响。事务T1和T2都被容器控制。T1是调用企业Bean方法的客户端的事务环境。在大多数情况下,客户端是其它的企业Bean。T2是在方法执行以前容器启动的事务。在表 1-1中,“None”的意思是这个商业方法不在容器控制事务中执行。然而,该商业方法中的数据库操作可能在DBMS管理控制的事务中执行。
Setting Transaction Attributes (设定事务属性)
??因为事务属性被保存在配置描述符中,他们会在J2EE应用程序开发的几个阶段被改变:创建企业Bean,应用程序装配和部署。然而, 当创建这个Bean的时候指定它的属性是
原创力文档


文档评论(0)