`
songkaiang
  • 浏览: 4684 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring+hibernate+atomikos 分布式事务管理

 
阅读更多

网上有很多的atomikos的分布式事务管理的配置,但是大多数都是同一类型的数据库,并没有跨数据库类型的配置。使用的数据库是Oracle和mysql。

配置文件代码如下:

 

 

<bean id="propertyConfigurer" class="*.*.*.DBConfigurer">
       <property name="order" value="1" />
       <property name="ignoreUnresolvablePlaceholders" value="true" />     
       <property name="location" value="WEB-INF/DBconfig.properties"/> 
    </bean>
    
    <bean id="mysqlDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" 
        init-method="init" destroy-method="close">
        <!-- Set unique name for this DataSource -->  
        <property name="uniqueResourceName">
        	<value>bpm</value>
        </property>
        <!-- Set XADatasource class name-->  
        <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
        <property name="xaProperties">
            <props>
                <prop key="user">${connection.username}</prop>
                <prop key="password">${connection.password}</prop>
                <prop key="url">${connection.url}</prop>
            </props>
        </property>
        <!-- set properties for datasource connection pool -->  
        <property name="poolSize" value="3" />
        <!-- 管理 Connection 被占用的时间 -->
        <!-- 如果不设置这个值,Atomikos使用默认的300秒(即5分钟),那么在处理大批量数据读取的时候,一旦超过5分钟,就会抛出类似 Resultset is close 的错误 -->
        <property name="reapTimeout"><value>20000</value></property>  
    </bean>
    
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="mysqlDataSource" />
		<property name="packagesToScan">
			<list>
				<value>smtcl.mocs.pojos.device</value>
				<value>smtcl.mocs.pojos.authority</value>
				<value>smtcl.mocs.pojos.job</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
<!-- 			    <prop key="hibernate.connection.url">${connection.url}</prop> -->
                <prop key="hibernate.connection.driver_class">${connection.driver}</prop>
<!--                 <prop key="hibernate.connection.username">${connection.username}</prop> -->
<!--                 <prop key="hibernate.connection.password">${connection.password}</prop> -->
                <prop key="hibernate.dialect">${connection.dialect}</prop>
                <prop key="hibernate.show_sql">${connection.show.sql}</prop>
                <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
			</props>
		</property>
	</bean>

	<!-- atomikos事务管理器 -->
    <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" 
        init-method="init" destroy-method="close">
        <property name="forceShutdown">
            <value>true</value>
        </property>
    </bean>

    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
        <property name="transactionTimeout" value="300" />
    </bean>

    <!-- spring 事务管理器 -->
    <bean id="springTransactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager" ref="atomikosTransactionManager"/>
        <property name="userTransaction" ref="atomikosUserTransaction" />
        <property name="allowCustomIsolationLevels" value="true"/> 
    </bean>

    <!-- 使用annotation定义事务,对于要加入事物的类,只需对该类加 @Transactional  -->
    <tx:annotation-driven transaction-manager="springTransactionManager" />

<!--     hibernate Dao层模板 -->
<!--     <bean id="transactionManager" -->
<!--         class="org.springframework.orm.hibernate3.HibernateTemplate"> -->
<!--         <property name="sessionFactory" ref="sessionFactory"></property> -->
<!--     </bean> -->
    
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

 

<bean id="erpPropertyConfigurer" class="*。*。*.ERPDBConfigurer">
     	<property name="order" value="2" />
     	<property name="ignoreUnresolvablePlaceholders" value="true" />     
    	<property name="location" value="WEB-INF/ERPDBconfig.properties"/> 
    </bean>
    
    <bean id="oracleDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean">
		<property name="uniqueResourceName">
			<value>chh</value>
		</property>
		<property name="xaDataSourceClassName" value="oracle.jdbc.xa.client.OracleXADataSource"/>
		<property name="xaProperties">
            <props>
                <prop key="user">${connection.username}</prop>
                <prop key="password">${connection.password}</prop>
                <prop key="URL">${connection.url}</prop>
            </props>
        </property>
		<property name="poolSize">
			<value>1</value>
		</property>
		<property name="borrowConnectionTimeout">
			<value>60</value>
		</property>
	</bean>

	<bean id="erpSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="oracleDataSource" />
		<property name="packagesToScan">
			<list>
				<value>smtcl.mocs.pojos.erp</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
<!-- 			    <prop key="hibernate.connection.url">${erp.connection.url}</prop> -->
                <prop key="hibernate.connection.driver_class">${erp.connection.driver}</prop>
<!--                 <prop key="hibernate.connection.username">${erp.connection.username}</prop> -->
<!--                 <prop key="hibernate.connection.password">${erp.connection.password}</prop> -->
                <prop key="hibernate.dialect">${erp.connection.dialect}</prop>
                <prop key="hibernate.show_sql">${erp.connection.show.sql}</prop>
                <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
			</props>
		</property>
	</bean>

<!-- 	 <bean id="erpTransactionManager" -->
<!--         class="org.springframework.orm.hibernate3.HibernateTemplate"> -->
<!--         <property name="sessionFactory" ref="erpSessionFactory"></property> -->
<!--     </bean> -->

	<bean id="erpTransactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="erpSessionFactory" />
	</bean>

 分布式事务在连接Oracle数据时,可能会报错,错误信息如下:

javax.transaction.xa.XAException 
at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:526) 
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:1038) 
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:138) 
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:687) 
at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java:524) 
at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1859) 
at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2580) 
at java.lang.Thread.run(Thread.java:810)

 可以在Oracle数据库中执行sql语句:

1.grant select on sys.dba_pending_transactions to  username;   
2.grant select on sys.pending_trans$ to username;   
3.grant select on sys.dba_2pc_pending to username;   
4.grant execute on sys.dbms_system to username;  

 

分享到:
评论

相关推荐

    Spring3.0+Hibernate+Atomikos多数据源分布式事务管理

    本教程将聚焦于如何利用Spring 3.0、Hibernate ORM框架以及Atomikos这个开源事务管理器来实现高效、可靠的多数据源分布式事务处理。 **Spring 3.0**: Spring是Java开发中最广泛使用的轻量级框架之一,它提供了一个...

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

    本示例“第二部分spring+hibernate+jta 分布式事务Demo”将帮助我们理解如何在这三个框架之间协同工作,实现高效且可靠的事务管理。 首先,让我们深入了解一下这三个组件: 1. **Spring**:这是一个全面的Java应用...

    Spring4+Hibernate4+Atomikos3.3多数据源事务管理

    本主题将探讨“Spring4+Hibernate4+Atomikos3.3多数据源事务管理”的相关知识点,这是一种实现分布式事务处理的有效方案。 首先,Spring框架是Java企业级应用中的核心组件,它提供了一个统一的依赖注入容器,简化了...

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

    本项目使用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate和MySQL来实现分布式事务处理和多数据源管理,以确保在多个数据库操作之间保持事务的ACID特性。 首先,Spring Boot作为微服务开发的主流...

    spring hibernate atomikos 分布式事务

    这篇博客文章可能详细探讨了如何将Spring、Hibernate和Atomikos整合在一起,以实现分布式事务的管理。在Spring中,事务管理可以通过编程式或声明式的方式实现。编程式事务管理需要在代码中显式地开始、提交或回滚...

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

    本案例主要探讨如何利用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate以及MyBatis,结合MySQL数据库,实现一个跨数据源的分布式事务解决方案。 首先,Spring Boot是一个基于Spring框架的快速开发...

    spring + hibernate + atomikos + mysql (diff database)

    其中Spring是Java企业级应用的核心框架,Hibernate是一个流行的ORM(对象关系映射)解决方案,Atomikos是一个开源的JTA(Java Transaction API)实现,用于处理分布式事务,而MySQL是一个广泛使用的开源关系型数据库...

    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+hibernate+atomikos多数据源

    Spring、Hibernate和Atomikos的组合就是一种强大的解决方案,它们可以协同工作以支持多数据源的分布式事务处理。接下来,我们将深入探讨这些技术以及如何配置它们来实现多数据源。 1. **Spring**: Spring是一个...

    springboot-jpa atomikos 分布式事务管理

    本文将详细讲解"springboot-jpa atomikos 分布式事务管理"这一主题,以及如何在SpringBoot 2.0.5版本中结合JPA、Hibernate和MyBatis实现多数据库事务控制。 首先,SpringBoot是一个简化Spring应用开发的框架,它...

    spring 结合druid和hibernate使用jta配置分布式事务

    在Spring中配置Druid和Hibernate结合Atomikos进行分布式事务管理的步骤如下: 1. **引入依赖**:在项目中添加Spring、Druid、Hibernate、Atomikos相关的Maven或Gradle依赖。 2. **配置Atomikos**:创建Atomikos的...

    开源分布式事务管理组件Atomikos

    Atomikos,是一个基于Java的开源事务管理器,提供了事务管理和连接池,不需要应用服务器支持,支持JDBC和JMS事务,能提供对Spring,Hibernate的集成,有兴趣多了解的可以直接参考说明文当,有详细的介绍和使用说明。

    基于mysql,SpringBoot 分布式事务例子

    总结来说,学习SpringBoot的分布式事务处理需要理解分布式事务的基本概念、Spring的事务管理机制以及如何在MySQL环境中配置和使用。"spring-boot-example"项目提供了一个实战平台,让你能亲手实践这些理论知识,加深...

    Java 分布式事务(多数据源)

    6. **开源工具和库**:如Atomikos、Bitronix等事务管理器,以及MyBatis Plus、Hibernate等ORM框架,它们在处理分布式事务时提供了强大的支持。 7. **补偿事务(Compensating Transaction, CTS)**:当事务操作无法...

    spring-jta-atomikos:JTA,JPA,Hibernate和Atomikos的Spring项目

    JTA是Java平台中用于管理分布式事务的标准API,而Atomikos是一个开源的事务管理器,它支持JTA,并且在分布式环境中提供了强一致性的事务处理能力。JPA(Java Persistence API)和Hibernate则是两个常见的对象关系...

    atomikos-transactions-hibernate3.jar.zip

    总的来说,Atomikos Transactions Hibernate3.jar是Java开发人员在处理分布式事务时的一个强大工具,它可以与Hibernate3无缝集成,提升应用程序的健壮性和可扩展性。在实际项目中,正确配置和使用这个库能够极大地...

    跨多个数据库操作,同时连接两个一上的数据库,用事物关联起来

    JTA是Java平台上的标准,用于管理分布式事务,它允许"同时连接两个或以上的数据库"。 JTA提供了统一的API,使得开发者可以在不同的事务资源(如数据库、消息队列等)之间进行协调。在Java环境中,Spring框架是实现...

Global site tag (gtag.js) - Google Analytics