浏览 13055 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-24
datasoruce.xml: //jotm事务管理 <bean id="jotmJta" class="org.springframework.transaction.jta.JotmFactoryBean" /> <bean id="jtaTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction" ref="jotmJta"/> </bean> ///第一个datasource <bean id="familyDataSource" 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="jotmJta" /> <property name="driverName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.0.12:3306/family?useUnicode=true&characterEncoding=GBK"/> </bean> </property> <property name="user" value="xband"/> <property name="password" value="Lix8cjDb7$"/> </bean> ///第二个datasource <bean id="localDataSource" 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="jotmJta" /> <property name="driverName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/family?useUnicode=true&characterEncoding=GBK"/> </bean> </property> <property name="user" value="root"/> <property name="password" value="1234"/> </bean> <tx:annotation-driven transaction-manager="jtaTxManager"/> ///第一个hibernate配置 <bean id="familySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="familyDataSource"/> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> </bean> ///第二个hibernate配置 <bean id="localSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="localDataSource"/> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> </bean> ///service用@Transactional标识 <bean id="jtaService" class="com.xband.client.test.JtaService"> <property name="localJtaDAO" ref="localJtaDAO"/> <property name="familyJtaDAO" ref="familyJtaDAO"/> <property name="localJdbcDao" ref="localJdbcDao"/> <property name="familyJdbcDao" ref="familyJdbcDao"/> </bean> 这种方法如果用jdbc同事向两个库插入数据,rollback成功,但用hibernate插入数据,就连单个库都不会rollback,我看了一下spring的源代码LocalSessionFactoryBean里有个jtaTransactionManager,修改两个SessionFactory如下: <bean id="familySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="familyDataSource"/> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> <property name="jtaTransactionManager"> <ref bean="jotmJta" /> </property> </bean> <bean id="localSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="localDataSource"/> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> <property name="jtaTransactionManager"> <ref bean="jotmJta" /> </property> </bean> 可问题还是一样,用Jdbc能成功处理跨数据库事务,hibernate不行.调试数日,不能解决.大家看看有什么问题,不一定要解决,提个醒,给个思路 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-24
怎么没见你配置Spring的AOP事务代理组件
|
|
返回顶楼 | |
发表时间:2007-11-25
daquan198163 写道 怎么没见你配置Spring的AOP事务代理组件
@Transaction注解对业务类jtaService进行事务声明,通过<tx:annotation-driven/> |
|
返回顶楼 | |
发表时间:2007-11-25
今天调了一上午还是没找到原因,最后决定放弃Jotm,使用Atomikos Transactions Essentials,成功调通,但停tomcat时有个错误,不知是什么原因:
信息: Failed shutdown of Apache Portable Runtime Exception in thread "Thread-14" java.lang.NullPointerException at com.atomikos.icatch.system.Configuration.removeResource(Unknown Source) at com.atomikos.jdbc.JtaDataSourceImp.close(Unknown Source) at com.atomikos.jdbc.DataSourceShutdownHook.run(Unknown Source) Exception in thread "Thread-6" java.lang.NullPointerException at com.atomikos.icatch.system.Configuration.removeResource(Unknown Source) at com.atomikos.jdbc.JtaDataSourceImp.close(Unknown Source) at com.atomikos.jdbc.DataSourceShutdownHook.run(Unknown Source) 继续调试。。。。。 |
|
返回顶楼 | |
发表时间:2007-11-26
mysql需要设置成innodb才能回滚事务
|
|
返回顶楼 | |
发表时间:2007-11-26
daquan198163 写道 mysql需要设置成innodb才能回滚事务
设了,用jotm已经成功实现jdcb的跨数据库事务,就是用hibernater的操作不行. 改用atomikos后解所有问题都解决了,上面tomcat关闭的问题我是直接改源代码,重新编译。 用atomikos自带的链接池比较简单,我改用xapool又抛错,等有时间再看,还是用会自带的吧,跑一段时间看看性能如何. |
|
返回顶楼 | |
发表时间:2007-11-27
Jotm 我遇到过: Exception in thread "Thread-14" java.lang.NullPointerException
毕竟n久没更新了,不好用.
现在换了atomikos,还不错,没有上述问题,你记得把Jotm的jar包全删掉. 只有一个问题:
当数据库断掉再连接后, 已经部署的web项目时常找不到连接. 我把atomikos的连接池大小设成0,就可以了,不知道谁遇到过这个问题!!!
|
|
返回顶楼 | |
发表时间:2007-11-27
上次的问题也是 daquan198163 来解答的 呵呵~~~
to 81261686, 以上问题你式一下, 如果行了就show一下你的配置方式吧!
|
|
返回顶楼 | |
发表时间:2007-11-27
collin000 写道 Jotm 我遇到过: Exception in thread "Thread-14" java.lang.NullPointerException 毕竟n久没更新了,不好用. 现在换了atomikos,还不错,没有上述问题,你记得把Jotm的jar包全删掉. 只有一个问题: 当数据库断掉再连接后, 已经部署的web项目时常找不到连接. 我把atomikos的连接池大小设成0,就可以了,不知道谁遇到过这个问题!!!
把connectionPoolSize的连接池大小设成0,应该有问题的,如果你用mysql的话用show processlist命令看一下数据库的链接数,只有一个链接,而且这个链接总是sleep,我猜如果设为0的话链接池更本没有用,每次都是新建一个链接.如果你把connectionPoolSize设为1,mysql显示会有两个链接,总会多一个链接出来,而且这个多出来的链接一直都是sleep.不知道这个多出来的链接是干什么的. 再补充一点atomikos的链接池和dbcp不一样,dbcp有一个initialSize和maxActive可以设,如果initialSize初为1那么启项目时只有一个链接,最大链接为maxActive,atomikos的话只有connectionPoolSize属性,我观察过这个属性是初始化链接数也是最大链接数!这点非常不好! 我想问一下"collin000 "SimpleDataSourceBean(听名字就让人觉的不爽!)用的链接池性能上怎样?如果要用更好的链接池atomikos好像是要收费的,不知道能不能用xapool?因为我们是做网站的所以性能对我们来说非常重要 |
|
返回顶楼 | |
发表时间:2007-12-02
我另外发张帐吧
|
|
返回顶楼 | |