在Spring中集成Hibernate事务
发表于:2007-07-04来源:作者:点击数:
标签:
"""""" 本文试图解释如何使用Spring来集成组件(包括组件的事务关系)。在J2EE应用程序中,连接到单个存储数据没有什么困难。但是一旦要求集成企业级组件的时候,情况就复杂了。一个组件一般会受到一个或多个存储数据的支持,因此当我们提到集成一个或多个组
""""""
本文试图解释如何使用Spring来集成组件(包括组件的事务关系)。在J2EE应用程序中,连接到单个存储数据没有什么困难。但是一旦要求集成企业级组件的时候,情况就复杂了。一个组件一般会受到一个或多个存储数据的支持,因此当我们提到集成一个或多个组件的时候,我们就认为需要跨越多个组件、维护多个数据存储中的原子操作。J2EE
服务器为这些组件提供了一个容器,这个容器可以管理这些事务性原子操作和跨组件的隔离。如果我们没有使用J2EE服务器,Spring可以帮助我们。Spring在集成组件服务和它们相关的事务关系的时候,是基于控制倒置(Inversion of Control)的。
集成(Assembling)组件事务 假设在我们的企业组件库中,已经拥有了一个审计(audit)组件,客户端可以调用它的服务方法。后来,当我们希望建立一个订单
处理系统的时候,我们发现了一个设计
需求:OrderListManager组件服务也需要审计组件服务。OrderListManager建立和管理订单,因此所有的OrderListManager服务都有自己的事务属性。当我们在OrderListManager服务内部调用审计组件的时候,会把OrderListManager服务的事务关系(context)传递到审计服务中。也许在未来某个时候,某个新的业务服务组件也需要审计组件服务,但是该审计服务将会在一个完全不同的事务关系中被调用。其实际结果是,虽然审计组件的功能仍然没有变化,但是它可以与其它的业务服务功能组合使用,使用混合和匹配(mix-and-match)的事务属性来提供不同的运行时(
run time)事务行为。
图1显示了两个相互独立的调用关系流。在流1中,如果客户端拥有TX关系,OrderListManager要么参与它,要么启动一个新的TX,这依赖于Client是否在某个TX中,以及为OrderListManager方法提供了什么样的TX属性。OrderListManager服务接下来调用AuditManager方法的时候,这样的解释也是正确的。