免责声明:我只是有怎样的Web服务工作的一个非常基本的理解,不知道多少有关高级WS主题,交易等如何安全地处理使用Web服务处理的在线支付?
让我们假设我正在开发使用Java EE的在线商店, JPA等。另外假设我与在线支付处理提供商签有合同来处理付款,并且他们为我提供了一个WS API。
现在让我们假装客户已下了订单。在会话bean中(例如,在OrderSB.placeOrder
之内),我打开了一个事务,在数据库中保存了一个订单,现在我正在调用付款提供商的WS API。它成功返回(我假设现在我的客户的帐户已被扣除),但在我可以保存订单的关联付款(订单和付款之间存在一对一关系)之前,发生异常并且我的交易被回滚。
如何确保发生此类异常时,我的客户账户不会被扣除?换句话说,WS调用和OrderSB.placeOrder
都应该成功完成并提交,或者两者都应该一起回滚。
如果WS调用失败,很容易回滚placeOrder
,但我不知道如何在返回后回滚WS调用。