Tomcat 结合Atomikos 实现JTA

技术Tomcat 结合Atomikos 实现JTA Tomcat 结合Atomikos 实现JTA最近项目切换环境,把weblogic 换成tomcat 记录中间遇到的问题
Tomcat下配置Atomi

Tomcat结合Atomikos实现JTA

最近,该项目切换了环境,将weblogic改为tomcat,以记录在Tomcat下配置Atomikos实现JTA.中部遇到的问题

Tomcat作为一种经典的Web服务器,已经广泛应用于开发、测试和生产环境中。但是,Tomcat毕竟不是Java EE服务器,所以不支持EJB和JTA。介绍了一种利用Atomikos通过Tomcat实现JTA的方法。

有了Tomcat中的JTA,可以使用Tomcat支持的数据源在Tomcat中部署Atomikos。也可以在项目中配置,使用Spring来配置数据源、连接池、事务管理器等等。两种方法都有各自的特点。本文只介绍Tomcat和Atomikos的集成。集成后,Tomcat可以提供JTA事务管理器和数据源。

在使用Atomikos之前,我们也使用了JOTM,但是在高并发的情况下,JOTM经常出错,最后不得不放弃。通过测试,我们发现Atomikos具有良好的性能和稳定性。

我们使用了Atomikos的最新版本4.04,可以从maven的配置库中获取Jar包,链接地址是http://mvnrepository.com/artifact/com.atomikos.

如果不使用Hibernate,所需的包包括:

atomicos-util . jar,

jta.jar,

transactions.jar,

transactions-api.jar,

事务-jdbc.jar,

事务-jta.jar

集成包:

atomicos-集成-扩展-3.7.2.jar

记得把数据库驱动。

配置步骤如下:

步骤1:将这些jar复制到tomcat的lib目录中。为了实现Tomcat和Atomikos的集成,需要一个集成包。这个集成包中有两个类,可以通过引用或官方jar包来实现。最新的是

atomicos-集成-扩展-3.7.2.jar

步骤2:在Tomcat/config/server.xml中添加一个侦听器。

listener class name=' com . atomicos . Tomcat . atomicoslifecyclelistener '/

第三步:在Tomcat/config/context.xml中添加数据源和相关的事务管理器,下面是一个参考示例,参数可以适当修改。

资源名称='jdbc/DS_MYSQL '

授权='容器'

type=' com . atomicos . JDBC . atomicosdatasourcebean '

uniquerysourcename=' JDBC/DS _ MYSQL '

xaDataSourceClassName=' com . MySQL . JDBC . JDBC 2 . optional . MySQL xadata source '

xaproperties . databasename=' db _ test '

xaproperties . servername=' localhost '

xaProperties.port='3306 '

xaProperties.user='root '

xaProperties.password='root '

maxPoolSize='200 '

xaproperties . URL=' JDBC : MySQL ://localhost :3306/db _ testcharacter encoding=UTF8 '

factory=' com . atomicos . Tomcat . enhanced tomcatatomikosmanfactory '/

资源名称=“用户事务”

授权='容器'

type=' javax . transaction . user transaction '/

事务工厂=' com . atomicos . icatch . JTA . user transactionfactory '/

第四步:在tomcat/lib目录下添加一个jta.properties文件,设置与Atomikos事务相关的参数。否则,将使用默认的配置参数,并且需要调整一些并发事务(默认为50)、超时等。

整,下面给出了文件中的一些参数配置,参数解释请查阅官方文档:https://www.atomikos.com/Documentation/JtaProperties
添加此行配置
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory

 Atomikos中参数的默认值在transactions.jar中定义,transactions-default.properties:有兴趣的可以自己去看
 
     配置完以上四个步骤,Tomcat的集成就算完成了,项目中可以使用Spring来关联数据源和事务管理器,参考配置如下:
 !-- JNDI模板配置信息,用于连接应用服务器--
bean class="org.springframework.jndi.JndiTemplate"  /
bean class="org.springframework.jndi.JndiObjectFactoryBean" 
    property name="jndiName"
        valuejava:comp/env/jdbc/DS_MYSQL/value
    /property
    property name="jndiTemplate"
        ref bean="jndiTemplate"/
    /property
/bean
bean  class="org.springframework.jdbc.core.JdbcTemplate"
    property name="dataSource"
        ref bean="dataSource" /
    /property
