コミット・サイクルの処理について

ビジネス・ロジック層サービスは、アプリケーション・モジュールを使用してトランザクションをコミットします。次のフローチャートに、コミット・サイクルの処理を示します。

図1: コミット・サイクルの処理のフローチャート

Flowchart with these pieces, in order: Start Posting; Start Validating; All Entity Objects Valid?; if Yes, Post Entity Objects (if No, go back to Start Validating); Any Entity Objects Invalid?; if no, Commit Changes (if yes, go back to Start Posting); Stop.

  1. エンティティ・オブジェクトを検証します。

    Business Components for Javaフレームワークはトランザクションのリストを確認し、検証が必要なエンティティ・オブジェクトを検証します。検証処理は10回行われます(この回数は、DBTransaction.setValidationThreshold()をコールして変更できます)。最後の検証にも失敗した場合は、JboExceptionをスローし、終了します。

    注意: ループを使用すると、アプリケーション開発者は、検証ロジックに基づいて属性値を設定できます。その後、新しい更新を検証します。

    次に、ビジネス・コンポーネント・フレームワークはすべてのTransactionPostListenerに対しpostChanges()をコールします。エンティティ・オブジェクト内でpostChanges()をオーバーライドした場合、メソッドはこの段階でコールされます。

  2. エンティティ・オブジェクトをポストします。

    ビジネス・コンポーネント・フレームワークはデータベースに変更をポストし、すべてのTransactionListenerに対しbeforeCommit()をコールします。

    ビジネス・コンポーネント・フレームワークは、修正されたエンティティ・オブジェクトに対し最終的な検証を行います。無効なコンポーネントが検出された場合、例外をスローし、コミット・サイクルが開始される前の状態にデータベースをリストアし、終了します。コミット・サイクルのこの時点では、新しい変更を行うことはできません。変更はすべて、このコミット・サイクルの終了後にafterCommit()で行われます。

  3. 変更をコミットします。

    ビジネス・コンポーネント・フレームワークはデータベース・コミットをコールしてトランザクションをコミットし、次にすべてのTransactionListenerに対しafterCommit()をコールします。

    コミットの段階でJboExceptionがスローされた場合、ビジネス・コンポーネント・フレームワークはコミット・サイクルが開始される前の状態にデータベースをリストアし、新しいJboExceptionをスローして終了します。ただし、データベースでコミットが完了した後では、(afterCommitメソッドでスローされた例外に対し、)キャッシュされた状態へのリストアは試行しません。

    注意: コミット・サイクルの間、リスナーのメソッド(特定のTransactionListenerのbeforeCommit()メソッドなど)がコールされるのは1回のみです。