オプティミスティック・ロックの使用
パフォーマンス上の利点を利用するためキャッシュを使用する際は、マルチユーザー環境におけるデータベース・レコード変更を管理するためロック・ポリシーも使用します。ロック・ポリシーを使用しないと、キャッシュに保存されているすでに無効となったデータ(失効データと呼ぶ場合もあります)がユーザーに表示される可能性があります。
データベースは通常、次のロック・ポリシーをサポートします。
- コミット時: すべてのユーザーがデータへの読取りアクセスを保持します。ユーザーが変更の書込みを試行すると、データが最後に読み取られたときから変更されていないことがアプリケーションでチェックされます。TopLinkでは複数のオプティミスティック・ロックのメソッドがサポートされます。
- 即時: 更新目的でデータに最初にアクセスしたユーザーが、更新が完了するまでデータをロックします。TopLinkでは
UnitOfWork
とupdateAndLockObject()
を使用したペシミスティック・ロックがサポートされます。 - ロックなし: アプリケーションはデータが最新かどうか確認しません。
すべてのユーザーが有効なデータを使用して変更をコミットするようにするため、オプティミスティック・ロックを使用することをお薦めします。TopLinkでは複数のオプティミスティック・ロックのポリシーがサポートされます。
- バージョン・ロック・ポリシーでは、レコード・バージョン・フィールドのこの表への追加が必要になるたびに更新される、バージョン・フィールド(または書込みロック・フィールド)を使用してオプティミスティック・ロックが実行されます。
- フィールド・ロック・ポリシーでは、追加フィールドは不要ですが実装する
UnitOfWork
が必要です。
注意: 3層アプリケーションを構築中でオブジェクトが作業ユニットのコンテキスト外で編集されている場合は、書込みロック値がオブジェクトに格納されてクライアントに渡されます。これがサーバーのみの場合は、クライアントが同じキャッシュを更新するためロック競合が回避される可能性があります。
関連トピック
TopLinkディスクリプタについて
バージョン・ロック・ポリシーの使用
フィールド・ロック・ポリシーの使用
詳細オプティミスティック・ロック・ポリシーの指定
ディスクリプタの使用
Copyright © 1997, 2006, Oracle. All rights reserved.