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

在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();
}
好像是事务嵌套的问题,但我应该如何作了?

客户端事务管理和服务器端事务管理的一点区别是,在客户端,启动事务要向远程服务器端的事务管理器注册该事务;而服务器端的事务可能只要在本地注册就可以了。
至于事务嵌套问题,目前绝大多数事务管理器都不支持嵌套事务。碰到这种情况,一,使用CMT,CMT会自动地挂起原来的事务上下文,启动新事务,或就在原来的事务上下文中执行。二,另一种方法是判断当前的事务上下文的状态(getStatus()),如果已经启动了一个事务,就把他挂起,另行启动一个新事务。

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

当然透明

能说明下客户端怎样向远程服务注册事务的吗,然后具体的使用