为什么使用bean管理的事务的EJB bean充当"事务障碍"?

Ber*_*ium 6 ejb transactions java-ee bean-managed-transactions

EJB 3.1规范引用:

13.6.1 Bean管理的事务划分

容器必须使用bean管理的事务划分来管理对企业bean实例的客户端调用,如下所示.当客户端通过企业bean的一个客户端视图调用业务方法时,容器会挂起可能与客户端请求关联的任何事务.

另一方面,来自独立客户端或另一个EJB的事务使用容器管理的事务传播到bean中.从CMT的角度来看,使用CMT的bean似乎还有一个重要的特性(事务传播).

使用BMT对bean施加此限制("交易障碍")的原因是什么?

相关问题:

小智 -1

当您使用 BMT 时,您可以管理交易。您使用UserTransaction来创建和提交事务。

\n

这里的要点是UserTransaction在当前线程中创建一个事务,当您调用另一个 EJB 时,该调用将在另一个线程中执行(具有其自己的 EJB 生命周期)。

\n

在 CMT 中,容器介入处理事务的方法调用。

\n

3.1 UserTransaction接口(来自JTA规范)

\n
\n

UserTransaction.begin 方法启动一个全局事务并将该事务与调用线程相关联。事务到线程的关联由事务管理器透明地管理。

\n

不需要支持嵌套事务。\n当调用线程已与事务关联且事务管理器实现不支持嵌套事务时,\nUserTransaction.begin 方法将引发 NotSupportedException。

\n

3.2.2 完成交易

\n

TransactionManager.commit 方法完成当前与调用线程关联的事务提交方法返回后,调用线程不与事务关联。如果在线程未与任何事务上下文关联时调用 commit 方法,则 TM 会引发异常。

\n
\n

13.2.5 容器管理的划分(来自 EJB 规范)

\n
\n

每当客户端在企业 bean\xe2\x80\x99s 业务接口(或企业 bean 的无接口视图或主接口或组件接口)上调用方法时,容器就会介入该方法\调用。该插入允许容器通过开发人员设置的事务属性以声明方式控制事务划分。

\n
\n