JFox(J2EE应用服务器开源项目)

JFox Connection 的生命周期


(by huihoo.org JFox项目组young_yy@hotmail.com)

图例:



概念:

在事务环境中,共有四种Connection
1、ClientConnection,是返回给用户使用的 Connection
2、XAConnection,起协调作用,负责生成和管理 ClientConnection,TXConnection
3、TXConnection,负责参与事务处理,和 xid 一一对应,不为客户端所见
4、Physical connection,实际的物理连接,封装最下层的 IO 操作

四种Connection之间的协调:

1.首先通过 XADataSource.getXAConnection 时,返回一个 XAConnection,其中封装有一个物理连接
2.通过XAConnection. getConnection 可以返回多个 ClientConnection,在没有参与事务的情况下,该ClientConnection 通过 XAConnection的物理连接直接访问数据库
3.在 Transaction.enlistXAResource 的时候, 也就是参与事务处理之后,XAConnection 会新建一个 TXConection 相对应,并标记该XAConnection已经处在事务中,此时,ClientConnection不能再进行与事务相关的操作(如:setAutoCommit,commit,rollback等),在事务管理器进行事务操作的时候,是直接由XAConnection转交给 TXConnection 来完成,未经过ClientConnection,所以此时即使关闭ClientConnection,也是没关系的,最后TXConnection通过物理连接完成具体操作。
4.Transaction.commit 之后,TXConnection 即销毁,XAConnection标记不再处于事务环境中,在没有明确关闭ClientConnection 的情况下,它仍然可以被使用,只是此时 XAConnection 会直接调用物理连接来操作,回复到没有事务的状态。