JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
来源:互联网 发布:win7网卡mac地址修改 编辑:程序博客网 时间:2024/05/17 03:01
一.以下介绍Spring中直接集成JOTM提供JTA事务管理、将JOTM集成到Tomcat中。
(经过测试JOTM在批量持久化时有BUG需要修改源码GenericPool类解决)!
参考文章http://mavin.zhou.blog.163.com/blog/static/114522435200971822334475/
通过集成JOTM,直接在Spring中使用JTA事务
JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,它本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分,为其提供JTA分布式事务的功能。
Spring 2.0附带的依赖类库中虽然包含jotm类库,但是并不完整,你可以到http://jotm.objectweb.org下载完全版的JOTM。
Spring为JOTM提供了一个org.springframework.transaction.jta.JotmFactoryBean支持类,通过该支持类可以方便地创建JOTM本地实例。
1.将jotm的jar包lib目录下所有jar复制到项目中
2.将jotm的jar包conf目录下carol.properties文件复制到项目类路径下,修改内容为:
# do not use CAROL JNDI wrapper
carol.start.jndi=false
# do not start a name server
carol.start.ns=false
# Naming Factory
carol.jndi.java.naming.factory.url.pkgs=org.apache.naming
3.建立两个数据库,配置两个数据源
<!-- XAPool配置,内部包含了一个XA数据源,对应相应的数据库 -->
<bean id="mysqlJta" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<!-- 内部XA数据源-->
<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=""/>
</bean>
</property>
<property name="user" value="root"/>
<property name="password" value=""/>
</bean>
<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:@localhost:1521:orcl"/>
<property name="user" value="orcl"/>
<property name="password" value=""/>
</bean>
</property>
<property name="user" value="orcl"/>
<property name="password" value=""/>
</bean>
4.事务配置
<!-- JOTM本地实例 -->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
<!-- JTA事务管理器 -->
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="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="timerDaoMysql" class="com.xxxxl.TimerDaoImpl" scope="prototype">
<property name="dataSource" ref="mysqlJta"></property>
</bean>
<bean id="timerDaoOracle" class="com.xxxxl.TimerDaoImpl" scope="prototype">
<property name="dataSource" ref="oracleJta"></property>
</bean>
二.以下介绍Spring中直接集成Atomikos提供JTA事务管理、将Atomikos集成到Tomcat中。(经过测试推荐此方法)
Atomikos Transactions Essentials现在的版本是3.1.7,可以在http://www.atomikos.com/Main/TransactionsEssentialsDownloadForm 下载,在发布包里的examples文件夹下面有些例子,非常实用,我在使用中参考里面的例子很容易配置成功。1.将Atomikos的jar包dist目录下所有jar复制到项目中
2.建立两个数据库,配置两个数据源。
Atomikos数据源配置方法有三种分别有:SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean可任选一种
Simple表示基础数据库连接配置
<bean id="oracleJta" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName">
<value>OracleXADataSource</value> <!--任意命名,但必须唯一-->
</property>
<property name="xaDataSourceClassName">
<value>oracle.jdbc.xa.client.OracleXADataSource</value>
</property>
<property name="xaDataSourceProperties">
<value>URL=jdbc:oracle:thin:@localhost:1521:orcl;user=orcl;password=</value>
</property>
<property name="exclusiveConnectionMode">
<value>true</value>
</property>
<property name="connectionPoolSize">
<value>3</value>
</property>
<property name="validatingQuery">
<value>SELECT 1</value>
</property>
</bean>
Atomikos表示必须要用到XA数据库驱动类,可设置连接池(经过测试推荐此方法)
<bean id="oracleJta" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" lazy-init="true">
<property name="uniqueResourceName">
<value>OracleXADataSource</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">orcl</prop>
<prop key="password"></prop>
</props>
</property>
<property name="poolSize"><value>1</value></property>
<property name="maxPoolSize"><value>30</value></property>
</bean>
AtomikosNon表示必须要用到普通数据库驱动类,可设置连接池
<bean id="oracleJta" class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean">
<property name="uniqueResourceName"><value>OracleXADataSource</value></property>
<property name="user"><value>orcl</value></property>
<property name="password"><value></value></property>
<property name="url"><value>jdbc:oracle:thin:@192.168.1.217:1521:orcl</value></property>
<property name="driverClassName"><value>oracle.jdbc.OracleDriver</value></property>
<property name="poolSize"><value>1</value></property>
<property name="borrowConnectionTimeout"><value>60</value></property>
</bean>
另外一个数据库在这就不在写了,设置同上只是mysql的驱动类名为:xaDataSourceClassName:com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
3.事务配置
Atomikos事务方法
<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="240" />
</bean>
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager">
<ref bean="atomikosTransactionManager" />
</property>
<property name="userTransaction">
<ref bean="atomikosUserTransaction" />
</property>
</bean>
接下来的代码和上例类同就不再写。另外,在实际项目中,采用了方法二,且使用了HibernateTemplate,这个该怎么配还是怎么配;在同一台机器上,配置两套及以上的应用,会报异常,这个需要把下载包中的jta.properties包含到Classpath 中,且修改如下com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactorycom.atomikos.icatch.log_base_name = tmlogcom.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tmcom.atomikos.icatch.enable_logging=falsecom.atomikos.icatch.enable_logging=false 这句话很重要。
- JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
- JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
- JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
- JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
- JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
- java分布式事务(JTA)实现 jotm和atomikos
- java分布式事务(JTA)实现 jotm和atomikos
- Spring JTA应用JOTM & Atomikos
- Spring JTA应用JOTM & Atomikos
- Spring JTA应用JOTM & Atomikos
- Atomikos Jta分布式事务spring集成实例
- atomikos JTA 分布式事务配置和原理
- Spring3.0+Hibernate+Atomikos集成构建JTA的分布式事务-
- 使用Spring和Atomikos集成JTA分布式事务
- Postgresql 分布式事务JTA实现Atomikos与Spring集成实践
- JTA分布式事务实战(atomikos)
- Spring JTA事务配置JOTM
- Spring分布式事务实现jotm,atomikos
- 为JS的Date添加格式化函数
- 反向Ajax,第2部分:WebSocket
- (十)Qt对OpenCV支持效果很好
- 燃烧青春和诗意的IT人生
- vs2008 创建打包安装程序
- JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
- 合作意向确认函--学习了
- SAP初级顾问是如何炼成的!
- 在ubuntu环境下编译LUCI
- 国外程序员推荐:每个程序员都应读的书
- 输入法编辑的一些资料收藏
- sencha 的一些属性
- js+html 异步上传文件
- 包大人很忙