0

BMT的完整编程是否基于UserTransaction接口?换句话说,如果我想使用 BMT,是否存在需要比 UserTransaction 接口提供的服务更多的服务的情况。

为什么这么问?如果我使用不同的事务管理器实现(例如 Bitronix TM 或 Atomikos)而不是容器提供的默认值,那么将新的 TM 注入 UserTransaction 对象就足够了吗?

-谢谢

4

2 回答 2

2

这实际上仅限于应用服务器本身允许的内容;即,如果它明确支持替换事务管理器。

事务管理的真正艺术是容器向 TransactionManager 注册事务资源(DataSource 连接、JMS 会话、JPA EntityManager 等),方法是用同步对象包装它们,并通过TransactionTransactionSynchronizationRegistry将它们注册到当前事务中

容器实现Synchronization对象,TransactionManager 实现TransactionTransactionSynchronizationRegistry对象。两者之间的协调是在事务运行时为您提供实际管理的原因。

BMT 和 CMT 只是告诉容器启动/停止事务的替代方法。在某些方面,术语“Bean-Managed”是错误的,因为UserTransaction每个兼容的应用程序服务器都将由容器实现,因此它仍然是容器在工作。“容器管理”也有点误导,因为它仍然是 bean 开发人员决定何时启动/停止事务,它只是以声明方式与编程方式完成。对这些特性最准确的描述是程序化管理事务和声明式管理事务。在所有情况下,它仍然是 bean 与容器对话,容器和事务管理器完成所有工作。

尽管如此,您仍然可以更改事务管理器,OpenEJB 和 TomEE 支持它,但是它不会以您尝试的方式工作。请咨询您的供应商,看看这是否可行。

于 2012-01-02T18:50:22.880 回答
0

也许不能完全回答您的问题,但如果使用 BMT,您也可以使用资源本地事务管理器。在这种情况下,您不会使用(注入的)UserTransaction 接口。

请注意,只有在没有通过上述 UserTransaction 接口启动的事务正在进行的情况下,这才是合法的。

于 2012-01-02T14:28:17.330 回答