多数据源配置与JTA事务问题
        项目中使用两个dataSourc,两个sessionFactory.由于业务变化,需要在项目中切换数据源,单独配置多数据源以及单独配置JTA都能成功,将多数据与JTA整合之后,项目启动总是抛出异常。
        异常如下:
  org.springframework.transaction.IllegalTransactionStateException: Pre-bound JDBC Connection found! HibernateTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself. It is recommended to use a single HibernateTransactionManager for all transactions on a single DataSource, no matter whether Hibernate or JDBC access.
网上说是jdbc的事务与hibernate的事务起冲突了,但没有找到解决办法,求大神指点。
 1     <!-- atomikos事务管理器 -->
 2     <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
 3         init-method="init" destroy-method="close">
 4         <description>UserTransactionManager</description>
 5         <property name="forceShutdown"><value>true</value></property>
 6     </bean>
 7 
 8     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
 9         <property name="transactionTimeout" value="300" />
10     </bean>
11 
12     <!-- spring 事务管理器 -->
13     <bean id="springTransactionManager"    class="org.springframework.transaction.jta.JtaTransactionManager">
14         <property name="transactionManager" ref="atomikosTransactionManager"/>
15         <property name="userTransaction" ref="atomikosUserTransaction"/>
16     </bean>
AOP配置:
 1 <aop:aspectj-autoproxy />
 2     <aop:config proxy-target-class="true">
 3         <aop:advisor pointcut="execution(* com.animoor.m2.application..*.*(..))" advice-ref="txAdvice" /> 
 4     </aop:config>
 5 
 6     <tx:advice id="txAdvice" transaction-manager="springTransactionManager">
 7         <tx:attributes>
 8             <tx:method name="get*" read-only="true" />
 9             <tx:method name="find*" read-only="true" />
10             <tx:method name="insert*" propagation="REQUIRED"/>
11             <tx:method name="update*" propagation="REQUIRED" />
12             <tx:method name="add*" propagation="REQUIRED" />
13             <tx:method name="delete*" propagation="REQUIRED" />
14             <tx:method name="update*" propagation="REQUIRED" />
15             
16             <tx:method name="save*" propagation="REQUIRED" />
17             <tx:method name="do*" propagation="REQUIRED" />
18                               ....
19         </tx:attributes>
20     </tx:advice>      
加入多数据源配置:
 1      <bean id="multipleDataSource" class="com.animoor.m2.sys.MultipleDataSource">
 2         <property name="defaultTargetDataSource" ref="dataSourceMes129"/>
 3         <property name="targetDataSources">
 4             <map key-type="java.lang.String">     
 5                 <!--注意这里的value是和上面的DataSource的id对应,key要和下面的CustomerContextHolder中的常量对应 -->
 6                 <entry key="dataSourceMes129" value-ref="dataSourceMes129" />
 7                 <entry key="dataSourceFgms129" value-ref="dataSourceFgms129"/>
 8                 <entry key="dataSourceMes168" value-ref="dataSourceMes168" />
 9                 <entry key="dataSourceFgms168" value-ref="dataSourceFgms168"/>
10             </map>   
11         </property>
12     </bean>
项目加载时调用的方法含get*,find*,将这些get去掉则不会抛出异常,但是去掉之后事务应该没有作用了吧。

请各位大神指点 谢谢  小弟没有金币悬赏,谢谢各位了。

2个回答

呵呵,搞spring配置确实麻烦,看来MultipleDataSource是animoor自己的库,刚在stackoverflow找到很久之前关于合并hibernate和jdbc
到一个事物的问答,http://stackoverflow.com/questions/4153199/hibernate-and-jdbc-in-one-transaction,
看看有没有启发。
兄弟是在搞横向扩展吗?

LittlehappyXz
瞬时间 谢谢哥们来看!嗯,MultipleDataSource类是自己配置的多数据源类,现在的需求是在原来两个数据源上再加上两个数据源,原来每个数据源对应一个sessionFactory,不存在事务冲突。
4 年多之前 回复

