トランザクションは、データベース操作を管理するためのインタフェースです。トランザクション内のデータ変更の操作がすべて成功していない場合、その変更はサーバーに受け入れられません。これらの操作には、属性値や標準のSQLコール(INSERT、UPDATEおよびDELETEなど)を設定するメソッド、またはJavaストアド・プロシージャやPL/SQLパッケージのコールなどのRPCに類似した特殊なコールを設定するメソッドが含まれます。トランザクションは最小の単位です。つまり、1つのトランザクション内の操作の結果は、すべてコミット(データベースに保存)されるか、すべてロールバック(元に戻される)されます。
たとえば、銀行サービスを使用するクライアントが普通預金口座から当座預金口座へ振替を行う場合、トランザクションは、普通預金口座の減額、当座預金口座の増額、取引記録への取引の記録という3つの異なる操作から構成されます。3つの操作すべてが実行されて口座の残高が適切であれば、トランザクションはコミットされ、操作の結果がデータベースに適用されます。しかし、(残高の不足、無効な口座番号、ハードウェア障害などの)なんらかの理由で操作のいずれかが完了されない場合、すべての口座の残高が正しくなるようトランザクション全体をロールバックする必要があります。
また、トランザクションにより、複数ユーザーが共有するデータ・ストアの一貫性が保たれます。あるクライアントがデータを変更する場合、ロックが行われ、最初のクライアントが操作を完了するまで他のクライアントは他の変更を行えなくなります。トランザクションがコミットまたはロールバックされた場合、ロックが解放されます。これを即時ロック・モードといい、Business Components for Javaフレームワークのデフォルトのモードです。
アプリケーション・モジュールでは、デフォルトのトランザクションおよび同時実行サポートが提供されています。デフォルトの動作をカスタマイズする場合以外は、コーディングの必要はありません。
Business Components for Javaを使用してプログラミングする場合、トランザクション管理の原則は、ビジネス・ロジック層でもクライアントでも同じです。
データベースに接続するアプリケーション・モジュールを作成し、トランザクションのコンテキストを確立します。
問合せを実行します。
結果セットを操作します(属性を設定し、値を検証します)。
変更をデータベースにコミットする(新規データを他のアプリケーション・モジュールに対して使用可能にする)か、ロールバックします。
Business Components for Javaフレームワークでは、キャッシュとデータベースで変更を同期化するため、(変更指向の方法ではなく)バッチ指向の方法が使用されます。この方法には、次のような利点があります。
変更内容は、メモリー内キャッシュにバッファリングされます。
キャッシュ内の変更内容は、一連のデータベース操作処理を使用してデータベースと同期化されます。この一連の操作を、ポストと呼びます。(Business Components for Javaでは、ポストは、コミット・サイクルで実行されるか、Transaction
インタフェースでpostChanges()
をコールして実行します。)
いくつかの状態変更が行われた場合、個々の変更によりキャッシュが無効なデータベース状態になっている可能性があるため、ポストの直前に検証が実行されます。
ロック・モードを表すには、次の定数のいずれかを使用します。
ApplicationModule.LOCK_NONE
ApplicationModule.LOCK_OPTIMISTIC
ApplicationModule.LOCK_PESSIMISTIC
(デフォルト)