首先需要[安装可以使用JTA的组件,可使用的组件包括atomikos、JBossTS、openEJB
以atomikos,采用Sybase数据库进行说明:
(1).atomikos配置
jta.properties,配置方式请查阅atomikos的文档
(2).spring配置
<tx:jta-transaction-manager />
<tx:annotation-driven />
<!-- db -->
<bean id= "atii.dataSource" class= "org.springframework.jndi.JndiObjectFactoryBean" >
<property name= "jndiName" value= "jdbc/atii" />
<property name= "resourceRef" value= "${isResourceRef}" />
</bean>
<!-- jms sender -->
<bean id= "atii.jmsConnFactory" class= "org.springframework.jndi.JndiObjectFactoryBean" >
<property name= "jndiName" value= "jms/topicConnFactory" />
<property name= "resourceRef" value= "${isResourceRef}" />
</bean>
<bean id= "atii.jmsTopic" class= "org.springframework.jndi.JndiObjectFactoryBean" >
<property name= "jndiName" value= "jms/topic" />
<property name= "resourceRef" value= "${isResourceRef}" />
</bean>
<bean id= "atii.jmsTemplate" class= "org.springframework.jms.core.JmsTemplate" >
<property name= "connectionFactory" ref= "atii.jmsConnFactory" />
<property name= "defaultDestination" ref= "atii.jmsTopic" />
<property name= "sessionTransacted" value= "true" />
</bean>
<!-- jms receiver -->
<bean id= "atii.messageListener" class= "org.springframework.jms.listener.adapter.MessageListenerAdapter" >
<property name= "delegate" ref= "atii.systemInfoService" />
<property name= "defaultListenerMethod" value= "receive" />
</bean>
<bean id= "atii.messageListenerContainer" class= "org.springframework.jms.listener.DefaultMessageListenerContainer" >
<property name= "connectionFactory" ref= "atii.jmsConnFactory" />
<property name= "destination" ref= "atii.jmsTopic" />
<property name= "messageListener" ref= "atii.messageListener" />
<property name= "autoStartup" value= "true" />
<property name= "transactionManager" ref= "transactionManager" />
<property name= "sessionTransacted" value= "true" />
</bean>
(3).TOMCAT配置
contex.xml配置
<Transaction factory="com.atomikos.icatch.jta.UserTransactionFactory" />
<!-- 数据库配置 要使用实现了XADataSource的JDBC驱动-->
<Resource name= "jdbc/atii" auth= "Container" type= "com.atomikos.jdbc.AtomikosDataSourceBean"
factory= "com.atomikos.tomcat.BeanFactory" uniqueResourceName= "jdbc/atii"
xaDataSourceClassName= "com.sybase.jdbc3.jdbc.SybXADataSource"
testQuery= "select 1"
minPoolSize= "1"
maxPoolSize= "2"
xaProperties.databaseName= "atii"
xaProperties.serverName= "10.233.7.186"
xaProperties.portNumber= "5000"
xaProperties.user= "login_name"
xaProperties.password= "password"
xaProperties.JCONNECT_VERSION= "6.05"
xaProperties.CHARSET= "cp936"
xaProperties.DYNAMIC_PREPARE= "true" />
<!-- 消息队列配置 需要使用实现了XAConnectionFactory"的连接工厂-->
<Resource name= "jms/topicConnFactory" auth= "Container" type= "com.atomikos.jms.AtomikosConnectionFactoryBean"
factory= "com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory" uniqueResourceName= "jms/topicConnFactory"
xaConnectionFactoryClassName= "org.apache.activemq.ActiveMQXAConnectionFactory"
xaProperties.brokerURL= "tcp://localhost:61616"
maxPoolSize= "3"
minPoolSize= "1" />
<Resource name= "jms/topic" auth= "Container" type= "org.apache.activemq.command.ActiveMQTopic"
factory= "org.apache.naming.factory.BeanFactory"
physicalName= "testTopic" />
在catalina.properties的common.loader中加入atomikos-lifecycle-listener.jar,atomikos-tomcat-beanfactory.jar,atomikos-transactions-3.7.0.jar,以及其他相关jar文件;
加入jta.properties所在路径
server.xml配置
<Listener className= "com.atomikos.tomcat.AtomikosLifecycleListener" />
(4).sybase相关配置
sp_role "grant",dtm_tm_role,login_name
sp_configure 'enable DTM',1
sp_configure 'enable xact coordination',1
以atomikos,采用Sybase数据库进行说明:
(1).atomikos配置
jta.properties,配置方式请查阅atomikos的文档
(2).spring配置
<tx:jta-transaction-manager />
<tx:annotation-driven />
<!-- db -->
<bean id= "atii.dataSource" class= "org.springframework.jndi.JndiObjectFactoryBean" >
<property name= "jndiName" value= "jdbc/atii" />
<property name= "resourceRef" value= "${isResourceRef}" />
</bean>
<!-- jms sender -->
<bean id= "atii.jmsConnFactory" class= "org.springframework.jndi.JndiObjectFactoryBean" >
<property name= "jndiName" value= "jms/topicConnFactory" />
<property name= "resourceRef" value= "${isResourceRef}" />
</bean>
<bean id= "atii.jmsTopic" class= "org.springframework.jndi.JndiObjectFactoryBean" >
<property name= "jndiName" value= "jms/topic" />
<property name= "resourceRef" value= "${isResourceRef}" />
</bean>
<bean id= "atii.jmsTemplate" class= "org.springframework.jms.core.JmsTemplate" >
<property name= "connectionFactory" ref= "atii.jmsConnFactory" />
<property name= "defaultDestination" ref= "atii.jmsTopic" />
<property name= "sessionTransacted" value= "true" />
</bean>
<!-- jms receiver -->
<bean id= "atii.messageListener" class= "org.springframework.jms.listener.adapter.MessageListenerAdapter" >
<property name= "delegate" ref= "atii.systemInfoService" />
<property name= "defaultListenerMethod" value= "receive" />
</bean>
<bean id= "atii.messageListenerContainer" class= "org.springframework.jms.listener.DefaultMessageListenerContainer" >
<property name= "connectionFactory" ref= "atii.jmsConnFactory" />
<property name= "destination" ref= "atii.jmsTopic" />
<property name= "messageListener" ref= "atii.messageListener" />
<property name= "autoStartup" value= "true" />
<property name= "transactionManager" ref= "transactionManager" />
<property name= "sessionTransacted" value= "true" />
</bean>
(3).TOMCAT配置
contex.xml配置
<Transaction factory="com.atomikos.icatch.jta.UserTransactionFactory" />
<!-- 数据库配置 要使用实现了XADataSource的JDBC驱动-->
<Resource name= "jdbc/atii" auth= "Container" type= "com.atomikos.jdbc.AtomikosDataSourceBean"
factory= "com.atomikos.tomcat.BeanFactory" uniqueResourceName= "jdbc/atii"
xaDataSourceClassName= "com.sybase.jdbc3.jdbc.SybXADataSource"
testQuery= "select 1"
minPoolSize= "1"
maxPoolSize= "2"
xaProperties.databaseName= "atii"
xaProperties.serverName= "10.233.7.186"
xaProperties.portNumber= "5000"
xaProperties.user= "login_name"
xaProperties.password= "password"
xaProperties.JCONNECT_VERSION= "6.05"
xaProperties.CHARSET= "cp936"
xaProperties.DYNAMIC_PREPARE= "true" />
<!-- 消息队列配置 需要使用实现了XAConnectionFactory"的连接工厂-->
<Resource name= "jms/topicConnFactory" auth= "Container" type= "com.atomikos.jms.AtomikosConnectionFactoryBean"
factory= "com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory" uniqueResourceName= "jms/topicConnFactory"
xaConnectionFactoryClassName= "org.apache.activemq.ActiveMQXAConnectionFactory"
xaProperties.brokerURL= "tcp://localhost:61616"
maxPoolSize= "3"
minPoolSize= "1" />
<Resource name= "jms/topic" auth= "Container" type= "org.apache.activemq.command.ActiveMQTopic"
factory= "org.apache.naming.factory.BeanFactory"
physicalName= "testTopic" />
在catalina.properties的common.loader中加入atomikos-lifecycle-listener.jar,atomikos-tomcat-beanfactory.jar,atomikos-transactions-3.7.0.jar,以及其他相关jar文件;
加入jta.properties所在路径
server.xml配置
<Listener className= "com.atomikos.tomcat.AtomikosLifecycleListener" />
(4).sybase相关配置
sp_role "grant",dtm_tm_role,login_name
sp_configure 'enable DTM',1
sp_configure 'enable xact coordination',1