例外処理
アクション・ハンドラーには、以下の例外処理ガイドラインが適用されます。
カスタム・スイープ・ハンドラーは、他のアクション・ハンドラーとは異なり、Java™ Platform, Enterprise Edition (Java EE) トランザクション内で実行されません。
- カスタム・スイープ・ハンドラー以外のアクション・ハンドラーは、Java EE トランザクション内で実行されます。サーバーは、Java EE トランザクションを幅広く活用して、永続化されたデータの正確性と一貫性を確保します。サーバーのトランザクションの一貫性が損なわれるのを防ぐために、ハンドラー・コードは、Content Engine API によってスローされる例外への応答として常に何らかの例外をスローする必要があります。例外のスローにより、サーバーは確実に前後のトランザクションをロールバックして、不整合のデータベース・アクティビティーをクリーンアップします。Content Engine API の例外をキャッチして、ソフト障害またはリカバリー可能な障害として扱うことは安全ではありません。
- スローされたチェック例外を、RuntimeException のサブクラスでラップする必要があります。サーバーは、スローされた例外をキャッチして、EngineRuntimeException でラップします。
- カスタム・スイープ・ハンドラーは、失敗した場合に、部分的な影響を残さないようにする必要があります。また、カスタム・スイープ・ハンドラーは、べき等の処理である (最初に成功した場合でも操作を複数回適用できる) 必要があります。
カスタム・スイープ・ハンドラーは Java EE トランザクション内で実行されませんが、これらのハンドラーが Content Engine API を使用して実行する操作は、通常のトランザクション動作を行います。特に、UpdatingBatch を使用して、一連のアクションをアトミックに実行できます。これは、エラーが発生した場合に、操作が部分的な影響を残さないようにするための理想的な方法です。この方法を使用する場合は、ハンドラーに渡されるバッチ内のスイープ・アイテムごとに、別個の UpdatingBatch を適用することをお勧めします。これにより、各アイテムは、他のすべてのアイテムから完全に独立して、正常に処理されるか、失敗します。
例外がハンドラー以外に伝搬されないようにします。例外をトラップし、スイープ・アイテムに対する結果メソッドを設定します。