`
huqi
  • 浏览: 93370 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

基于Spring的轻量级Web Service事务管理框架及其实现

阅读更多

正如我们所知的,Web Service的SOAP消息可以通过许多种基于Internet的网络传输协议来传送。大部分情况下,我们使用HTTP协议来传送SOAP消息,一个优势是,由于HTTP协议的无状态特性,那么,基于其的SOAP消息很容易的穿过防火墙;但同时也有一个副作用就是,无法保证Web Service客户端和服务端的一致性,即Web Service事务不可控制。

我并不十分了解诸如SDO(Service Data Object)\SCA(Service Component Architecture)之类的新新技术规范模型是如何解决这个问题的,这里我只想提出一种基于Spring框架的解决思路,及实现。没错,正是利用Spring这种我们“JavaEE生活”中最大众化的产品的事务管理机制,结合Apache最新的Web Service引擎Axis2,加以扩展实现的。

它可以在一定范围内解决Web服务客户端与服务端事务不可控制的问题,利用自定义策略补偿出现异常情况的事务,以下给出解决JDBC和Hibernate数据持久化的Web Service事务问题的方案。

基本原理就是扩展Spring的JDBC及Hibernate事务管理框架(实际上就是分别继承Spring的DataSourceTransactionManager和HibernateTransactionManager)。

Spring本身的管理方法是将本地事务控制在一个线程中,将事务资源(诸如Connection Holder之类)存储在ThreadLocal,即本地线程绑定的变量中,以方便的在多个事务或事务的嵌套中“挂起”、“恢复”事务,目标是完成“整体”的事务。

现在,我们可以对其加以改造:在Web Service服务端执行完毕后,不立即提交事务,而是将本应放入ThreadLocal中的Spring事务资源放入一个“事务资源池”中(这个事务至少应该是线程安全的),那么,这就相当于“挂起”在服务端的事务,然后,利用Axis2的异步Web Service客户端的特性,去完成客户端的事务先——执行异步客户端回调方法中的客户端事务,好,接下来将会有以下几种情况出现:

  1. 客户端事务提交成功——则客户端会自动通知服务端提交“事务资源池”中相应的事务,两方面事务成功提交。
  2. 客户端事务提交失败——无论是由于异常爆发或业务逻辑未通过,在这种情况下,客户端都应通知服务端“回滚”(rollback)事务,以保证两端一致性。
  3. 客户端与服务端失去联系——这种场景最常见的情况就是网络瞬断。那么,由于接收不到客户端的消息,服务端被“挂起”的事务就应该在指定的等待时间后,去触发执行特定的“事务超时”策略,根据配置的策略对失去联系的服务端事务进行“补偿”处理,这种处理表现为“回滚”(rollback)或“提交”(commit)。

以上只是这种Web Service事务管理机制的构想及原理,真正付诸实现的话,还是需要扩展、抽象一些Spring和Axis2的类型,同时还需要注意很多问题诸如线程安全、适用性等,另外,对于事务数据传送对象(Transaction DTO)等的规范也需要详细定义……

我已经在一个开源项目中对此事务管理框架有了实现,可以参考:

ClearWork@SourceForge

ClearWork对Axis2的扩展 - 基于自定义策略的Web Service事务控制

在这个项目Web Service模块中可以找到本文的实现代码。

分享到:
评论

相关推荐

    基于java实现仿京东商城电商系统项目设计与实现源码

    Spring是一个开源开发框架,是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。 spring主要用来开发java应用,构建J2EE平台的web应用。其核心就是提供一种新的机制管理业务对象及其依赖关系 (2)spring的优点...

    基于java实现仿京东商城电商系统项目设计与实现源码分享

    Spring是一个开源开发框架,是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。 spring主要用来开发java应用,构建J2EE平台的web应用。其核心就是提供一种新的机制管理业务对象及其依赖关系 (2)spring的优点...

    基于java实现大学生求职就业网项目设计源码

    Spring是一个开源开发框架,是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。 spring主要用来开发java应用,构建J2EE平台的web应用。其核心就是提供一种新的机制管理业务对象及其依赖关系 (2)spring的优点...

    基于java实现大学生求职就业网项目设计源码分享

    Spring是一个开源开发框架,是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。 spring主要用来开发java应用,构建J2EE平台的web应用。其核心就是提供一种新的机制管理业务对象及其依赖关系 (2)spring的优点...

    spring in action英文版

     1.6.2 关于其他轻量级容器  1.6.3 Web框架  1.6.4 持久层框架  1.7 小结  第2章 装配Bean  2.1 容纳你的Bean  2.1.1 BeanFactory介绍  2.1.2 使用应用上下文  2.1.3 Bean的生命  2.2 ...

    spring培训学习笔记

    Spring 的核心是个轻量级(Lightweight)的容器(Container),它是实现IoC(Inversion of Control)容器、非侵入性(No intrusive)的框架,并提供AOP(Aspect-oriented programming)概念的实现方式,提供对...

    spring-net:.NET的Spring框架

    用于轻量级脚本编写的表达语言 与UI无关的验证框架 ASP.NET框架页面和用户控件的依赖注入,双向数据绑定等。 ASP.NET MVC和ASP.NET WebAPI框架MVC依赖注入(包括WebAPI)。 声明式事务管理抽象通过使用跨不同事务...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。 目录: 第0章 学习Java...

    Joffice2.1操作手册

    J.Office办公协同开发平台是基于J2EE开源、轻量级的企业业务开发平台,基于代码重用、组件重用、业务逻辑重用、组装重用,提供了丰富的扩展前端、后端组件以及代码生成器,方便开发人员进行二次扩展开发,以满足企业...

    asp.net知识库

    运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中...

    软件系统设计方案.pdf

    SpringMVC是使⽤了MVC设计思想的轻量级web框架,对web层进⾏解耦,与Spring⽆缝衔接,有着灵 活的数据验证,格式化,数据绑定机制;Mybatis中数据库的操作(sql)采⽤xml⽂件配置,解除了sql和代码的耦合提供映射标签...

    java面试题

    答:应用程序域可以理解为一种轻量级的进程,起到安全的作用,占用资源小。 Class.forName作用? 答:调用该访问返回一个以字符串指定类名的类对象。 JDO? 答:JDO是java对象持久化的新的规范,为java data object...

Global site tag (gtag.js) - Google Analytics