现在的位置: 首页 > 综合 > 正文

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

2017年12月02日 ⁄ 综合 ⁄ 共 2251字 ⁄ 字号 评论关闭

下载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事务管理器类进行事务管理。

抱歉!评论已关闭.