TX その2 Heuristic exceptions

4.1.4. Heuristic exceptionsについてのメモ

JTAにおける分散トランザクション上での例外の規定.分散トランザクション環境ではTransactionManagerを中心に複数のプロセス(Recoverable Resource)が稼動している.これらのプロセスは別筐体にあったりして,その場合にはネットワークをまたいで互いに繋がっていることになる.

ということになると,クラスタリングの分野ではおなじみの,各プロセスは正常に稼動しているけれどもネットワークに障害が発生した場合(一時的に通信がストップするなど),TransactionManagerが全てのRecoverable Resouceを管理しきれなくなるという事態が当然発生する.

このような場合に備えて,TransactionManagerはcommitやrollback指示を出した後にそれらが全てのRecoverable Resourceで本当に想定通り行われたのかを事後確認する.一方,Recoverable ResourceはトランザクションログをTransactionManagerから(確認ができたので)削除してよいと言われるまでキープしておく.

Heuristicという言葉は辞書によると「発見的」という意味らしい.直訳すると発見的例外ということになるが,これはcommit/rollback時に発生しうる例外ではなく,TransactionManagerによる事後確認で「発見」される例外というニュアンスなのかもしれない.

Heuristic Exceptionについては3つの場合に対応した3つの種類の例外がJTAにより既定されている.それがHeuristicCommitException,HeuristicRollbackException, ,HeuristicMixedExceptionである.