在 Spring 中配置 Hibernate 事务
时间:2005-12-26
作者:Binildas Christudas
浏览次数: 4276
本文关键字:Web Services,Java,transactions,spring,hibernate,EJB,事务
文章工具
推荐给朋友
打印文章
本文主要探讨如何利用 Spring
来装配组件,包括其事务上下文。从 J2EE 应用程序内部连接到单个的
数据库并不是什么难事。但是,如果要装配或者集成企业级的组件,情况就复杂了。一个组件可以有一个
或多个支持它的数据库,因此,当装配两个或更多的组件时,我们希望能够保持在跨组件的多个数据库中
进行的操作的原子性。J2EE 服务器为这些组件提供了一个容器来保证事务原子性和跨组件独立性。如果使
用的不是 J2EE 服务器,则可以利用 Spring 来帮助我们。Spring 基于 Inversion of Control(控制反转)模
式(也称为依赖注入),它不仅可以连接组件服务,还可以连接关联的事务上下文。在本文中,我们将
Hibernate
用作对象/关系持久性存储和查询服务。 œ
装配组件事务
假设在企业组件库里,我们已经有一个审计组件,里面有可以被客户端调用的服务方法。然后,当我
们想要构建一个订单处理系统时,我们发现存在这样的设计要求:OrderListManager 组件服务同样需要审
计组件服务。OrderListManager 创建和管理订单,因此所有的 OrderListManager 服务都有自己的事务属性。
当我们从 OrderListManager 服务内调用审计组件时,我们实际上是在把 OrderListManager 服务的事务上下
文传播给审计服务。也许将来新的业务服务组件同样需要审计组件,但那时将在一个不同的事务上下文中
调用它。实际结果就是,即使审计组件的功能保持不变,它也可能是由别的业务服务功能组成,包含了混
搭的(mix-and-match)事务属性来提供不同的运行时事务性行为。
在图 1 中有两个独立的调用上下文流程。在流程 1 里,如果客户端有 TX 上下文,那么
OrderListManager 既可以参与其中,也可以启动一个新的 TX,这取决于客户端是否在 TX 中,以及为
OrderListManager 方法指定了什么样的 TX 属性。这同样适用于 OrderListManager 服务依次调用
AuditManager 方法的情况。
中国广州市 恒福路 288 号 恒福阁 2 号楼 18 楼 A-B 座 邮编:510095
电话:+86-20-83492775 83492396 电邮:infoCN@go2elite.com 网址:www.go2elite.com.cn