`

Spring+Atomikos实现JTA事务

 
阅读更多
一、环境
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 实现分布式事务

    Atomikos 是一个开源的JTA实现,它为Spring提供了一个轻量级、高性能的分布式事务解决方案。本文将深入探讨如何使用Spring、JTA和Atomikos来实现分布式事务。 首先,了解JTA的基本概念。JTA定义了一套规范,允许在...

    Spring+MyBatis+Atomikos实现JTA分布式事务

    Spring的PlatformTransactionManager接口定义了事务管理的基础方法,而AtomikosTransactionManager就是实现这个接口的一个实例,用于处理JTA事务。 MyBatis本身不支持JTA,但可以通过集成Spring来实现。在Spring...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    AtomikosDataSource支持JTA事务,这意味着我们可以在同一个事务中操作多个数据源。Spring的`@Transactional`注解可以用来开启和管理这些分布式事务,确保事务的ACID特性。 7. **代码示例** 创建多数据源的配置...

    Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务

    Atomikos是一个开源的JTA事务管理器,它提供了对分布式事务的支持。在分布式系统中,由于多个资源(如数据库、消息队列等)需要进行原子操作,因此需要一个事务管理器来协调这些操作,确保事务的ACID特性(原子性、...

    Spring boot+Atomikos+JTA+Hibernate+mybatis+MySQL实现分布式事务+多数据源

    4. 配置Atomikos事务管理器,使Spring Boot应用支持JTA事务。 5. 在需要处理分布式事务的服务类或方法上添加@Transactional注解。 6. 编写业务代码,根据需求调用两个数据源的DAO层方法。 通过上述步骤,我们能够在...

    Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源(可运行)

    这时,可以利用Spring的`@Transactional`注解开启JTA事务管理。当在一个事务中对多个数据源进行操作时,如果其中任何一个操作失败,整个事务都将被回滚,保证了数据的一致性。接口调用的实现原理与此类似,只是将...

    springboot+jta+atomikos

    本项目“springboot+jta+atomikos”旨在利用Spring Boot框架、Java Transaction API (JTA) 和 Atomikos 这一开源事务管理器来实现分布式事务的统一管理。下面将详细阐述这三个关键组件以及它们如何协同工作。 **...

    使用Spring+atomikos实现分布式事务

    Spring框架提供了强大的支持来处理分布式事务,而Atomikos是一个开源的事务管理器,专门用于处理JTA(Java Transaction API)事务,尤其适用于微服务和分布式环境。本教程将探讨如何结合Spring和Atomikos来实现...

    spring+atomikos+druid分布式事务Demo

    1. Spring配置:包含Spring的事务管理器配置,可能使用`PlatformTransactionManager`接口和Atomikos的实现。 2. Atomikos配置:通常会有一个XML配置文件,定义了事务管理器和用户交易服务。 3. Druid数据源配置:...

    第二部分spring+hibernate+jta 分布式事务Demo

    这里可能会使用`PlatformTransactionManager`接口的实现,如`JtaTransactionManager`,来处理JTA事务。 - **实体类**:这些类代表数据库表中的记录,通过Hibernate的注解进行映射。 - **DAO层**:数据访问对象...

    Spring3.1+Hibernate4.1+Atomikos3.9+MySql5.1+Tomcat5/6/7实现JTA事务管理

    标题中的“Spring3.1+Hibernate4.1+Atomikos3.9+MySql5.1+Tomcat5/6/7实现JTA事务管理”揭示了一个集成开发环境,用于构建分布式、事务一致性的Java应用程序。这个组合利用了Spring框架的依赖注入和AOP(面向切面...

    spring+jpa+atomikos多数据源

    3. 配置事务管理器:使用Atomikos的UserTransaction和TransactionManager,配置JTA事务管理器,以处理跨数据源的事务。 4. 注解实体类:使用JPA的@Entity注解定义实体类,并使用@Table指定对应的数据库表。 5. 创建...

    Spring+SpringMVC+MyBatis+Atomikos整合

    本教程主要关注如何将Spring、SpringMVC、MyBatis和Atomikos这四个组件进行整合,以实现多数据源的分布式事务处理。 首先,Spring是Java领域广泛应用的依赖注入(DI)和面向切面编程(AOP)框架,它允许开发者轻松...

    Spring Boot + Druid + Mybatis + Atomikos 配置多数据源 并支持分布式事务

    本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...

    spring4+atomikos实现分布式事务

    在这个案例中,我们将深入探讨如何使用Spring 4与Atomikos来实现跨数据库的分布式事务管理。 Atomikos是一款开源的事务处理监控器(Transaction Processing Monitor,TPM),它支持JTA(Java Transaction API)标准...

    springboot+mybatis+jta+atomikos解决多数据源事务问题.pdf

    Atomikos是一个提供JTA事务管理的开源库,它提供了一个事务管理器来控制和管理多个数据源的事务边界。在Spring Boot中集成Atomikos可以实现分布式事务控制,让开发者可以专注于业务逻辑而非事务管理。 ### 多数据源...

    基于Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理

    本文将深入探讨如何利用Spring 4.1.7、Atomikos以及MyBatis实现两阶段的分布式事务(2PC,Two-Phase Commit)。这是一套强大的解决方案,特别适用于处理跨多个数据库或服务的复杂业务逻辑。 首先,我们需要理解什么...

    spring+mybatis+Atomikos JTA事务配置说明

    NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1958831

    SpringBoot+Atomikos+动态多数据源+事务+2种切换数据源的方式

    此外,确保开启@EnableJtaTransactionManagement注解,以启用JTA事务管理。 4. **切换数据源**:有两种常见方式: - **编程式切换**:在业务代码中,可以使用`AbstractRoutingDataSource`的`...

    spring+mybatis+atomikos配置文件及相关包

    5. 如何在Spring中配置Atomikos以支持JTA事务 6. 配置文件的编写,包括Spring和Atomikos的配置 7. 在多数据库或微服务架构中的事务管理策略 这些知识点对于开发分布式系统,尤其是需要处理复杂事务场景的项目来说至...

Global site tag (gtag.js) - Google Analytics