spring :
1. 先配置JTA事务:
Java代码
<!-- 配置了JTA事务管理器 -->
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager">
<ref bean="atomikosTransactionManager" />
</property>
<property name="userTransaction">
<ref bean="atomikosUserTransaction" />
</property>
</bean>
<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="atomikosUserTransaction"
class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="0" />
</bean>
<!-- 配置了JTA事务管理器 -->
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager">
<ref bean="atomikosTransactionManager" />
</property>
<property name="userTransaction">
<ref bean="atomikosUserTransaction" />
</property>
</bean>
<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="atomikosUserTransaction"
class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="0" />
</bean>
2. 通过JNDI获取数据源:
Java代码
<bean id="sqlServerDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${jdbc.sqlserver.datasource}" />
</bean>
<bean id="oracleDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${jdbc.oracle.datasource}" />
</bean>
3. 创建 TransactionProxyFactoryBean:
Java代码
<bean id="transactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,ISOLATION_DEFAULT,timeout_3000</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="execute*">PROPAGATION_REQUIRED</prop>
<prop key="unique*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="transactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,ISOLATION_DEFAULT,timeout_3000</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="execute*">PROPAGATION_REQUIRED</prop>
<prop key="unique*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
JBOSS:
配置连接池mssql-xa-ds.xml:
Java代码
<datasources>
<xa-datasource>
<jndi-name>interfaceSqlServer</jndi-name>
<track-connection-by-tx/>
<!--<track-connection-by-tx>true</track-connection-by-tx>-->
<!--<isSameRM-override-value>false</isSameRM-override-value>-->
<!--<new-connection-sql>set autocommit=1</new-connection-sql>-->
<!--<no-tx-separate-pools>true</no-tx-separate-pools>-->
<xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
<xa-datasource-property name="ServerName">192.168.**.**</xa-datasource-property>
<xa-datasource-property name="DatabaseName">wsinterface</xa-datasource-property>
<use-java-context>false</use-java-context>
<!--<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>-->
<user-name>**</user-name>
<password>**</password>
<metadata>
<type-mapping>MSSQLSERVER2000</type-mapping>
</metadata>
<min-pool-size>1</min-pool-size>
<max-pool-size>50</max-pool-size>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
</xa-datasource>
</datasources>
<datasources>
<xa-datasource>
<jndi-name>interfaceSqlServer</jndi-name>
<track-connection-by-tx/>
<!--<track-connection-by-tx>true</track-connection-by-tx>-->
<!--<isSameRM-override-value>false</isSameRM-override-value>-->
<!--<new-connection-sql>set autocommit=1</new-connection-sql>-->
<!--<no-tx-separate-pools>true</no-tx-separate-pools>-->
<xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
<xa-datasource-property name="ServerName">192.168.**.**</xa-datasource-property>
<xa-datasource-property name="DatabaseName">wsinterface</xa-datasource-property>
<use-java-context>false</use-java-context>
<!--<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>-->
<user-name>**</user-name>
<password>**</password>
<metadata>
<type-mapping>MSSQLSERVER2000</type-mapping>
</metadata>
<min-pool-size>1</min-pool-size>
<max-pool-size>50</max-pool-size>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
</xa-datasource>
</datasources>
oracle-xa-ds.xml:
Java代码
<datasources>
<xa-datasource>
<jndi-name>interfaceOracle</jndi-name>
<track-connection-by-tx/>
<!--<track-connection-by-tx>true</track-connection-by-tx>
<isSameRM-override-value>false</isSameRM-override-value>
<new-connection-sql>set autocommit=1</new-connection-sql>
<no-tx-separate-pools>true</no-tx-separate-pools>-->
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
<xa-datasource-property name="URL">jdbc:oracle:thin:@192.168.**.**:1521:****</xa-datasource-property>
<xa-datasource-property name="User">***</xa-datasource-property>
<xa-datasource-property name="Password">***</xa-datasource-property>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<use-java-context>false</use-java-context>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
<!--<mbean code="org.jboss.resource.adapter.jdbc.vendor.OracleXAExceptionFormatter"
name="jboss.jca:service=OracleXAExceptionFormatter">
<depends optional-attribute-name="TransactionManagerService">jboss:service=TransactionManager</depends>
</mbean>-->
<min-pool-size>1</min-pool-size>
<max-pool-size>50</max-pool-size>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
</xa-datasource>
</datasources>
分享到:
相关推荐
下面我们将详细探讨如何利用Spring、Druid和AtomikosDataSource来实现这些功能。 1. **Spring框架与数据源** Spring提供了对多种数据源的支持,包括JDBC DataSources和Transaction Managers。通过Spring的配置,...
Atomikos 数据源包是专为分布式事务处理设计的一个开源框架,尤其在Spring框架中被广泛应用。这个包包含了实现高可用、可扩展性以及容错性的关键组件,以确保在多数据库环境下的数据一致性。Atomikos 提供了一个强大...
6. **易于集成**:Atomikos与Spring框架深度集成,提供了一套简单的API和配置选项,使得开发者能够在Spring应用中快速启用分布式事务支持。例如,通过使用`AtomikosDataSourceBean`,可以方便地配置Atomikos数据源并...
3. **配置数据源**:使用Atomikos提供的JNDI数据源,将数据库连接配置为参与事务管理。 4. **启用事务管理**:在需要进行分布式事务控制的Service或DAO层,使用`@Transactional`注解来标记方法,Spring会自动调用...
本项目"springboot-atomikos 多数据源统一事物管理demo"主要展示了如何在Spring Boot应用中集成Atomikos来实现多数据源的统一事务管理。 首先,我们来详细解释一下Spring Boot和Atomikos: 1. **Spring Boot**:...
3. **Spring配置**:在Spring的配置文件中,使用`jee:jta-data-source`或`jee:resource-ref`元素来引用之前创建的JNDI数据源,并配置`PlatformTransactionManager`为`org.objectweb.jotm.CurrentJOTM`。 **Atomikos...
这些文件通常包含了Atomikos的配置信息,如数据源的JNDI名称、事务超时设置等。在项目中,我们需要根据实际需求调整这些配置,确保Atomikos能够正确地管理和协调分布在不同数据源上的事务。 总的来说,Spring多数据...
在Spring配置文件中,你可以使用`jee:jndi-lookup`标签引用上述配置好的JNDI数据源,如之前1.4节所示。 ### 3. 小结 通过以上步骤,你已经在Spring中成功配置了JTA事务管理。无论是集成JOTM还是引用Tomcat内置的JTA...
2. 配置JTA Manager:在Spring的配置文件(如`applicationContext-jta.xml`)中,你需要声明JTATransactionManager,并提供相应的JNDI名,以便Spring能从应用服务器中查找并使用它。例如: ```xml ...
37.1. Using an Atomikos Transaction Manager 37.2. Using a Bitronix Transaction Manager 37.3. Using a Narayana Transaction Manager 37.4. Using a Java EE Managed Transaction Manager 37.5. Mixing XA and ...
Spring JTA 提供了与 JNDI 配合的事务管理,以及 Atomikos、Bitronix 等第三方事务管理器的集成,以支持 XA 事务。 总的来说,Spring JPA 是一个强大的 ORM 解决方案,它结合了 Spring 的便利性和 JPA 的规范,为...
3. 配置资源:设置JNDI名称,让Atomikos或Bitronix能够找到你的数据源和消息队列等资源。 4. 使用`@Transactional`注解:在需要进行分布式事务的方法上添加此注解,Spring Boot会自动处理事务的提交和回滚。 最后,...
例如,可以配置数据源的JNDI名称,以便Atomikos能够找到并管理它们。 3. **定义数据源 bean**:在Spring配置类中,通过`AtomikosDataSourceBean`创建数据源bean,每个数据源对应一个bean,以便在运行时动态选择和...
使用一个Atomikos事务管理器 ii. 32.2. 使用一个Bitronix事务管理器 iii. 32.3. 使用一个J2EE管理的事务管理器 iv. 32.4. 混合XA和non-XA的JMS连接 v. 32.5. 支持可替代的内嵌事务管理器 xii. 33. Spring集成 xiii....
Atomikos Transaction Manager Java Open Transaction Manager (JOTM) Bitronix Transaction Manager ActiveMQ Binding JAX-WS 2.x Endpoints to Jetty Contexts Java Management Extensions (JMX) 配置JMX教程 ...