1

いくつかの APIlockとを公開した外部 Web サービスがありますunlock。以下は、システムに値を保存する際の手順です。

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とブリッジし、データベース自体で2フェーズコミットを行う必要があります。アプリケーションサーバーでデータベース接続を構成するときは、必ずXADataSourceオプションを選択してください。

于 2013-02-26T09:33:13.717 に答える