基于UserTransaction接口的BMT完整编程?换句话说,如果我想使用BMT,是否需要比UserTransaction接口提供的服务更多的服务。
为什么这个问题?如果我使用事务管理器的不同实现(例如Bitronix TM或Atomikos)而不是容器提供的默认值,是否足以将新TM注入UserTransaction对象?
-Thanks
答案 0 :(得分:2)
这实际上仅限于应用服务器本身允许的内容;即如果它明确支持替换事务管理器。
事务管理的真正艺术是通过将事务资源(DataSource连接,JMS Sessions,JPA EntityManagers等)与Synchronization对象一起包装并使用当前事务注册它们来容纳事务资源(DataSource连接,JMS会话,JPA实体管理器等)。 Transaction或TransactionSynchronizationRegistry
容器实现Synchronization
个对象,TransactionManager实现Transaction
和TransactionSynchronizationRegistry
个对象。两者之间的协调是在交易运行时为您提供实际管理的原因。
BMT和CMT只是告诉容器启动/停止交易的另一种方法。在某些方面,术语“Bean-Managed”是错误的,因为每个兼容的app服务器中的UserTransaction
将由容器实现,因此它仍然是执行工作的容器。 “容器管理”也有点误导,因为仍然是bean开发人员决定何时启动/停止事务,它只是以声明方式和编程方式完成。这些功能的最准确描述是程序化管理事务和声明管理事务。在所有情况下,它仍然是与容器以及容器和事务管理器进行所有工作的bean。
所有这一切都说你可能仍然可以更改事务管理器,OpenEJB和TomEE支持它,但它不会像你尝试的那样工作。请咨询您的供应商,看看是否可行。
答案 1 :(得分:0)
可能没有完全回答您的问题,但如果使用BMT,您也可以使用资源本地事务管理器。在这种情况下,您不会使用(注入)UserTransaction接口。
请注意,如果没有正在通过所述UserTransaction接口启动的事务,这只是合法的。