日期:2014-05-16  浏览次数:20533 次

JOTM 分布式事务初探(JNDI,Tomcat 7 JDBC Pool连接池)

JOTM 分布式事务初探(JNDI,Tomcat 7 JDBC Pool连接池)

?

Tomcat 7 带了一个新的连接池 tomcat(The Tomcat JDBC Connection Pool)

网上有人测试,据说性能超过常用连接池(c3p0等).

链接:http://www.open-open.com/lib/view/open1329182303124.html

并且这个连接池提供的连接不是普通的Connection,而是pooledConnection,

而且支持提供XADataSource(org.apache.tomcat.jdbc.pool.XADataSource).

?

The Tomcat JDBC Connection Pool可独立使用,

需要Tomat7版本下lib包中的tomcat-jdbc.jar和bin中的tomcat-juli.jar

?

可以用来做JOTM的分布式事务的数据源.

?

实际使用tomcat版本 是5.5.25

?

JOTM版本 2.1.9 http://jotm.ow2.org/xwiki/bin/view/Main/Download_Releases

?

1. 新建一个Java web工程

?

? ?将JOTM的lib包下的所有jar包(包括一个空的ext文件夹)拷贝到web-inf的lib下

? ?

? ?将Tomcat版本中的tomcat-jdbc.jar和tomcat-juli.jar拷贝到

? ?tomcat5.5.25的common\lib下,并引入到工程中来.

? ?

? ?将 mysql和oracle的jdbc驱动拷贝到web-inf的lib下

? ?(classes12.jar--oracle驱动,mysql-connector-java-5.1.24-bin.jar--mysql驱动)

? ?

? ?需要将web-inf的lib下所有jar包拷贝到tomcat5.5.25的common\lib下,部署的时候,注意将

? ?webapps\工程\web-inf的lib下的jar全部删除,使用tomcat5.5.25的common\lib下的jar包

?

2. 分别在mysql和oracle中创建测试数据库和测试用户

?

? ?2.1 mysql数据库(mysql 版本mysql ?Ver 14.14 Distrib 5.5.11, for Win32 (x86))

? ?下面的语句执行前,可能需要使用root用户登陆

? ?

GRANT ALL PRIVILEGES ON *.* TO mojo@localhost IDENTIFIED BY 'jojo' WITH GRANT OPTION; -- 创建用户,并授权
   create database javatest;
   use javatest;
   create table testdata (id int not null auto_increment primary key,foo int) engine = innodb;
   create unique index index_idfoo on testdata(id,foo); --创建唯一索引

?

? ?

? ?2.2 oracle数据

? ?

? ?

create user mojo identified by jojo;
   grant dba to mojo;--授予DBA权限  
   connect mojo/jojo@serviceid; -- 使用刚刚创建的用户登陆 serviceid 需要修改成实际的
   create table testdata (id number(10),foo number(10)); --创建一个表
   create unique index index_idfoo on testdata(id,foo);
   commit;

?

? ?

3. 配置carol.properties,放置到src目录下面

?

? ? # # 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.nameing.factory.url.pkgs=org.apache.nameing

? ?

4. 配置tomcat/conf/context.xml

?

??

<?xml version="1.0" encoding="UTF-8"?>
  <Context>
      <Resource name="jdbc/mysqlDB"
            auth="Container"
            type="javax.sql.DataSource"
            factory="org.objectweb.jotm.datasource.DataSourceFactory"
            testWhileIdle="true"
            testOnBorrow="true"
            testOnReturn="false"
            validationQuery="SELECT 1"
            validationInterval="30000"
            timeBetweenEvictionRunsMillis="30000"
            maxActive="100"
            minIdle="10"
            maxWait="10000"
            initialSize="10"
            removeAbandonedTimeout="60"
            removeAbandoned="true"
            logAbandoned="true"
            minEvictableIdleTimeMillis="30000"
            jmxEnabled="true"
            jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
              org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
            username="mojo"
            password="jojo"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://127.0.0.1:3306/javatest"/>
            
      <Resource name="jdbc/oracleDB"
            auth="Container"
            type="javax.sql.DataSource"
            factory="org.objectweb.jotm.dat