`

在Tomcat中通过JOTM支持JTA

 
阅读更多

    Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JDBC数据源。在事务处理方面,Tomcat本身并不支持JTA,但是可以通过集成JOTM达到目的。

    如果你的应用最终部署到一个功能齐备的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。

    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,从而可以避免类装载错误的发生。

    3. 配置Tomcat环境,配置JNDI的数据源
    在<Tomcat安装目录>/conf/context.xml文件中添加以下内容:

①-1:JNDI数据源
<Resource name="jdbc/topicDS" auth="Container"type="javax.sql.DataSource"
factory="org.objectweb.jndi.DataSourceFactory"username="root"password="1234"
driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3309/topicdb"maxActive="30"maxIdle="30"/>

 

①-2:JNDI数据源
<Resource name="jdbc/postDS"auth="Container"type="javax.sql.DataSource"

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"/>

或者

<Resource name="UserTransaction" auth="Container"
type="javax.transaction.UserTransaction"
factory = "org.objectweb.jotm.UserTransactionFactory"
jotm.timeout = "60"/>


   在Tomcat中配置两个JNDI数据源,它们分别指向topicdb和postdb数据库,如①处所示。最后配置JOTM的JTA事务管理器,该事务管理器自动对两个JNDI中的数据源应用JTA事务。

 

需要注意的是,使用<Resource>节点声明的资源默认上下文前缀是"java:comp/env",而使用< Transaction>节点时则是"java:comp"。因此,当使用4声明事务时,相应的JNDI查找代码也应该改为 UserTransaction ut = (UserTransaction)initCtx.lookup("java:comp/env/UserTransaction");

 

测试代码:

ResultSet rs = null;
Statement stmt = null;
UserTransaction ut = null;
Connection conn = null;


Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds1 = (DataSource) envCtx.lookup("jdbc/topicDS");
DataSource ds2 = (DataSource) envCtx.lookup("jdbc/postDS");
 ut = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
conn1 = ds1.getConnection();
conn2= ds2.getConnection();
ut.begin();

conn1 操作
conn2 操作

ut.rollback();


.......
 

 

分享到:
评论

相关推荐

    Tomcat中使用JOTM2.14

    标题“Tomcat中使用JOTM2.14”指的是在Apache Tomcat服务器中集成并使用JOTM(Java Open Transaction Manager)版本2.14的过程。JOTM是一个开源的事务管理器,用于处理Java应用程序中的ACID(原子性、一致性、隔离性...

    java资料夹

    接着,我们看到了与JTA(Java Transaction API)和JOTM(Java Open Transaction Manager)相关的几个文档:`在Tomcat中通过JOTM支持JTA .txt`、`tomcat 配置jotm.txt`、`Tomcat6 Support JTA with JOTM.txt`。JTA是...

    hibernate+tomca5.5t+JOTM 2.10 JTA配置

    标题 "hibernate+tomcat5.5+JOTM 2.10 JTA配置" 涉及的是在Java环境下使用Hibernate ORM框架与Tomcat 5.5应用服务器,以及集成JOTM(Java Open Transaction Manager)进行JTA(Java Transaction API)管理的配置过程...

    spring JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

    本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为事务管理器来实现分布式事务。 首先,我们需要理解JTA的核心概念。JTA是Java EE平台的一部分,提供了...

    在Spring中使用JTA事务管理

    本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM(Java Open Transaction Manager)以及引用Tomcat的JTA事务。 ### 1. 通过集成JOTM,直接在Spring中使用JTA事务 #### 1.1. 添加JOTM类库到类路径...

    java事务处理包正版的JOTM

    JOTM 是一个强大的工具,尤其对于那些希望在Tomcat这样的轻量级应用服务器中实现企业级事务管理的开发者而言。在Servlet中调用JOTM,可以确保在分布式环境中执行的多个数据库操作或资源管理操作具有原子性、一致性、...

    jotm2.0最新源码包

    8. **集成与配置**:学习如何将JOTM集成到常见的Java应用服务器(如Tomcat、JBoss等)和Spring框架中,是实际开发中非常实用的部分。 通过深入研究JOTM 2.0的源码,开发者不仅可以掌握事务管理的精髓,还能提升对...

    jotm-2.0.11.MR5.rar_Jotm jar_jotm_jotm-2.0.11.MR5_jotm.jar _jtom

    JOTM(Java Open Transaction Manager)是一款开源的事务管理器,专为Java应用程序设计,它提供了强大的事务处理能力,支持JTA(Java Transaction API)规范,使得在分布式环境中进行事务管理变得更加便捷。JOTM ...

    jotm 2.1.9 源码

    本文将详细介绍JOTM的核心功能、如何使用MVN进行编译以及其在分布式事务处理中的应用。 一、JOTM核心功能 1. 分布式事务管理:JOTM遵循JTA(Java Transaction API)标准,能够管理跨多个数据库、消息队列和其他...

    spring+jotm 多数据源事务管理(三)JNDI+Tomcat

    为了能够顺利地在项目中使用JOTM进行事务管理,首先需要将以下JAR包加入到Tomcat的lib目录中: - `jotm.jar`: JOTM核心库。 - `jotm_jrmp_stubs.jar`: JOTM JRMP远程调用相关的类库。 - `ow_carol.jar`: 提供了与...

    开源事务管理器 JOTM.7z

    JOTM 作为 JTA 的实现,允许开发者利用这些接口在不同的系统之间协调事务,确保即使在复杂的分布式环境中也能保持数据的一致性。 JOTM 的主要特点包括: 1. **兼容性**:JOTM 完全符合 JTA 1.1 规范,可以与任何...

    jotm-2.0.11.MR5.tgz

    通过这些内容,开发者可以构建一个支持分布式事务处理的环境,特别是在Java应用服务器上,如Tomcat、JBoss等,JOTM能提供强大的事务管理能力,确保在复杂的网络环境中数据的一致性和完整性。了解并熟练使用JOTM,对...

    ow2-jotm-src-2.2.1-src.tar

    描述中提到的"用于Tomcat和FDS同步"表明JOTM在这个场景下,被用来在Apache Tomcat应用服务器和Fast Data Service (FDS)之间进行事务管理。Tomcat是一个流行的开源Java Servlet容器,而FDS可能是某种数据服务,具体是...

    flex与java整合专用jotm

    3. **Tomcat集成**:由于描述中提到JOTM布置在Tomcat下,我们需要在Tomcat的服务器配置中添加JOTM的相关设置。这通常涉及修改`context.xml`或`server.xml`文件,配置JNDI资源以引用JOTM事务管理器。 4. **JTA配置**...

    基于Java的开源事务管理器 JOTM.zip

    JOTM提供了符合JTA(Java Transaction API)标准的事务管理服务,使得开发者能够轻松地在不同数据存储之间实现ACID(原子性、一致性、隔离性和持久性)特性。 JOTM的主要功能和特性包括: 1. **JTA兼容性**:JOTM...

    jotm-dist-2.1.9-bin.tar.gz

    在实际应用中,JOTM可以被应用程序服务器如Tomcat、JBoss或者独立的应用程序所使用,通过JNDI查找来获取事务管理器实例,然后进行事务的开启、提交、回滚等操作。使用JOTM的好处在于它可以提供ACID(原子性、一致性...

    JOTM包

    JOTM 是一个基于Java开放源代码的事务处理管理器。它遵循JTA APIs规范与Business Transaction Protocol(BTP)规范以提供了对Web Service的支持。

    JBPM5.1入门学习

    4.3.4 使用jotm配置tomcat 数据源以支持JTA 25 4.3.5 Jbpm相关配置文件更新 29 4.3.6 Java服务器端编码 31 4.3.7 Jsp客户端编码 50 4.3.8 Struts和spring的配置 52 4.4 部署和运行 54 4.4.1 启动Demo Human Task ...

Global site tag (gtag.js) - Google Analytics