package javax.transaction;
/**
* 目的:注入事务同步资源
*
* <p>该接口应用在系统级应用服务器组件上,如:持久化管理器、资源适配器、EJB和Web应用组件。
* 注册一个与当前事务相关的同步对象。事务上下文获取当前事务、事务的状态、标记事务回滚。
*
* <p>实现该接口的应用程序服务器是无状态的服务对象。相同的对象可以在任意数量的组件与线程安全中使用。
*
* <P>在标准的应用服务环境下,实现该接口的实例可以通过JDNI查找。
* 标准名称:java:comp/TransactionSynchronizationRegistry
* @author TCM
* @create 2017年11月1日下午1:53:47
* @since JTA 1.1
*/
public interface TransactionSynchronizationRegistry {
/**
* <p>返回一个不透明的对象,表示绑定到当前线程中的事务。该对象覆写hashCode,作为hashMap
* 的key使用,且允许调用者使用这个map。如果没有当前活动的事务,则返回null。
*
* <P>这个对象将返回相同的hashCode,与来自相同应用服务器下的相同事务上下文环境中任何组件执行
* 这个方法返回的对象是相同的。
*
* <P>toString方法返回一个字符串,该字符串可以知道语义,以有效地理解事务上下文。否则,这个
* 字符串没有任何意义。具体来说,对于toString的结果没有向前或向后的兼容性保证。
*
* <P>对象不一定是可序列化的。
* @since JTA 1.1
*/
Object getTransactionKey();
//增加或替换对象到资源Map。
void putResource(Object key, Object value);
//获取当前线程中事务的资源
Object getResource(Object key);
/**
* <p>注册一个同步实例。它的beforeCompletion方法将在所有的SessionSynchronazation的
* beforeCompletion回调(这些回调已在事务中进行注册)后、以及两阶段提交进程启动之前被调用。
* 类似地,afterCompletion方法将在两阶段提交完成前、以及所有的SessionSynchronization
* 与事务性afterCompletion回调前被调用。
*
* <P>在调用此方法时,绑定到当前线程的事务的事务上下文中调用beforeCompletion回调。允许的方法
* 包括方法资源,如:连接器。不允许访问用户组件(如:定时器或bean方法),这些可能改变调用者管理的数据
* 状态,同时另外一个调用者registerInterposedSynchronization清空那些可能改变的数据状态。
*
* <P>没有定义的上下文将调用afterCompletion()方法。不允许访问“用户组件”的定义。这些可以能关闭,
* 但是没有事务被执行。
*
* <p>如果该方法被调用时,不存在激活的事务上下文,则抛出IllegalStateException异常。
*
* <P>如果调用该方法后,两阶段提交进程已经开始,IllegalStateException抛出。
* @param sync Synchronization实例.
* @exception IllegalStateException 没有事务被激活
* @since JTA 1.1
*/
void registerInterposedSynchronization(Synchronization sync);
int getTransactionStatus();
void setRollbackOnly();
boolean getRollbackOnly();
}
TransactionSynchronizationRegistry源码翻译
最新推荐文章于 2021-01-05 23:51:31 发布