使用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:
<bean id="ds1" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<property name="uniqueResourceName">
<value>oracle/ds1</value>
</property>
<property name="xaDataSourceClassName">
<value>oracle.jdbc.xa.client.OracleXADataSource</value>
</property>
<property name="xaProperties">
<props>
<prop key="URL">jdbc:oracle:thin:@localhost:1521:orcl</prop>
<prop key="user">test1</prop>
<prop key="password">test1</prop>
</props>
</property>
<property name="poolSize">
<value>2</value>
</property>
<property name="maxPoolSize">
<value>30</value>
</property>
</bean>
配置SessionFactory:
<bean id="oracleSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="ds1"></property>
<property name="packagesToScan" value="org/liny/entity"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
</props>
</property>
</bean>
配置JTA事务:
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"/>
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown">
<value>true</value>
</property>
</bean>
<bean id="jtaTxManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="atomikosUserTransaction"></property>
<property name="transactionManager" ref="atomikosTransactionManager"></property>
</bean>
<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分布式事务管理就搞定了。
分享到:
相关推荐
atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA) 结合spring 和durid进行配置,
spring + JTA + JOTM实现分布式事务, 高大上的技术
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...
Spring Boot+Druid+Mybatis实现JTA分布式事务
spring+hibernate+jta 分布式事务管理Demo源码(无jar包) 博文链接:https://momoko8443.iteye.com/blog/190994
Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis
spring + JTA + atomikos实现分布式事务, 高大上的技术
代码下载下来,想要了解更多相关内容可以看http://www.cnblogs.com/shamo89/p/7307961.html
2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...
分布式事务操作之Spring+JTA+mybatis源码
Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源,分别向两个不同的数据里面插入数据同时失败和成功,调用接口方式原理一样。
介绍分布式事务的定义、原则和实现原则,介绍使用Spring框架实现分布式事务的几种方式,包括使用JTA、Spring事务同步、链式事务等,并通过实战介绍其实现。除此以外还介绍了一些分布式事务相关的技术,如幂等性、...
SpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatis
分布式数据源,数据源的动态寻找,分布式事务JTA实现-spring-jta-mybatis
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1836707
NULL 博文链接:https://injavawetrust.iteye.com/blog/2308552
ByteTCC Transaction Manager旨在提供一个兼容JTA的基于TCC机制的分布式事务管理器。兼容JTA,可以很好的与EJB、Spring等容器(本文档下文说明中将以Spring容器为例)进行集成。