(57)【要約】【課題】ディレクトリサーバ装置およびクライアントになんら変更を加えることなく、排他制御を実現する。【解決手段】ディレクトリサーバ装置２０の前段にディレクトリサーバ装置２０内のどのエントリがどのクライアント３０によりロックされているかの情報を管理する排他制御装置１０を配置することにより、ロック済関係エントリ群に含まれるエントリに対する更新操作要求を受けたときに、要求元のクライアント３０がロックの所有者以外であれば要求元のクライアント３０にエラーを返し、要求元のクライアント３０がロックの所有者であれば更新操作要求をディレクトリサーバ装置２０に送信することで排他制御を行う。【選択図】　図２
2004094850.tif 000002
【特許請求の範囲】
【請求項１】
ディレクトリサーバ装置の前段に配置され、ディレクトリサーバ装置内のどのエントリがどのクライアントによりロックされているかの情報を管理して、すでにロックされているエントリに対する更新操作要求を受けたときに要求元のクライアントがロックの所有者以外であれば要求元のクライアントにエラーを返し、要求元のクライアントがロックの所有者であれば更新操作要求をディレクトリサーバ装置に送信することで排他制御を行うことを特徴とする排他制御装置。
【請求項２】
排他制御エントリサブツリー毎のロック設定条件をあらかじめ記録するロック設定条件表と、
ロック済関係エントリ群毎のロックを記録するロック状態表と、
クライアントからディレクトリ操作要求を受信する操作受信部と、
ディレクトリ操作要求をディレクトリサーバ装置に送信する操作送信部と、
ディレクトリサーバ装置からディレクトリ応答を受信する応答受信部と、
前記応答受信部で受信されたディレクトリ応答およびエラーを要求元のクライアントへ送信する応答送信部と、
前記操作受信部で受信したディレクトリ操作要求の種別を判定する操作種別判定部と、
前記操作種別判定部によりディレクトリ操作要求が更新操作要求であると判定されたときに、前記ロック状態表を参照してロック済関係エントリ群に含まれるエントリに対する更新操作要求であれば要求元のクライアントがロックの所有者以外である場合に前記応答送信部から要求元のクライアントにエラーを返し、要求元のクライアントがロックの所有者である場合に更新操作要求を前記操作送信部からディレクトリサーバ装置に送信し、ロック済関係エントリ群に含まれていないエントリに対する更新操作要求であれば前記ロック設定条件表を参照して前記ロック状態表に関係エントリ群に対するロックを記録して要求元のクライアントに付与し更新操作要求を前記操作送信部からディレクトリサーバ装置に送信するロック状態管理部と、
前記ロック状態表に定期的にアクセスしてタイムアウトしたロックを解除するタイムアウト処理部と
を有することを特徴とする排他制御装置。
【請求項３】
前記ロック状態管理部が、前記操作種別判定部によりディレクトリ操作要求が接続切断操作要求であると判定されたときに前記ロック状態表から要求元のクライアントが所有するロックを全て解除することを特徴とする請求項２記載の排他制御装置。
【請求項４】
前記ロック状態管理部が、前記操作種別判定部によりディレクトリ操作要求が接続切断操作要求および更新操作要求以外であると判定されたときに、ディレクトリ操作要求を前記操作送信部からディレクトリサーバ装置に送信することを特徴とする請求項２記載の排他制御装置。
【請求項５】
前記ロック設定条件表の各行が、排他制御エントリサブツリーの根エントリのＤＮが設定される根エントリＤＮフィールドと、排他制御エントリサブツリーにおいて同時に排他制御を必要とするエントリの位置関係が設定される位置関係フィールドと、ロックのタイムアウト時間が設定されるタイムアウト時間フィールドとを有することを特徴とする請求項２記載の排他制御装置。
【請求項６】
前記ロック状態表の各行が、更新操作要求の対象エントリのＤＮが設定される基点エントリＤＮフィールドと、前記基点エントリＤＮフィールドで特定されるエントリを基点として同時に排他制御を必要とするエントリの位置関係が設定される位置関係フィールドと、ロックのタイムアウト時間が設定されるタイムアウト時間フィールドと、ロックを所有しているクライアントのセッションＩＤが設定されるセッションＩＤフィールドと、ロックを所有しているクライアントからのロック済関係エントリ群に含まれるエントリに対する最後の更新操作要求が発行された最終アクセス時刻が設定される最終アクセス時刻フィールドとを有することを特徴とする請求項２記載の排他制御装置。
【請求項７】
前記タイムアウト処理部が、前記ロック状態表のタイムアウト時間フィールドおよび最終アクセス時刻フィールドを定期的に走査し、最終アクセス時刻フィールドの最終アクセス時刻と現在時刻との差がタイムアウト時間フィールドのタイムアウト時間を超えている行を削除することによりロックを解除することを特徴とする請求項６記載の排他制御装置。
【請求項８】
複数のクライアントと、ディレクトリサーバ装置とが存在するシステムの排他制御方法において、
ディレクトリサーバ装置の前段にディレクトリサーバ装置内のどのエントリがどのクライアントによりロックされているかの情報を管理してエントリの排他制御を行う排他制御装置を配置する工程と、
ロックされていないエントリに更新操作要求があったときに対象エントリに対するロックを生成して要求元のクライアントに付与し更新操作要求をディレクトリサーバ装置に送信する工程と、
すでにロックされているエントリに対する更新操作要求を受けたときに要求元のクライアントがロックを所有しているかどうかを判定し、要求元のクライアントがロックを所有していなければエラーを要求元のクライアントに返し、要求元のクライアントがロックを所有していれば更新操作要求をディレクトリサーバ装置に送信する工程と、
要求元のクライアントが接続を切るか一定のタイムアウト時間の経過後に自動的にロックを解除する工程と
を含むことを特徴とする排他制御方法。
【請求項９】
クライアントからディレクトリ操作要求を受信する工程と、
受信されたディレクトリ操作要求が接続切断操作要求であるかどうかを調べる工程と、
ディレクトリ操作要求が接続切断操作要求であったときに要求元のクライアントが所有しているロックを全て解除する工程と、
ディレクトリ操作要求が接続切断操作要求でなかったときに該ディレクトリ操作要求が更新操作要求であるかどうかを調べる工程と、
ディレクトリ操作要求が更新操作要求でなかったときにディレクトリ操作要求をディレクトリサーバ装置へ送信する工程と、
ディレクトリ操作要求が更新操作要求であったときに該更新操作要求の対象エントリがロック済関係エントリ群に含まれているかどうかを調べる工程と、
更新操作要求の対象エントリがロック済関係エントリ群に含まれていなかったときに該更新操作要求の対象エントリが排他制御エントリサブツリーに所属しているかどうかを調べる工程と、
更新操作要求の対象エントリが排他制御エントリサブツリーに所属していたときに該対象エントリを含む関係エントリ群に対するロックを生成して要求元のクライアントに付与し、該更新操作要求をディレクトリサーバ装置へ送信する工程と、
更新操作要求の対象エントリがロック済関係エントリ群に含まれているときに要求元のクライアントがロックの所有者であるかどうかを調べる工程と、
要求元のクライアントがロックの所有者でなかったときに要求元のクライアントにエラーを返す工程と、
要求元のクライアントがロックの所有者であったときに最終アクセス時刻を現在時刻で更新した後に更新操作要求をディレクトリサーバ装置へ送信する工程と、ディレクトリ応答を受信したときに該ディレクトリ応答を要求元のクライアントへ送信する工程と
を含むことを特徴とする排他制御方法。
【請求項１０】
要求元のクライアントが接続を切るか一定のタイムアウト時間の経過後に自動的にロックを解除する工程を含むことを特徴とする請求項９記載の排他制御方法。
【請求項１１】
コンピュータを、排他制御エントリサブツリー毎のロック設定条件をあらかじめ記録するロック設定条件表と、ロック済関係エントリ群毎のロックを記録するロック状態表と、クライアントからディレクトリ操作要求を受信する操作受信部と、ディレクトリ操作要求をディレクトリサーバ装置に送信する操作送信部と、ディレクトリサーバ装置からディレクトリ応答を受信する応答受信部と、前記応答受信部で受信されたディレクトリ応答およびエラーを要求元のクライアントへ送信する応答送信部と、前記操作受信部で受信したディレクトリ操作要求の種別を判定する操作種別判定部と、前記操作種別判定部によりディレクトリ操作要求が更新操作要求であると判定されたときに、前記ロック状態表を参照してロック済関係エントリ群に含まれるエントリに対する更新操作要求であれば要求元のクライアントがロックの所有者以外である場合に前記応答送信部から要求元のクライアントにエラーを返し、要求元のクライアントがロックの所有者である場合に更新操作要求を前記操作送信部からディレクトリサーバ装置に送信し、ロック済関係エントリ群に含まれていないエントリに対する更新操作要求であれば前記ロック設定条件表を参照して前記ロック状態表に関係エントリ群に対するロックを記録して要求元のクライアントに付与し更新操作要求を前記操作送信部からディレクトリサーバ装置に送信するロック状態管理部と、前記ロック状態表に定期的にアクセスしてタイムアウトしたロックを解除するタイムアウト処理部として機能させるためのプログラム。
【請求項１２】
コンピュータに、クライアントからディレクトリ操作要求を受信する工程と、受信されたディレクトリ操作要求が接続切断操作要求であるかどうかを調べる工程と、ディレクトリ操作要求が接続切断操作要求であったときに要求元のクライアントが所有しているロックを全て解除する工程と、ディレクトリ操作要求が接続切断操作要求でなかったときに該ディレクトリ操作要求が更新操作要求であるかどうかを調べる工程と、ディレクトリ操作要求が更新操作要求でなかったときにディレクトリ操作要求をディレクトリサーバ装置へ送信する工程と、ディレクトリ操作要求が更新操作要求であったときに該更新操作要求の対象エントリがロック済関係エントリ群に含まれているかどうかを調べる工程と、更新操作要求の対象エントリがロック済関係エントリ群に含まれていなかったときに該更新操作要求の対象エントリが排他制御エントリサブツリーに所属しているかどうかを調べる工程と、更新操作要求の対象エントリが排他制御エントリサブツリーに所属していたときに該対象エントリを含む関係エントリ群に対するロックを生成して要求元のクライアントに付与し、該更新操作要求をディレクトリサーバ装置へ送信する工程と、更新操作要求の対象エントリがロック済関係エントリ群に含まれているときに要求元のクライアントがロックの所有者であるかどうかを調べる工程と、要求元のクライアントがロックの所有者でなかったときに要求元のクライアントにエラーを返す工程と、要求元のクライアントがロックの所有者であったときに最終アクセス時刻を現在時刻で更新した後に更新操作要求をディレクトリサーバ装置へ送信する工程と、ディレクトリ応答を受信したときに該ディレクトリ応答を要求元のクライアントへ送信する工程とを実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は排他制御装置および排他制御方法に関し、特に複数のクライアントとディレクトリサーバ装置とが存在するシステムにおける排他制御装置および排他制御方法に関する。
【０００２】
【従来の技術】
ディレクトリサーバ装置は、インターネット／イントラネットの各利用者に関する個人情報を管理するとともに、各ユーザからの要求によりそれらの情報を提供するデータベースである。現在最も利用されているディレクトリアクセスのプロトコルがＬＤＡＰ（Ｌｉｇｈｔｗｅｉｇｈｔ
Ｄｉｒｅｃｔｏｒｙ　Ａｃｃｅｓｓ　Ｐｒｏｔｏｃｏｌ）であるため、ディレクトリサーバ装置はＬＤＡＰサーバと呼ばれることがある。ディレクトリサーバ装置は、具体的には、各ユーザの氏名，所属部署，電話番号，メールアドレス，ユーザ認証に必要なパスワード等を管理する。各ユーザからの参照要求に対してそれらの情報を提供する他、他のディレクトリサービスとの間で、設定されたセキュリティの範囲内で個人情報の交換を行うことができる。
【０００３】
ディレクトリサーバ装置は、データオブジェクトをツリー状の階層構造として持ち、　個々のデータオブジェクトをエントリ、各エントリが持つ個々のデータフィールドを属性と呼び、各エントリは階層上でのエントリの位置情報を含んだＤＮ（Ｄｉｓｔｉｎｇｕｉｓｈｅｄ　Ｎａｍｅ）と呼ばれる識別子を持つ。
【０００４】
ところで、ディレクトリサーバ装置は、電話帳のようなデータを格納する検索主体のデータベースとして考案されたが、ＬＤＡＰという標準化されたプロトコルによりアクセスできることから、さまざまなアプリケーションのデータを一元管理するものとして使用されるようになってきており、検索主体とはいえなくなってきている。
【０００５】
また、ディレクトリサーバ装置を用いたシステムにおいては、構築時には、同時に同じデータ領域にアクセスするクライアントが１つだったために排他制御を行っていなかったが、システム規模の拡大に伴って同等の処理を行うクライアントを増やすために、途中から排他制御を導入する必要が出てくることもある。
【０００６】
しかし、標準のディレクトリサーバ装置では、１つのエントリに対する１つのディレクトリ操作要求の単位でしか排他制御（トランザクション制御）はされていなかった。
【０００７】
ディレクトリサーバ装置における排他制御もしくはトランザクション制御に関する従来の技術は、例えば、特開平１１−９６０６２号公報に、トランザクション制御機能を備えたディレクトリサーバ装置として開示されている。
【０００８】
また、インターネットドラフトｄｒａｆｔ−ｚｅｉｌｅｎｇａ−ｌｄａｐ−ｇｒｏｕｐｉｎｇ−０４．ｔｘｔおよびｄｒａｆｔ−ｚｅｉｌｅｎｇａ−ｌｄａｐ−ｔｘｎ−０４．ｔｘｔでは、トランザクション制御機能を備えたディレクトリサーバ装置の持つべきクライアントに対するインタフェースの標準について提案されている。
【０００９】
【発明が解決しようとする課題】
しかし、上記した従来の技術は、いずれもＬＤＡＰの拡張操作の枠組みを使用して、トランザクション開始操作，トランザクション終了操作といった新たなＬＤＡＰ操作を定義し、クライアントが１つのトランザクションとして行いたいディレクトリ操作要求を、トランザクション開始操作要求とトランザクション終了操作要求とで囲んで発行することになっていたので、以下のような問題点あった。
【００１０】
第１の問題点は、新たに排他制御が必要になった場合に、既存のクライアントの変更が必要なことである。また、トランザクションの切り方を変更したい場合は、そのつどクライアントの変更が必要である。その理由は、トランザクション開始操作およびトランザクション終了操作といった排他制御のための新たな処理をクライアントに実装する必要があるためである。
【００１１】
第２の問題点は、排他制御機能を備えていない一般的なディレクトリサーバ装置でシステムをすでに構築してあり、その後、新たに排他制御が必要になった場合に、現在使用中のディレクトリサーバ装置を置き換えてデータ移行を行うことが必要なことである。その理由は、トランザクション制御機能を備えた特別なディレクトリサーバ装置が必要なためである。
【００１２】
これに対して、トランザクション制御機能を備えた特別なディレクトリサーバ装置を使用せずに排他制御を実現するための手段としては、ディレクトリデータベース中の１つ１つのエントリの上に排他制御用にロックされているか否かのフラグの属性を用意し、クライアントが、ディレクトリ操作要求の対象エントリがロックされていないかどうかを確認し、ロックされていなければそれらのエントリをロックし、一連の操作が終了した時点でロックの解除を行うことが考えられる。
【００１３】
しかし、このようにした場合には、次のような問題点がある。
【００１４】
第１の問題点は、上記のように新たに排他制御が必要になった場合に、既存のすべてのクライアントの変更が必要であり、特にロック確認を怠るクライアントが現れると、排他が侵されるということである。その理由は、ロック確認，ロック，ロック解除といった処理をすべてのクライアントが行うことにより排他制御が実現されるためである。
【００１５】
第２の問題点は、ディレクトリサーバ装置において、ディレクトリデータベースのスキーマ変更が必要になる可能性があることである。その理由は、排他制御用のフラグの属性が必要なためである。
【００１６】
第３の問題点は、排他制御のための処理が性能面に影響を与えることである。その理由は、１つのエントリの更新操作のたびに、ロック確認，ロック，ロック解除の各処理がディレクトリサーバ装置と通信することにより行われるためである。
【００１７】
第４の問題点は、ネットワーク障害等によりロック解除処理が失敗した場合にロックが残ってしまうことである。その理由は、クライアントによるロック解除処理より他にロック解除を行う仕組みがないためである。
【００１８】
第５の問題点は、デッドロックの起こる可能性が高いことである。その理由は、更新操作要求の対象エントリを１つ１つロックする必要があるため、例えば、エントリＡ，ＢをロックしたいクライアントＣ，Ｄが存在し、クライアントＣがエントリＡを、クライアントＤがエントリＢを先にロックした場合、クライアントＣ，Ｄともにロックの取得に失敗するということが起こるためである。
【００１９】
本発明の目的は、あるクライアントがディレクトリサーバ装置上の複数のエントリに対する複数の更新操作要求を行っている間、それらのエントリに対する他のクライアントからの更新操作要求を制限するような排他制御を実現できる排他制御装置および排他制御方法を提供することにある。
【００２０】
【課題を解決するための手段】
本発明の排他制御装置は、ディレクトリサーバ装置の前段に配置され、ディレクトリサーバ装置内のどのエントリがどのクライアントによりロックされているかの情報を管理して、すでにロックされているエントリに対する更新操作要求を受けたときに要求元のクライアントがロックの所有者以外であれば要求元のクライアントにエラーを返し、要求元のクライアントがロックの所有者であれば更新操作要求をディレクトリサーバ装置に送信することで排他制御を行うことを特徴とする。
【００２１】
また、本発明の排他制御装置は、排他制御エントリサブツリー毎のロック設定条件をあらかじめ記録するロック設定条件表と、ロック済関係エントリ群毎のロックを記録するロック状態表と、クライアントからディレクトリ操作要求を受信する操作受信部と、ディレクトリ操作要求をディレクトリサーバ装置に送信する操作送信部と、ディレクトリサーバ装置からディレクトリ応答を受信する応答受信部と、前記応答受信部で受信されたディレクトリ応答およびエラーを要求元のクライアントへ送信する応答送信部と、前記操作受信部で受信したディレクトリ操作要求の種別を判定する操作種別判定部と、前記操作種別判定部によりディレクトリ操作要求が更新操作要求であると判定されたときに、前記ロック状態表を参照してロック済関係エントリ群に含まれるエントリに対する更新操作要求であれば要求元のクライアントがロックの所有者以外である場合に前記応答送信部から要求元のクライアントにエラーを返し、要求元のクライアントがロックの所有者である場合に更新操作要求を前記操作送信部からディレクトリサーバ装置に送信し、ロック済関係エントリ群に含まれていないエントリに対する更新操作要求であれば前記ロック設定条件表を参照して前記ロック状態表に関係エントリ群に対するロックを記録して要求元のクライアントに付与し更新操作要求を前記操作送信部からディレクトリサーバ装置に送信するロック状態管理部と、前記ロック状態表に定期的にアクセスしてタイムアウトしたロックを解除するタイムアウト処理部とを有することを特徴とする。
【００２２】
さらに、本発明の排他制御装置は、前記ロック状態管理部が、前記操作種別判定部によりディレクトリ操作要求が接続切断操作要求であると判定されたときに前記ロック状態表から要求元のクライアントが所有するロックを全て解除することを特徴とする。
【００２３】
さらにまた、本発明の排他制御装置は、前記ロック状態管理部が、前記操作種別判定部によりディレクトリ操作要求が接続切断操作要求および更新操作要求以外であると判定されたときに、ディレクトリ操作要求を前記操作送信部からディレクトリサーバ装置に送信することを特徴とする。
【００２４】
また、本発明の排他制御装置は、前記ロック設定条件表の各行が、排他制御エントリサブツリーの根エントリのＤＮが設定される根エントリＤＮフィールドと、排他制御エントリサブツリーにおいて同時に排他制御を必要とするエントリの位置関係が設定される位置関係フィールドと、ロックのタイムアウト時間が設定されるタイムアウト時間フィールドとを有することを特徴とする。
【００２５】
さらに、本発明の排他制御装置は、前記ロック状態表の各行が、更新操作要求の対象エントリのＤＮが設定される基点エントリＤＮフィールドと、前記基点エントリＤＮフィールドで特定されるエントリを基点として同時に排他制御を必要とするエントリの位置関係が設定される位置関係フィールドと、ロックのタイムアウト時間が設定されるタイムアウト時間フィールドと、ロックを所有しているクライアントのセッションＩＤが設定されるセッションＩＤフィールドと、ロックを所有しているクライアントからのロック済関係エントリ群に含まれるエントリに対する最後の更新操作要求が発行された最終アクセス時刻が設定される最終アクセス時刻フィールドとを有することを特徴とする。
【００２６】
さらにまた、本発明の排他制御装置は、前記タイムアウト処理部が、前記ロック状態表のタイムアウト時間フィールドおよび最終アクセス時刻フィールドを定期的に走査し、最終アクセス時刻フィールドの最終アクセス時刻と現在時刻との差がタイムアウト時間フィールドのタイムアウト時間を超えている行を削除することによりロックを解除することを特徴とする。
【００２７】
一方、本発明の排他制御方法は、複数のクライアントと、ディレクトリサーバ装置とが存在するシステムの排他制御方法において、ディレクトリサーバ装置の前段にディレクトリサーバ装置内のどのエントリがどのクライアントによりロックされているかの情報を管理してエントリの排他制御を行う排他制御装置を配置する工程と、ロックされていないエントリに更新操作要求があったときに対象エントリに対するロックを生成して要求元のクライアントに付与し更新操作要求をディレクトリサーバ装置に送信する工程と、すでにロックされているエントリに対する更新操作要求を受けたときに要求元のクライアントがロックを所有しているかどうかを判定し、要求元のクライアントがロックを所有していなければエラーを要求元のクライアントに返し、要求元のクライアントがロックを所有していれば更新操作要求をディレクトリサーバ装置に送信する工程と、要求元のクライアントが接続を切るか一定のタイムアウト時間の経過後に自動的にロックを解除する工程とを含むことを特徴とする。
【００２８】
また、本発明の排他制御方法は、クライアントからディレクトリ操作要求を受信する工程と、受信されたディレクトリ操作要求が接続切断操作要求であるかどうかを調べる工程と、ディレクトリ操作要求が接続切断操作要求であったときに要求元のクライアントが所有しているロックを全て解除する工程と、ディレクトリ操作要求が接続切断操作要求でなかったときに該ディレクトリ操作要求が更新操作要求であるかどうかを調べる工程と、ディレクトリ操作要求が更新操作要求でなかったときにディレクトリ操作要求をディレクトリサーバ装置へ送信する工程と、ディレクトリ操作要求が更新操作要求であったときに該更新操作要求の対象エントリがロック済関係エントリ群に含まれているかどうかを調べる工程と、更新操作要求の対象エントリがロック済関係エントリ群に含まれていなかったときに該更新操作要求の対象エントリが排他制御エントリサブツリーに所属しているかどうかを調べる工程と、更新操作要求の対象エントリが排他制御エントリサブツリーに所属していたときに該対象エントリを含む関係エントリ群に対するロックを生成して要求元のクライアントに付与し、該更新操作要求をディレクトリサーバ装置へ送信する工程と、更新操作要求の対象エントリがロック済関係エントリ群に含まれているときに要求元のクライアントがロックの所有者であるかどうかを調べる工程と、要求元のクライアントがロックの所有者でなかったときに要求元のクライアントにエラーを返す工程と、要求元のクライアントがロックの所有者であったときに最終アクセス時刻を現在時刻で更新した後に更新操作要求をディレクトリサーバ装置へ送信する工程と、ディレクトリ応答を受信したときに該ディレクトリ応答を要求元のクライアントへ送信する工程とを含むことを特徴とする。
【００２９】
さらに、本発明の排他制御方法は、要求元のクライアントが接続を切るか一定のタイムアウト時間の経過後に自動的にロックを解除する工程を含むことを特徴とする。
【００３０】
他方、本発明のプログラムは、コンピュータを、排他制御エントリサブツリー毎のロック設定条件をあらかじめ記録するロック設定条件表と、ロック済関係エントリ群毎のロックを記録するロック状態表と、クライアントからディレクトリ操作要求を受信する操作受信部と、ディレクトリ操作要求をディレクトリサーバ装置に送信する操作送信部と、ディレクトリサーバ装置からディレクトリ応答を受信する応答受信部と、前記応答受信部で受信されたディレクトリ応答およびエラーを要求元のクライアントへ送信する応答送信部と、前記操作受信部で受信したディレクトリ操作要求の種別を判定する操作種別判定部と、前記操作種別判定部によりディレクトリ操作要求が更新操作要求であると判定されたときに、前記ロック状態表を参照してロック済関係エントリ群に含まれるエントリに対する更新操作要求であれば要求元のクライアントがロックの所有者以外である場合に前記応答送信部から要求元のクライアントにエラーを返し、要求元のクライアントがロックの所有者である場合に更新操作要求を前記操作送信部からディレクトリサーバ装置に送信し、ロック済関係エントリ群に含まれていないエントリに対する更新操作要求であれば前記ロック設定条件表を参照して前記ロック状態表に関係エントリ群に対するロックを記録して要求元のクライアントに付与し更新操作要求を前記操作送信部からディレクトリサーバ装置に送信するロック状態管理部と、前記ロック状態表に定期的にアクセスしてタイムアウトしたロックを解除するタイムアウト処理部として機能させることを特徴とする。
【００３１】
また、本発明のプログラムは、コンピュータに、クライアントからディレクトリ操作要求を受信する工程と、受信されたディレクトリ操作要求が接続切断操作要求であるかどうかを調べる工程と、ディレクトリ操作要求が接続切断操作要求であったときに要求元のクライアントが所有しているロックを全て解除する工程と、ディレクトリ操作要求が接続切断操作要求でなかったときに該ディレクトリ操作要求が更新操作要求であるかどうかを調べる工程と、ディレクトリ操作要求が更新操作要求でなかったときにディレクトリ操作要求をディレクトリサーバ装置へ送信する工程と、ディレクトリ操作要求が更新操作要求であったときに該更新操作要求の対象エントリがロック済関係エントリ群に含まれているかどうかを調べる工程と、更新操作要求の対象エントリがロック済関係エントリ群に含まれていなかったときに該更新操作要求の対象エントリが排他制御エントリサブツリーに所属しているかどうかを調べる工程と、更新操作要求の対象エントリが排他制御エントリサブツリーに所属していたときに該対象エントリを含む関係エントリ群に対するロックを生成して要求元のクライアントに付与し、該更新操作要求をディレクトリサーバ装置へ送信する工程と、更新操作要求の対象エントリがロック済関係エントリ群に含まれているときに要求元のクライアントがロックの所有者であるかどうかを調べる工程と、要求元のクライアントがロックの所有者でなかったときに要求元のクライアントにエラーを返す工程と、要求元のクライアントがロックの所有者であったときに最終アクセス時刻を現在時刻で更新した後に更新操作要求をディレクトリサーバ装置へ送信する工程と、ディレクトリ応答を受信したときに該ディレクトリ応答を要求元のクライアントへ送信する工程とを実行させることを特徴とする。
【００３２】
図２に示すように、本発明の排他制御装置１０は、複数のクライアント３０と、ディレクトリサーバ装置２０とが存在したとき、ディレクトリサーバ装置２０の前段に配置される。排他制御装置１０は、ディレクトリサーバ装置２０内のどのエントリがどのクライアント３０によりロックされているかの情報を管理しており、ロック済関係エントリ群に含まれるエントリに対する更新操作要求を受けると、要求元のクライアント３０がロックの所有者であるかどうかを判断して、ロックの所有者でなければエラーを返し、要求元のクライアントがロックの所有者であれば更新操作要求をディレクトリサーバ装置に送信することで排他制御を行う。排他制御装置１０に対して排他制御エントリサブツリーをあらかじめ設定をしておくことで、対象エントリを基点エントリとして含む関係エントリ群に対するロックが更新操作要求したクライアント３０に付与され、要求元のクライアント３０が接続を切るか一定時間の経過後に自動的にロックが解除される。これにより、クライアント３０が何も意識することなしに、また既存のディレクトリサーバ装置２０およびクライアント３０になんらの変更も加えることなく、排他制御を実現することができる。
【００３３】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００３４】
［第１の実施の形態］
図２は、本発明の第１の実施の形態に係る排他制御装置１０が配置されるシステム図である。このシステムは、ディレクトリサーバ装置２０と、複数のクライアント３０と、それらの間に介在する排他制御装置１０とから構成される。
【００３５】
図３は、図２に示したシステムにおいて、クライアント３０としてメンテナンス装置３０ａおよび３０ｂが配置されたメール情報管理システムを示す図である。
【００３６】
ディレクトリサーバ装置２０は、ディレクトリデータベース（図示せず）内にデータオブジェクトをエントリとしてツリー状に格納しており、各エントリの内容は、属性型名と属性値とのペアのリストになっている。そのペアのうちのいずれか１つを選択してエントリの名前付けに使用し、エントリのＤＮは、そのエントリからディレクトリツリーの根エントリまでの各エントリの名前付け属性を並べて、「属性型名＝属性値，属性型名＝属性値，…」という文字列になる。
【００３７】
図１を参照すると、排他制御装置１０は、操作受信部１１１および応答送信部１１２からなるクライアント通信部１１と、操作種別判定部１２１，ロック状態管理部１２３，タイムアウト処理部１２４，ロック状態表１２５およびロック設定条件表１２６からなる排他制御部１２と、操作送信部１３１および応答受信部１３２からなるサーバ通信部１３とから構成されている。
【００３８】
操作受信部１１１は、クライアント３０からディレクトリ操作要求を受信する。
【００３９】
応答送信部１１２は、ディレクトリ応答およびエラーをクライアント３０へ送信する。
【００４０】
操作送信部１３１は、ディレクトリ操作要求をディレクトリサーバ装置２０に送信する。
【００４１】
応答受信部１３２は、ディレクトリサーバ装置２０からディレクトリ応答を受信する。
【００４２】
操作種別判定部１２１は、操作受信部１１１で受信されたディレクトリ操作要求の種別を判定する。
【００４３】
ロック状態管理部１２３は、ロック状態表１２５およびロック設定条件表１２６にアクセスしながら、操作種別判定部１２１から受け取ったディレクトリ操作要求を処理し、排他制御を行う。すなわち、ロック状態管理部１２３は、ロック状態表１２５に行を追加することで関係エントリ群を単位にロックを生成して要求元のクライアント３０に付与する。ロック状態管理部１２３は、クライアント３０からの更新操作要求の対象エントリのＤＮと、ロック状態表１２５の基点エントリＤＮフィールド４１および位置関係フィールド４２とを比較照合することにより、ディレクトリサーバ装置２０を参照することなく更新操作要求の対象エントリがロック済関係エントリ群に含まれているかどうかを高速に判定することができる。またロック状態管理部１２３は、クライアント３０からの更新操作要求の対象エントリのＤＮと、ロック設定条件表１２６の根エントリＤＮフィールド５１とを比較照合することにより、ディレクトリサーバ装置２０を参照することなく更新操作要求の対象エントリが排他制御エントリサブツリーに含まれているかどうかを高速に判定することができる。
【００４４】
タイムアウト処理部１２４は、ロック状態表１２５を参照してロックのタイムアウトを監視し、タイムアウトしたロックの行をロック状態表１２５から削除することによりロックを解除する。
【００４５】
ロック状態表１２５は、ディレクトリサーバ装置２０中のどの関係エントリ群がどのクライアント３０によりロックされているかを記録している。
【００４６】
図４を参照すると、ロック状態表１２５の各行は、基点エントリＤＮフィールド４１，位置関係フィールド４２，タイムアウト時間フィールド４３，セッションＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）フィールド４４，および最終アクセス時刻フィールド４５を有し、１つの行が１つのロックを表す。
【００４７】
基点エントリＤＮフィールド４１には、ロック済関係エントリ群においてロックの基点となるエントリのＤＮが設定される。
【００４８】
位置関係フィールド４２には、基点エントリＤＮフィールド４１に設定されたエントリとの位置関係により、図６に示す自身，親，子，兄弟のいずれかが設定され、基点エントリＤＮフィールド４１と位置関係フィールド４２との組み合わせにより、ロック済関係エントリ群が特定される。なお、基点エントリＤＮフィールド４１および位置関係フィールド４２により、１回のロック処理で複数のエントリをまとめてロックすることができる。
【００４９】
タイムアウト時間フィールド４３には、ロックのタイムアウト時間が設定される。
【００５０】
セッションＩＤフィールド４４には、ロックを所有しているクライアント３０を特定するセッションＩＤ（アドレスおよびポート番号）が設定される。
【００５１】
最終アクセス時刻フィールド４５には、ロックを所有しているクライアント３０からのロック済関係エントリ群に含まれるエントリに対する最後の更新操作要求が発行された時刻を記録している。タイムアウト時間フィールド４３に設定されたタイムアウト時間の間に次の更新操作要求がなかった場合には、タイムアウト処理部１２４によりロックは解除される。
【００５２】
ロック設定条件表１２６には、排他制御装置１０における排他制御エントリサブツリー毎に、根エントリＤＮ，位置関係およびタイムアウト時間を記録している。
【００５３】
図５を参照すると、ロック設定条件表１２６の各行は、根エントリＤＮフィールド５１，位置関係フィールド５２，およびタイムアウト時間フィールド５３を有し、１つの行が１つの排他制御エントリサブツリーに対するロック設定条件を表す。
【００５４】
根エントリＤＮフィールド５１には、当該行のロック設定条件を有効とする排他制御エントリサブツリーの根エントリのＤＮを指定する。根エントリＤＮフィールド５１に指定されたエントリを根エントリとする排他制御エントリサブツリーに所属するエントリに対して更新操作要求が発行され、更新操作要求の対象エントリを含む関係エントリ群に含まれる全てのエントリが未だロックされていない場合は、ロック状態表１２５内に、次のように行が追加されてロックが生成され、要求元のクライアント３０に付与される。
【００５５】
位置関係フィールド５２には、ディレクトリサーバ装置２０における排他制御エントリサブツリー毎に、関係エントリ群とすべき位置関係を、図６に示す自身，親，子，兄弟のいずれかとして設定される。
【００５６】
タイムアウト時間フィールド５３には、ディレクトリサーバ装置２０における排他制御エントリサブツリー毎に、ロックのタイムアウト時間が設定される。
【００５７】
図７は、ディレクトリサーバ装置２０における排他制御エントリサブツリーの一例を示す。この排他制御エントリサブツリーは、根エントリ７０と、ドメインエントリ７１と、アカウントエントリ７２，７３，７４とが階層的に接続されて構成されている。根エントリ７０は、ドメインｃｏｍに関する諸設定を格納している。ドメインエントリ７１は、メールドメインａｂｃ．ｃｏｍに関する諸設定を格納している。ドメインエントリ７１の直下に並ぶアカウントエントリ７２，７３，７４は、メールドメインａｂｃ．ｃｏｍに所属するメールアカウントｕｓｅｒ１＠ａｂｃ．ｃｏｍ，ｕｓｅｒ２＠ａｂｃ．ｃｏｍ，ｕｓｅｒ３＠ａｂｃ．ｃｏｍに関する諸設定をそれぞれ格納している。ここで、アカウントエントリ７２，７３，７４はそれぞれのアカウントのメールボックスサイズの上限値を最大容量という属性に格納しており、ドメインエントリ７１は各アカウントの最大容量の合計の上限値を、やはり最大容量という属性に格納している。
【００５８】
クライアント３０は、図３に示したメール情報管理システムの管理者に対して図８または図９に示すような入力画面を提供し、ディレクトリクライアントとして排他制御装置１０を介してディレクトリサーバ装置２０にアクセスして、アカウントエントリ７２，７３，７４の最大容量の属性を変更する。なお、その際に、クライアント３０は、あらかじめドメインエントリ７１を参照し、アカウントエントリ７２，７３，７４の最大容量の合計がドメインエントリ７１の最大容量を超えないように、管理者からの入力を制限する。
【００５９】
図１０を参照すると、第１の実施の形態に係る排他制御装置１０の処理は、ディレクトリ操作要求受信ステップＡ１と、接続切断操作要求判定ステップＡ２と、所有ロック解除ステップＡ３と、更新操作要求判定ステップＡ４と、ロック済関係エントリ群判定ステップＡ５と、排他制御エントリサブツリー所属判定ステップＡ６と、ロック付与ステップＡ７と、ロック所有者判定ステップＡ８と、エラー返却ステップＡ９と、最終アクセス時刻更新ステップＡ１０と、ディレクトリ操作要求送信ステップＡ１１とからなる。
【００６０】
次に、このように構成された第１の実施の形態に係る排他制御装置１０の動作について詳しく説明する。
【００６１】
（１）　排他制御装置１０がクライアント３０よりディレクトリ操作要求を受信した場合
【００６２】
まず、クライアント３０からのディレクトリ操作要求を操作受信部１１１で受信すると（ステップＡ１）、排他制御装置１０は、操作種別判定部１２１により、受信されたディレクトリ操作要求が接続切断操作要求であるかどうかを調べる（ステップＡ２）。
【００６３】
ディレクトリ操作要求が接続切断操作要求であった場合は（ステップＡ２でイエス）、排他制御装置１０は、ロック状態管理部１２３により、ロック状態表１２５のセッションＩＤフィールド４４を走査して接続切断操作要求に含まれるセッションＩＤと比較し、要求元のクライアント３０が所有しているロックの行をロック状態表１２５から全て削除することによって要求元のクライアント３０に付与されているロックを全て解除し（ステップＡ３）、接続切断操作要求を操作送信部１３１からディレクトリサーバ装置２０へ送信する（ステップＡ１１）。
【００６４】
ディレクトリ操作要求が接続切断操作要求ではなかった場合は（ステップＡ２でノー）、排他制御装置１０は、ロック状態管理部１２３により、ディレクトリ操作要求が更新操作要求であるかどうかを調べる（ステップＡ４）。
【００６５】
ディレクトリ操作要求が更新操作要求ではなかった場合（参照操作要求等であった場合）は（ステップＡ４でノー）、排他制御装置１０は、ロック状態管理部１２３により、ディレクトリ操作要求を操作送信部１３１からディレクトリサーバ装置２０へ送信する（ステップＡ１１）。
【００６６】
ディレクトリ操作要求が更新操作要求であった場合は（ステップＡ４でイエス）、排他制御装置１０は、ロック状態管理部１２３により、ロック状態表１２５の基点エントリＤＮフィールド４１および位置関係フィールド４２を走査して更新操作要求の対象エントリのＤＮと比較し、更新操作要求の対象エントリがすでにロックされている基点エントリを基点として位置関係を満足するエントリ群（以下、ロック済関係エントリ群という）に含まれているかどうかを調べる（ステップＡ５）。
【００６７】
更新操作要求の対象エントリがロック済関係エントリ群に含まれていなかった場合は（ステップＡ５でノー）、排他制御装置１０は、ロック状態管理部１２３により、ロック設定条件表１２６の根エントリＤＮフィールド５１を走査して更新操作要求の対象エントリのＤＮと比較し、更新操作要求の対象エントリが排他制御エントリサブツリーに所属しているかどうかを調べる（ステップＡ６）。詳しくは、更新操作要求の対象エントリのＤＮ中の「属性型名＝属性値」に、根エントリＤＮフィールド５１のＤＮ中の「属性型名＝属性値」と一致するものがあるかどうかを調べる。
【００６８】
更新操作要求の対象エントリが排他制御エントリサブツリーに所属していない場合は（ステップＡ６でノー）、排他制御装置１０は、ロック状態管理部１２３により、更新操作要求を操作送信部１３１からディレクトリサーバ装置２０へ送信する（ステップＡ１１）。
【００６９】
更新操作要求の対象エントリが排他制御エントリサブツリーに所属していた場合は（ステップＡ６でイエス）、排他制御装置１０は、ロック状態管理部１２３により、ロック設定条件表１２６の該当行のロック設定条件に従ってロック状態表１２５に行を追加することにより更新操作要求の対象エントリを基点として位置関係を満足する関係エントリ群に対するロックを生成して要求元のクライアント３０に付与する（ステップＡ７）。詳しくは、基点エントリＤＮフィールド４１に更新操作要求の対象エントリのＤＮを、位置関係フィールド４２にロック設定条件表１２６の根エントリＤＮが一致する行の位置関係フィールド５２の位置関係を、タイムアウト時間フィールド４３にロック設定条件表１２６の根エントリＤＮが一致する行のタイムアウト時間フィールド５３のタイムアウト時間を、セッションＩＤフィールド４４に要求元のクライアント３０のセッションＩＤを、最終アクセス時刻フィールド４５に現在時刻をそれぞれ設定した行をロック状態表１２５に追加する。
【００７０】
この後、排他制御装置１０は、ロック状態管理部１２３により、更新操作要求を操作送信部１３１からディレクトリサーバ装置２０へ送信する（ステップＡ１１）。
【００７１】
更新操作要求の対象エントリがロック済関係エントリ群に含まれている場合は（ステップＡ５でイエス）、排他制御装置１０は、ロック状態管理部１２３により、ロック状態表１２５の該当行のセッションＩＤフィールド４４を参照して更新操作要求のセッションＩＤと比較することにより、要求元のクライアント３０がロックの所有者であるかどうかを調べる（ステップＡ８）。
【００７２】
要求元のクライアント３０がロックの所有者でなかった場合は（ステップＡ８でノー）、排他制御装置１０は、ロック状態管理部１２３により、応答送信部１１２から要求元のクライアント３０にエラーを返す（ステップＡ９）。
【００７３】
クライアント３０がロックの所有者であった場合は（ステップＡ８でイエス）、排他制御装置１０は、ロック状態管理部１２３により、ロック状態表１２５の該当行の最終アクセス時刻フィールド４５を現在時刻で更新した後（ステップＡ１０）、更新操作要求を操作送信部１３１からディレクトリサーバ装置２０へ送信する（ステップＡ１１）。
【００７４】
（２）　ディレクトリサーバ装置２００からディレクトリ応答を受信した場合
【００７５】
排他制御装置１０は、ディレクトリサーバ装置２００からのディレクトリ応答を応答受信部１３２で受信すると、そのディレクトリ応答をそのまま応答送信部１１２からクライアント３０へ送信する。
【００７６】
（３）　ロックがタイムアウトした場合
【００７７】
排他制御装置１０は、タイムアウト処理部１２４により、定期的にロック状態表１２５のタイムアウト時間フィールド４３および最終アクセス時刻フィールド４５を走査し、最終アクセス時刻フィールド４５の最終アクセス時刻と現在時刻との差がタイムアウト時間フィールド４３のタイムアウト時間を超えている行をロック状態表１２５から削除することにより、タイムアウトしたロックを解除する。
【００７８】
次に、図３に示した複数のクライアント３０がメンテナンス装置３０ａ，３０ｂであるメール情報管理システムを例にとって、システム全体の動作についてより具体的に説明する。
【００７９】
メンテナンス装置３０ａ，３０ｂは、メール情報管理システムの管理者に対して図８または図９に示すような入力画面を提供し、クライアント３０として排他制御装置１０を介してディレクトリサーバ装置２０にアクセスして、アカウントエントリ７２，７３，７４の最大容量の属性を変更する。なお、その際に、メンテナンス装置３０ａ，
３０ｂは、あらかじめドメインエントリ７１を参照し、アカウントエントリ７２，７３，７４の最大容量の合計がドメインエントリ７１の最大容量を超えないように、管理者からの入力を制限する。
【００８０】
いま、メールドメインａｂｃ．ｃｏｍの管理者Ａ，Ｂがいて、管理者Ａはメンテナンス装置３０ａを通して図８に示した内容の設定変更を行う更新操作要求を、管理者Ｂはメンテナンス装置３０ｂを通して図９に示した内容の設定変更を行う更新操作要求を、同時に送信したとする。ここで、メンテナンス装置３０ａ，３０ｂの更新操作要求が、次のような順番で排他制御装置１０に到着したとする。
【００８１】
更新操作要求ｒ１：　メンテナンス装置３０ａからアカウントエントリ７２への更新操作要求（アカウントエントリ７２の最大容量を２０ＭＢに更新）
【００８２】
更新操作要求ｒ２：　メンテナンス装置３０ａからアカウントエントリ７３への更新操作要求（アカウントエントリ７３の最大容量を３０ＭＢに更新）
【００８３】
更新操作要求ｒ３：　メンテナンス装置３０ｂからアカウントエントリ７２への更新操作要求（アカウントエントリ７２の最大容量を４０ＭＢに更新）
【００８４】
更新操作要求ｒ４：　メンテナンス装置３０ｂからアカウントエントリ７３への更新操作要求（アカウントエントリ７３の最大容量を３０ＭＢに更新）
【００８５】
更新操作要求ｒ５：　メンテナンス装置３０ｂからアカウントエントリ７４への更新操作要求（アカウントエントリ７４の最大容量を２０ＭＢに更新）
【００８６】
更新操作要求ｒ６：　メンテナンス装置３０ａからアカウントエントリ７４への更新操作要求（アカウントエントリ７４の最大容量を４０ＭＢに更新）
【００８７】
排他制御装置１０が存在するメール情報管理システムの動作は、次の通りである。
【００８８】
更新操作要求ｒ１は、図１０のステップＡ１，Ａ２，Ａ４，Ａ５，Ａ６，Ａ７，Ａ１１を経て、図５のロック設定条件表１２６のロック設定条件に応じてアカウントエントリ７２，７３，７４からなる関係エントリ群へのロックが生成されてメンテナンス装置３０ａに付与された後に、ディレクトリサーバ装置２０へ送信される。詳しくは、更新操作要求ｒ１がアカウントエントリ７２（ＤＮが「ｕｉｄ＝ｕｓｅｒ１，ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」）を対象エントリとして発行された場合、アカウントエントリ７２は、図５中の根エントリＤＮフィールド５１の「ｄｃ＝ｃｏｍ」を根エントリとする排他制御エントリサブツリーに所属しているので、図５のロック設定条件表１２６の該当行のロック設定条件に応じてアカウントエントリ７２，７３，７４からなる関係エントリ群へのロックが生成されてメンテナンス装置３０ａに付与された後に、更新操作要求ｒ１がディレクトリサーバ装置２０へ送信される。すなわち、図４のロック状態表１２５では、基点エントリＤＮフィールド４１にはアカウントエントリ７２のＤＮ「ｕｉｄ＝ｕｓｅｒ１，ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」が、位置関係フィールド４２には図５のロック設定条件表１２６の該当行に指定された位置関係「兄弟」が、タイムアウト時間フィールド４３には図５のロック設定条件表１２６の該当行に指定されたタイムアウト時間「１００ｍｓｅｃ」が、セッションＩＤフィールド４４には更新操作要求ｒ１の要求元のメンテナンス装置３０ａのセッションＩＤ（アドレス「１９２．１６８．１．１」およびポート番号「１２３４」）が、最終アクセス時刻フィールド４５には現在時刻「２００２／０３／０１　２０；００；１２．３５５」がそれぞれ登録される。
【００８９】
更新操作要求ｒ２は、メンテナンス装置３０ａがアカウントエントリ７３に対するロックを所有しているので、図１０のステップＡ１，Ａ２，Ａ４，Ａ５，Ａ８，Ａ１０，Ａ１１を経て、ディレクトリサーバ装置２０へ送信される。詳しくは、メンテナンス装置３０ａからアカウントエントリ７３への更新操作要求ｒ２では、図４のロック状態表１２５の該当行における基点エントリＤＮフィールド４１および位置関係フィールド４２を走査し、アカウントエントリ７３のＤＮ「ｕｉｄ＝ｕｓｅｒ２，ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」中の「親」を表す「ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」とロック状態表１２５の該当行における基点エントリＤＮフィールド４１の「ｕｉｄ＝ｕｓｅｒ１，ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」中の「親」を表す「ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」とを比較し、両者が一致するので「兄弟」関係にあることが判り、ロックされていると判定する（ステップＡ５でイエス）。次に、更新操作要求ｒ２をしたメンテナンス装置３０ａのセッションＩＤ（アドレスおよびポート番号）と、図４のロック状態表１２５の該当行におけるセッションＩＤフィールド４４のセッションＩＤ（アドレスおよびポート番号）とを比較し、両者が一致するので、要求元のメンテナンス装置３０ａがロックの所有者である判定する（ステップＡ８でイエス）。続いて、ロック状態表１２５の該当行における最終アクセス時刻フィールド４５に現在時刻を上書きし（ステップＡ１０）、更新操作要求ｒ２をディレクトリサーバ装置２０へ送信する（ステップＡ１１）。
【００９０】
更新操作要求ｒ３は、メンテナンス装置３０ａがアカウントエントリ７３に対するロックを所有しているので、図１０のステップＡ１，Ａ２，Ａ４，Ａ５，Ａ８，Ａ９を経て、メンテナンス装置３０ｂに対してエラーが返される。詳しくは、メンテナンス装置３０ａからアカウントエントリ７３への更新操作要求ｒ２では、図４のロック状態表１２５の該当行における基点エントリＤＮフィールド４１および位置関係フィールド４２を走査し、アカウントエントリ７３のＤＮ「ｕｉｄ＝ｕｓｅｒ２，ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」中の「親」を表す「ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」とロック状態表１２５の該当行における基点エントリＤＮフィールド４１の「ｕｉｄ＝ｕｓｅｒ１，ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」中の「親」を表す「ｄｃ＝ａｂｃ，ｄｃ＝ｃｏｍ」とを比較し、両者が一致するので「兄弟」関係にあることが判り、ロックされていると判定する（ステップＡ５でイエス）。しかし、更新操作要求ｒ３のセッションＩＤ（要求元のメンテナンス装置３０ｂのアドレスおよびポート番号）と、セッションＩＤフィールド４４のセッションＩＤ（メンテナンス装置３０ａのアドレスおよびポート番号）とを比較し、両者が一致しないので、ロックの所有者ではないと判定し（ステップＡ８でノー）、要求元のメンテナンス装置３０ｂにエラーを返す（ステップＡ９）。
【００９１】
更新操作要求ｒ４および更新操作要求ｒ５についても、更新操作要求ｒ３と同様の動作となる。
【００９２】
更新操作要求ｒ６は、更新操作要求ｒ２と同様に、メンテナンス装置３０ａがアカウントエントリ７４に対するロックを所有しているので、図１０のステップＡ１，Ａ２，Ａ４，Ａ５，Ａ８，Ａ１０，Ａ１１を経て、ディレクトリサーバ装置２０へ送信される。
【００９３】
最後の更新操作要求ｒ６の後、タイムアウト時間フィールド４３に指定されたタイムアウト時間１００ｍｓｅｃが経過すると、タイムアウト処理部１２４により、図４のロック状態表１２５中のタイムアウトしたロック状態の行は全て削除されてロックが解除される。
【００９４】
また、メンテナンス装置３０ａが明示的にディレクトリサーバ装置２０に対する接続切断操作要求を発行しても、図４のロック状態表１２５中のロック状態の行は削除されてロックが解除される（ステップＡ２，Ａ３）。
【００９５】
その後、メンテナンス装置３０ｂが更新操作要求ｒ３を再度発行すると、図１０のステップＡ１，Ａ２，Ａ４，Ａ５，Ａ６，Ａ７，Ａ１１を経て、図５のロック設定条件表１２６のロック設定条件により、アカウントエントリ７２，７３，７４をロック済関係エントリ群とするロックが生成されてメンテナンス装置３０ｂに付与され、更新操作要求ｒ３がディレクトリサーバ装置２０へ送信される。
【００９６】
メンテナンス装置３０ｂが引き続き更新操作要求ｒ４および更新操作要求ｒ５を発行すると、図１０のステップＡ１，Ａ２，Ａ４，Ａ５，Ａ８，Ａ１０，Ａ１１を経て、更新操作要求ｒ４および更新操作要求ｒ５がディレクトリサーバ装置２０へ送信される。
【００９７】
ここで、メンテナンス装置３０ｂが接続切断操作要求を行うか、あるいはあらかじめ指定したタイムアウト時間１００ｍｓｅｃが経過すれば、ロック解除が行われる。
【００９８】
以上を経て、最終的に、アカウントエントリ７２，７３，７４の内容は、管理者Ｂによるメンテナンス装置３０ｂからの更新操作要求のみが反映された形となる。
【００９９】
なお、ここでもしも、排他制御装置１０が存在せず、メンテナンス装置３０ａ，３０ｂからディレクトリサーバ装置２０に対して更新操作要求が直接行われたとすると、結果として反映される更新操作要求は、次の通りである。
【０１００】
アカウントエントリ７２に対しては更新操作要求ｒ３、アカウントエントリ７３に対しては更新操作要求ｒ４、アカウントエントリ７４に対しては更新操作要求ｒ６をすると、アカウントエントリ７２，７３，７４の最大容量の属性は、それぞれ、４０ＭＢ，３０ＭＢ，４０ＭＢとなり、その合計は１１０ＭＢとなって、ドメインエントリ７１の最大容量１００ＭＢを超えてしまう。
【０１０１】
これに対して、本実施の形態に係る排他制御装置１０を使用した場合には、管理者Ａからの更新操作要求ｒ１，ｒ２およびｒ６と、管理者Ｂからの更新操作要求ｒ３，ｒ４およびｒ５とが排他制御されるので、アカウントエントリ７２，７３，７４の最大容量の合計がドメインエントリ７１の最大容量１００ＭＢを超えることがなくなる。
【０１０２】
［第２の実施の形態］
図１１は、本発明の第２の実施の形態に係る排他制御装置１０の構成を示すブロック図である。本実施の形態に係る排他制御装置１０は、コンピュータ１００に排他制御プログラム１０００をインストールすることにより排他制御装置１０を実現するようにしたものである。
【０１０３】
排他制御プログラム１０００は、コンピュータ１００に読み込まれ、同コンピュータ１００の動作を、第１の実施の形態における操作受信部１１１，応答送信部１１２，操作種別判定部１２１，ロック状態管理部１２３，タイムアウト処理部１２４，ロック状態表１２５，ロック設定条件表１２６，操作送信部１３１，および応答受信部１３２とから構成される排他制御装置１０の動作と全く同様に制御する。よって、第２の実施の形態に係る排他制御装置１０の詳しい動作の説明は割愛する。
【０１０４】
【発明の効果】
第１の効果は、クライアントが排他制御について何も意識する必要がないことである。その理由は、排他制御装置による自動的なロック処理およびロック解除処理を行うためである。
【０１０５】
第２の効果は、ディレクトリサーバ装置は排他制御機能やトランザクション制御機能を備えている必要はなく、また、その中のデータおよびスキーマになんら変更を加える必要もないことである。その理由は、排他制御装置がディレクトリサーバ装置中のエントリのロック状態を管理し排他制御を行うためである。
【０１０６】
第３の効果は、排他制御をディレクトリサーバ装置の外で行っているにもかかわらず、更新操作要求の対象エントリがロック済関係エントリ群に含まれているか否か、および排他制御エントリサブツリーに所属しているか否かの判定が高速にできることである。その理由は、ロック済関係エントリ群に含まれているか否かの判定，および排他制御エントリサブツリーに所属しているか否かの判定の際にディレクトリサーバ装置を参照する必要がないためである。
【０１０７】
第４の効果は、ネットワーク障害等によりロックがいつまでも残ることがないことである。その理由は、排他制御装置が、クライアントからのアクセス時刻を追跡し、ロックのタイムアウト処理を行うためである。
【０１０８】
第５の効果は、排他制御したいエントリが複数でも、必ずしも１エントリずつロックする必要がないため、デッドロックの確率を減らすことができることである。その理由は、関連するエントリの配置としてよくある位置関係に応じた関係エントリ群の単位で、複数のエントリを１回のロック処理でロックすることができるためである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係る排他制御装置の構成を示すブロック図である。
【図２】第１の実施の形態に係る排他制御装置が配置されたシステム図である。
【図３】図２中のクライアントとしてメンテナンス装置が配置されたメール情報管理システムを示す図である。
【図４】図１中のロック状態表の内容を例示する図である。
【図５】図１中のロック設定条件表の内容を例示する図である。
【図６】図４および図５中の位置関係フィールドに設定される位置関係を例示する図である。
【図７】図２中のディレクトリサーバ装置における排他制御エントリサブツリーを例示する図である。
【図８】図３中のメンテナンス装置がシステムの管理者に対して提供する入力画面の一例を示す図である。
【図９】図３中のメンテナンス装置がシステムの管理者に対して提供する入力画面の他の例を示す図である。
【図１０】第１の実施の形態に係る排他制御装置の動作を示すフローチャートである。
【図１１】本発明の第２の実施の形態に係る排他制御装置の構成を示すブロック図である。
【符号の説明】
１０　排他制御装置
１１　クライアント通信部
１２　排他制御部
１３　サーバ通信部
２０　ディレクトリサーバ装置
３０　クライアント
３０ａ，３０ｂ　メンテナンス装置
４１　基点エントリＤＮフィールド
４２　位置関係エントリサブツリーフィールド
４３　タイムアウト時間フィールド
４４　セッションＩＤフィールド
４５　最終アクセス時刻フィールド
５１　根エントリＤＮフィールド
５２　位置関係フィールド
５３　タイムアウト時間フィールド
１００　コンピュータ
１１１　操作受信部
１１２　応答送信部
１２１　操作種別判定部
１２３　ロック状態管理部
１２４　タイムアウト処理部
１２５　ロック状態表
１２６　ロック設定条件表
１３１　操作送信部
１３２　応答受信部
１０００　排他制御プログラム
Ａ１　ディレクトリ操作要求受信ステップ
Ａ２　接続切断操作要求判定ステップ
Ａ３　所有ロック解除ステップ
Ａ４　更新操作要求判定ステップ
Ａ５　ロック済関係エントリ群判定ステップ
Ａ６　排他制御エントリサブツリー所属判定ステップ
Ａ７　ロック付与ステップ
Ａ８　ロック所有者判定ステップ
Ａ９　エラー返却ステップ
Ａ１０　最終アクセス時刻更新ステップ
Ａ１１　ディレクトリ操作要求送信ステップ
【図１】
2004094850.tif 000003
【図２】
2004094850.tif 000004
【図３】
2004094850.tif 000005
【図４】
2004094850.tif 000006
【図５】
2004094850.tif 000007
【図６】
2004094850.tif 000008
【図７】
2004094850.tif 000009
【図８】
2004094850.tif 000010
【図９】
2004094850.tif 000011
【図１０】
2004094850.tif 000012
【図１１】
2004094850.tif 000013