オプティミスティック衝突例外

OptimisticCollisionException は、直接受け取るか、ObjectGridException と一緒に受け取ることができます。

以下のコードは、 例外を catch し、そのメッセージを表示する方法の例です。

try {
...
} catch (ObjectGridException oe) {
    System.out.println(oe);
}

例外の原因

OptimisticCollisionException は、ほとんど同じ時間に 2 つの異なるクライアントが同じマップ・エントリーを更新しようとしたとき作成されます。例えば、あるクライアントがセッションをコミットしてマップ・エントリーを更新しようとした場合に、そのコミットの直前に別のクライアントがデータを読み取っていたとすると、そのデータは正しくありません。このクライアントが正しくないデータをコミットしようとすると、例外が作成されます。

例外をトリガーしたキーの検索

そのような例外のトラブルシューティングのとき、例外をトリガーしたエントリーに対応するキーを検索すると便利です。OptimisticCollisionException の利点は、キーを表すオブジェクトを戻す getKey メソッドが含まれていることです。次の例は、OptimisticCollisionException をキャッチするときの、キーを検索し印刷する方法を示しています。

try {
...
} catch (OptimisticCollisionException oce) {
    System.out.println(oce.getKey());
}

OptimisticCollisionException の原因となる ObjectGridException

OptimisticCollisionException は、ObjectGridException が表示される原因となる場合があります。この場合、以下のコードを使用して例外タイプを判別し、 キーを印刷できます。以下のコードは、以下のセクションで説明するように、findRootCause ユーティリティー・メソッドを使用しています。

try {
...
}
catch (ObjectGridException oe) {
    Throwable Root = findRootCause( oe );
    if (Root instanceof OptimisticCollisionException) {
        OptimisticCollisionException oce = (OptimisticCollisionException)Root;
        System.out.println(oce.getKey());
    }
}

一般的な例外処理技法

Throwable オブジェクトの根本原因がわかると、エラーの発生源を分離する場合に役立ちます。 次の例では、例外ハンドラーでユーティリティー・メソッドを使用して Throwable オブジェクトの根本原因を検出する方法について説明します。

例:

static public Throwable findRootCause( Throwable t )
{
     // Start with Throwable that occurred as the root.
     Throwable root = t;

     // Follow cause chain until last Throwable in chain is found.
     Throwable cause = root.getCause();
     while ( cause != null )
     {
        root = cause;
        cause = root.getCause();
     }

     // Return last Throwable in the chain as the root cause.
     return root;
}