一、环境
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/
分享到:
相关推荐
Atomikos 是一个开源的JTA实现,它为Spring提供了一个轻量级、高性能的分布式事务解决方案。本文将深入探讨如何使用Spring、JTA和Atomikos来实现分布式事务。 首先,了解JTA的基本概念。JTA定义了一套规范,允许在...
Spring的PlatformTransactionManager接口定义了事务管理的基础方法,而AtomikosTransactionManager就是实现这个接口的一个实例,用于处理JTA事务。 MyBatis本身不支持JTA,但可以通过集成Spring来实现。在Spring...
AtomikosDataSource支持JTA事务,这意味着我们可以在同一个事务中操作多个数据源。Spring的`@Transactional`注解可以用来开启和管理这些分布式事务,确保事务的ACID特性。 7. **代码示例** 创建多数据源的配置...
Atomikos是一个开源的JTA事务管理器,它提供了对分布式事务的支持。在分布式系统中,由于多个资源(如数据库、消息队列等)需要进行原子操作,因此需要一个事务管理器来协调这些操作,确保事务的ACID特性(原子性、...
4. 配置Atomikos事务管理器,使Spring Boot应用支持JTA事务。 5. 在需要处理分布式事务的服务类或方法上添加@Transactional注解。 6. 编写业务代码,根据需求调用两个数据源的DAO层方法。 通过上述步骤,我们能够在...
这时,可以利用Spring的`@Transactional`注解开启JTA事务管理。当在一个事务中对多个数据源进行操作时,如果其中任何一个操作失败,整个事务都将被回滚,保证了数据的一致性。接口调用的实现原理与此类似,只是将...
本项目“springboot+jta+atomikos”旨在利用Spring Boot框架、Java Transaction API (JTA) 和 Atomikos 这一开源事务管理器来实现分布式事务的统一管理。下面将详细阐述这三个关键组件以及它们如何协同工作。 **...
Spring框架提供了强大的支持来处理分布式事务,而Atomikos是一个开源的事务管理器,专门用于处理JTA(Java Transaction API)事务,尤其适用于微服务和分布式环境。本教程将探讨如何结合Spring和Atomikos来实现...
1. Spring配置:包含Spring的事务管理器配置,可能使用`PlatformTransactionManager`接口和Atomikos的实现。 2. Atomikos配置:通常会有一个XML配置文件,定义了事务管理器和用户交易服务。 3. Druid数据源配置:...
这里可能会使用`PlatformTransactionManager`接口的实现,如`JtaTransactionManager`,来处理JTA事务。 - **实体类**:这些类代表数据库表中的记录,通过Hibernate的注解进行映射。 - **DAO层**:数据访问对象...
标题中的“Spring3.1+Hibernate4.1+Atomikos3.9+MySql5.1+Tomcat5/6/7实现JTA事务管理”揭示了一个集成开发环境,用于构建分布式、事务一致性的Java应用程序。这个组合利用了Spring框架的依赖注入和AOP(面向切面...
3. 配置事务管理器:使用Atomikos的UserTransaction和TransactionManager,配置JTA事务管理器,以处理跨数据源的事务。 4. 注解实体类:使用JPA的@Entity注解定义实体类,并使用@Table指定对应的数据库表。 5. 创建...
本教程主要关注如何将Spring、SpringMVC、MyBatis和Atomikos这四个组件进行整合,以实现多数据源的分布式事务处理。 首先,Spring是Java领域广泛应用的依赖注入(DI)和面向切面编程(AOP)框架,它允许开发者轻松...
本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...
在这个案例中,我们将深入探讨如何使用Spring 4与Atomikos来实现跨数据库的分布式事务管理。 Atomikos是一款开源的事务处理监控器(Transaction Processing Monitor,TPM),它支持JTA(Java Transaction API)标准...
Atomikos是一个提供JTA事务管理的开源库,它提供了一个事务管理器来控制和管理多个数据源的事务边界。在Spring Boot中集成Atomikos可以实现分布式事务控制,让开发者可以专注于业务逻辑而非事务管理。 ### 多数据源...
本文将深入探讨如何利用Spring 4.1.7、Atomikos以及MyBatis实现两阶段的分布式事务(2PC,Two-Phase Commit)。这是一套强大的解决方案,特别适用于处理跨多个数据库或服务的复杂业务逻辑。 首先,我们需要理解什么...
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1958831
此外,确保开启@EnableJtaTransactionManagement注解,以启用JTA事务管理。 4. **切换数据源**:有两种常见方式: - **编程式切换**:在业务代码中,可以使用`AbstractRoutingDataSource`的`...
5. 如何在Spring中配置Atomikos以支持JTA事务 6. 配置文件的编写,包括Spring和Atomikos的配置 7. 在多数据库或微服务架构中的事务管理策略 这些知识点对于开发分布式系统,尤其是需要处理复杂事务场景的项目来说至...