zoukankan      html  css  js  c++  java
  • spring+mybatis+Atomikos JTA事务配置说明

    一、概览

    Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品。产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransactions。

    TransactionEssentials的主要特征:

    • JTA/XA 事务管理 —— 提供事务管理和连接池
    • 不需要应用服务器 —— TransactionEssentials可以在任何Java EE应用服务器中运行,也就是不依赖于任何应用服务器
    • 开源 —— TransactionEssentials是遵守Apache版本2许可的开源软件
    • 专注于JDBC/JMS —— 支持所有XA资源,但是资源池和消息监听是专供JDBC和JMS的
    • 与Spring 和 Hibernate 集成 —— 提供了描述如何与Spring和Hibernate集成的文档

    ExtremeTransactions 是基于TransactionEssentials之上的,增加了对非XA事务的支持,在servlet容器中提供了图形化管理控制面板。Atomikos还提供了基于订阅的支持服务,一份订阅可以得到访问ExtremeTransactions中额外功能的权限。

     

    二、什么是Atomikos TransactionsEssentials

    Atomikos TransactionsEssentials 是一个为Java平台提供增值服务的并且开源类事务管理器,以下是包括在这个开源版本中的一些功能:

    • 全面崩溃 / 重启恢复
    • 兼容标准的SUN公司JTA API
    • 嵌套事务
    • 为XA和非XA提供内置的JDBC适配器
    • 内置的JMS适配器XA-capable JMS队列连接器
    • 通过XA API兼容第三方适配器
    • 更好的整合您的项目
    • 集成Hibernate、mybatis等

    注释:XA:XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。XA协议包括两套函数,以xa_开头的及以ax_开头的。

    三、如何使用Atomikos TransactionsEssentials

     Atomikos TransactionsEssentials 是一个可靠的库,可以加入到您的Java应用程序,也就是说为了使用这个产品,您必须添加一些jar文件(包括在dist和lib文件夹下)到您的应用程序或者应用程序服务器。

    请注意:Atomikos TransactionsEssentials是一个非常快速的嵌入式事务管理器,这就意味着,您不需要另外启动一个单独的事务管理器进程(不要查找任何的bin文件夹)。相反,您的应用服务器将有它自己的intra-VM事务管理器。

    配置需求:至少Java1.5 jdk,并且最少128M的内存

    性能优化:尽管这个软件有着很大的优势,但是想要更好的发挥其作用,可以按以下的方法优化:

    • 更高的内存,意味着更高的吞吐量(每秒的事务数目)
    • 使连接池尽可能的大
    • 一旦你不需要的连接请马上关闭它们。不要把你的应用程序放在缓存里,让内部连接池为你做这些,这将促使更高效的连接使用
    • 不要让活动的事务闲置:终止所有情况下的事务,尤其是在异常报错情况下的事务。这将减少数据库的锁定时间,并且最大效率的处理启用的使用。

    值得注意的是,在我们所有的压力测试中,Atomikos TransactionsEssentials比J2EE的web容器更高效的吞吐量。这些测量值包括日志记录的高效的事务状态,同样,在我们所有的测量中,包括XA和non-XA,高效的效率是一样的。

    四、spring+mybatis+ Atomikos实现JTA事务

    1.环境

    • Spring3.1.3
    • mybatis3.2.2
    • Atomikos3.4.2
    • jdk1.6
    • mysql5.1.51

    2.创建数据库环境,注意数据库引擎为InnoDB,只有这样才能支持事务

    3.依赖jar包


     4.配置

    jta.properties也可命名为transactions.properties。如果不配置这个文件,项目也能启动,因为几乎所有配置项都有默认值,最好还是配置了。

    jta.properties:

    Xml代码  收藏代码
    1. comcom.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory  
    2. com.atomikos.icatch.console_file_name = tm.out  
    3. com.atomikos.icatch.log_base_name = tmlog  
    4. comcom.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm  
    5. com.atomikos.icatch.console_log_level = INFO   

     db.properties:

    Xml代码  收藏代码
    1. jdbc.xaDataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource  
    2. jdbcjdbc.url.a=jdbc:mysql://localhost:3306/trans_a?useUnicode=true&characterEncoding=utf-8&autoReconnect=true  
    3. jdbc.username.a=root  
    4. jdbcjdbc.password.a=  
    5. jdbc.uniqueResourceName.a=trans_a  
    6.   
    7.   
    8. jdbcjdbc.url.b=jdbc:mysql://localhost:3306/trans_b?useUnicode=true&characterEncoding=utf-8&autoReconnect=true  
    9. jdbc.username.b=root  
    10. jdbcjdbc.password.b=  
    11. jdbc.uniqueResourceName.b=trans_b  
    12.   
    13.   
    14. transactionManager.forceShutdown =true  
    15. transactionManager.transactionTimeout=3000  
    16.   
    17.   
    18. #*********************atomikos连接池参数设置*****************************  
    19. #连接池中保留的最小连接数  
    20. atomikos.minPoolSize=1  
    21. #连接池中保留的最大连接数   
    22. atomikos.maxPoolSize=3  
    23. #最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0   
    24. atomikos.maxIdleTime=60  

     applicationContext-a.xml:

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    4.     xmlns:context="http://www.springframework.org/schema/context"  
    5.     xmlns:aop="http://www.springframework.org/schema/aop"  
    6.     xmlns:tx="http://www.springframework.org/schema/tx"  
    7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
    8.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    9.            http://www.springframework.org/schema/aop   
    10.            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
    11.            http://www.springframework.org/schema/tx  
    12.            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
    13.            http://www.springframework.org/schema/context  
    14.            http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
    15.       
    16.         <!-- 数据库配置文件位置 -->  
    17.     <context:property-placeholder location="classpath:db.properties" />  
    18.       
    19.     <bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"  
    20.         init-method="init" destroy-method="close">  
    21.         <property name="uniqueResourceName" value="${jdbc.uniqueResourceName.a}" />  
    22.         <property name="xaDataSourceClassName" value="${jdbc.xaDataSourceClassName}" />  
    23.         <property name="xaProperties">  
    24.             <props>  
    25.                 <prop key="user">${jdbc.username.a}</prop>  
    26.                 <prop key="password">${jdbc.password.a}</prop>  
    27.                 <prop key="URL">${jdbc.url.a}</prop>  
    28.             </props>  
    29.         </property>  
    30.         <property name="minPoolSize" value="${atomikos.minPoolSize}" />  
    31.         <property name="maxPoolSize" value="${atomikos.maxPoolSize}" />  
    32.         <property name="maxIdleTime" value="${atomikos.maxIdleTime}" />  
    33.     </bean>  
    34.   
    35.     <!-- 采用注释的方式配置bean -->  
    36.     <context:annotation-config />  
    37.       
    38.     <!-- 配置要扫描的包 -->  
    39.     <context:component-scan base-package="com.ssm"></context:component-scan>  
    40.       
    41.     <!--proxy-target-class="true"强制使用cglib代理   如果为false则spring会自动选择-->  
    42.     <aop:aspectj-autoproxy  proxy-target-class="true"/>  
    43.       
    44.     <!-- 配置mybitasSqlSessionFactoryBean -->  
    45.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    46.         <property name="dataSource" ref="dataSource" />  
    47.         <property name="configLocation" value="classpath:mybatis-config.xml"></property>  
    48.     </bean>  
    49.       
    50.     <!-- 配置SqlSessionTemplate -->  
    51.     <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">  
    52.         <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />  
    53.     </bean>  
    54.       
    55.     <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"  
    56.         init-method="init" destroy-method="close">  
    57.         <property name="forceShutdown" value="${transactionManager.forceShutdown}" />  
    58.     </bean>  
    59.   
    60.     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">  
    61.         <property name="transactionTimeout" value="${transactionManager.transactionTimeout}" />  
    62.     </bean>  
    63.   
    64.     <bean id="transactionManager"  
    65.         class="org.springframework.transaction.jta.JtaTransactionManager">  
    66.         <property name="transactionManager">  
    67.             <ref bean="atomikosTransactionManager" />  
    68.         </property>  
    69.         <property name="userTransaction">  
    70.             <ref bean="atomikosUserTransaction" />  
    71.         </property>  
    72.     </bean>  
    73.       
    74.     <!-- 使用annotation注解方式配置事务 -->  
    75.     <tx:annotation-driven transaction-manager="transactionManager"/>  
    76.   
    77. </beans>  

     applicationContext-b.xml:

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    4.     xmlns:context="http://www.springframework.org/schema/context"  
    5.     xmlns:aop="http://www.springframework.org/schema/aop"  
    6.     xmlns:tx="http://www.springframework.org/schema/tx"  
    7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
    8.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    9.            http://www.springframework.org/schema/aop   
    10.            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
    11.            http://www.springframework.org/schema/tx  
    12.            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
    13.            http://www.springframework.org/schema/context  
    14.            http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
    15.       
    16.         <!-- 数据库配置文件位置 -->  
    17.     <context:property-placeholder location="classpath:db.properties" />  
    18.       
    19.     <bean id="dataSource_b" class="com.atomikos.jdbc.AtomikosDataSourceBean"  
    20.         init-method="init" destroy-method="close">  
    21.         <property name="uniqueResourceName" value="${jdbc.uniqueResourceName.b}" />  
    22.         <property name="xaDataSourceClassName" value="${jdbc.xaDataSourceClassName}" />  
    23.         <property name="xaProperties">  
    24.             <props>  
    25.                 <prop key="user">${jdbc.username.b}</prop>  
    26.                 <prop key="password">${jdbc.password.b}</prop>  
    27.                 <prop key="URL">${jdbc.url.b}</prop>  
    28.   
    29.             </props>  
    30.         </property>  
    31.         <property name="minPoolSize" value="${atomikos.minPoolSize}" />  
    32.         <property name="maxPoolSize" value="${atomikos.maxPoolSize}" />  
    33.         <property name="maxIdleTime" value="${atomikos.maxIdleTime}" />  
    34.     </bean>  
    35.   
    36.   
    37.     <bean id="sqlSessionFactory_b" class="org.mybatis.spring.SqlSessionFactoryBean">  
    38.         <property name="dataSource" ref="dataSource_b" />  
    39.         <property name="configLocation" value="classpath:mybatis-config.xml"></property>  
    40.     </bean>  
    41.       
    42.     <!-- 配置SqlSessionTemplate -->  
    43.     <bean id="sqlSessionTemplate_b" class="org.mybatis.spring.SqlSessionTemplate">  
    44.         <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory_b" />  
    45.     </bean>  
    46.   
    47. </beans>  
  • 相关阅读:
    挖洞经验 | 登录注册表单渗透
    冰蝎v2.0.1核心部分源码浅析
    ThinkPHP 3.1.3及之前的版本存在一个SQL注入漏洞
    从一些常见场景到CSRF漏洞利用
    WellCMS 2.0 Beta3 后台任意文件上传
    Redis漏洞利用与防御
    通过主从复制 GetShell 
    他山之石:InfoQ采访Spinellis---如何有效地调试软件
    局部静态变量只能初始化一次是怎么实现?
    CPU工作的基本原理以及如何设计一个简单的16位CPU模型
  • 原文地址:https://www.cnblogs.com/jpfss/p/8136819.html
Copyright © 2011-2022 走看看