ロックは,メソッドで設定します。クラスライブラリのメソッドによるロックの設定方法には,次の4種類があります。
ユーザが明示的にロックを設定する場合,処理と同時にロックを設定するメソッドによって必要なロックを設定できます。このメソッドとSetOIIDメソッドを組み合わせた操作では,ConnectObjectメソッドとロックの指定をしないメソッドを組み合わせて操作する場合に比べて,高速な処理ができます。これは,データベースへのアクセス数が減るためです。
明示的なロックを設定するメソッドについては,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。
処理と同時にロックを設定するメソッドを使用する場合のコールシーケンスを次に示します。
CdbrDocument Obj;
pSession->Begin();
//ObjにOIIDを設定する
Obj.SetOIID( pSession, pOIID);
//データベースからプロパティを参照すると同時に
//WRITE_LOCKモードでロックを設定する
Obj.GetPropertyValuesAndLock( ..., DMA_LOCK_WRITE );
//プロパティを更新する
Obj.PutPropertyValues(...);
//処理の確定
pSession->Commit();
CdbrDMAクラスで定義されているConnectObjectメソッドによって,明示的なロックを設定することもできます。このメソッドでは,オブジェクトに接続すると同時に指定したロックが設定できます。
ConnectObjectメソッドでは,そのオブジェクトを構成するDMAオブジェクトのうち,トップオブジェクトにロックを設定します。それ以外のDMAオブジェクトについては,それぞれの参照系メソッドおよび更新系メソッドをコールするときに,必要なロックが設定されます。
なお,ConnectObjectメソッドでは,ロックの設定時にWAITモードまたはNOWAITモードの指定ができます。モードの指定については,「3.14.3 ロックが設定されているオブジェクトに対する接続」を参照してください。
また,ConnectObjectメソッドでreadロックを設定したあとでそのオブジェクトに対して更新系メソッドをコールした場合は,改めてwriteロックが設定されます。
ConnectObjectメソッドによってロックを設定する場合のコールシーケンスを次に示します。
CdbrDocument Obj;
pSession->Begin();
//データベース中の文書オブジェクトのロックをWRITEモードで設定する
Obj.ConnectObject( pSession, DMA_LOCK_WRITE, pOIID);
//プロパティを参照する
Obj.GetPropertyValues(...);
// プロパティを更新する
Obj.PutPropertyValues(...);
Obj.ReleaseObject();
// 処理の確定
pSession->Commit();
ユーザが明示的にロックを指定しないでデータベースを直接操作するメソッドをコールした場合,DocumentBrokerによってデータベースのアクセスに必要なロックが暗黙に設定されます。
暗黙のロックは,クラスライブラリのオブジェクトを構成するDMAオブジェクトのうち,トップオブジェクトに設定されます。それ以外のオブジェクトには,メソッドの実行に必要なロックが設定されます。
DocumentBrokerの各メソッドによってトップオブジェクトに暗黙に設定されるロックについては,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。