Java 如何管理webservice调用和数据库之间的分布式事务协调?

Java 如何管理webservice调用和数据库之间的分布式事务协调?,java,sap-ase,distributed-transactions,Java,Sap Ase,Distributed Transactions,我们有一个外部Web服务,它公开了两个APIlock和unlock。以下是在系统中保存值时遵循的步骤 try call lock save changes in single DB transaction catch user_defined_exception call unlock 如果存在任何事务超时,我们将不调用解锁,因为此超时异常不被视为用户定义异常的一部分。此外,将来可能会引入任何新的异常,我们不希望包含所有这些异常并进行解锁 我们正在寻找任何行业标准/模式来协调服务

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

try 
  call lock
  save changes in single DB transaction
catch user_defined_exception
  call unlock
如果存在任何事务超时,我们将不调用
解锁
,因为此超时异常不被视为用户定义异常的一部分。此外,将来可能会引入任何新的异常,我们不希望包含所有这些异常并进行解锁
我们正在寻找任何行业标准/模式来协调服务和数据库事务
我们的应用程序是在
java
中构建的,数据库是
Sybase ASE
。 非常感谢任何提示。

在Java中正确锁定异常的方法如下:

lock();
try {
  doStuff();
} finally {
  unlock();
}
这确保无论抛出(或未抛出)什么异常,锁都被释放,而无需捕获或重新抛出它。但是,在您的情况下,这可能仍然不是最安全的做法,因为
unlock()
是一个远程调用,本身可能引发异常

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

在Java中正确锁定异常的方法如下:

lock();
try {
  doStuff();
} finally {
  unlock();
}
这确保无论抛出(或未抛出)什么异常,锁都被释放,而无需捕获或重新抛出它。但是,在您的情况下,这可能仍然不是最安全的做法,因为
unlock()
是一个远程调用,本身可能引发异常


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

Sybase是一家公司,而不是数据库。您指的是哪种Sybase产品(ASE、ASA、IQ)?@MichaelGardner更新了我的问题。谢谢你的更正。Sybase是一家公司,不是数据库。您指的是哪种Sybase产品(ASE、ASA、IQ)?@MichaelGardner更新了我的问题。谢谢你的更正。事实上,我希望只有在出现任何异常时才会解锁。但是您的伪代码将解锁,尽管没有任何异常。我将尝试探索您关于WS-AT的建议。实际上,我希望只有在出现任何异常时才会解锁。但是您的伪代码将解锁,尽管没有任何异常。我将尝试探讨您关于WS-AT的建议。