事务管理器同步机制应用
在我目前的项目中,缓存管理器需要根据事务提交状态对应用缓存进行管理。这里对其机制应用做一个小总结。
事务管理器 javax.transaction.TransactionManager接口定义一些方法以便应用服务器管理事务边界,比如获取与当前线程绑定的事务、对事务执行resume和suspend方法。
事务 javax.transaction.Transaction接口允许对目标事务对象执行相关的事务操作。在每个全局事务创建时,Transaction对象也对应的创建出来。 事务对象可以被用来做资源获取(resource enlistment)、同步器注册(synchronizationregistration)、事务结束(transaction completion)和状态查询(statusquery)操作。
事务同步机制 事务管理器通过javax.transaction.Synchronization接口支持一种同步机制。通过对当前事务的目标Transaction对象调用registerSynchronization方法,应用服务器为该事务注册一个Synchronization对象。 事务管理器在启动2PC事务提交过程时,回调Synchronization对象的beforeCompletion方法通知有关部分事务将要被提交;事务管理器在事务已经提交或回滚后,回调Synchronization对象的afterCompletion方法通知有关部分事务的结束状态。 应用一般很少使用beforeCompletion方法,afterCompletion方法使用比较多。在我目前的项目中,就是使用afterCompletion方法来通知缓存管理器对缓存进行更新操作。
实例代码 package com.yqu.transaction; import java.lang.reflect.Method; import javax.naming.InitialContext; import javax.transaction.RollbackException; import javax.transaction.Synchronization; import javax.transaction.SystemException; import javax.transaction.Transaction; import javax.transaction.TransactionManager; public class SynchronizationSample implements Synchronization { private static int wepsphereVer; private static final String WEBSPHERE_TM_FACTORY51 = "com.ibm.ws.Transaction.TransactionManagerFactory"; private static final String WEBSPHERE_TM_FACTORY50 = "com.ibm.ejs.jts.jta.TransactionManagerFactory"; private static final String WEBSPHERE_TM_FACTORY4 = "com.ibm.ejs.jts.jta.JTSXA"; private static final String WEBLOGIC_TM_OBJNAME = "javax.transaction.TransactionManager"; private static final String JBOSS_TM_OBJNAME = "java:/TransactionManager"; private static final String TOMCAT_TM_OBJNAME = "java:comp/env/TransactionManager"; private static final String WEBSPHERE_RECOG_CLASS = "com.