通常事务是实现业务逻辑很重要的部分. 而JavaEE一个重要的功能就是提供声明性的事务管理, 支持自动的提交和回滚. 整个过程只需要配置, 不需要写一行代码, 极大的简化了事务管理. 但同时JavaEE也定义了Java Transaction API (JTA), 这样就容许我们在应用层面可以实现一些更复杂的事务控制.
JTA包括涉及到事务的三个角色, 例如Application, Server, 事务中的Resource.
JTA包括涉及到事务的三个角色, 例如Application, Server, 事务中的Resource.
Application发起和提交事务, 即定义事务的边界.
Server监听事务的状态,处理事务流程.Resource即是事务处理的资源, 例如我们熟悉的JDBC, JMS等.
Weblogic提供一个单例weblogic.transaction.TransactionHelper, 我们可以使用这个Helper类得到当前的TransactionManager,Transaction.
从此入手, 我们可以就可以调用JTA提供的接口.
例如在服务器侧(一个EJB事务内)挂起或继续当前事务.
例如:TransactionHelper transactionHelper = TransactionHelper.getTransactionHelper();
Transaction tx = transactionHelper.getTransaction();
if (null != tx && tx.getStatus() == Status.STATUS_ACTIVE){
transactionHelper.getTransactionManager().suspend();
//...
transactionHelper.getTransactionManager().resume(tx);
}
另外我们通过JTA也可以来在事务提交前后加入自己客户化的一些同步操作.
这个是通过注册 javax.transaction.Synchronization的类来实现. 这个interface有两个方法:
afterCompletion(int status);beforeCompletion();
TransactionStatistic sync=new TransactionStatistic();//implements Synchronization
Transaction tx = TransactionHelper.getTransactionHelper().getTransaction();
tx.registerSynchronization(sync);