Weblogic中几个internal的XA timeout(状态切换相关的超时) - 编程入门网
CoordinatorImpl.commit(CoordinatorImpl.java:101)
at weblogic.transaction.internal.CoordinatorImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:553)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:443)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:439)
at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:61)
at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:983)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Weblogic中几个internal的XA timeout(状态切换相关的超时)(2)时间:2010-12-26 BlogJava 走走停停又三年如果只有这几个timeout的话,那么这个事务就不应该在短短的10多分钟内被rollback.调查后发现,除了这几个上面的两个 timeout,weblogic内部还有几个跟事务状态有关的timeout,不过这几个timeout都是internal的,最终用户是无法对其进行配置的。 对于一个能正常结束的transaction,weblogic中,它会经历如下几个状态,New, PrePrepared , Logging(if logging is necessary) ,Prepared, Committed or Rollbacked. 这几个状态切换前,weblogic完成工作如下: New---->PrePrepared: 完成synchronization list的beforeCompletion(), 这个工作是以链式方式完成的,加入involve到某个global transaction中的xa resources分别驻留于server_1, server_2, server_3, server_4上,加入 server_1 充当的是coordinator, 其余三个充当的是subcoordinator。那么server_1首先会完成本地synchronization 的 beforeCompletion,然后它会发起一个RMI请求到server_2,server_2完成本地的beforeCompletion后,继续要求 server_3, server_3完成后要求server_4,如此这般,链式完成个server的工作,直到最后一个server(即sserver_4) ,server_4发现自己是最后一个,它会负责将PrePrepare OK的Ack返回给 coordinator,即server_1。 PrePrepared---->Logging: 这个阶段coordinator会以并行的方式要求每个subcoordinator完成prepare的工作,当所以subcoordinator的 prepare Ack都收到后,它会开始做它本地resource的prepare。所以XA resources都Prepare OK后,coordinator开始要求non-xa-resource(最多只有一个,emulate_2PC或LLR)去做commit.non- xa-resource完成commit后,coordinator将判断是否需要将这个global transaction记入tlog,如果需要,transaction的状态将被切换到Logging,否则到Prepared。关于 emulate_2PC和LLR的区别,这里不做过多讨论,但值得注意的是,LLR在weblogic9中引入,相对于emulate_2PC,LLR的事务可靠性更高。emulate_2PC以文件方式记录tlog,而LLR则使用数据库表方式记录。如果传统的emulate_2PC在non-xa- resource提交成功后和global transaction记入tlog前发生系统crash,那么这个事务就会产生不一致性。non-xa-resource已经提交,而其余xa- resource则处于preprared状态,最终可能会被会滚掉。而LLR采用数据库表方式,把non-xa-resource的操作、tlog记入放在一个transaction branch中,则不会发生上述情况。 Logging---->Prepared:将global transaction记入tlog,以备recover. Prepare |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |