j2ee中用户管理事务边界的问题?

04-07-25 difficult
在ejb中使用用户管理事务边界的时候,我们可以通过如下方式

UserTransaction tx =(UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");

tx.begin()

...

tx.commit();

但是用SessionContext.getUserTransaction()也能得到UserTransaction,也可以按上述方式控制控制事务边界,不知道这两种方式的UserTansaction有什么区别?在weblogic上看第一种方式的对象类型为weblogic.transaction.internal.ClientTransactionManagerImpl,而第二种类型为weblogic.transaction.internal.ServerTransactionManagerImpl。

还有在用用户管理事务边界时,如方法m1,m2用了用户管理事务边界,在m3中如何将m1和m2作为原子操作?

下面的方式会出错

m3(){

UserTransaction tx =(UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");

tx.begin()

m1();

m2();

tx.commit();

}

好像是事务嵌套的问题,但我应该如何作了?

    

mep
2004-07-25 10:42
客户端事务管理和服务器端事务管理的一点区别是,在客户端,启动事务要向远程服务器端的事务管理器注册该事务;而服务器端的事务可能只要在本地注册就可以了。

至于事务嵌套问题,目前绝大多数事务管理器都不支持嵌套事务。碰到这种情况,一,使用CMT,CMT会自动地挂起原来的事务上下文,启动新事务,或就在原来的事务上下文中执行。二,另一种方法是判断当前的事务上下文的状态(getStatus()),如果已经启动了一个事务,就把他挂起,另行启动一个新事务。

difficult
2004-07-25 13:13
在客户端,启动事务要向远程服务器端的事务管理器注册该事务。那这种注册是透明的吗?

mep
2004-07-25 19:20
当然透明

fuguan2000
2006-08-10 06:31
能说明下客户端怎样向远程服务注册事务的吗,然后具体的使用

猜你喜欢