当前位置:  开发笔记 > 编程语言 > 正文

事务回滚和Web服务

如何解决《事务回滚和Web服务》经验,为你挑选了2个好方法。

给出从会话bean调用两个Web服务方法的示例,如果在对两个方法的调用之间抛出异常,该怎么办?在不调用Web服务的情况下,事务将回滚并且不会造成任何损害.但是,Web服务不会回滚.当然,即使使用单一的Web服务也存在问题.虽然这是一个通用问题,但我对与EJB会话bean有关的解决方案感兴趣.

一个简单而定制的答案是为Web服务为每个"真实功能"方法添加一个特殊的"回滚方法".我要求的是一些标准化的方法.



1> 小智..:

许多技术正在发展,但问题仍然是前沿,标准化过程尚未为我们提供完全可移植的解决方案.

选项一,您可以使Web服务事务知道.这当然假设您可以控制它们,但在某些情况下,为非事务性服务编写事务感知代理也是一种选择.

WS-AT和WS-BA协议是事务性Web服务的领先标准.不幸的是,他们只指定协议,而不是语言绑定.换句话说,在编程语言级别没有标准API.对于Java来说,最接近的是JSR-156,但还没有准备好.

然后问题变成:如何将EJB(即JTA/XA)事务绑定到WS事务.由于WS-AT和XA协议使用的模型密切相关,因此可以通过协议桥实现.几个应用服务器提供了这些线路.JBoss在JavaOne上发表了他们的论文 - 请参阅http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp

请注意,协议桥接技术也可以反过来使用,以允许使用例如XA数据库后端的EJB作为事务性Web服务公开.

但是,两阶段提交事务使用的锁定模型实际上仅适用于同一控制域中的短期事务.如果您的服务在同一公司数据中心运行,您可能会放弃它.对于更广泛的分发,无论是地理分布还是管理分布,您可能希望查看WS-BA,这是专门为此类用途而设计的Web服务事务协议.

WS-BA使用基于补偿的模型,该模型更难编程.它基本上基于您提到的技术:通过调用补偿方法来撤消服务方法的影响.这可能很难做到,但JBoss实习生做了一个相当不错的注释框架,允许您以最小的努力定义补偿方法并自动驱动它们.它不是标准化的,但是如果你选择这种方法,那么值得一试:http://www.jboss.org/jbosstm/baframework



2> gedevan..:

由我所知,在这种情况下使用由Microsoft,BEA Systems和IBM开发的Web服务协调(WS-C)和Web服务 - 事务(WS-T)规范.您可以从阅读Web服务事务和IBM提供的Web服务事务协议文章的比较开始,以明确它们.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有