Spring引用Tomcat的 JTA事务

Spring引用Tomcat的 JTA事务
    Tomcat是Servlet容器,但它提供了JNDI的实现,所以用户能够象在Java EE应用程序服务器中同样,在Tomcat中使用JNDI查找JDBC数据源。在事务处理方面,Tomcat自己并不支持JTA,可是能够经过集成JOTM达到目的。java

    若是你的应用最终部署到一个功能齐备的Java EE应用服务器上,也许你更但愿使用Java EE应用服务器的JTA功能,这样能够利用应用服务器自己许多优化措施。下面,咱们让Tomcat经过JNDI开放JOTM的JTA的数据源,进而在Spring容器引用这个JNDI数据源,并在此基础上提供JTA事务。咱们所使用的环境是:Tomcat 5.5+JOTM 2.3。
    1. 添加所需的JAR文件
    将JOTM如下类包添加到<Tomcat安装目录>/common/lib目录中:
    jotm.jar
    jotm_jrmp_stubs.jar
    jotm_iiop_stubs.jar
    ow_carol.jar
    jta-spec1_0_1.jar
    jts1_0.jar
    objectweb-datasource.jar
    xapool.jar
    howl.jar
    connector-1_5.jar
    同时,还须要添加相应数据库的JDBC驱动类包,例如MySQL的mysql.jar。mysql

    2. 配置JOTM
    新建一个carol.properties配置文件,放置到<Tomcat安装目录>/common/classes目录下,配置文件内容以下:
    #JNDI调用协议
    carol.protocols=jrmp
    # 本地RMI调用
    carol.jvm.rmi.local.call=true
    # 不使用CAROL的JNDI封装器
    carol.start.jndi=false
    # 不启用命名服务器
    carol.start.ns=false
    # 命名工厂类
    carol.jndi.java.naming.factory.url.pkgs=org.apache.naming
    将carol.start.jndi设置为false,让JOTM不使用CAROL JNDI wrapper,从而能够避免类装载错误的发生。web

    3. 配置Tomcat环境,配置JNDI的数据源
    在<Tomcat安装目录>/conf/context.xml文件中添加如下内容:
<Resource name="jdbc/topicDS" auth="Container"type="javax.sql.DataSource"
①-1:JNDI数据源
factory="org.objectweb.jndi.DataSourceFactory"username="root"password="1234"
driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3309/topicdb"maxActive="30"maxIdle="30"/>
<Resource name="jdbc/postDS"auth="Container"type="javax.sql.DataSource"
①-2:JNDI数据源factory="org.objectweb.jndi.DataSourceFactory"username="root"password="1234"
driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3309/postdb"maxActive="30"maxIdle="30"/>
②JOTM JTA事务管理<Transaction factory="org.objectweb.jotm.UserTransactionFactory"jotm.timeout="60"/>
   在Tomcat中配置两个JNDI数据源,它们分别指向topicdb和postdb数据库,如①处所示。最后配置JOTM的JTA事务管理器,该事务管理器自动对两个JNDI中的数据源应用JTA事务。sql

相关文章
相关标签/搜索