Database Transaction Problem

我的问题是 ejb 的transaction can use in two database. 在我的理解中应该不能对多database 进行事务促理。if need this function ,how about your to implemnts this part.
thanks you very much.

你所说的就是所谓的distributed transaction中的其中的一种scenario。

在讲述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而定义的一样.

先写这么多

if like that ,how will can invoke the connection in two database.
please give me some example ok.thanks you.

是不是,direct set other datasource ,and direct invoke it in our ejb ,they will auto support the transaction???

是的,要跨数据库实现事务支持,EJB不需做什么,数据库只是不同的JNDI名称而已,EJB才是真正屏蔽了数据库。

以前有人写文章说Hibernate屏蔽了数据库,那是夸大其词,对不起,我不想搞争论,别跟其它非专业贴,否则我都不敢发言了。

to banq,

呵呵,大哥看样子是怕人家给你扣上一顶爱与人争论的帽子!
其实不必太在意了,问题只会越争越清楚的,该争的还是要去争的

:P

前一阵子banq兄才提供的一篇好文章
里面就描述的非常清楚了
http://jroller.com/page/pyrasun/?anchor=xa_exposed

其实作者对XA这个系列总共有三篇
这是第一篇
如果只是应用程式开发者
第一篇就很够用了
二三篇可以不用看了
希望对你有帮助

再提外话
EJB的spec中
Chapter 17都是在讲这个主题
17.2.1就是在讲Update of Multiple Databases
你可以参考看看

to popcorny,

谢谢哥们的reference,我也就不需要继续絮絮叨叨,长篇累牍的写下去了

:P