`
madrocket
  • 浏览: 17310 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

请您先登录,才能继续操作

全局事务jta小探(一)

阅读更多

JTA事务

环境介绍

整合前

 

系统A

系统B

框架

B/S

C/S

服务器

tomcat5.5

glassfish-v2ur2

展现层

webwork2.2.6(JSP+ftl+applet)

swing

连接层

spring2.0.7

数据库访问

hibernate3.2.5

JDBC

数据库

Sqlserver2000

oracle9i

整合后

框架

C/S+S/B

服务器

glassfish-v2ur2

展现层

webwork2.2.6(JSP+ftl+applet)+ swing

连接层

spring2.0.7

数据库访问

hibernate3.2.5+ JDBC

数据库

oracle9i

 

 

应用场景:

系统A调用系统B所暴露的service

下面的伪代码:

1. Class A{

2.    Public static Void main(String[] args){

3.      aMethod();

4.      Bservice  bService=new BServeiceImpl();

5.      bService. bMethod ();

6.   }

7.   Public static void aMethod(){

8.     //todo insert or update database(“insert into table --------==”)

9.   }

10.  }

A系统和B系统的数据库目前共用一个,但是以后随着业务的发展又可能用不同的数据库

那么在调用的时候如何做到事务一致呢?

解决方案

针对以上的要求有下面两种思考:

一、同一数据库:

1. 客户数据库操作与我们的服务使用同一个数据库连接。然后编程处理事务。存在两种方式:一种是把客户的连接传给我们,另一种则是把我们的连接传给客户。第一种方式对我们的影响太大,所以最后决定采用后一种方式:从hibernate session中获取connection然后传递给客户。接下来查看一下HibernateTemplateexecute()方法,思路就很简单了:获取定义的sessionFactory-->创建一个新的session并打开-->session与当前线程绑定-->给客户代码返回connection-->打开事务-->客户使用我们传递的connection进行数据库操作-->我们不带声明事务的服务操作-->提交事务-->解除绑定。
实际要注意的地方是1、将session与当前线程绑定使用的TransactionSynchronizationManager.bindResource()方法,这样在HibernateTemplate里才能找到session
2
、我们的服务一定要把声明式事务彻底干掉,否则会有commit;

3、我们服务调用完毕后一定要flush session,否则客户代码不会感知数据库里的数据变化。
最终解决:使用了spring里常用的模板和回调。

详细代码请访问:http://www.blogjava.net/RongHao/archive/2007/10/09/151411.html

二、不同数据库

采用JTA事务

期待的方式:

  1. Class A{

2.    Public static Void main(String[] args){

3. Try{

4. //JTA事务开始

5.      aMethod();

6.      Bservice  bService=new BServeiceImpl();

7.      bService. bMethod ();

8. //JTA事务提交

9. }catch{

10.  //JTA事务回滚

}

下面将详细的介绍从glassfish数据源配置、spring数据源配置、JNDI数据源调用等配置

笔者默认用户已经安装了glassfishoracle(安装过程可以google相关文章)

glassfish数据源配置

http://localhost:4848/ 进入glassfish的管理页面

 

 

 

  • 大小: 8.2 KB
分享到:
评论

相关推荐

    多数据源事务jta测试

    3. **开始事务**:通过UT接口启动一个新的全局事务。 4. **执行操作**:在事务内对每个数据源执行相应的操作。 5. **提交或回滚**:根据操作结果,决定是提交还是回滚事务。 博客可能还讨论了以下几个关键点: - **...

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

    JTA是Java平台中处理分布式事务的标准API,它允许应用程序在一个全局事务中操作多个资源(如数据库、消息队列等)。Spring Boot支持JTA事务管理,主要通过以下组件实现: 1. Atomikos:这是一个开源的JTA实现,提供...

    分布式事务JTA之实践:Spring+ATOMIKOS

    JTA是Java平台提供的一种标准API,用于管理跨越多个资源(如数据库、消息队列等)的事务。它定义了开始、提交、回滚事务以及参与事务的资源管理器接口。通过JTA,我们可以实现分布式事务的一致性,即使在分布式环境...

    JDBC事务 JTA事务 传播特性 隔离级别

    在2PC中,事务处理监视器(TPM)先询问所有资源管理器(如数据库)是否准备好提交,然后再决定全局提交或回滚。JTA事务更复杂,但能保证分布式事务的一致性。 最后,我们提到的是**事务的传播特性**,这是Spring...

    JDBC事务和JTA(XA)事务

    使用JTA事务可以确保分布式事务的一致性和可靠性,例如,在一个分布式事务中,如果某个资源管理器执行失败,可以使用rollback()方法来回滚事务,以确保分布式事务的一致性。 JTA事务工作流程 JTA事务工作流程可以...

    JTA分布式事务使用示例代码

    JTA(Java Transaction API)是Java平台上的一个标准接口,用于处理分布式事务,它允许应用程序在不同的数据源之间进行协调,确保事务的ACID特性(原子性、一致性、隔离性和持久性)。本示例代码旨在展示如何在Java...

    使用JTA实现跨库事务

    在提供的"SimpleDemo"示例中,可能包含了一个简单的JTA事务管理的例子,比如如何在Java代码中启动和结束一个事务,以及如何在事务中操作数据库。具体实现细节可能包括使用JPA、JDBC或其他持久化框架与JTA集成的方法...

    事务处理:JTA事务

    JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。  要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。

    多数据源事务之解决方案jta+atomikos

    "多数据源事务之解决方案jta+atomikos"这个主题正是针对这一挑战提出的。JTA(Java Transaction API)和Atomikos是两个关键的组件,它们一起为Java应用提供了强大的分布式事务管理能力。 首先,JTA是Java平台企业版...

    springboot整合JTA组件,多数据源事务管理

    一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中 2、分布式事务 分布式事务(DistributedTransaction)包括事务管理器...

    Spring配置JTA事务管理

    JTA是一个规范,它定义了接口和API,使得应用程序可以控制跨越多个数据存储(如数据库、消息队列等)的事务。它允许开发者编写无感知具体事务实现的代码,从而提高代码的可移植性和可维护性。 Spring通过...

    03_传智播客JPA详解_搭建JPA开发环境和全局事务介绍

    在JPA中,我们可以使用JTA(Java Transaction API)来处理全局事务。 **全局事务的应用**: 1. **声明式事务管理**:在Spring框架中,可以通过@Transactional注解实现声明式事务管理,只需在需要事务的方法上添加此...

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

    通过JTA,应用可以协调不同资源管理器(如数据库、JMS提供者等)中的事务,实现全局事务。 4. **MyBatis**:MyBatis 是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,提供灵活的...

    tomcat 配置JTA事务

    在tomcat 中配置JTA 事务,方便管理web项目

    JTA事务源码示例

    Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...

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

    JTA是Java平台的标准事务API,它允许应用程序进行跨多个数据源(如数据库或消息队列)的全局事务处理。通过JTA,开发者可以编写不关心具体事务管理细节的代码,这样就提高了代码的可移植性和可维护性。 JOTM则是JTA...

    java实现JTA简单例子

    3. **XAResource**:这是JTA定义的一个接口,表示能够参与全局事务的资源。例如,数据库连接、JMS队列等。每个参与事务的资源都必须实现这个接口。 4. **Xid**:代表一个全局事务的唯一标识,由三部分组成:全局...

    jta.jar包;jta.jar包

    jta.jar文件是这个API的实现库,它包含了一系列类和接口,允许应用程序在不同的数据存储系统间进行协调一致的事务操作。在Java应用中,特别是在企业级Java应用服务器如JEE环境中,JTA扮演着关键角色,确保数据的一致...

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

    Spring支持JTA(Java Transaction API),这是一个Java标准,用于定义应用程序与事务管理器之间的接口,使得在分布式环境中进行事务处理变得可能。 JOTM(Java Open Transaction Manager)是Java世界中的一个开源...

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

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

Global site tag (gtag.js) - Google Analytics