zoukankan      html  css  js  c++  java
  • java分布式事务

    1.现有方案

    a.atomikos

    b.jotm

    说明:spring3.0已将jotm的支持踢掉

    2.使用atomikos时的pom.xml内容

    <!-- 分布式事务支持-atomikos-begin -->
            <dependency>
                <groupId>javax.transaction</groupId>
                <artifactId>jta</artifactId>
                <version>1.1</version>
            </dependency>                    
            <dependency>
                <groupId>com.atomikos</groupId>
                <artifactId>transactions</artifactId>
                <version>3.9.1</version>
            </dependency>
            <dependency>
                <groupId>com.atomikos</groupId>
                <artifactId>transactions-api</artifactId>
                <version>3.9.1</version>
            </dependency>
            <dependency>
                <groupId>com.atomikos</groupId>
                <artifactId>transactions-jta</artifactId>
                <version>3.9.1</version>
            </dependency>
            <dependency>
                <groupId>com.atomikos</groupId>
                <artifactId>transactions-jdbc</artifactId>
                <version>3.9.1</version>
            </dependency>
            <dependency>
                <groupId>com.atomikos</groupId>
                <artifactId>atomikos-util</artifactId>
                <version>3.9.1</version>
            </dependency>                                                                    
            <!-- 分布式事务支持-atomikos-end --> 

    3.使用atomikos时不能使用不支持jta的连接池如c3p0

    4.spring配制如下:

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
            <property name="location" value="classpath:db.properties"/> 
        </bean>    
        <bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"  lazy-init="true">
             <property name="uniqueResourceName" value="dataSource" />
            <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
            <property name="xaProperties">
                <props>   
                    <prop key="url">${db.url}</prop>
                    <prop key="user">${db.username}</prop>
                    <prop key="password">${db.password}</prop>
               </props>
            </property>
            <property name="poolSize" value="10"/>
            <property name="maxPoolSize" value="100"/>
        </bean>    
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource">
                <ref bean="dataSource" />
            </property>
        </bean>
            
        <bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp" init-method="init" destroy-method="shutdownForce">
            <constructor-arg>
                <props>
                    <prop key="com.atomikos.icatch.service">com.atomikos.icatch.standalone.UserTransactionServiceFactory</prop>
                </props>
            </constructor-arg>
        </bean>
    
        <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close" depends-on="userTransactionService">
            <property name="forceShutdown" value="false" />
        </bean>
    
        <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService">
            <property name="transactionTimeout" value="300" />
        </bean>
    
        <bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="userTransactionService">
            <property name="transactionManager" ref="atomikosTransactionManager" />
            <property name="userTransaction" ref="atomikosUserTransaction" />
        </bean>
    
        <tx:annotation-driven transaction-manager="jtaTransactionManager" />

    5.service里采用标签来实现事务如下:

    @Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)
    public void TestTransaction() throws Exception{
    }

     6.特别说明:

    有人提出:使用spring的代理datasource来让spring管理事务,性能问题解决,提高8倍,见下面的连接

    http://blog.sina.com.cn/s/blog_53765cf9010176zx.html

    我还没有证实,找时间来看一下

  • 相关阅读:
    VC++文件操作之最全篇
    MFC六大核心机制之五、六:消息映射和命令传递
    MFC六大核心机制之四:永久保存(串行化)
    MFC六大核心机制之三:动态创建
    MFC六大核心机制之二:运行时类型识别(RTTI)
    MFC六大核心机制之一:MFC程序的初始化
    VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
    VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)
    java并发系列(四)-----源码角度彻底理解ReentrantLock(重入锁)、AQS
    java并发系列(三)-----ReentrantLock(重入锁)功能详解和应用演示
  • 原文地址:https://www.cnblogs.com/cerxp/p/3468097.html
Copyright © 2011-2022 走看看