ビジネス・ロジック層サービスは、アプリケーション・モジュールを使用してトランザクションをコミットします。次のフローチャートに、コミット・サイクルの処理を示します。
エンティティ・オブジェクトを検証します。
Business Components for Javaフレームワークはトランザクションのリストを確認し、検証が必要なエンティティ・オブジェクトを検証します。検証処理は10回行われます(この回数は、DBTransaction.setValidationThreshold()をコールして変更できます)。最後の検証にも失敗した場合は、JboExceptionをスローし、終了します。
注意: ループを使用すると、アプリケーション開発者は、検証ロジックに基づいて属性値を設定できます。その後、新しい更新を検証します。
次に、ビジネス・コンポーネント・フレームワークはすべてのTransactionPostListenerに対しpostChanges()をコールします。エンティティ・オブジェクト内でpostChanges()をオーバーライドした場合、メソッドはこの段階でコールされます。
エンティティ・オブジェクトをポストします。
ビジネス・コンポーネント・フレームワークはデータベースに変更をポストし、すべてのTransactionListenerに対しbeforeCommit()をコールします。
ビジネス・コンポーネント・フレームワークは、修正されたエンティティ・オブジェクトに対し最終的な検証を行います。無効なコンポーネントが検出された場合、例外をスローし、コミット・サイクルが開始される前の状態にデータベースをリストアし、終了します。コミット・サイクルのこの時点では、新しい変更を行うことはできません。変更はすべて、このコミット・サイクルの終了後にafterCommit()で行われます。
変更をコミットします。
ビジネス・コンポーネント・フレームワークはデータベース・コミットをコールしてトランザクションをコミットし、次にすべてのTransactionListenerに対しafterCommit()をコールします。
コミットの段階でJboExceptionがスローされた場合、ビジネス・コンポーネント・フレームワークはコミット・サイクルが開始される前の状態にデータベースをリストアし、新しいJboExceptionをスローして終了します。ただし、データベースでコミットが完了した後では、(afterCommitメソッドでスローされた例外に対し、)キャッシュされた状態へのリストアは試行しません。
注意: コミット・サイクルの間、リスナーのメソッド(特定のTransactionListenerのbeforeCommit()メソッドなど)がコールされるのは1回のみです。