TransactionSynchronizationRegistry的目的是什么?

时间:2011-07-14 13:35:37

标签: java-ee ejb jta

根据JTA规范:

  

此接口供系统级应用程序服务器使用   诸如持久性管理器,资源适配器等组件   作为EJB和Web应用程序组件。这提供了能力   注册具有特殊排序语义的同步对象,   将资源对象与当前事务关联起来,得到   当前事务的事务上下文,获取当前事务   事务状态,并标记当前事务以进行回滚。

此外:

  

getResource()和putResource()方法的用户是一个库   代表a管理特定于事务的数据的组件   呼叫者。调用者提供的特定于事务的数据不是   立即刷新到一个交易登记的资源,但相反   缓存。缓存的数据存储在与事务相关的数据中   与...的零或一对一关系的结构   调用者的事务上下文。

然而我仍然感到困惑。

首先,“[...]提供了使用特殊排序语义注册同步对象的能力”意味着如何设置排序?

那么,有哪些用例需要“将资源对象与当前事务关联起来”?

1 个答案:

答案 0 :(得分:3)

  

首先,“[...]提供了注册的能力   具有特殊排序语义的同步对象“意思是如何   是否可以设置订购?

registerInterposedSynchronization javadoc中解释了“特殊排序语义”,它试图解释这些监听器是如何相对于Transaction.registerSynchronization触发的。

  

然后,有哪些用例需要“关联”   具有当前事务的资源对象“?

putResource / getResource允许调用者存储“事务本地”对象。

例如,JPA容器在使用时可能会注册InterposedSynchronization。有状态会话bean可能在SessionSynchronization.beforeCompletion期间更新实体。 EntityManager会使用putResource将实体存储在当前事务中,然后在Synchronization.beforeCompletion期间将数据刷新到数据库,并保证在之后运行。