私は、トランザクションになるように設計された複雑なプロセスを持っており、Spring アノテーションでトランザクションになるようにコーディングされています。XA 対応ドライバーを持つデータベースに対して実行すると、うまく機能します (XA をサポートするために各 RDBMS をセットアップするという頭痛の種は別として)。
ただし、HAWQ に接続しようとしています。HAWQ は XA を認識しており、本質的には「おお、ネリー、私はまだ XA を行っていません」と言っています。同様の制限を持つ他のバッキング ストアに出くわす可能性が高いため、正確な例外は重要ではなく、特定の非常に粗い制限内で、通常は XA コンテキストである非 XA データストアをサポートする必要があるという概念だけが重要です。
このプロセスは、XA が貴重な贅沢であるように構造化されていますが、XA スコープで捕捉されないトランザクションの失敗は重要ではありません。
HAWQ と通信するクラス (または将来の非 XA システムに接続するクラス) について、「呼び出し元がトランザクションであることは知っていますが、そうではありません」とメソッドに注釈を付ける方法はありますか?
@Transactional になるメソッドを除外する方法を既に確認しましたか? 、しかしそれは別の問題を解決しています。
class CallingClass
{
@Transactional
callingMethod ()
{
doSomeSetup ();
methodFromWorkerClass();
}
}
class NormalWorkerClass() implements Worker
{
methodFromWorkerClass ()
{
doSomeStuff();
}
}
class NonXAClass() implements Worker
{
@INeedToBeNonXA
methodFromWorkerClass ()
{
doSomeStuff();
}
}