WEB开发网
开发学院软件开发Java Weblogic中几个internal的XA timeout(状态切换相关... 阅读

Weblogic中几个internal的XA timeout(状态切换相关的超时)

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示: 如果只有这几个timeout的话,那么这个事务就不应该在短短的10多分钟内被rollback.调查后发现,Weblogic中几个internal的XA timeout(状态切换相关的超时)(3),除了这几个上面的两个 timeout,weblogic内部还有几个跟事务状态有关的timeout,而

如果只有这几个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中,则不会发生上述情况。

上一页  1 2 3 4 5  下一页

Tags:Weblogic internal XA

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接