职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1162|回复: 3

jotm跨数据库事务 spring + hibernate

[复制链接]
芷馨 发表于 2011-8-31 10:10 | 显示全部楼层 |阅读模式
jotm跨数据库 spring + hibernate


软件包
ow2-jotm-dist-2.1.9-bin.tar.gz
spring-framework-3.0.5.RELEASEhibernate-3.6.0.Final
hibernate-3.6.0.Final

spring和hibernate不再详述,讲讲jotm如何与spring集成
web开发中,使用hibernate的SessionFactory,而在SessionFactory中注入DataSource
DataSource需要支持事务,因此采用软件包ow2-jotm-dist-2.1.9-bin.tar.gz中的xapool.jar包来配置DataSource,放弃了org.springframework.jdbc.datasource.DriverManagerDataSource

配置jta事务管理器JtaTransactionManager
重点<property name="userTransaction" ref="jotm" />
  
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />   
    <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">   
        <property name="userTransaction" ref="jotm" />   
        <property name="allowCustomIsolationLevels" value="true"></property>   
    </bean>  

<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
        <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
                <property name="userTransaction" ref="jotm" />
                <property name="allowCustomIsolationLevels" value="true"></property>
        </bean>



数据源配置(DataSource)
重点<property name="transactionManager" ref="jotm" />
  
//1号数据库   
<bean id="dataSource1" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">   
        <property name="dataSource">   
            <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">   
                <property name="transactionManager" ref="jotm" />   
                <property name="driverName" value="com.mysql.jdbc.Driver" />   
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf-8" />   
            </bean>   
        </property>   
        <property name="user" value="root" />   
        <property name="password" value="" />   
    </bean>   
  
//2号数据库   
<bean id="dataSource2" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">   
        <property name="dataSource">   
            <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">   
                <property name="transactionManager" ref="jotm" />   
                <property name="driverName" value="com.mysql.jdbc.Driver" />   
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/db2?characterEncoding=utf-8" />   
            </bean>   
        </property>   
        <property name="user" value="root" />   
        <property name="password" value="" />   
    </bean>  

//1号数据库
<bean id="dataSource1" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
        <property name="dataSource">
            <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
                <property name="transactionManager" ref="jotm" />
                <property name="driverName" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf-8" />
            </bean>
        </property>
        <property name="user" value="root" />
        <property name="password" value="" />
    </bean>

//2号数据库
<bean id="dataSource2" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
        <property name="dataSource">
            <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
                <property name="transactionManager" ref="jotm" />
                <property name="driverName" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/db2?characterEncoding=utf-8" />
            </bean>
        </property>
        <property name="user" value="root" />
        <property name="password" value="" />
    </bean>


SessionFactory配置
重点<property name="dataSource" ref="dataSource1" />
重点<property name="dataSource" ref="dataSource2" />   
//1号SessionFactory   
<bean id="sessionFactory1" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">   
        <property name="hibernateProperties">   
            <props>   
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>   
            </props>   
        </property>   
        <property name="dataSource" ref="dataSource1" />   
        <property name="packagesToScan" value="com.yuce.test.entity"/>   
    </bean>   
  
//2号SessionFactory   
<bean id="sessionFactory2" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">   
        <property name="hibernateProperties">   
            <props>   
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>   
            </props>   
        </property>   
        <property name="dataSource" ref="dataSource2" />   
        <property name="packagesToScan" value="com.yuce.test.entity"/>   
    </bean>  

//1号SessionFactory
<bean id="sessionFactory1" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="hibernateProperties">
                    <props>
                            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    </props>
            </property>
                   <property name="dataSource" ref="dataSource1" />
                <property name="packagesToScan" value="com.yuce.test.entity"/>
        </bean>

//2号SessionFactory
<bean id="sessionFactory2" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="hibernateProperties">
                    <props>
                            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    </props>
            </property>
                   <property name="dataSource" ref="dataSource2" />
                <property name="packagesToScan" value="com.yuce.test.entity"/>
        </bean>


附录
jotm必须的jar包
  
xapool.jar   
jotm-core.jar   
carol.jar   
carol-interceptors.jar  

xapool.jar
jotm-core.jar
carol.jar
carol-interceptors.jar



后记:
在使用spring的    进行跨数据库测试的时候没有问题,而在发布web的时候,启动始终都报异常javax.resource.spi.XATerminator找不到,查看类库的时候发现该类就在javaee.jar中,但发布的时候始终找不到。后来发现,这是由于在MyEclipse发布web的时候,设置项目->属性->Order and Export中没有将javaee.jar等jar包发布到web中,于是勾选该jar包,但测试仍然不能成功。
最后将javaee.jar包copy到tomcat是lib目录中,启动tomcat进行测试,一切正常。
暂时好不知道为什么设置了Order and Export也不能行的原因,只是知道在MyEclipse在打包发布的时候也不是完全可信的。切记。

醉倚西风 发表于 2011-8-31 10:10 | 显示全部楼层
spring-framework-3.0.5.RELEASE 包中没有org.springframework.transaction.jta.JotmFactoryBean类,咋配啊?

hxy 发表于 2011-8-31 10:10 | 显示全部楼层
我想知道的是 如果不用事物影响到底有多大。

Jethro 发表于 2011-8-31 10:10 | 显示全部楼层
如果服务器使用tomcat,datasource使用jndi,那么jotm该如何配置?
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-5 14:47 , Processed in 0.116767 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表