1

我们有一个外部 Web 服务,它公开了几个 APIlockunlock. 以下是在我们的系统中保存值时遵循的步骤。

try 
  call lock
  save changes in single DB transaction
catch user_defined_exception
  call unlock

如果有任何事务超时,我们将不会调用,unlock因为此超时异常不被视为用户定义异常的一部分。同样在将来,可能会引入任何新的异常,我们不想包括所有这些异常并进行解锁。
我们正在寻找任何工业标准/模式来在服务和数据库事务之间进行事务协调。
我们的应用程序是内置的java,数据库是Sybase ASE. 非常感谢任何提示。

4

1 回答 1

1

在 Java 中正确锁定异常的推荐做法如下:

lock();
try {
  doStuff();
} finally {
  unlock();
}

这确保无论抛出(或不抛出)什么异常都会释放锁,而无需捕获或重新抛出它。但是,在您的情况下,这可能仍然不是最安全的事情,因为unlock()它是远程调用并且本身可以引发异常。

服务和数据库之间协调的标准是WS-AT。任何 Java 应用程序服务器都应该支持它,与 JTA 桥接,并在数据库本身上进行两阶段提交。在应用程序服务器中配置数据库连接时,请确保选择 XADataSource 选项。

于 2013-02-26T09:33:13.717 回答