JTA事务(Tomcat6+JOTM)

JTA可以在多个数据库上使用一个事务,weblogic等应用服务器提供了jta数据源的支持,可以直接被使用。但是tomcat本身并不支持这种特性。如果想在tomcat上使用jta就必须使用其它的工具。jotm就是一个独立的可以提供JTA功能的组件。

jotm有2中使用方式,1、结合容器的JNDI数据源提供JTA功能。2、使用jotm建立本地数据源。下面的内容是对第一种使用方式配置过程。

测试环境:

Tomcat 6.0.18
MySQL 5.1.47
Jotm 2.0.10
Spring 3.0.0 RC3
Hibernate 3.1.3

1:添加jotm jar

将jotm jar文件、数据库jdbc驱动以及相关的类库放到%catalina_home%/lib
commons-logging.jar
log4j.jar
commons-cli-1.0.jar
connector-1_5.jar
howl.jar
jotm.jar
jotm_iiop_stubs.jar
jotm_jrmp_stubs.jar
jta-spec1_0_1.jar
jts1_0.jar
objectweb-datasource.jar
ow_carol.jar
xapool.jar

注意:
1:common-logging.jar 和log4j.jar 也需要拷贝过来,并确保具体的应用下不能包含这2个文件。
2:应用程序中不能包含jta.jar,此文件与tomcat公共类路径下的jta-spec1_0_1.jar冲突。
3:%catalina_home%/lib是tomcat的公共类路径,jar、.class或.properties的文件都可以放在此目录下,可以被所有应用访问。

2:建立carol.properties配置文件

建立carol.properties,并放在%catalina_home%/lib下(放在这个目录下的jar或类文件可以被所有应用程序所访问)。
carol.properties配置文件内容如下

#JNDI调用协议
carol.protocols=jrmp

#本地RMI调用,必需设置成false,否则程序运行时会产生异常
carol.jvm.rmi.local.call=false

#不使用CAROL的JNDI封装器
carol.start.jndi=false

#不启用命名服务器
carol.start.ns=false

#命名工厂类
carol.jndi.java.naming.factory.url.pkgs=org.apache.naming

注意:
carol.jvm.rmi.local.call 必需设置成false,否则在运行时会报如下错误:
java.lang.NoSuchMethodError: sun.rmi.transport.ObjectTable.getStub(Ljava/rmi/Remote;)Ljava/rmi/server/RemoteStub

3:配置JNDI数据源

3.1在%catalina_home%/conf/context.xml的标签内加入如下内容


factory="org.objectweb.jndi.DataSourceFactory"
driverClassName="com.p6spy.engine.spy.P6SpyDriver" username="root" 
password="007" url="jdbc:mysql://localhost:3306/edit"/> 


factory="org.objectweb.jndi.DataSourceFactory"
driverClassName="org.gjt.mm.mysql.Driver" username="root" 
password="007" url="jdbc:mysql://localhost:3306/test"/>


注意:factory="org.objectweb.jndi.DataSourceFactory"指定创建数据源的工厂,如果省略这行数据源仍然可以被创建出来,但创建的是tomcat6提供的数据源,而不是jotm的数据源实现,是不能满足jta的事务的。

3.2引用全局数据源,在应用程序的META-INF下建立context.xml,文件内容如下

 
WEB-INF/web.xml 
 

 

4:配置spring数据源






http://www.springframework.org/schema/beans"

xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx=" http://www.springframework.org/schema/tx"
xmlns:jee=" http://www.springframework.org/schema/jee"
xsi:schemaLocation=" http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd" >


class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">




 



class="org.springframework.transaction.interceptor.TransactionInterceptor">



PROPAGATION_REQUIRED,-Exception





*Service



serviceTransactionInterceptor

 
 


 



true
org.hibernate.dialect.Oracle9Dialect
org.hibernate.hql.ast.ASTQueryTranslatorFactory



 
com/aisidi/edit/entity/hbm/Dog.hbm.xml 


 
 



true
org.hibernate.dialect.Oracle9Dialect
org.hibernate.hql.ast.ASTQueryTranslatorFactory



 
com/aisidi/edit/entity/hbm/Cat.hbm.xml 


你可能感兴趣的:(tomcat,bean,hibernate,class,jdbc,spring)