Database Transaction Problem

04-03-24 abayi

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

thanks you very much.

jrog
2004-03-24 17:23

你所说的就是所谓的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而定义的一样.

先写这么多

abayi
2004-03-24 20:02

if like that ,how will can invoke the connection in two database.

please give me some example ok.thanks you.

abayi
2004-03-24 20:14

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

banq
2004-03-24 20:42

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

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

2Go 1 2 下一页