spring集成jotm实现JTA分布式事务管理

下载jotm-2.0.11.MR5,将其lib下的jar包引入到project 的类路径下:


在applicationContext.xml中配置如下:

	<!-- jotm实体类 -->
	<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
	
	<!-- orcle数据源 -->
	<bean id="oracleJta" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">  
		<property name="dataSource">
			<bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
				<property name="transactionManager" ref="jotm"/>
                <property name="driverName" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@168.9.202.49:1521:test"/>
                <property name="user" value="orac"/>
                <property name="password" value="orac"/>
            </bean>
        </property>
        <property name="user" value="orac"/>
        <property name="password" value="orac"/>
	</bean>
	<!-- mysql数据源 -->
	<bean id="mysqlJta" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">  
		<property name="dataSource">
			<bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
				<property name="transactionManager" ref="jotm"/>
                <property name="driverName" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:MySQL://localhost:3309/test"/>
                <property name="user" value="root"/>
                <property name="password" value="mysql"/>
            </bean>
        </property>
        <property name="user" value="root"/>
        <property name="password" value="mysql"/>
	</bean>
	
	<!-- jta事务管理器 -->
	<bean id="jtaManager" class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="userTransaction" ref="jotm"/> <!-- 指定userTransaction属性引用jotm本地实例 -->
	</bean>
	
	<!-- JTA事务传播特性 -->
    <tx:advice id="txAdviceJta" transaction-manager="txManager">
        <tx:attributes>
         <tx:method name="Jta*"     isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="*" read-only="true"/> 
        </tx:attributes>
    </tx:advice>
	
	<aop:config>
        <aop:advisor pointcut="execution(* com.xxxxl.service.impl..*(..))"   advice-ref="txAdviceJta" />
    </aop:config>
	
	<bean id="testMysqlDao" class="com.xxxxl.TestMysqlDaoImpl" scope="prototype">
        <property name="dataSource" ref="mysqlJta"></property>
    </bean>
    <bean id="testOracleDao" class="com.xxxxl.testOracleDaoImpl" scope="prototype">
        <property name="dataSource" ref="oracleJta"></property>
    </bean>

这就将事务进行了配置管理,如果想实现更为灵活更为细小的事务管理那么则不用配置事务的传播特性(<tx:advice>标签中的配置)

和控制反转(<aop:config>标签中的部分),需要在代码中通过DataSourceTransactionManager事务管理器类进行事务管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值