编程BMT - UserTransaction

时间:2012-01-02 12:09:03

标签: ejb-3.0 ejb-3.1 atomikos

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

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

-Thanks

2 个答案:

答案 0 :(得分:2)

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

事务管理的真正艺术是通过将事务资源(DataSource连接,JMS Sessions,JPA EntityManagers等)与Synchronization对象一起包装并使用当前事务注册它们来容纳事务资源(DataSource连接,JMS会话,JPA实体管理器等)。 TransactionTransactionSynchronizationRegistry

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

BMT和CMT只是告诉容器启动/停止交易的另一种方法。在某些方面,术语“Bean-Managed”是错误的,因为每个兼容的app服务器中的UserTransaction将由容器实现,因此它仍然是执行工作的容器。 “容器管理”也有点误导,因为仍然是bean开发人员决定何时启动/停止事务,它只是以声明方式和编程方式完成。这些功能的最准确描述是程序化管理事务和声明管理事务。在所有情况下,它仍然是与容器以及容器和事务管理器进行所有工作的bean。

所有这一切都说你可能仍然可以更改事务管理器,OpenEJB和TomEE支持它,但它不会像你尝试的那样工作。请咨询您的供应商,看看是否可行。

答案 1 :(得分:0)

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

请注意,如果没有正在通过所述UserTransaction接口启动的事务,这只是合法的。