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