hibernate 和 spring 整合的事物管理

由于以前没有深入接触到spring,对spring的事物支持不了解,以前自己参与的一些系统中,出现过在业务逻辑层一个小步出错,但是前面的步骤已经持久化,不能回滚。只能通过定时器读取日志,发现出错就删除这条记录。在最近较为深入的了解spring,发现spring对事物的支持能解决这一问题。
一、如果多个数据源(使用spring的jta事物管理策略)
org.springframework.transaction.jta.JtaTransactionManager代理了J2EE容器的JTA子系统,提供了跨越多个资源的分布式事物管理能力,这种事物管理策略必须运行在J2EE应用服务器环境中,spring只不过是提供一种集成到J2EE容器的事务管理器,并不执行具体的事物管理。
对于跨越多个Hibernate SessionFactory事物资源的分布式系统,只需简单吧JtaTransactionManager同多个LocalSessionFactoryBean定义结合起来作为一个事务策略,如果所有JDBC dataSource都支持事务的容器,那么只要一个业务对象使用了JTA策略,其他的业务对象会自动参与当前的JTA事务
xml配置

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:cn/com/test/jdbc/dataSource1</value>
</property>
</bean>
<bean id="dataSource2"class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:cn/com/test/jdbc/dataSource2</value>
</property>
</bean>

<bean id="SessionFactory1"class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<value>dataSource</value>
</property>
...//省略
</bean>

<bean id="SessionFactory2"class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<value>dataSource2</value>
</property>
...//省略
</bean>

.....//省略配置dao的bean

<bean id="myTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>

<bean id="myService" class="test.testService.impl.TestServiceImpl">
<property name="transactionManager">
<value>myTransactionManager</value>
</property>
..//注入Dao
</bean>


二、一个数据源
当只有一个数据源时(大多数情况下,只有一个数据源),可以使用org.springframework.orm.hibernate3.HibernateTransactionManager.这种事务不依赖J2EE容器,仅仅需要org.hibernate.SessionFactory对象的一个实例。
xml配置文件

<bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactonManager">
<property name="sessionFactory">
<value>sessionFactory</value>
</property>
</bean>

以前我们的事务都是使用DB的事务来处理的,但是如果我们打开一个事务,并把一系列过程处理完再关闭事务,那么我们Dao层的代码会耦合业务层的代码,再我了解到jta和spring之前,对这样的问题,解决不了,现在再了解到这样的技术后,以后都能解决。
我们在工作中会遇到很多很多的问题,可能受限于我们当时的知识储备和经验不能解决,但是在整个java社区中可能其他人也遇到这样的问题,他们已经做出了成熟的解决方案。我们不能停下学习的脚步。
今日记一事,明日明一理,积久而成学。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值