`
transray
  • 浏览: 39280 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多
通过webwork+spring+hibernatep实现分布式事务(JTA),采用容器必须应用服务器(weblogic,webspere,jboss,jonas等)。实现JTA主要有三个步骤,1.设置数据源,2.配置srping,及hiberante相应配置文件,3.在程序中编写代码。测试时候采用二个数据库,全是采用mysql +weblogic4.0版本。

1.在weblogic设置数据源

   首先配置二个连接池:mysqlpool1、mysqlpool2,分别对应二个两个数据库 test1,test2

   然后配置二个txDataSource:ds1、ds2

配置如下:


    <JDBCConnectionPool DriverName="org.gjt.mm.mysql.Driver"

        Name=" mysqlpool1"
        PasswordEncrypted="{3DES}9hRoxaA7+106d9AbXZ8e2g=="
        Properties="user=root" Targets="myserver"
        TestTableName="SQL SELECT 1" URL="jdbc:mysql://localhost:3306/test1"/>

   <JDBCConnectionPool DriverName="org.gjt.mm.mysql.Driver"

        Name=" mysqlpool2"
        PasswordEncrypted="{3DES}9hRoxaA7+106d9AbXZ8e2g=="
        Properties="user=root" Targets="myserver"
        TestTableName="SQL SELECT 1" URL="jdbc:mysql://localhost:3306/test1"/>

    <JDBCTxDataSource JNDIName="ds1" Name=" mysqlpool1"
        PoolName="mysqlpool1" Targets="myserver"/>

    <JDBCTxDataSource JNDIName="ds2" Name=" mysqlpool1"
        PoolName="mysqlpool2" Targets="myserver"/>

2.配置srping,及hiberante相应配置文件
配置二个相对应的 hibernate.cfg..xml文件:Test1.cfg.xml、Test2.cfg.xml配置文件
主要是引用应用服务器的数据源及Mapping files相关配置

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.datasource">
           Ds1
        </property>

        <!-- following is c3p0 connection pool setting-->
        <property name="hibernate.c3p0.min_size">

            5
        </property>

        <property name="hibernate.c3p0.max_size">

            500
        </property>

        <property name="hibernate.c3p0.timeout">

            1800
        </property>

        <property name="hibernate.c3p0.max_statements">

            50

        </property> 

        <!--dialect-->

        <property name="dialect">
            net.sf.hibernate.dialect.MySQLDialect
        </property>

        <!-- show sql -->
        <property name="hibernate.show_sql">
            True
        </property>

        <!-- use out join-->

        <property name="hibernate.use_outer_join">
            True
        </property>

       <!--use cache-->

       <property name="hibernate.cache.use_query_cache"> 

       </property>

        <!-- Transaction Manager Type, here use JDBC Transaction

        <property name="hibernate.transaction.factory_class">
            net.sf.hibernate.transaction.JDBCTransactionFactory
        </property>
       -->

        <property name="transaction.factory_class">
            net.sf.hibernate.transaction.JTATransactionFactory
        </property>
      <property name="jta.UserTransaction">
       java:comp/UserTransaction
       </property>

       <!-- Mapping files -->
       <mapping resource="com/eastsun/model/Test2.hbm.xml"/>
       <mapping resource="com/eastsun/model/Test.hbm.xml"/>
    </session-factory>
</hibernate-configuration> 

另外一个配置文件就同基本上一样的。只修改hibernate.connection.datasource的属性值为ds2

Spring.xml配置文件

主要是配置二个数据源相对应的sessionFactory,再配置一个JTA(myTransactionManager),然后再配置bean。在两个Bean后引用对应的sessonFactory及JTA(myTransactionManager)

    <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="sessionFactory1" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" singleton="true">
       <property name="configLocation">
       <value>classpath:spring1.cfg.xml</value>
       </property>

       </bean>

       <bean id="sessionFactory2" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" singleton="true">
       <property name="configLocation">
       <value>classpath:spring2.cfg.xml</value>
       </property>
       </bean>

    <bean id="myTransactionManager"
       class="org.springframework.transaction.jta.JtaTransactionManager" />

    <bean id="entityDao1"
       class="com.eastsun.common.persistence.EntityDaoImpl"
       singleton="true">
       <property name="sessionFactory">
           <ref bean="sessionFactory1" />

       </property>
    </bean>
    <bean id="entityDao2"
       class="com.eastsun.common.persistence.EntityDaoImpl"
       singleton="true">
       <property name="sessionFactory">
           <ref bean="sessionFactory2" />
       </property>
    </bean>
    <bean id="spring1"





       class="com.eastsun.businesslogic.test.Spring1Impl" singleton="true">





       <property name="sessionFactory">





           <ref bean="sessionFactory1" />





       </property>  





       <property name="transactionManager">





           <ref bean="myTransactionManager" />





       </property>





    </bean>





       <bean id="spring11"





       class="com.eastsun.businesslogic.test.Spring11Impl" singleton="true">





       <property name="sessionFactory">





           <ref bean="sessionFactory1" />





       </property>  





       <property name="transactionManager">





           <ref bean="myTransactionManager" />





       </property>





    </bean>











    <bean id="spring2"





       class="com.eastsun.businesslogic.test.Spring2Impl" singleton="true">





        <property name="sessionFactory">





           <ref bean="sessionFactory2" />





       </property>  





       <property name="transactionManager">





           <ref bean="myTransactionManager" />





       </property>





    </bean>





</beans>











3.       在程序中编写代码





在第一数据库插入数据库能正常插入,在另外一个数据库插入的时候没有加设置主键ID,这样就会出异常,如果第一次插入的数据也能回滚,不会持久化到数据库,这样就说明JTA事务成功了。





    public String insertData(String data){





        Session session = null;





        Transaction tx = null;





        Test test = new Test();





        try{





            AppLog.message("...........insertData...............................");





            session = getSession(true);





            Spring2 spring2 =(Spring2)ServiceLocatorOfTest.getInstance("spring1.xml").getService("spring2");





            spring2.insertData(UUIDGen.getUUID(),UUIDGen.getUUID());





            tx = session.beginTransaction();    





        





            test.setTestId(UUIDGen.getUUID());





            test.setName(data);





            session.save(test);





            tx.commit();





        }catch(Exception e){





            AppLog.message("...........insertData.....Exception..........................");





            





           try{ if(tx!=null)tx.rollback();}catch(Exception ex){};





            e.printStackTrace();





        }finally{





            try{





            if(session!=null){





                session.close();





            }





            }





            catch(Exception e1){





                e1.printStackTrace();





            }





        }





        return "success";





}
分享到:
评论
1 楼 xinghaifeng2006 2010-03-02  
首先配置二个连接池:mysqlpool1、mysqlpool2,分别对应二个两个数据库 test1,test2 

相关推荐

    EJB中的JTA与JTS例子代码

    EJB中的JTA与JTS例子代码,JTA是一种高层的,与实现无关的,与协议无关的J2ee API,应用程序和应用服务器可以使用JTA来访问事务。JTS则规定了支持JTA的事务管理器的实现规范,在高层API之下实现了OMG Object ...

    JTA事务源码示例

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

    jta使用手册,jta帮助文档jta使用手册,jta帮助文档

    jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta...

    geronimo-jta-1.1-spec-1.1.1-API文档-中文版.zip

    赠送jar包:geronimo-jta_1.1_spec-1.1.1.jar; 赠送原API文档:geronimo-jta_1.1_spec-1.1.1-javadoc.jar; 赠送源代码:geronimo-jta_1.1_spec-1.1.1-sources.jar; 赠送Maven依赖信息文件:geronimo-jta_1.1_spec...

    最新的JTA规范.pdf

    最新的JTA规范.(英文版)学习ejb的必备手册

    在Spring中使用JTA事务管理

    在Spring中使用JTA事务管理 1 通过集成JOTM,直接在Spring中使用JTA事务 1.1. 将JOTM以下类库添加到类路径中 1.2. 编写JOTM配置文件,放到类路径下 1.3. 在MySQL上建立两个数据库 1.4. 在Spring配置文件中配置JOTM ...

    解决Missing artifact javax.transaction:jta:jar:1.0.1B

    1. 解压文件得到:jta-1_0_1B-classes.zip 2. cmd进入zip文件所在目录 3. 执行下面命令从本地安装: mvn install:install-file -Dfile=./jta-1_0_1B-classes.zip -DgroupId=javax.transaction -DartifactId=jta -...

    jta.jar包;jta.jar包

    jta.jar包;jta.jar包

    springboot+jta+atomikos

    springboot+jta+atomikos Springboot+atomikos+jta实现分布式事务统一管理

    jta1.1.jar jta1.3.1.jar

    最近往javaEE项目中集成quartz2.2.1时,要用到jta的jar包,下载了最新版的jta-4.0.jar后,发现不能使用,于是又下载了1.1和1.3.1版本的jar包,比较了一下,发现4.0版本的jar包,包名跟以前版本的不一样。quartz2.2.1...

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

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

    JTA1.1规范(sun)

    JTA1.1规范,包括jta-1_1-spec.pdf,jta-1_1-classes.zip,jta-1_1-doc.zip

    Jta的jar包

    jbarcode-0.2.8,jbarcodebean-1.2.0,jta-1.0.1B,jta-1.1我找了半天 现在分享出来

    jta-api.jar

    jta-api.jar

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

    多数据源事务可采用jta+atomikos方式来解决事务问题。

    jta.jar完整下载

    jta.jarjta.jarjta.jarjta.jar

    quartz_jta_collections

    执行Quartz所需三个jar包 quartz-all-1.6.0.jar jta-1.1.jar commons-collections.jar

    jta-1.0.1.jar

    jta-1.0.1.jar

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

    Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源,分别向两个不同的数据里面插入数据同时失败和成功,调用接口方式原理一样。

    SpringBoot+JPA+JTA(可选)+JdbcTemplate多数据源配置源码

    本资源包含了两个子项目,分别进行了springboot+jpa+jdbcTemplate的多数据源独立事务配置和jta分布式事务配置,并针对不同的情况编写了事务配置测试接口,还演示了JPA的domain一对多自动生成数据库表且不生成数据库...

Global site tag (gtag.js) - Google Analytics