`

JTA事务总结(一)

    博客分类:
  • jta
阅读更多
自:http://blog.sina.com.cn/s/blog_661a3fce0100mshi.html

今天在weblogic在对几种JTA的应用场景进行了测试,总结如下:  

测试代码片段:

public void doTest()throws Exception{
        UserTransaction tx = null;
        try{
                Context ctx = new InitialContext();
                tx = (UserTransaction)ctx.lookup("javax.transaction.UserTransaction");                 
                tx.begin();

                doResource1();                
                doResource2();                  
               
                tx.commit();           
            }catch(Exception e){
                e.printStackTrace();
                if(tx != null){
                    tx.rollback();
                }
            }
    }

    private void doResource1()throws Exception{
            ...
            DataSource ds = (DataSource) ctx.lookup("A|B|C|D|E");                          
            con = ds.getConnection();    
            ...
    }

    private void doResource2()throws Exception{
            ...
            DataSource ds = (DataSource) ctx.lookup("A|B|C|D|E");                          
            con = ds.getConnection();    
            ...
    }

共创建了五个连接池以及对应的数据源

A: OracleLocalDataSource 
B: OracleLocalDataSource2
C: OracleXADataSource
D: OracleXADataSource2
E: MysqlLocalDataSource

A、B:【oracle.jdbc.driver.OracleDriver】
C、D:【oracle.jdbc.xa.client.OracleXADataSource】
E:【org.gjt.mm.mysql.Driver】

Mysql没有支持分布式的XA驱动程序


对于doResource1和doResource2所用不同数据源类型搭配测试情况如下:

[A-A]:运行成功,且weblogic进行了优化,两次操作获得的con其实是同一个连接对象
[A-B]:运行失败,不允许在一次事务中从不同的数据库获取local事务类型的连接
[A-E]:运行失败,不允许在一次事务中从不同的数据库获取local事务类型的连接
[A-D]:在允许Emulate Two-Phase Commit for non-XA Driver的情况下成功,否则失败
[C-C]:运行成功,但是不像(A-A)的情况,两次获得con的对象不是同一个对象,weblogic并为对该情况进行优化
[C-D]:运行成功,这是典型的2PC(two-phase transaction commit process)用于分布式多资源的应用情况

对于C、D的XA类型驱动程序,weblogic默认不允许通过con.setAutoCommit(false)的方式进行事务启动,可以通过允许(Supports Local Transaction)选项启动本地事务。

分享到:
评论

相关推荐

    Java中JDBC事务与JTA分布式事务总结与区别

    JTA事务通常与JNDI(Java Naming and Directory Interface)和XAResource接口一起工作,使得应用程序可以透明地访问和管理分布式事务。使用JTA事务时,开发者不再直接控制Connection的事务,而是由事务管理器(如...

    Spring+iBatis+JOTM实现JTA事务

    - **概述**:JOTM是Jakarta Object Transaction Manager的缩写,是一个开源的JTA事务管理器,能够在脱离J2EE容器的情况下实现分布式事务管理。 - **用途**:为不使用J2EE容器的应用程序提供事务管理服务。 #### ...

    JTA 分布式事务 XAPool 1.5和1.6的所有jar包,源码包

    同时,还需要考虑与JTA事务管理器(如Atomikos、Bitronix等)的集成,以实现完整的分布式事务处理。 总结来说,XAPool是JTA分布式事务处理的重要组件,提供了一种高效的数据库连接池解决方案,对于构建大规模、高...

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

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

    跨数据库的事务管理配置jta

    在提供的XML配置示例中,我们可以看到Spring框架是如何配置两个不同的数据源,并为它们设置JTA事务管理器的。 ##### 数据源配置 首先,我们来看数据源的配置部分: ```xml <value>200 <value>70...

    Java事务处理总结[归类].pdf

    2. JTA事务提供了一种更高级别的、与实现和协议无关的API,允许应用程序执行分布式事务,涉及多个网络资源和数据库。JTA支持通过实现`javax.sql.XADataSource`、`javax.sql.XAConnection`和`javax.sql.XAResource`...

    Jta的jar包

    **标题与描述解析** ...总结,JTA和JBarcode分别代表了Java环境中处理分布式事务和生成条形码的两个重要工具。在开发企业级Java应用,特别是涉及数据库操作和跨系统数据交换时,理解和使用这些技术是非常关键的。

    Java事务处理总结

    根据应用场景的不同,可以选择使用JDBC事务、JTA事务或容器事务等不同的事务处理方式。每种方式都有其特定的应用场景和优势,开发者应根据具体需求选择最合适的事务处理机制。通过合理利用这些事务管理技术,可以...

    JTA1.2规范

    2. **事务管理器**:事务管理器是 JTA 规范中的关键组件之一,负责协调和管理事务的生命周期,包括事务的开始、提交或回滚等操作。 3. **资源管理器**:资源管理器代表实际存储数据的系统,如数据库管理系统或消息...

    最新的 jta包 用于quartz缺少jar

    如果是在非Spring环境中,可能需要手动配置JTA事务管理器。 总结来说,解决"最新的jta包用于quartz缺少jar"的问题,你需要做以下几步: 1. 将`jta-1.3.1(1)`解压并添加到项目类路径。 2. 检查并更新Quartz的配置...

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

    总结来说,集成Spring、JTA、JOTM或Atomikos进行分布式事务处理,是提高系统扩展性和可靠性的重要手段。通过上述步骤,开发者能够在Tomcat应用服务器上实现跨数据库的事务一致性,从而构建更健壮的分布式应用。

    Java事务总结.docx

    ### Java事务总结 #### 事务的基本概念与属性 在计算机科学中,特别是在数据库管理系统中,**事务**是一种机制,用于确保一系列操作作为一个整体被执行。事务包含三个基本的行为:开始事务、提交事务以及回滚事务...

    java事务处理总结

    JTA事务管理 JTA(Java Transaction API)是Java平台标准的事务API,它提供了一个更为高级的事务管理模型,适用于分布式事务场景。JTA支持多数据源、消息队列等多种资源的事务协调。JTA的核心接口包括: - `...

    Java分布式开发spring+jta+jotm

    JOTM 是一个开源的JTA事务管理器,实现了X/Open XA规范,允许跨多个资源进行分布式事务处理。它与各种数据库和JMS提供者兼容,为Java应用提供了强大的事务管理能力。JOTM可以在Spring框架中无缝集成,通过Spring的...

    geronimo-jta_1.1_spec-1.1-sources.jar.zip

    Hibernate作为流行的Java持久层框架,提供了对JTA事务的支持。在Java EE环境中,结合Geronimo JTA,可以实现全局的事务管理。以下是如何在Hibernate中配置和使用Geronimo JTA 1.1的步骤: 1. 配置Hibernate:在...

    JAVA事务配置总结

    在Java中,我们可以使用JDBC的Connection对象的commit()和rollback()方法来手动管理事务,或者利用Java Transaction API (JTA)的UserTransaction接口进行声明式事务管理。在Spring框架中,可以使用@Transactional...

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

    在Hibernate中,JTA事务应用总结通常会讲解如何配置Hibernate以使用JTA,以及在多数据源环境下如何处理事务。 跨库事务处理,如在spring+hibernate+struts2+jta的项目中,需要考虑的细节更多,包括异常处理、回滚...

    集成jta-atomikos 实现分布式事务.zip

    总结来说,集成`jta-atomikos`实现在SpringBoot中的分布式事务管理是一项复杂但至关重要的任务。通过添加Atomikos的依赖、配置事务管理器以及在服务层使用`@Transactional`注解,我们可以确保在分布式环境下的操作...

    详解Hibernate事务处理机制

    - **JTA事务管理**:更高级的一种事务管理模式,用于分布式环境中多个资源管理器之间的事务协调。这种方式通常与EJB容器一起使用。通过配置`hibernate.transaction.factory_class`为`...

    springmvc3注解+mybatis+JTA+jboss7.1下多个数据源配置(一)

    4. **事务管理器**:配置JtaTransactionManager,它是Spring对JTA事务管理的封装。通过设置`transactionManager`属性,使其能够管理多个数据源的事务。 5. **Service层**:在服务层接口和实现类中,使用`@...

Global site tag (gtag.js) - Google Analytics