uCosminexus DocumentBroker Version 5 概説
ここでは,ロックに関する注意事項について説明します。
DocumentBrokerでは,メソッド実行時に,文書管理オブジェクトを構成するDocumentBrokerオブジェクトのトップオブジェクトに対してロックが設定されます。また,トップオブジェクト以外のDocumentBrokerオブジェクトについては,メソッドの処理に必要なオブジェクトに対してロックが設定されます。このため,次の場合,トップオブジェクト以外のDocumentBrokerオブジェクトに対するロックを,ほかのユーザが取得できてしまうことがあります。
複数の文書管理オブジェクトにwriteロックを設定することがあるメソッドを使用して,複数の文書管理オブジェクトを操作する場合,パラメタの指定によっては,デッドロックが発生することがあります。デッドロックの例を次の図に示します。
図3-38 デッドロックの例
この例では,操作対象の文書管理オブジェクトとして二つのバージョンなしフォルダ「フォルダA」と「フォルダB」があります。ユーザXが,バージョンなし文書「文書1」の作成と同時に,その文書の登録先フォルダを「フォルダA」,「フォルダB」の順に指定して,バージョンなし文書を作成するメソッド(DbjDocSpace#createDocumentメソッド)を実行したとします。このとき,ユーザYも,バージョンなし文書「文書2」の作成と同時に,その文書の登録先フォルダを「フォルダB」,「フォルダA」の順に指定して同じメソッドを実行したとします。この場合,お互いに途中で待ち状態(WAITモード)のままになってデッドロックが発生し,デッドロックが検知された時点でエラーになることがあります。
デッドロックを発生しにくくするには,次のような方法が考えられます。例えば,文書やフォルダなどの文書管理オブジェクトの一覧を取得する場合に,文書管理オブジェクトを一定の順序にソートしておいて,更新系メソッドに指定するバージョン識別子またはリンク識別子を,一定の順序で指定します。これによって,図3-36の例のような指定順が原因であるデッドロックが発生する可能性を軽減できます。
All Rights Reserved. Copyright (C) 2012, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2012, Hitachi Solutions, Ltd.