Database Transaction Problem
thanks you very much.
在讲述distributed transaction之前,必须要知道以下几个概念:
1. Resource Manager(RM)
2. Transaction Manager(TM)
3. two phase commit protocol(2PC)
4. Resource Manager Adapter(RMA)
5. java XA interface(XA)
所谓Resource Manager,顾名思义就是用来管理resource的. RDBMS, Messaging Server etc.都是Resource Manager. Oracle/MS Sql/DB2 是RDBMS具体的实现了. MQ则是Messaging server的具体实现了. 如果要在我们的application中实现distributed transaction, 首先这些Resource Manager必须要提供Transaction control的功能(不要想当然的以为所有的DB都提供transaciton的服务的,My Sql 4.0以下版本就不提供TX的服务).(注意:resource manager并非仅仅只是包含RDBMS,messaging server,一些Mainframe的file System也可以称之为RM的)
Resource Manager Adapter呢,则是和这些resource manager之间通信的一种mechnism. 具体的说就是那些JDBC/ODBC driver, JMS driver等等的东西了
Transaction Manager则是一个Broker,他的功能是协调参与一个TX的不同RMs之间的工作. 是一些platform/language dependent的API. CORBA/J2EE 中都有相应的API可以调用.对于CORBA,不同的vendor其API都是不一样的(不能确定);而对于J2EE来说,就相对简单了. J2EE中 JTA\JTS中的UserTransaction Interface就是这样的TransactionManager.
2PC则是为了实现distributed Transaction而制定的一种工业标准(也是一种事实上的标准了). TM就是通过2PC的协议与被其管理的RM通讯实现distributed tx.
XA则是J2EE根据2PC protocol而定义的interface,就好象javax.servlet.http package下定义的那些interface是根据http protocol而定义的一样.
先写这么多
以前有人写文章说Hibernate屏蔽了数据库,那是夸大其词,对不起,我不想搞争论,别跟其它非专业贴,否则我都不敢发言了。
呵呵,大哥看样子是怕人家给你扣上一顶爱与人争论的帽子!
其实不必太在意了,问题只会越争越清楚的,该争的还是要去争的
:P
其实作者对XA这个系列总共有三篇
这是第一篇
如果只是应用程式开发者
第一篇就很够用了
二三篇可以不用看了
希望对你有帮助
谢谢哥们的reference,我也就不需要继续絮絮叨叨,长篇累牍的写下去了
:P