`
marb
  • 浏览: 410552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在Tomcat中通过JOTM支持JTA

阅读更多

1 概述

    因为需要将项目从IBM WebSphere Application Server移植到Tomcat 上开发,以提高开发效率,所以研究了一下在Tomcat中通过JNDI查找和使用JDBC及JTA的方法。

    Tomcat 是Servlet容器,但它也提供了一个JNDI InitialContext实现,因此用户可以像在J2EE应用程序服务器中一样在Tomcat中使用JNDI查找JDBC数据源。不过在事务处理方面,Tomcat本身并不支持JTA(Java Transaction API),所以需要借助其他的方案。

     JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,它本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分,为其提供JTA支持和分布式事务管理。JOTM同样可以为Tomcat提供JTA支持,以下将对相关的配置进行简单说明,使用的相应版本为:

Jdk1.4.2

Tomcat 4.1.36

JOTM 2.0.x

Oracle 10G

2 How to use

1) 配置Tomcat环境

在$TOMCAT_HOME/conf/ server.xml文件中对应应用的<Context>节点下面配置连接池,添加以下内容:

<Resource name="jdbc/myds" auth="Container"

    type="javax.sql.DataSource"/>

  <ResourceParams name="jdbc/myds">

    <parameter>

      <name>factory</name>

      <value>org.objectweb.jndi.DataSourceFactory</value>

    </parameter>

    <!-- configured by default for PostgreSQL, just change the values

         to set it for your database

    -->

    <parameter><name>username</name><value>wangwang</value></parameter>

    <parameter><name>password</name><value>1235</value></parameter>

       <!-- minimum number of connections in the pool -->

    <parameter><name>min</name><value>10</value></parameter>

       <!-- maximumnumber of connections in the pool -->

       <parameter><name>max</name><value>20</value></parameter>   

    <parameter>

      <name>driverClassName</name>

      <value>oracle.jdbc.driver.OracleDriver</value>

    </parameter>

    <parameter>

      <name>url</name>

      <value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>

    </parameter>

    <!--

    <parameter>

      <name>driverClassName</name>

      <value>org.gjt.mm.mysql.Driver</value>

    </parameter>

    <parameter>

      <name>url</name>

      <value>jdbc:mysql://localhost/javatest</value>

    </parameter>

    -->

  </ResourceParams>

  <!-- Resource configuration for UserTransaction

       use JOTM

  -->

  <Resource name="UserTransaction" auth="Container"

    type="javax.transaction.UserTransaction"/>

  <ResourceParams name="UserTransaction">

    <parameter>

      <name>factory</name>

      <value>org.objectweb.jotm.UserTransactionFactory</value>

    </parameter>

    <parameter>

      <name>jotm.timeout</name>

      <value>60</value>

    </parameter>

  </ResourceParams>

2. 添加所需的JAR文件

下载JOTM,将以下文件添加到$TOMCAT_HOME/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包,例如Oracle的classes12.jar

3. 配置JOTM

新建一个carol.properties文件,置于$TOMCAT_HOME/common/classes/,文件内容如下:

# JNDI (Protocol Invocation)

carol.protocols=jrmp

# Local RMI Invocation

carol.jvm.rmi.local.call=true

# do not use CAROL JNDI wrapper

carol.start.jndi=false

# do not start a name server

carol.start.ns=false

# Naming Factory

carol.jndi.java.naming.factory.url.pkgs=org.apache.naming

这样JOTM将不会使用CAROL JNDI wrapper,从而可以避免类装载错误的发生

4. 说明

4.1 JOTM目前的版本在JDK1.5或以上可能无法正常运行,解决的方法有两个:使用JDK1.5重新编译carol库,或者将Tomcat运行在JDK1.4中

4.2 <Transaction>是Tomcat 5中的新标记,对于不支持此标记的老版本,需要使用以下语句代替事务资源的声明:

<!-- Resource configuration for UserTransaction

use JOTM

-->

<Resource name="UserTransaction" auth="Container"

type="javax.transaction.UserTransaction"

factory = "org.objectweb.jotm.UserTransactionFactory"

jotm.timeout = "60"/>

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

5. 测试

假设数据库中已经做了相应配置,可以使用如下jsp页面进行测试:

<!--test.jsp-->

<%@page contentType="text/html;charset=GB2312"%>

<%@page import="java.sql.*"%>

<%@page import="javax.sql.*"%>

<%@page import="javax.naming.*"%>

<%@page import="javax.transaction.UserTransaction"%>

<%

ResultSet rs = null;

Statement stmt = null;

UserTransaction ut = null;

Connection conn = null;

try {

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

DataSource ds = (DataSource) envCtx.lookup("jdbc/myds");

ut = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");

conn = ds.getConnection();

ut.begin();

System.out.println("<<< beginning the transaction >>>");

stmt = conn.createStatement(

// ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE

);

rs = stmt.executeQuery("SELECT sysdate FROM dual");

rs.next();

} catch(Exception e) {e.printStackTrace();}

%>

<html>

<body>

Original price:

<%=rs.getString(1)%>

<%conn.close();%>

</body>

</html>

分享到:
评论

相关推荐

    在Spring中使用JTA事务管理

    1 通过集成JOTM,直接在Spring中使用JTA事务 1.1. 将JOTM以下类库添加到类路径中 1.2. 编写JOTM配置文件,放到类路径下 1.3. 在MySQL上建立两个数据库 1.4. 在Spring配置文件中配置JOTM 1.5. 在Spring中运行测试 2 ...

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

    NULL 博文链接:https://zhaoshijie.iteye.com/blog/1836707

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

    首先需要将jotm相关jar包加入到tomcat中,如下: o jotm.jar o jotm_jrmp_stubs.jar o ow_carol.jar o jta.jar o jta-spec1_0_1.jar o jts1_0.jar o objectweb-datasource.jar o xapool.jar o howl.jar o commons-...

    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 ...

    Spring多数据源配置_分布式数据

    Spring多数据源配置_分布式数据 Tomcat服务器下的多数据源配置详情 一、环境及框架 ...1. &lt;bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" /&gt; 2、定义数据源 xml 代码

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包5

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包10

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包4

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包7

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包9

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包101

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    Java资源包01

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics