Spring使用JTA进行分布式事务管理
使用SpringJTA进行分布式事务管理,需要引入第三方UserTransaction。例如:JOTM、Atomikos
JOTM?(Java Open Transaction Manager)是一个独立的开源事务管理器,它实现了 XA 协议并且与 JTA API 兼容。
Atomikos是一个公司的名字,AtomikosTransactionsEssentials是其开源的分布式事务软件包,而ExtremeTransactions是商业的分布式事务软件包。TransactionsEssentials是基于apache-license的,是JTA/XA的开源实现,支持Java Application和J2EE应用。
?
这里使用的是Atomikos作为事务管理器。
?
??将Atomikos的dist目录下的所有jar包复制到工程下
?
?? 配置DataSource:
?
?? 配置SessionFactory:
?
??
??配置JTA事务:
?
<tx:annotation-driven transaction-manager="jtaTxManager"/>?
在使用的过程中可能会出现诸多异常问题,大多是各个数据库权限问题引起的,这里整理出来些:
例如:
exception:【com.atomikos.datasource.ResourceException: Error in recovery 】
解决:
?
以SYSDBA登录SQL Plus
grant select on sys.dba_pending_transactions to 当前数据库用户;?
grant select on sys.pending_trans$ to?当前数据库用户;?
grant select on sys.dba_2pc_pending to?当前数据库用户;?
grant execute on sys.dbms_system to?当前数据库用户;?
?
?
?
到这里使用Spring的JTA分布式事务管理就搞定了。