【发布时间】:2011-04-15 05:35:44
【问题描述】:
我有两个应用程序。一个是 OrderService,另一个是 TradeService。 在贸易服务中,有一种“购买”方法是交易性的。
Trade Service 使用 Web Service 调用 Order 服务的 SubmitOrder 方法时出现问题。
问题描述:
Buy 方法中的所有步骤都在一次交易中。
当我们调用 buy 方法时,它会创建一个 Order 对象。
当这个方法使用web service调用Submit Order方法时,它会传递order Id。
提交订单方法使用此 Id 从数据库加载订单对象。
但是在 Load 方法中它给出了延迟初始化异常:会话已关闭。 (两个应用程序共享同一个数据库)
对此的可能解决方案是使提交订单方法具有事务性。
-
这会导致另一个死锁问题。
- 死锁的原因, A. Buy 方法锁定 Id 为“xyz”的订单对象。并发送相同的 ID 提交订单方法。 B. 现在 Buy 方法正在等待提交订单的回复。 C. Submit Order 方法无法加载 order 对象,因为它已经被 buy 方法锁定。 D. 所以提交订单方法正在等待获取锁。因此它是死锁条件。
注意:这两个应用程序都使用 Spring MVC、Spring Web Service 和 Hibernate。
请帮助我摆脱这种情况。提前致谢。(如果需要,我可以发布部分代码)
【问题讨论】:
-
您是否尝试围绕 Web 服务调用构建数据库事务?
-
是的。 Web 服务调用仅来自购买方法。
-
您期望在 Web 服务(订单)的另一端可以使用相同的事务?
-
是的。 Buy中的所有东西都应该在一笔交易下。但这是不可能的,这种情况不允许我将提交订单方法(订单服务)进行交易。
标签: hibernate spring spring-mvc spring-ws hibernate-annotations