`
364434006
  • 浏览: 593550 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring使用JTA进行分布式事务管理

阅读更多

使用SpringJTA进行分布式事务管理,需要引入第三方UserTransaction。例如:JOTM、Atomikos



JOTM (Java Open Transaction Manager)是一个独立的开源事务管理器,它实现了 XA 协议并且与 JTA API 兼容。



Atomikos是一个公司的名字,AtomikosTransactionsEssentials是其开源的分布式事务软件包,而ExtremeTransactions是商业的分布式事务软件包。TransactionsEssentials是基于apache-license的,是JTA/XA的开源实现,支持Java Application和J2EE应用。

 


这里使用的是Atomikos作为事务管理器。

 

  将Atomikos的dist目录下的所有jar包复制到工程下

 

   配置DataSource:

<bean id="ds1" class="com.atomikos.jdbc.AtomikosDataSourceBean"
		init-method="init" destroy-method="close">
		<property name="uniqueResourceName">
			<value>oracle/ds1</value>
		</property>
		<property name="xaDataSourceClassName">
			<value>oracle.jdbc.xa.client.OracleXADataSource</value>
		</property>
		<property name="xaProperties">
			<props>
				<prop key="URL">jdbc:oracle:thin:@localhost:1521:orcl</prop>
				<prop key="user">test1</prop>
				<prop key="password">test1</prop>
			</props>
		</property>
		<property name="poolSize">
			<value>2</value>
		</property>
		<property name="maxPoolSize">
			<value>30</value>
		</property>
	</bean>

 

   配置SessionFactory:

 

       <bean id="oracleSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="ds1"></property>
		<property name="packagesToScan" value="org/liny/entity"/>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
			</props>
		</property>
	</bean>
 

 

  配置JTA事务:

 

<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"/>
    
    <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="jtaTxManager"
		class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="userTransaction" ref="atomikosUserTransaction"></property>
		<property name="transactionManager" ref="atomikosTransactionManager"></property>
	</bean>
<tx:annotation-driven transaction-manager="jtaTxManager"/>

 

在使用的过程中可能会出现诸多异常问题,大多是各个数据库权限问题引起的,这里整理出来些:

例如:

exception:【com.atomikos.datasource.ResourceException: Error in recovery 】

解决:

 

以SYSDBA登录SQL Plus

grant select on sys.dba_pending_transactions to 当前数据库用户; 

grant select on sys.pending_trans$ to 当前数据库用户

grant select on sys.dba_2pc_pending to 当前数据库用户

grant execute on sys.dbms_system to 当前数据库用户

 

 

 

到这里使用Spring的JTA分布式事务管理就搞定了。


分享到:
评论

相关推荐

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

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

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

    本文将详细讲解如何利用Spring Boot、Atomikos、JPA(Java Persistence API)以及MySQL来实现JTA(Java Transaction API)分布式事务。 首先,Spring Boot是一个轻量级的框架,它简化了基于Spring的应用程序开发...

    spring + JTA + JOTM实现分布式事务

    本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...

    spring+jotm+ibatis+mysql实现JTA分布式事务

    总的来说,这个项目展示了如何利用Spring的事务管理能力,结合JOTM作为事务协调器,以及iBATIS作为数据访问层,实现基于MySQL的JTA分布式事务处理。这不仅有助于理解分布式事务的原理,也为实际开发提供了可参考的...

    jta分布式事务完成例子,测试通过

    例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...

    Spring Boot+Druid+Mybatis实现JTA分布式事务

    理解这些概念并正确配置,是确保JTA分布式事务正常运行的关键。 通过以上步骤,你可以在Spring Boot项目中成功集成Druid、Mybatis和JTA,实现分布式事务。这种技术在处理高并发、大数据量的业务场景中非常有用,...

    Springboot 动态多数据源 jta分布式事务

    总之,Spring Boot的多数据源和JTA分布式事务功能为企业级应用提供了强大的支撑,让开发者可以灵活地处理复杂的数据操作和事务管理。如果你是初学者,通过在线教程和提供的`demo`项目,相信你能够快速掌握这一技能。

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

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

    分布式事务操作之Spring+JTA+mybatis源码

    本话题主要聚焦于如何在Spring框架中结合Java Transaction API (JTA) 和 MyBatis 实现分布式事务管理。下面我们将详细探讨相关知识点。 1. **分布式事务**:在分布式系统中,事务处理跨越多个资源或服务,例如...

    Spring+JOTM 分布式事务管理

    Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM(Java Open Transaction Manager)来处理分布式事务。本文将深入探讨Spring与JOTM结合使用的知识点,帮助...

    spring + JTA + atomikos 实现分布式事务

    Spring 框架提供了强大的事务管理能力,而JTA(Java Transaction API)是Java平台上的标准分布式事务处理接口。Atomikos 是一个开源的JTA实现,它为Spring提供了一个轻量级、高性能的分布式事务解决方案。本文将深入...

    Spring多数据源分布式事务管理

    总的来说,Spring多数据源分布式事务管理是一项复杂的任务,涉及到Spring的AOP、数据源路由、事务管理等多个方面。通过Atomikos这样的JTA实现,我们可以有效地解决分布式环境下的事务一致性问题。同时,结合Druid和...

    SpringJTA分布式事务_hy5.zip

    SpringJTA分布式事务_hy5

    SpringJTA分布式事务-hy4.zip

    SpringJTA分布式事务_hy4.zip

    Spring配置JTA事务管理

    Spring框架在企业级Java应用中广泛用于实现事务管理,而JTA(Java Transaction API)是Java平台上的标准事务处理API,适用于分布式环境。本篇文章将深入探讨如何在Spring中配置JTA事务管理,以实现跨数据库和资源的...

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

    本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...

    spring JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

    本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为事务管理器来实现分布式事务。 首先,我们需要理解JTA的核心概念。JTA是Java EE平台的一部分,提供了...

    Spring分布式事务实现

    在Spring中,当需要处理分布式事务时,可以使用PlatformTransactionManager接口的实现,例如JtaTransactionManager,它是基于JTA的。Spring会自动检测到`jotm.properties`配置文件,并自动配置JOTM作为事务管理器。`...

    Spring+Jotm+Hibernate+Oracle+Junit 实现JTA分布式事务要求Demo工程

    2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...

Global site tag (gtag.js) - Google Analytics