根据JTA规范:
此接口供系统级应用程序服务器使用 诸如持久性管理器,资源适配器等组件 作为EJB和Web应用程序组件。这提供了能力 注册具有特殊排序语义的同步对象, 将资源对象与当前事务关联起来,得到 当前事务的事务上下文,获取当前事务 事务状态,并标记当前事务以进行回滚。
此外:
getResource()和putResource()方法的用户是一个库 代表a管理特定于事务的数据的组件 呼叫者。调用者提供的特定于事务的数据不是 立即刷新到一个交易登记的资源,但相反 缓存。缓存的数据存储在与事务相关的数据中 与...的零或一对一关系的结构 调用者的事务上下文。
然而我仍然感到困惑。
首先,“[...]提供了使用特殊排序语义注册同步对象的能力”意味着如何设置排序?
那么,有哪些用例需要“将资源对象与当前事务关联起来”?
答案 0 :(得分:3)
首先,“[...]提供了注册的能力 具有特殊排序语义的同步对象“意思是如何 是否可以设置订购?
registerInterposedSynchronization javadoc中解释了“特殊排序语义”,它试图解释这些监听器是如何相对于Transaction.registerSynchronization触发的。
然后,有哪些用例需要“关联” 具有当前事务的资源对象“?
putResource / getResource允许调用者存储“事务本地”对象。
例如,JPA容器在使用时可能会注册InterposedSynchronization。有状态会话bean可能在SessionSynchronization.beforeCompletion期间更新实体。 EntityManager会使用putResource将实体存储在当前事务中,然后在Synchronization.beforeCompletion期间将数据刷新到数据库,并保证在之后运行。