spring+jta实现全局事物管理
来源:互联网 发布:慢跑减肥 知乎 编辑:程序博客网 时间:2024/05/20 15:40
在上个公司由于项目的需要,新做的电子商务网站要与一个返款系统(之前做的)进行集成,要求新做的电子商务网站能够调用并修改返款系统的数据,当然这个两个数据库(oracle),部署在redhat tomcat下面,由于tomcat本身并不支持jta事物,加上项目用的是spring,因此在网上打捞一番后就用了jotm。
JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分,为其提供JTA分布式事务的功能。Spring对JOTM提供了较好的支持,提供了一个org.springframework.transaction.jta.JotmFactoryBean的支持类,在Spring2.0中也包含了JOTM相关的一些library。
jotm的下载地址为http://jotm.objectweb.org,最新版本为JOTM_2_2_1.
下载完成后解压缩,然后打开jotm下面conf文件夹,拷贝carol.properties文件到classpath中,并修改这个文件如下
carol.properties
# jonas rmi acativation (iiop, irmi, jrmp, cmi)carol.protocols=jrmpcarol.start.jndi=falsecarol.start.ns=false
上面配置文件的目的是不使用JNDI的方式来加载JOTM的配置,当然也可以根据需要选择其它的一些配置。
然后开始在Spring上下文中配置JOTM,在classpath中建立一个ApplicationContext-jotm.xml,配置如下
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"><bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" /><bean id="txManager"class="org.springframework.transaction.jta.JtaTransactionManager"><property name="userTransaction" ref="jotm" /></bean><bean id="ds244" 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:@192.168.1.244:1521:db" /></bean></property><property name="user" value="user11" /><property name="password" value="123" /></bean><bean id="ds110" 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:@192.168.1.110:1521:shopdb" /></bean></property><property name="user" value="user1" /><property name="password" value="123" /></bean><bean id="template110" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="ds110" /></bean><bean id="template244" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="ds244" /></bean><bean id="dao110" class="dao.Dao110"><property name="jdbcTemplate" ref="template110" /></bean><bean id="dao244" class="dao.Dao244"><property name="jdbcTemplate" ref="template244" /></bean><bean id="jtaService" class="service.JtaService"><property name="dao110" ref="dao110" /><property name="dao244" ref="dao244" /></bean><tx:annotation-driven transaction-manager="txManager" /></beans>
说明:
这里配置了两个标准的xa数据源,以及两个dao,具体代码如下:
Dao110.java
package dao;import org.springframework.jdbc.core.JdbcTemplate;public class Dao110 {private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void changeName(){System.out.println("110 begin:"+this.jdbcTemplate);//jdbcTemplate.update("update aduser set username='admin' where id=92");//不可执行jdbcTemplate.update("update aduser set username='adminddddd' where id=92");System.out.println("110 after");}}
Dao244.java
package dao;import org.springframework.jdbc.core.JdbcTemplate;public class Dao244 {private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void changeName(){System.out.println("244 begin:"+this.jdbcTemplate);//jdbcTemplate.update("update aduser set username='zwls' where id=68");//不可执行jdbcTemplate.update("update aduser set username='zwlsdasdsadsadad' where id=68");System.out.println("244 after");}}
JtaService.java
package service;import org.springframework.transaction.annotation.Transactional;import dao.Dao110;import dao.Dao244;@Transactional/* ①事务注解,以便Spring动态织入事务管理功能*/public class JtaService {private Dao110 dao110;private Dao244 dao244;public void jtaTest(){System.out.println("jtatest");System.out.println("dao110:"+dao110);System.out.println("dao244:"+dao244);dao110.changeName();dao244.changeName();}public Dao110 getDao110() {return dao110;}public void setDao110(Dao110 dao110) {this.dao110 = dao110;}public Dao244 getDao244() {return dao244;}public void setDao244(Dao244 dao244) {this.dao244 = dao244;}}
JtaAction.java
package action;import service.JtaService;import com.opensymphony.xwork2.ActionSupport;public class JtaAction extends ActionSupport{ private JtaService jtaService; @Override public String execute() throws Exception { System.out.println("execute"); System.out.println("jtaService"+jtaService); try { jtaService.jtaTest(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("ExceptionExceptionExceptionExceptionException"); } return super.execute(); } public JtaService getJtaService() { return jtaService; } public void setJtaService(JtaService jtaService) { this.jtaService = jtaService; } }
- spring+jta实现全局事物管理
- Spring + Jta +JDBCTemplate 分布式事物实现方式
- spring jta 分布式事物配置
- JPA零碎要点---JTA全局事物理解
- 切面实现spring事物管理
- spring中JTA事物的配置
- hibernate 用spring实现jdbc事物管理
- spring+mybatis+atomikos实现分布式事物管理
- 购买股票-spring-事物管理的实现
- jta 事物
- JTA事物
- Spring的全局事物与局部事物
- Weblogic8.1实现(CMT)及spring管理JTA事务
- Spring全局事务之JTA+Atomikos
- Spring全局事务之JTA+Atomikos
- Spring全局事务之JBOSS JTA实现Oracle、Ms SqlServer在同一事务中
- Jboss下使用spring配置实现JTA全局事务管理(上)
- Jboss下使用spring配置实现JTA全局事务管理(下)
- win7锁屏背景壁纸修改
- poj1422 Air Raid 最小路径覆盖=顶点数-最大匹配数
- shell 字符串操作小结
- 杭电acm2019数列有序
- 27-Dialog练习题,点击弹出一个对话框,选项是一个列表
- spring+jta实现全局事物管理
- 豆瓣出错:java.lang.NoClassDefFoundError: com.google.gdata.client.douban.DoubanService
- Drag and Drop in WPF
- 复述抽取生成doc04-实现02-对给定句子搜索相关的句子
- 关于求FIRST集和FOLLOW集
- word2010的设置记录
- Ubuntu 11.10 打开 windows文件乱码解决方法
- 豆瓣出错Error generating final archive:Found duplicate file for APK:net/oauth/consumer.properties.sample
- 54. 长命的临时解决方案