一、环境
AtomikosTransactionsEssentials-3.7.2
下载地址:http://www.atomikos.com/Main/InstallingTransactionsEssentials
jar包引入
引用
transactions-jdbc.jar(必须包)
transactions-jta.jar
transactions.jar
atomikos-util.jar
transactions-api.jar
拷贝
AtomikosTransactionsEssentials-3.7.2\examples\spring\jdbc
下面的
jta.properties 到项目工程classpath根目录下(src下)
二 . spring 配置修改
参考 AtomikosTransactionsEssentials-3.7.2\examples\spring\jdbc
的config.xml
有一个主意点: JtaTransactionManager
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager">
<ref bean="atomikosTransactionManager" />
</property>
<property name="userTransaction">
<ref bean="atomikosUserTransaction" />
</property>
<property name="allowCustomIsolationLevels" value="true"/>
<!-必须设置,否则程序出现异常 JtaTransactionManager does not support custom isolation levels by default -->
</bean>
另外:
3.7.2已经没有SimpleDataSource这个类了
加了个AtomikosDataSourceBean这个类
关于这个问题的解决:
每当我启动tomcat时,控制台就平凡打印如下警告,不影响系统运行。
http://www.iteye.com/problems/64330
引用
WARN atomikos:107 - Local heuristic termination of coordinator com.atomikos.spring.jdbc.tm0050000015 with state HEUR_HAZARD
2011/04/29 13:55:45724 WARN atomikos:107 - Local heuristic termination of coordinator com.atomikos.spring.jdbc.tm0050000015 with state HEUR_HAZARD
2011/04/29 13:55:45878 WARN atomikos:107 - Local heuristic termination of coordinator com.atomikos.spring.jdbc.tm0050000015 with state HEUR_HAZARD
2011/04/29 13:55:4630 WARN atomikos:107 - Local heuristic termination of coordinator com.atomikos.spring.jdbc.tm0050000015 with state HEUR_HAZARD
修改jta.properties文件 应该是关掉日志
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
com.atomikos.icatch.automatic_resource_registration = true
com.atomikos.icatch.enable_logging = false
关于JBPM 报的多个sessionFactory警告的处理
参考:http://hi.baidu.com/btb368/blog/item/bc419c51e1b8007b8435246a.html
引用
Multiple Spring beans found for type interface org.hibernate.SessionFactory returning the first one
2011-07-05 11:08
在OECP平台中,我们支持多数据源的配置,以支持对平台数据库和业务组件数据库的操作,但是在将jbpm4.4整合进来做工作流引擎的时候,却出现了问题。
采用官方的解决方案,在单数据源下没有问题,但是在多数据源下,我们采用jotm的jta事务,当在一个事务之内既有操作平台的服务,又有操作jbpm的服务时,控制台上打印一下警告和错误。更为奇怪的是,如果在一个事务里先执行jbpm的数据库操作,在执行其他的数据操作,没有问题,反过来却不行,一头雾水啊。难道jbpm搞不清楚是哪个sessionfactory了。经过Google和长时间的分析,解决了该问题,现把方案分享一下。
问题:
Multiple Spring beans found for type interface org.hibernate.SessionFactory returning the first one found
java.sql.SQLException: Cannot get connection for URL jdbc:oracle:thin ** 调用中无效的参数
一、扩展SpringHelper,添加setSessionFactory,指定sessionfactory注入
package com.abc.onewaveinc.core.common;
import org.hibernate.SessionFactory;
import org.jbpm.api.ProcessEngine;
import org.jbpm.pvm.internal.cfg.ConfigurationImpl;
import org.jbpm.pvm.internal.processengine.SpringHelper;
public class ProcessEngineFactoryBean extends SpringHelper {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public ProcessEngine createProcessEngine() {
ProcessEngine processEngine = new ConfigurationImpl().springInitiated(
applicationContext).setResource(jbpmCfg)
.setHibernateSessionFactory(sessionFactory)
.buildProcessEngine();
return processEngine;
}
}
<!-- jbpm配置 cn.oecp.jbpm4.cfg.pvm.ProcessEngineFactoryBean上面已经定义-->
<bean id="springHelper" class="com.onewaveinc.core.common.ProcessEngineFactoryBean" >
<property name="jbpmCfg">
<value>jbpm.cfg.xml</value>
</property>
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
二、其他配置省略,修改了jbpm.tx.spring.cfg.xml中spring事务拦截方式,这一步很关键,保证在一个事务管理器内
<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration spring="enabled">
<process-engine-context>
<command-service name="newTxRequiredCommandService">
<retry-interceptor />
<environment-interceptor policy="requiresNew" />
<spring-transaction-interceptor
policy="requiresNew" transaction-manager="hibernateTransactionManager"/>
</command-service>
<!-- Default command service has a Spring transaction interceptor-->
<command-service name="txRequiredCommandService">
<retry-interceptor />
<environment-interceptor policy="requiresNew"/>
<spring-transaction-interceptor
current="hibernateTransactionManager" />
</command-service>
</process-engine-context>
<transaction-context>
<transaction type="spring" />
<repository-session></repository-session>
<hibernate-session current="true"/>
</transaction-context>
</jbpm-configuration>
http://www.oecp.cn/hi/yongtree/blog/2562
参考文档:
Spring+iBatis+Atomikos实现JTA事务
http://www.chineselinuxuniversity.net/articles/39426.shtml
spring+atomikos+JTA完整例子
http://www.cnblogs.com/huangjingzhou/articles/2012011.html
Spring JTA应用JOTM & Atomikos III Atomikos
http://tom-duan.iteye.com/blog/147599
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
http://kb.cnblogs.com/a/2012014/
分享到:
相关推荐
spring + JTA + atomikos实现分布式事务, 高大上的技术
Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源,分别向两个不同的数据里面插入数据同时失败和成功,调用接口方式原理一样。
NULL 博文链接:https://injavawetrust.iteye.com/blog/2308552
springboot+Atomikos+jpa+mysql的JTA分布式事务实现,本案例涉及到2个数据库,预期结果,在同一个事务中,两个库的状态一致
spring+hibernate+jta 分布式事务管理Demo源码(无jar包) 博文链接:https://momoko8443.iteye.com/blog/190994
本用例基于 Spring Boot + Druid + Mybatis 配置多数据源,并采用 JTA 实现分布式事务。
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1958831
jta Springboot + Atomikos + Druid + Mysql 实现JTA分布式事务 问题一:Druid 和 Mysql 版本的问题 问题二:Springtest 默认情况下事务回滚 Mysql对XA协议支持不好,有待看
NULL 博文链接:https://tangshuo.iteye.com/blog/1989830
NULL 博文链接:https://sjsky.iteye.com/blog/1112012
Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1836707
这是一个示例示例项目,使用spring boot,jta和atomikos演示了分布式事务的工作方式。 该项目有两个mysql数据库,db:atomikos_one保留大写信息,而db:atomikos_two保留redpacket信息。 并且主测试用例将一笔交易...
atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA) 结合spring 和durid进行配置,
同一个服务里面多个数据源事务事务一致性
SpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatis
测试atomikos spring activemq jta oracle 为了最大限度地恢复和关闭/重启能力,强烈建议您使用以下 init 依赖项配置 Spring 配置: 使事务管理器依赖于您所有的 JDBC 和 JMS 连接工厂:这可确保在关闭期间事务管理...