解决了吗,哥们!我觉得你截取的log不对吧!
但我觉得这样配置应该没问题。如果不用JtaTransactionManager,是有问题的,在service开启事务,一个事务肯定就一个datasource吧,所以在service切数据源肯定也不对,除非control层切

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Spring多数据源JTA事务
    当我们的项目中需要应用到多个数据源时,事务的管理就很重要了。而Spring的JTA事务就很好的帮助了我们进行了多数据源的事务处理。 通过集成JOTM,直接在Spring中使用JTA事务     JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,它本身也是开源应用程序服务器JOnAS(Java Open Application S...
多数据源事务jta测试
NULL 博文链接:https://malixxx.iteye.com/blog/560727
JTA多数据源
示例模型概述 crontroller层发消息到队列 service层监听到队列消息后,将数据分别保存的DB和MQ controller层作为调用者,提供了对service层里2种数据源的事务控制,这种能力由atomikos提供; 示例程序依赖 atomikos提供JTA事务管理能力 数据源1为DB,故引入spring-boot-starter-dat...
jta 事务配置---
我在spring中配置jta事务总是出现下面的异常,请问是什么原因rn致命的: クラス org.springframework.web.context.ContextLoaderListener のリスナインスタンスにコンテキスト初期化イベントを送信中の例外ですrnorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/applicationContext-jta.xml]: Invocation of init method failed; nested exception is org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NamingException: Cannot create resource instancernCaused by: org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NamingException: Cannot create resource instancernCaused by: javax.naming.NamingException: Cannot create resource instancern at org.apache.naming.factory.TransactionFactory.getObjectInstance(TransactionFactory.java:113)rn at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)rn at org.apache.naming.NamingContext.lookup(NamingContext.java:793)rn at org.apache.naming.NamingContext.lookup(NamingContext.java:140)rn at org.apache.naming.NamingContext.lookup(NamingContext.java:781)rn at org.apache.naming.NamingContext.lookup(NamingContext.java:153)rn at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)rn at javax.naming.InitialContext.lookup(InitialContext.java:351)rn at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:124)rn at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:86)rn at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:122)rn at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:147)rn at org.springframework.transaction.jta.JtaTransactionManager.lookupUserTransaction(JtaTransactionManager.java:443)rn at org.springframework.transaction.jta.JtaTransactionManager.afterPropertiesSet(JtaTransactionManager.java:369)rn at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1062)rn at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1029)rn at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:420)rn at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)rn at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)rn at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)rn at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)rn at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:290)rn at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:348)rn at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:156)rn at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)rn at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)rn at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)rn at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)rn at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)rn at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)rn at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)rn at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)rn at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)rn at org.apache.catalina.core.StandardService.start(StandardService.java:448)rn at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)rn at org.apache.catalina.startup.Catalina.start(Catalina.java:552)rn at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)rn at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)rn at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)rn at java.lang.reflect.Method.invoke(Method.java:585)rn at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)rn at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
tomcat 配置JTA事务
在tomcat 中配置JTA 事务,方便管理web项目
Spring-boot下的mybatis多数据源JTA配置
一.配置properties spring.jta.enabled=true #spring.jta.atomikos.properties.service==com.atomikos.icatch.standalone.UserTransactionServiceFactory #spring.jta.atomikos.properties.max-actives=200 #spring.jt
WAS的JTA事务配置
我按照网上和官网的配置,但还是出错,求大神帮帮谢谢rn报错如下rn[img=https://img-bbs.csdn.net/upload/201805/29/1527592546_882106.png][/img]rn配置如下:rn[img=https://img-bbs.csdn.net/upload/201805/29/1527592572_807288.png][/img]
Spring 多数据源 事务配置
在spring里面使用多数据源,事务处理的时候需要指定使用的数据源,否则可能会出现事务不生效的情况。 @Transactional(rollbackFor = RuntimeException.class, transactionManager = “transactionManager”) transactionManager就是配置的事务管理器默认使用的数据源是配置文件里面的第一个数据源。
SpringBoot多数据源及事务配置
多数据源配置 其实多数据源的配置大体上跟Spring是相同的,不同之处仅在于SpringBoot推崇省略xml配置,取而代之使用JavaConfig来配置多数据源 针对目前所使用的Spring+MyBatis框架而言,数据源的配置最重要的两点是配置DataSource以及SqlSessionFactory,然而为了实现动态数据源我们还需要拓展AbstractRoutingDataSou
SpringBoot多数据源配置事务
在多数据源中配置事务,其实对于SpringBoot来很简单,当然这个的前提是首先把多数据源都配好的情况下,如果不会多数据源配置,请看该系列 SpringBoot整合多数据源首先在启动类配置 @SpringBootApplication @EnableTransactionManagement public class AccountApplication { public static vo
spring多数据源事务配置
我们项目现在需要做一个数据同步的功能,使用两个数据源链接两个不同地址相同结构的数据库(MySQL),我配置了AbstractRoutingDataSource来切换数据源。rn使用定时器每小时调用A数据库数据保存到B中。其中需要配置事务,如果A出错AB都要回滚。这一步不知道是不是需要使用分布式事务(Atomikos)?rnrncontext.xml:rn[code=html]rnrn rn rn rn rn $jdbc.local.urlrn $jdbc.local.usernamern $jdbc.local.passwordrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn $jdbc.remote.urlrn $jdbc.remote.usernamern $jdbc.remote.passwordrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrn rn rn rn rn rn $hibernate.dialectrn $hibernate.show_sqlrn $hibernate.format_sqlrn rn rn rn rn com.ht.ourally.*.entityrn com.ht.mobile.*.entityrn com.ht.alipay.entityrn rn rn rnrn rn rn truern rn rnrn rn rn rnrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrnrn rnrnrn rn rn rn[/code]rnrnDynamicDataSource:rn[code=java]rnpublic class DynamicDataSource extends AbstractRoutingDataSource rnrn @Overridern protected Object determineCurrentLookupKey() rn return DBContextHolder.getCustomerType();rn rnrn[/code]rnDBContextHolder:rn[code=java]rnpublic class DBContextHolder rnrn public static final String DATASOURCE_LOCAL = "dataSourceLocal";rnrn public static final String DATASOURCE_REMOTE = "dataSourceRemote";rnrn private static final ThreadLocal contextHolder = new ThreadLocal();rnrn public static void setCustomerType(String customerType) rn contextHolder.set(customerType);rn rnrn public static String getCustomerType() rn return contextHolder.get();rn rnrn public static void clearCustomerType() rn contextHolder.remove();rn rnrnrn[/code]rnTakeRemoteTask定时器:rn[code=java]rn@Scheduled(cron = "*/5 * * * * ?")rn public void main() rn System.out.println("==========================抓取远程数据库数据开始");rn try rn this.doBaseCompany();rn System.out.println("==========================抓取远程数据库数据结束");rn catch (Exception e) rn e.printStackTrace();rn rn rnrn /**rn * @Title: doBaseCompanyrn * @Description: TODO 物业企业任务rn * @author lindapengrn * @returnrn */rn private boolean doBaseCompany() rn if (!Boolean.valueOf(prop.get("BaseCompany").toString()))rn return true;rn System.err.println(DBContextHolder.getCustomerType());rn DBContextHolder.setCustomerType(DBContextHolder.DATASOURCE_LOCAL); // 切换数据源到本地rn System.err.println(DBContextHolder.getCustomerType());rn SysRole role = new SysRole();rn role.setCompanyId("lindp1");rn role.setRoleName("lindp1");rn sysRoleService.addSysRole(role);rnrn System.err.println(DBContextHolder.getCustomerType());rn DBContextHolder.setCustomerType(DBContextHolder.DATASOURCE_REMOTE); // 切换数据源到远程rn System.err.println(DBContextHolder.getCustomerType());rn SysRole role2 = new SysRole();rn role2.setCompanyId("lindp2");rn role2.setRoleName("lindp2");rn sysRoleService.addSysRole(role2);rn return true;rn rn[/code]rnrn我以这种配置运行有两种问题:rn1.切换数据源无效,lindp1和lindp2都会保存到远程数据库中rn2.去除事务配置后切换数据源正常,只是没有事务了
spring+hibernate+atomokis配置多数据源与事务
俺今天无法淡定了,先列个标题,把这几天烦人的东西都整理一遍,免得以后忘记鸟。AIX,我恨你。 spring+hibernate配置多数据源并统一管理事物,首先确定的是必须使用JTA管理事物,在spring的HibernateTransactionManager类API中已经详细说明了两种transactionManager的不同,quote:JTA (usually through J...
springboot多数据源配置事务
Springboot单数据源时,事务直接在方法或者类上面使用@Transactional注解即可 对于多数据源,需要在@Transactional中制定数据源的transctionManager
spring+mybatis+Atomikos JTA事务配置说明
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1958831
spring boot多数据源配置,多数据源事务
springboot目录 Spring Boot 源码深入分析 spring boot多数据源配置,多数据源事务 springboot 中数据源配置,连接池配置,源码剖析,如何选择连接池 阅读本文前 ,请先阅读笔者另一片文章Spring Boot 源码深入分析 需求描述 在业务开发中,需要读写分离,或者需要配置多个数据源,接下来我们看看在springboot中如何配置多数据...
JTA 事务
同时操作(添加,删除数据)两个表(Mysql数据库)如何保持数据一致,事务该如何写 ? rn我本来是先插入后删除,可是觉得这样不符合业务逻辑(废品报废) 看到有人说是设标记 可那样也不好用。rn下面是我原来的操作:rntx.begin();rnstmt.executeUpdate(sqlstr1);rnstmt.executeUpdate(sqlstr2);rntx.commit();
mybatis + springMVC 多数据源,及事务配置
之前写过一种多数据源配置的方式,但是那种方式对代码入侵性比较大,详情请查阅 mybatis + spring 多数据源跨库查询 最近在做 springMVC 搭建时,更改了新的实现,并且提供多数据源中单个数据源事务的支持 下面直接放完整代码: web.xml 配置 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-in
spring ibatis 多数据源 事务配置
网上找的,spring+ibatis+struts1.2 的多数据源事务配置。没试过。先做下记录。 jdbc.properties文件内容: jdbc2.driverClassName=net.sourceforge.jtds.jdbc.Driver jdbc2.url=jdbc:jtds:sqlserver://10.101.122.9:1433/testdb;charset=gb23...
使用springboot+jta+atomikos配置多数据源事务
使用springboot+jta+atomikos来配置多数据源下的事务分布管理 里面带有sql语句.直接下载下来,并且运行sql就可以测试运行
JDBC事务和JTA (XA)事务
事务简介  一般情况下,J2EE应用服务器支持JDBC事务、JTA(Java Transaction API)事务(一般由容器来进行管理)。通常,最好不要在程序中同时使用上述三种事务类型,比如在JTA事务中嵌套JDBC事务。第二方面,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用(事务的嵌套要求更加良好的设计)。 JDBC事务  在JDBC中怎样将多个SQL语句组合成一个事务呢?在J...
JDBC事务和JTA事务的区别
一、事务概述 事务表示:一个由一系列的数据库操作组成的不可分割的逻辑单位,其中的操作要么全做要么全都不做。 与事务相关的操作主要有: BEGIN TRANSACTION; 开始一个事务,方法是:begin() COMMIT;       提交一个事务,方法是:commit() ROLLBACK;      回滚一个事务,方法是:rollback() PREPARE;       准备提交一个事...
spring 多数据源事务问题
spring整合mybatis,2个数据源,使用DynamicDataSource+aop,在方法调用之前根据方法上的注解来切换数据源, xml version="1.0" encoding="UTF-8"?> xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/200
多数据源事务问题
spring配置多个数据源,一个事务中包括两个数据源操作,具体操作如下:下面是伪代码,daoA和daoB分别是两个数据源rndoBfTrancation()rnbeginTrancationrnuser=setUser.....rnsuccess=daoA.saveUser(user)rnif(success)rndaoB.updUser(user)rnrncommitrnrn一个事务里面多个数据源如何实现,上面这种不知道是否正确,如果正确,rn下面的问题是daoA保存成功,操作daoB时异常,回滚如何进行,望各位大神指导!!!!
Spring多数据源事务问题
当使用Springboot的时候如果使用@Transaction标签去管理事务的时候,会出现找不到指定的事务bean问题,因为同时配置了两个或多个数据源,@Transaction标签会出现不知道处理那个事务的问题。 此时需要使用@Transaction标签中的transactionmanager去指向你所配置的数据源,即@Transaction(transactionmanager = “......
【转】Spring JTA事务(WebLogic)配置
转:http://www.blogjava.net/luoqx/articles/16447.html   项目组开发服务器使用weblogic,应用服务器上配置了数据源,每个人开发使用eclipse,每人调试程序都使用本机,所以调试使用的服务是跟eclipse的tomcat插件,数据源可以使用tomcat的配置的和weblogic同名的数据源,可是JTA tomcat不支持。   因为整个项...
JBOSS 关于JTA事务
配置了JBOSS的JNDI数据源,分别用来操作多个数据库,现在出现com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.multipleWarning异常,并且JTA事务不起作用,急急急
Spring+iBatis+JOTM实现JTA事务
Spring+iBatis+JOTM实现JTA事务 spring ibatis jotm 分布 事务 多数据源
JTA jdbc处理 事务
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; //import java.sql.SQLDataException; import java.sql.SQLException; public class TestTransaction { /** * JTA jd
JTA事务的奇怪异常。
在使用SSH框架时为了连接两个数据库所以使用了“Atomikos”来提供JTA事务。可是在使用中会出现一个很奇怪的异常。rn[code=Java]rnjava.lang.IllegalStateException: wrong state: ABORTINGrn at com.atomikos.icatch.imp.CoordinatorImp.registerSynchronization(CoordinatorImp.java:616)rn at com.atomikos.icatch.imp.TransactionStateHandler.registerSynchronization(TransactionStateHandler.java:121)rn at com.atomikos.icatch.imp.CompositeTransactionImp.registerSynchronization(CompositeTransactionImp.java:440)rn at com.atomikos.jdbc.AtomikosConnectionProxy.enlist(AtomikosConnectionProxy.java:166)rn at com.atomikos.jdbc.AtomikosConnectionProxy.invoke(AtomikosConnectionProxy.java:104)rn at $Proxy29.prepareStatement(Unknown Source)rn at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)rn at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:423)rn ..................rn[/code]rn我没有贴全。rnrn不知道那位有碰过同样的问题的吗?
JTA事务总结(二)
自:http://blog.sina.com.cn/s/blog_661a3fce0100msjb.html 记得EJB的部署文件的事务属性RequiresNew的情况,在调用该EJB函数时如果已经存在一个事务进行中,那么要求容器挂起该事务,启动新的事务进行函数调用,直到函数结束后,再恢复原来的事务继续进行。 也许你会想到用以下的方式进行: UserTransaction tx = ...
JTA事务总结(一)
自:http://blog.sina.com.cn/s/blog_661a3fce0100mshi.html 今天在weblogic在对几种JTA的应用场景进行了测试,总结如下: 测试代码片段: public void doTest()throws Exception{ UserTransaction tx = null; try{ ...
JTA事务无效
userTransaction = (UserTransaction) ctx.lookup("java:comp/env/UserTransaction");rnuserTransaction.begin(); rn//取得连接rnConnection conn = per.getConnection(); rnStatement sta = conn.createStatement();rnString sql1 = "insert into t_nb_yhxx (c_yhbh,c_dwbm) values ('447778','4778')";rnString sql2 = "insert into t_nb_yhxx (c_yhbh,c_dwbm) values ('55','55')";rnsta.executeUpdate(sql1);rnsta.executeUpdate(sql2);rnuserTransaction.commit();rnrntomcat的设置是rn rnrnjta事务无效,例如两语句,一语句是违反唯一约束的,可是另一条还是会插入数据库,因为可能涉及到两数据库,所以没有用jdbc的事务
JTA 跨库事务
前面关于活动系统的数据一致性,是用事务来完成的。 但是现在都是大数据,因此都会存在跨库的事务。所以对这个进行了一些了解,做下整理。   J2EE规范 ØJDBC Ø…… ØJTA ü JTA定义了一种标准API,应用系统由此可以访问各种事务监控。 ØJTS   üCORBA OTS事务监控的基本实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Tran...
全局事务(JTA事务)的原子性
现有两个事务资源datasource1,datasource2假如我不采用XA规范而是简单的[code="java"]rntryrndo transaction 1;rndo transaction 2;rnrncommit transaction 1;//①rncommit transaction 2;//②rncatch(exception)rn rollback transaction 1;rn rollback transaction 2;rnrn[/code]rn这样做是管理两个事务rn和通过X/OPEN XA(JTA)的两阶段提交有何区别。rn是不是JTA可以在①②处保证原子性,而管理两个事务则不能?
Java事务--JTA原理
上一篇文章介绍了JDBC事务,JDBC可以处理单数据源的事务,满足大部分事务处理的需求,但是JDBC事务不能解决多数据源和分布式事务问题,Java平台给我们提供了解决方案--JTA。本文将探讨JTA的一些细节。
JTA事务简介
最近无聊,折腾了下分布式事务,说JTA之前,先说说事务。 事务:数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。以用户付款行为为例,用户账户的钱要减少,商户账户的钱要增加。这两个操作要么一起成功,要么一起失败。不能出现用户的钱少了,而商户的钱不增加,那用户就亏钱了;也不能出现用户的钱没减少成功,但是商户的钱
JTA事务源码示例
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,欢迎下载传播。有问题请在评价中留言,我会及时回复的。 <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/> <!-- JTA事务管理器 --> <bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction"> <ref local="jotm"/> </property> </bean> <!-- 数据源A --> <bean id="dataSourceA" 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="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> </bean> </property> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 数据源B --> <bean id="dataSourceB" 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="${jdbc2.driver}"/> <property name="url" value="${jdbc2.url}"/> </bean> </property> <property name="user" value="${jdbc2.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 事务切面配置 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* *..servi1ce*..*(..))"/> <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/> </aop:config> <!-- 通知配置 --> <tx:advice id="txAdvice" transaction-manager="myJtaManager"> <tx:attributes> <tx:method name="delete*" rollback-for="Exception"/> <tx:method name="save*" rollback-for="Exception"/> <tx:method name="update*" rollback-for="Exception"/> <tx:method name="*" read-only="true" rollback-for="Exception"/> </tx:attributes> </tx:advice ...... ...... ......
事务处理:JTA事务
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。   要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。
JTA事务总结(三)
自:http://blog.sina.com.cn/s/blog_661a3fce0100msjv.html 今天对XA和非XA驱动进行了更进一步的研究,终于搞清了以前些模菱两可的问题。 通过测试得知,在JTA事务中(包括JDBC事务以及非事务环境下),应用程序操作的connection其实都是weblogic的包装类 [A、B]: weblogic.jdbc.wrappe...
多数据源事务不生效问题
多数据源事务不生效问题 问题描述如下: 如果模块使用多个数据源时候,程序中开启事务处理,事务注解需要指定使用哪个事务管理器,否则事务不生效。 如流水号服务DB配置两个数据源管理器fwTransactionManager 和g1TransactionManager 因此,在事务配置中使用...
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数