shenli
2003-11-06 21:26

J2EE的RMI就是不也是基于IIOP,和CORBA差不多

汪汪
2003-11-07 17:48

在JBoss里,你提到的应用是这样实现的:

首先,你要明确:你用到到的那几个bean位于同一个容器中(跨容器的事务传播JBoss3.x不支持,JBoss4.x我不懂),那么这几个bean的调用将位于同一个线程中。

而事务管理器TxManager使用了ThreadLocal类型的变量来保存特定线程的事务信息(包括事务对象),这样那几个位于同一线程的调用就共有了同一个事务对象,也就是说被纳入到同一个事务了。就着么简单!因为在取得资源时判断当前是否有事务的方式,就是判断TxManager中的ThreadLocal变量是否保存了事务对象。

而对于客户端调用EJB方法时的事务传播,因为事务对象其实是存在于容器中的,所以客户端只需在调用EJB方法时顺带捎上事务的全局ID,容器根据改ID取出相应的事务对象,就将客户端和EJB方法纳入到同一个事务中了。这其实是一种变形的跨JVM传播事务,但不是真正的跨JVM传播事务。

Horser
2003-11-07 20:10

其实J2EE容器隐藏了很多细节,跨VM或数据库之间的事务性保证是由内部的资源管理器对参与事务的每个资源都进行征用登记,让我们感觉不到他的存在,显得很神奇似的.

大家可参考年初的DevelopeWorks专刊第二期上的文章,里面有很详细的描述.

starfeng
2003-12-05 20:52

Transaction接口中的方法分为:enlistResource和registerSynchronization

这里面的Resource和Synchronization有什么区别.

sunlight007
2004-01-10 09:55

请问Jboss中如何在客户端(不同的VM)中启动Transaction? 我一直没有成功