/bean  
!--用户事务对象--
bean class="org.springframework.jndi.JndiObjectFactoryBean" 
    !--class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"--
    property name="jndiName"
        valuejava:comp/UserTransaction/value
    /property
    property name="jndiTemplate"
        ref bean="jndiTemplate"/
    /property
/bean
bean  class="com.atomikos.icatch.jta.UserTransactionManager"
    init-method="init" destroy-method="close"
    property name="forceShutdown" value="false" /
/bean
!-- 配置基于注解的声明式事务管理器 --
bean  class="org.springframework.transaction.jta.JtaTransactionManager"
    property name="userTransaction" ref="userTransaction" /
    property name="transactionManager" ref="atomikosTransactionManager" /
/bean 
tx:annotation-driven transaction-manager="transactionManager" /
 

以下是我项目中使用的配置:推荐在 conf.xml中配置

在Tomcat配置中使用的XA的数据源和JDBC驱动,可以使用nonXA的相关设置,Atomikos中也支持非XA的连接,以提高运行速度。关于nonXa的数据源,可以参考一下配置:

Resource name="jdbc/DS_MYSQL"

        auth="Container"
        type="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean"
        uniqueResourceName="jdbc/DS_MYSQL"
        driverClassName="com.mysql.jdbc.Driver"
        maxPoolSize="200"
        url="jdbc:mysql://localhost:3306/db_testcharacterEncoding=UTF8"
        user="root"
        password="root"
        factory="com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory" / 


**踩坑记录**
**在这里因为有事务管理 TransactionManager  通过这个type 一直获取不到  UserTransaction  经debug发现找取的不是这个类 **
**换成 type="com.atomikos.icatch.jta.userTransactionImp" 成功获取到 UserTransaction,**
  Resource name="UserTransaction"
            auth="Container"
            type="com.atomikos.icatch.jta.userTransactionImp"/   
   Transaction factory="com.atomikos.icatch.jta.UserTransactionFactory" / 
`
https://blog.csdn.net/xuyu_yt/article/details/77905553locationNum=14%20fps=1

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/112519.html

(0)

相关推荐

  • Redis个实现附近人功能

    技术Redis个实现附近人功能Redis个实现附近人功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。01Redis的Geo最近在写实现附近人的这个功能,在

    攻略 2021年11月15日
  • 十二节气顺口溜,二十四节气的顺口溜怎么说

    技术十二节气顺口溜,二十四节气的顺口溜怎么说《二十四节气歌》 春雨惊春清谷天十二节气顺口溜,夏满芒夏暑相连, 秋处露秋寒霜降,冬雪雪冬小大寒。 二十四节气,是中国古代人们用来分辨节气的时间及指导农事的一种方法。二十四节气

    生活 2021年10月21日
  • 闯红灯12123多久能显示,闯红灯多久能查到具体车辆

    技术闯红灯12123多久能显示,闯红灯多久能查到具体车辆随着互联网飞速发展,车辆在违章之后,既可到车管所进行违章处理,也可在网上进行处理闯红灯12123多久能显示。那么2018年闯红灯后几天后才能知晓呢?怎么查询呢?接下

    生活 2021年10月31日
  • 苹果电脑如何切换输入法,Mac下如何切换输入法

    技术苹果电脑如何切换输入法,Mac下如何切换输入法1、如果你只有二个输入法苹果电脑如何切换输入法,一个英文输入法和一个中文输入法,(五笔或拼音),那我们可以用键盘快捷键来切换就行了,按下command键,再按一下空格键,

    生活 2021年10月28日
  • 草木灰是什么,草木灰都有什么化学成分

    技术草木灰是什么,草木灰都有什么化学成分草木灰都有什么化学成分?要回答这个问题,得弄懂如下几个问题草木灰是什么。1、什么叫草木灰?2、草木灰的化学成分;3、草木灰的性质是什么?4、如何使用草木灰?
    一、什么叫草木灰?草木

    生活 2021年10月23日
  • 如何快速搭建实用的爬虫管理平台

    技术如何快速搭建实用的爬虫管理平台这篇文章主要讲解了“如何快速搭建实用的爬虫管理平台”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速搭建实用的爬虫管理平台”吧!爬虫

    攻略 2021年10月23日