gpt4 book ai didi

java - 交易回滚和网络服务

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:12 28 4
gpt4 key购买 nike

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

一个简单且定制的答案是为每个“实际功能”方法向 Web 服务添加一个特殊的“回滚方法”。我要求的是一些标准化的方法。

最佳答案

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

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

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

那么问题就变成了:如何将 EJB(即 JTA/XA)事务与 WS 事务联系起来。由于 WS-AT 和 XA 协议(protocol)使用的模型密切相关,这可以通过协议(protocol)桥来实现。几个应用程序服务器单独提供这些行。 JBoss 在 JavaOne 上展示了他们的产品 - 请参阅 http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp

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

然而,两阶段提交事务使用的锁定模型实际上只适用于同一控制域中的短期事务。如果您的服务在同一个公司数据中心运行,您可能会侥幸逃脱。对于更广泛的分布,无论是地理分布还是行政分布,您可能需要查看 WS-BA,这是一种专门为此类用途设计的 Web 服务事务协议(protocol)。

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

关于java - 交易回滚和网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/434950/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com