转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
在Spring中集成Hibernate事务         ★★★★

在Spring中集成Hibernate事务

作者:闵涛 文章来源:闵涛的学习笔记 点击数:757 更新时间:2009/4/22 23:29:41
天极软件专题专区精选     到天极软件“读编交流区”畅所欲言 Google专区 POPO专区 QQ专区 QQ挂机 了解Web2.0 Flash MX 视频教程 Photoshop视频教程 网页设计视频教程 照片处理数字暗房 PPT动画演示教程 Excel动画教程集 Word动画演示教程 Windows Vista专区 特洛伊木马专区 黑客知识教程专区 防火墙应用专区 注册表应用专区 Windows API开发专区 网络编程专区 VB数据库编程专区 图像处理与多媒体编程
  本文试图解释如何使用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方法的时候,这样的解释也是正确的。


图1:集成组件事务
  EJB架构通过允许组件集成器宣告式地(declaratively)提供正确的事务属性来实现这种灵活性。我们没有研究宣告式事务管理的替代物(称为编程式事务控制),因为它涉及到改变代码来影响不同的运行时事务行为。几乎所有的J2EE应用程序服务器都按照X/Open XA规范提供了分布式的事务管理器来适应两步提交(Two-Phase Commit)协议。现在的问题是,在EJB服务器之外,我们能利用相同的功能吗?Spring就是一个替代解决方案。让我们来看看Spring是如何帮助我们解决事务集成问题的。

  使用Spring进行事务管理

  我们将看到一个轻量级的事务架构,它能够管理组件级的事务集成。Spring就是一个解决方案,它的优势在于它没有像JNDI 数据源那样嵌入到J2EE容器服务中。还有一点值得注意,如果我们希望把这个轻量级的事务架构插入到已有的J2EE容器中,也没有任何困难。看起来它在两者之间的平衡性方面做得很好。

  另一方面,Spring 轻量级事务架构还使用了面向方面编程(AOP)框架。Spring AOP框架组件使用了激活了AOP的Spring bean工厂。通过在组件服务层(在一个Spring特定的配置文件applicationContext.xml中)指定事务特性,就把各种事务划分开来了。

<beans>

<!-其它一些代码... -->

<bean id="orderListManager" class="org.springframework.transaction
.interceptor.TransactionProxyFactoryBean">
 <property name="transactionManager">
  <ref local="transactionManager1"/>
 </property>
 <property name="target">
  <ref local="orderListManagerTarget"/>
 </property>
 <property name="transactionAttributes">
  <props>
   <prop key="getAllOrderList">
    PROPAGATION_REQUIRED
   </prop>
  <prop key="getOrderList">
   PROPAGATION_REQUIRED
  </prop>
  <prop key="createOrderList">
   PROPAGATION_REQUIRED
  </prop>
  <prop key="addLineItem">
   PROPAGATION_REQUIRED,
   -com.example.exception.FacadeException
  </prop>
  <prop key="getAllLineItems">
   PROPAGATION_REQUIRED,readOnly
  </prop>
  <prop key="queryNumberOfLineItems">
   PROPAGATION_REQUIRED,readOnly
  </prop>
 </props>
</property>
</bean>

</beans>
  一旦我们在服务层指定了事务属性,它们(即事务属性)就可以被org.springframework.transaction.PlatformTransactionManager接口的具体实现所截取和解释。该接口如下所示:

public interface PlatformTransactionManager{
 TransactionStatus getTransaction(TransactionDefinition definition);
 void commit(TransactionStatus status);
 void rollback(TransactionStatus status);
}
  Hibernate事务管理器

  由于我们已经决定把Hibernate作为ORM工具,我们必须编写一个Hibernate特定的事务管理器实现,我们下一步就做这个工作。

<beans>

<!-- other code goes here... -->

<bean id="transactionManager1" class="org.springframework.orm.hibernate. HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory1"/>
</property>
</bean>

</beans>


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台