读书人

Spring + Hibernate + JOTM 分布式事宜

发布时间: 2012-06-30 17:20:12 作者: rapoo

Spring + Hibernate + JOTM 分布式事务配置

多数据源情况下的事务管理,适用于部署到非应用服务器的Web应用和Standalone的应用程序

?

1. 环境

? ? Spring + Hibernate + JOTM, Oracle Database

?

2. 场景用例

? ? 两个数据库分别存储User信息和Address信息

?

3. 代码及配置

?

? ? 1) carol.properties

#JNDI调用协议

? ? ? ? carol.protocols=jrmp

? ? ? ? #不使用CAROL JNDI封装器

? ? ? ? carol.start.jndi=false

? ? ? ? #不启动命名服务器

? ? ? ? carol.start.ns=false

?

?

? ? 2) 简单的DAO层实现

?

?

?

以上代码已经过测试可以实现分布式事务管理。 为了对比,曾试过使用BasicDataSource且不使用JOTM,使用org.springframework.orm.hibernate3.HibernateTransactionManager管理多数据源情况下的事务,开始时看到异常情况下也可以同时回滚,但是后来发现是Hibernate缓存造成的假象,原因是:默认情况下,Hibernate 要在事务提交时才将数据的更改同步到数据库中,而事务提交发生在业务方法返回前,如果有异常,方法没有正常返回,User信息没有被同步到数据库而不是被回滚掉。这时需要调用 flush() 方法将数据更改同步到数据库才能比较出两种情况下的不同。

读书人网 >开源软件

热点推荐