Spring使用JTA进行分布式事务管理

13 篇文章 0 订阅
11 篇文章 0 订阅

用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分布式事务管理就搞定了。


该博文转载自http://364434006.iteye.com/blog/981819





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值