(57)【特許請求の範囲】
【請求項１】
クライアント管理システムからネットワークを介して配信される仮想イメージファイル内のオペレーティングシステムおよびアプリケーションプログラムを実行する複数の仮想化リッチクライアント端末と、画面転送プロトコルを使用してシンクライアント実行サーバと通信する複数のシンクライアント端末とを管理する前記クライアント管理システムに適用される情報処理装置であって、
ユーザの識別子、前記ユーザに対応するユーザプロファイルの識別子、前記ユーザプロファイルが使用中であるか否かを示すフラグ、及び前記ユーザプロファイルの格納場所へのパスを示す情報、を関連付けて記憶する記憶手段と、
第１のユーザがログオン操作を行った仮想化リッチクライアント端末に対応する第１の仮想マシンからの接続要求であって、前記第１のユーザの識別子を含む前記接続要求に応じて、前記第１のユーザの識別子に関連付けられた第１のユーザプロファイルを格納する前記ネットワーク上のストレージ内の第１の格納場所が前記第１の仮想マシンのファイルシステム上にマウントされるように、前記記憶手段に記憶された前記第１の格納場所へのパスを示す情報を、前記第１の仮想マシンに送信し、前記第１の仮想マシンから第１のユーザの識別子を含むログオン通知を受けると、前記記憶手段にアクセスして前記ログオン通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、前記使用中であることを示す状態にセットする第１の制御手段と、
前記シンクライアント実行サーバ内の複数の仮想マシンのうちの使用可能な仮想マシンの問い合わせをシンクライアント端末から受けると、前記使用可能な第２の仮想マシンを指定する情報を前記シンクライアント端末に送信し、前記シンクライアント端末に起動された前記第２の仮想マシンであって前記第１のユーザが新たにログオン操作を行った前記シンクライアント端末に対応する前記第２の仮想マシンからの接続要求に応じて、前記第１のユーザプロファイルが前記仮想化リッチクライアント端末によって使用中であるか否かを判定し、前記第１のユーザプロファイルが使用中である場合、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせ、前記第１の仮想マシンから第１のユーザの識別子を含むログオフ通知を受けると、前記記憶手段にアクセスして前記ログオフ通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、未使用であることを示す状態にセットすると共に、前記第１の格納場所が前記第２の仮想マシンのファイルシステム上にマウントされるように、前記第１の格納場所へのパスを示す情報を、前記第２の仮想マシンに送信し、前記第２の仮想マシンから第１のユーザの識別子を含むログオン通知を受けると、前記記憶手段にアクセスして前記ログオン通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、前記使用中であることを示す状態にセットする第２の制御手段とを具備し、
前記第２の仮想マシンは、前記シンクライアント端末と画面転送プロトコルを使用して通信するための仮想マシンであって、前記仮想イメージファイル内の前記オペレーティングシステム及び前記アプリケーションプログラムを実行する、
情報処理装置。
【請求項２】
前記第２の制御手段は、前記第１のユーザプロファイルが使用中である場合、前記第２の仮想マシンに、前記シンクライアント端末を前記クライアント管理システムに接続するか否かを確認するための画面を前記シンクライアント端末のディスプレイ上に表示させ、前記第２の仮想マシンから前記接続の実行を示す要求を受信した場合、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせる請求項１記載の情報処理装置。
【請求項３】
前記第２の制御手段は、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせるために、前記第１の仮想マシンに、前記仮想化リッチクライアント端末を前記クライアント管理システムから切断するためのログオフ処理の実行を指示する請求項１記載の情報処理装置。
【請求項４】
前記第２の制御手段は、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせるために、前記第１のユーザプロファイルが別のクライアント端末によって要求されていることを示す通知ファイルを、前記第１の格納場所が存在する、前記ストレージ上のフォルダに格納する請求項１記載の情報処理装置。
【請求項５】
ネットワークを介して配信される仮想イメージファイル内のオペレーティングシステムおよびアプリケーションプログラムを実行する複数の仮想化リッチクライアント端末と、画面転送プロトコルを使用してシンクライアント実行サーバと通信する複数のシンクライアント端末とを管理するクライアント管理システムであって、
前記ネットワーク上の複数のシンクライアント端末と画面転送プロトコルを使用して通信するための複数の仮想マシンのうち、前記シンクライアント端末に接続された仮想マシンであって、前記仮想イメージファイル内の前記オペレーティングシステム及び前記アプリケーションプログラムを実行する前記仮想マシンを実行するシンクライアント実行サーバと、
仮想化ソフトウェアを実行する前記ネットワーク上の複数の仮想化リッチクライアント端末に、前記オペレーティングシステムおよび前記アプリケーションプログラムを含む前記仮想イメージファイルを配信する配信サーバと、
複数のユーザそれぞれに対応する複数のユーザプロファイルを格納するストレージを使用して、前記複数のユーザプロファイルを管理するプロファイル管理手段とを具備し、
前記プロファイル管理手段は、
ユーザの識別子、前記ユーザに対応するユーザプロファイルの識別子、前記ユーザプロファイルが使用中であるか否かを示すフラグ、及び前記ユーザプロファイルの格納場所へのパスを示す情報、を関連付けて記憶する記憶手段と、
第１のユーザがログオン操作を行った仮想化リッチクライアント端末に対応する第１の仮想マシンからの接続要求であって、前記第１のユーザの識別子を含む前記接続要求に応じて、前記第１のユーザの識別子に関連付けられた第１のユーザプロファイルを格納する前記ストレージ内の第１の格納場所が前記第１の仮想マシンのファイルシステム上にマウントされるように、前記記憶手段に記憶された前記第１の格納場所へのパスを示す情報を、前記第１の仮想マシンに送信し、前記第１の仮想マシンから第１のユーザの識別子を含むログオン通知を受けると、前記記憶手段にアクセスして前記ログオン通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、前記使用中であることを示す状態にセットする第１の制御手段と、
前記シンクライアント実行サーバ内の複数の仮想マシンのうちの使用可能な仮想マシンの問い合わせをシンクライアント端末から受けると、前記使用可能な第２の仮想マシンを指定する情報を前記シンクライアント端末に送信し、前記シンクライアント端末に起動された前記第２の仮想マシンであって前記第１のユーザが新たにログオン操作を行った前記シンクライアント端末に対応する前記第２の仮想マシンからの接続要求に応じて、前記第１のユーザプロファイルが前記仮想化リッチクライアント端末によって使用中であるか否かを判定し、前記第１のユーザプロファイルが使用中である場合、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせ、前記第１の仮想マシンから第１のユーザの識別子を含むログオフ通知を受けると、前記記憶手段にアクセスして前記ログオフ通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、未使用であることを示す状態にセットすると共に、前記第１の格納場所が前記第２の仮想マシンのファイルシステム上にマウントされるように、前記第１の格納場所へのパスを示す情報を、前記第２の仮想マシンに送信し、前記第２の仮想マシンから第１のユーザの識別子を含むログオン通知を受けると、前記記憶手段にアクセスして前記ログオン通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、前記使用中であることを示す状態にセットする第２の制御手段とを具備する、クライアント管理システム。
【請求項６】
前記第２の制御手段は、前記第１のユーザプロファイルが使用中である場合、前記第２の仮想マシンに、前記シンクライアント端末を前記クライアント管理システムに接続するか否かを確認するための画面を前記シンクライアント端末のディスプレイ上に表示させ、前記第２の仮想マシンから前記接続の実行を示す要求を受信した場合、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせる請求項５記載のクライアント管理システム。
【請求項７】
ネットワークを介して配信される仮想イメージファイル内のオペレーティングシステムおよびアプリケーションプログラムを実行する複数の仮想化リッチクライアント端末と、画面転送プロトコルを使用してシンクライアント実行サーバと通信する複数のシンクライアント端末とを管理するクライアント管理方法であり、ユーザの識別子、前記ユーザに対応するユーザプロファイルの識別子、前記ユーザプロファイルが使用中であるか否かを示すフラグ、及び前記ユーザプロファイルの格納場所へのパスを示す情報、を関連付けて記憶する記憶手段を用いる前記クライアント管理方法であって、
第１のユーザがログオン操作を行った仮想化リッチクライアント端末に対応する第１の仮想マシンからの接続要求であって、前記第１のユーザの識別子を含む前記接続要求に応じて、前記第１のユーザの識別子に関連付けられた第１のユーザプロファイルを格納する前記ネットワーク上のストレージ内の第１の格納場所が前記第１の仮想マシンのファイルシステム上にマウントされるように、前記記憶手段に記憶された前記第１の格納場所へのパスを示す情報を、前記第１の仮想マシンに送信し、
前記第１の仮想マシンから第１のユーザの識別子を含むログオン通知を受けると、前記記憶手段にアクセスして前記ログオン通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、前記使用中であることを示す状態にセットし、
前記シンクライアント実行サーバ内の複数の仮想マシンのうちの使用可能な仮想マシンの問い合わせをシンクライアント端末から受けると、前記使用可能な第２の仮想マシンを指定する情報を前記シンクライアント端末に送信し、
前記シンクライアント端末に起動された前記第２の仮想マシンであって前記第１のユーザが新たにログオン操作を行った前記シンクライアント端末に対応する前記第２の仮想マシンからの接続要求に応じて、前記第１のユーザプロファイルが前記仮想化リッチクライアント端末によって使用中であるか否かを判定し、
前記第１のユーザプロファイルが使用中である場合、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせ、前記第１の仮想マシンから第１のユーザの識別子を含むログオフ通知を受けると、前記記憶手段にアクセスして前記ログオフ通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、未使用であることを示す状態にセットすると共に、前記第１の格納場所が前記第２の仮想マシンのファイルシステム上にマウントされるように、前記第１の格納場所へのパスを示す情報を、前記第２の仮想マシンに送信し、前記第２の仮想マシンから第１のユーザの識別子を含むログオン通知を受けると、前記記憶手段にアクセスして前記ログオン通知に含まれる第１のユーザの識別子に関連付けられた前記フラグを、前記使用中であることを示す状態にセットし、
前記第２の仮想マシンが、前記仮想イメージファイル内の前記オペレーティングシステム及び前記アプリケーションプログラムを実行すると共に、前記シンクライアント端末と画面転送プロトコルを使用して通信するクライアント管理方法。
【請求項８】
前記第１のユーザプロファイルが使用中である場合、前記第２の仮想マシンに、前記シンクライアント端末を前記クライアント管理システムに接続するか否かを確認するための画面を前記シンクライアント端末のディスプレイ上に表示させることをさらに具備し、
前記アンマウントさせることは、
前記第２の仮想マシンから前記接続の実行を示す要求を受信した場合、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせることを具備する請求項７記載のクライアント管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、複数のクライアント端末を管理するための情報処理装置、クライアント管理システムおよびクライアント管理方法に関する。
【背景技術】
【０００２】
近年、各種企業においては、オフィス内の多数のクライアント端末をサーバによって管理するためのシステム（クライアント管理システム）の導入が検討されている。
【０００３】
クライアント管理システムでは、多数のクライアント端末のデスクトップ環境（オペレーティングシステム、アプリケーション）をクライアント管理システム内のサーバによって集中管理することができる。
【０００４】
さらに、各クライアント端末で使用されるユーザプロファイル（アプリケーションの各種設定、ユーザデータ、等）をサーバ上で集中管理するための技術も開発されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−３３０９５４号公報
【特許文献２】特開２００４−２３４３４５号公報
【特許文献３】特開２０１０−２０５０４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、最近では、ユーザが任意のクライアント端末を利用できるようにすることが要求されている。この場合、ユーザがどのクライアント端末を操作する場合でも、同じユーザ環境（同じユーザプロファイル）を容易に使用できるようにするための新たな機能の実現が必要となる。
【０００７】
本発明は、ユーザがどのクライアント端末を操作する場合でも同じユーザ環境を容易に使用することができる情報処理装置、クライアント管理システムおよびクライアント管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態によれば、情報処理装置はネットワーク上の複数のクライアント端末を管理するクライアント管理システムに適用される。この情報処理装置は、第１の制御手段と、第２の制御手段とを具備する。前記第１の制御手段は、第１のユーザがログオン操作を行った第１のクライアント端末に対応する第１の仮想マシンからの接続要求に応じて、前記第１のユーザの識別子に関連付けられた第１のユーザプロファイルを格納する前記ネットワーク上のストレージ内の第１の格納場所が前記第１の仮想マシンのファイルシステム上にマウントされるように、前記第１の格納場所へのパスを示す情報を、前記第１の仮想マシンに送信する。前記第２の制御手段は、前記第１のユーザが新たにログオン操作を行った第２のクライアント端末に対応する第２の仮想マシンからの接続要求に応じて、前記第１のユーザプロファイルが前記第１のクライアント端末によって使用中であるか否かを判定し、前記第１のユーザプロファイルが使用中である場合、前記第１の仮想マシンに前記第１の格納場所をアンマウントさせると共に、前記第１の格納場所が前記第２の仮想マシンのファイルシステム上にマウントされるように、前記第１の格納場所へのパスを示す情報を、前記第２の仮想マシンに送信する。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係る情報処理装置を備えるクライアント管理システムの構成を示すブロック図。
【図２】図１のクライアント管理システムとリッチクライアント端末（仮想化クライアント端末）との間の通信手順の例を説明するため図。
【図３】図１のクライアント管理システムとシンクライアント端末との間の通信手順の例を説明するため図。
【図４】同実施形態に係る情報処理装置（コネクションブローカ）によって提供されるローミング機能を説明するため図。
【図５】同実施形態に係る情報処理装置（コネクションブローカ）の機能構成を説明するための図。
【図６】同実施形態の情報処理装置（コネクションブローカ）によって管理されるユーザプロファイルを説明するための図。
【図７】同実施形態の情報処理装置（コネクションブローカ）によって実行されるユーザプロファイルの排他制御処理を説明するための図。
【図８】同実施形態の情報処理装置（コネクションブローカ）の内部構成を示すブロック図。
【図９】同実施形態の情報処理装置（コネクションブローカ）で使用されるユーザプロファイル管理テーブルの構成を示す図。
【図１０】同実施形態の情報処理装置（コネクションブローカ）で使用されるローミング通知要求テーブルの構成を示す図。
【図１１】図１のクライアント管理システムにクライアント端末を接続するためのログオン処理の手順を示す図。
【図１２】図１のクライアント管理システムからクライアント端末を切断するためのログオフ処理の手順を示す図。
【図１３】同実施形態の情報処理装置（コネクションブローカ）によって実行される、ローミング通知要求に対する処理手順の概要を示す図。
【図１４】同実施形態の情報処理装置（コネクションブローカ）によって実行される、ログオン要求に対する処理手順を示す図。
【図１５】同実施形態の情報処理装置（コネクションブローカ）によって実行される、ローミング通知要求に対する処理手順を示す図。
【図１６】同実施形態の情報処理装置（コネクションブローカ）内のサービスプログラムによって実行される、ユーザプロファイル状態を監視する処理の手順を示す図。
【図１７】同実施形態の情報処理装置（コネクションブローカ）のユーザプロファイル管理処理が適用される４つの２重ログオンシナリオパターンを説明するための図。
【図１８】第１の２重ログオンシナリオパターンにおいて同実施形態の情報処理装置（コネクションブローカ）によって実行される動作を説明するための図。
【図１９】第２の２重ログオンシナリオパターンにおいて同実施形態の情報処理装置（コネクションブローカ）によって実行される動作を説明するための図。
【図２０】第３の２重ログオンシナリオパターンにおいて同実施形態の情報処理装置（コネクションブローカ）によって実行される動作を説明するための図。
【図２１】第４の２重ログオンシナリオパターンにおいて同実施形態の情報処理装置（コネクションブローカ）によって実行される動作を説明するための図。
【発明を実施するための形態】
【００１０】
以下、実施の形態について図面を参照して説明する。  
図１は、一実施形態に係る情報処理装置を備えたクライアント管理システム１の構成を示す。このクライアント管理システム１は複数のクライアント端末を管理するためのサーバシステムである。クライアント管理システム１は１つのまたは複数のサーバ（物理サーバ）によって実現することができる。ここでは、このクライアント管理システム１が複数のサーバによって実件されている場合を想定する。
【００１１】
図１に示されているように、クライアント管理システム１は、管理サーバ２１、仮想マシン管理サーバ２２、ドメインコントローラ２３、仮想イメージ作成＆配信サーバ２４、シンクライアント実行サーバ２５、コネクションブローカ２６、プロファイルストレージ２７、および仮想イメージストレージ２８等を備える。
【００１２】
管理サーバ２１、仮想マシン管理サーバ２２、ドメインコントローラ２３、仮想イメージ作成＆配信サーバ２４、シンクライアント実行サーバ２５、コネクションブローカ２６、およびプロファイルストレージ２７は、ネットワーク、例えばＬＡＮ、に接続されている。複数の第１タイプのクライアント１１および複数の第２タイプのクライアント１２も上述のネットワーク、例えばＬＡＮ、に接続されている。
【００１３】
さらに、管理サーバ２１、仮想マシン管理サーバ２２、仮想イメージ作成＆配信サーバ２４、およびシンクライアント実行サーバ２５は、ストレージエリアネットワーク（ＳＡＮ）のような別のネットワークを介して仮想イメージストレージ２８にも接続されている。
【００１４】
クライアント管理システム１は例えばオフィス内に配置される。クライアント管理システム１は、オフィス内に配置された複数のクライアント端末を管理サーバ２１によって集中管理する。さらに、このクライアント管理システム１では、複数のクライアント端末に適用される複数のユーザプロファイルは、プロファイルストレージ２７に格納される。各ユーザプロファイルは、このユーザプロファイルが適用されるクライアント端末のユーザ環境を設定するための設定情報、例えば、各アプリケーションプログラムに関する各種設定情報、デスクトップ画面に関する各種設定情報を含む。さらに、各ユーザプロファイルは、ユーザがアプリケーションプログラムを用いて作成したドキュメントファイルのようなユーザデータも含む。
【００１５】
本実施形態では、クライアント管理システム１は、第１タイプ及び第２タイプの２種類のクライアント端末を管理することができる。図１に示される各クライアント端末１１は第１タイプのクライアント端末である。第１タイプのクライアント端末は、いわゆる仮想化クライアント端末である。第１タイプのクライアント端末のローカルストレージには仮想マシンモニタ（ハイパーバイザ）が仮想化ソフトウェアとしてインストールされている。第１タイプのクライアント端末は、仮想化ソフトウェアと、システム１から配信される仮想イメージファイル内のＯＳおよびアプリケーションプログラムとを実行する。
【００１６】
すなわち、第１タイプのクライアント端末（以下、リッチクライアント端末と称する）１１においては、ＣＰＵ、メモリ、ストレージ、各種Ｉ／Ｏデバイスといった物理ハードウェア１０１上で仮想マシンモニタ１０２が実行される。仮想マシンモニタ１０２はハイパーバイザのような仮想化ソフトウェアであり、物理ハードウェア１０１のリソースをエミュレートすることによって、物理ハードウェア１０１上の仮想化層として機能する。仮想化層である仮想マシンモニタ１０２上では、幾つかの仮想マシンが実行される。図１では、２つの仮想マシン１０３、１０４が仮想マシンモニタ１０２上で実行される場合が想定されている。仮想マシン１０３は管理ＯＳ（ホストＯＳ）２０１を実行するための仮想マシンである。一方、仮想マシン１０４は、システム１から配信される仮想イメージファイル内の仮想ＯＳ（ゲストＯＳ）３０１およびアプリケーションプログラム３０２を実行する。仮想マシン１０４、つまり、仮想ＯＳ（ゲストＯＳ）３０１およびアプリケーションプログラム３０２は、リッチクライアント端末１１のデスクトップ環境として動作する。
【００１７】
管理ＯＳ（ホストＯＳ）２０１は、仮想マシンモニタ１０２と共同して、仮想マシン１０４を制御することができる。管理ＯＳ（ホストＯＳ）２０１は管理モジュール２０１Ａを備える。管理モジュール２０１Ａはシステム１内の仮想イメージ作成＆配信サーバ２４から仮想イメージファイルをダウンロードすることができる。仮想ＯＳ（ゲストＯＳ）３０１はエージェント３０１Ａを備える。エージェント３０１Ａはシステム１とリッチクライアント端末１１とを連携させる処理を実行するプログラムである。
【００１８】
第２タイプのクライアント端末は、シンクライアント端末である。これらシンクライアント端末１２は、画面転送プロトコルを使用して、システム１内のシンクライアント実行サーバ２５上で実行される仮想マシン５０４それぞれと通信する。換言すれば、複数のシンクライアント端末１２は仮想デスクトップインフラストラクチャ（ＶＤＩ）を使用してデスクトップ仮想化を実現するための端末（ベース端末）である。これらシンクライアント端末１２それぞれのデスクトップ環境（ＯＳ、アプリケーション）は、仮想化サーバであるシンクライアント実行サーバ２５によって一元管理される。各シンクライアント端末１２には、シンクライアント実行サーバ２５上の仮想マシン５０４の一つが割り当てられる。ＯＳ、アプリケーションは、シンクライアント端末１２上では無く、シンクライアント実行サーバ２５上の仮想マシン５０４によって実行される。
【００１９】
各シンクライアント端末１２は、ユーザによる入力デバイス（例えばキーボード、マウス等）の操作に応じた入力情報をシンクライアント実行サーバ２５内の対応する仮想マシンに送信する。また、各シンクライアント端末１２は、シンクライアント実行サーバ２５内の対応する仮想マシンから、入力情報を反映した画面情報を受信する。
【００２０】
すなわち、シンクライアント端末１２においては、画面転送ソフトウェア４０３が実行される。画面転送ソフトウェア４０３は、画面転送プロトコルを使用して、シンクライアント実行サーバ２５内の仮想マシンと通信するプログラムである。画面転送ソフトウェア４０３はＯＳ上で動作するアプリケーションプログラムであってもよい。この場合、シンクライアント端末１２においては、ＣＰＵ、メモリ、各種Ｉ／Ｏデバイスといった物理ハードウェア４０１上でＯＳ４０２が実行され、このＯＳ４０２上で画面転送ソフトウェア４０３が実行される。
【００２１】
次に、クライアント管理システム１の各コンポーネントについて説明する。  
管理サーバ２１はクライアント管理システム１の動作を管理するためのサーバである。管理サーバ２１は、ＬＡＮに接続された図示しない管理者端末からの操作に応じて、クライアント管理システム１を使用可能な各ユーザの管理、および各リッチクライアント端末１１に対応する仮想イメージの管理、等を実行することができる。
【００２２】
仮想マシン管理サーバ２２はシンクライアント実行サーバ２５を管理するためのサーバである。ドメインコントローラ２３は、各ユーザおよび各クライアント端末を認証するためのサーバである。仮想イメージ作成＆配信サーバ２４は、ＯＳおよびアプリケーションプログラムを各々が含む仮想イメージファイルを、複数のリッチクライアント端末１１に配信する配信サーバとして機能する。仮想イメージ作成＆配信サーバ２４は、リッチクライアント端末１１用の仮想イメージファイルのみならず、シンクライアント端末１２用の仮想イメージファイルを作成することもできる。リッチクライアント端末１１用の仮想イメージファイルは、各リッチクライアント端末１１に配信される。一方、シンクライアント端末１２用の仮想イメージファイルは、シンクライアント実行サーバ２５に配信される。各仮想イメージファイルは、例えば、仮想ハードディスク（ＶＨＤ）フォーマットのようなディスクイメージファイルである。
【００２３】
シンクライアント実行サーバ２５は、複数のシンクライアント端末１２と画面転送プロトコルを使用して通信するための複数の仮想マシンを実行するサーバである。シンクライアント実行サーバ２５は、例えば、サーバ仮想化技術によって仮想化された１つの物理サーバによって実現してもよい。
【００２４】
このシンクライアント実行サーバ２５においては、ＣＰＵ、メモリ、ストレージ、各種Ｉ／Ｏデバイスといった物理ハードウェア５０１上で仮想マシンモニタ５０２が実行される。仮想マシンモニタ５０２はハイパーバイザのような仮想化ソフトウェアであり、物理ハードウェア５０１のリソースをエミュレートすることによって、物理ハードウェア５０１上の仮想化層として機能する。仮想マシンモニタ５０２上では、管理用の１つの仮想マシン５０３と、仮想デスクトップ環境を実行するための複数の仮想マシン５０４とが実行される。仮想マシン５０３は管理ＯＳ（ホストＯＳ）５０３Ａを実行する。一方、各仮想マシン５０４は、仮想イメージ作成＆配信サーバ２４から配信される仮想イメージファイル内の仮想ＯＳ（ゲストＯＳ）６０１およびアプリケーションプログラム６０２を実行する。
【００２５】
管理ＯＳ（ホストＯＳ）５０３は、仮想マシンモニタ５０２と共同して、各仮想マシン５０４を制御することができる。仮想ＯＳ（ゲストＯＳ）６０１はエージェント６０１Ａを備える。エージェント６０１Ａは、リッチクライアント端末１１の仮想マシン１０４内のエージェント３０１Ａと同様に、システム１と各シンクライアント端末１２とを連携させる処理を実行するプログラムである。
【００２６】
コネクションブローカ２６は本実施形態の情報処理装置であり、ユーザプロファイルの管理等のためにクライアント管理システム１に適用される。コネクションブローカ２６は一つの物理サーバによって実現することができる。
【００２７】
コネクションブローカ２６は、複数のユーザそれぞれに対応する複数のユーザプロファイルを格納するプロファイルストレージ２７を使用して、複数のユーザプロファイルを管理する。また、コネクションブローカ２６は、シンクライアント端末１２上でログオン操作を実行したユーザに対して、シンクライアント実行サーバ２５上の使用可能な仮想マシンを割り当てるための機能も有している。さらに、コネクションブローカ２６は、たとえ各ユーザがどのクライアント端末上でログオン操作を行っても、各ユーザが同じユーザ環境を利用できるようにするための機能（ローミング機能）を有している。
【００２８】
プロファイルストレージ２７は、本システム１を使用可能な多数のユーザの識別子（ユーザＩＤ）にそれぞれ関連付けられた多数のユーザプロファイルを格納する。すなわち、プロファイルストレージ２７は多数のユーザにそれぞれ対応するユーザプロファイルを格納するための多数の格納場所を備える。あるユーザがあるクライアント端末をシステム１に接続（ログオン）するためのログオン操作を行った場合には、そのクライアント端末に対応する仮想マシンのファイルシステムには、そのユーザのユーザＩＤに関連付けられたユーザプロファイルが自動的にマウントされる。例えば、リッチクライアント端末１１のログオン処理においては、ログオン操作を行ったユーザに対応するユーザプロファイルは、そのリッチクライアント端末１１内の仮想マシン１０４のファイルシステム上にマウントされる。リッチクライアント端末１１内のローカルストレージにはユーザプロファイル（設定情報、ユーザデータ）の実体は存在せず、ユーザプロファイルの実体はシステム１内で管理される。したがって、リッチクライアント端末１１のセキュリティ強化を図ることができる。
【００２９】
一方、シンライアント端末１２のログオン処理においては、ログオン操作を行ったユーザのユーザＩＤに関連づけられたユーザプロファイルが、そのシンクライアント端末１２に対応するシンクライアント実行サーバ２５内の仮想マシン５０４のファイルシステム上に自動的にマウントされる。
【００３０】
これにより、各ユーザは、リッチクライアント端末１１およびシンクライアント端末１２のどちらを操作してシステム１にログオンした場合でも、同じユーザ環境（同じユーザプロファイル）を使用することができる。
【００３１】
仮想イメージストレージ２８は仮想イメージ作成＆配信サーバ２４によって作成された仮想イメージファイルを格納するためのストレージである。なお、プロファイルサーバ２７および仮想イメージストレージ２８のどちらも、システム１内の図示しないファイルサーバ内のストレージによって実現してもよい。
【００３２】
次に、図２を参照して、リッチクライアント端末１１の動作シーケンスについて説明する。  
（１）リッチクライアント端末１１内の管理モジュール２０１Ａまたはエージェント３０１Ａは、リッチクライアント端末１１に適用すべき配信イメージ（仮想イメージファイル）が存在するか否かを管理サーバ２１に問い合わせる。例えば、リッチクライアント端末１１のローカルストレージに仮想イメージファイルが存在しない場合、あるいはリッチクライアント端末１１に既に配信された仮想イメージファイルに対応する更新された仮想イメージファイルがシステム１内に存在するならば、管理サーバ２１は、ダウンロードすべき仮想イメージファイルの識別子を管理モジュール２０１Ａまたはエージェント３０１Ａに通知する。
【００３３】
（２）管理モジュール２０１Ａまたはエージェント３０１Ａは、通知された識別子を有する仮想イメージファイルを仮想イメージ作成＆配信サーバ２４に要求し、その仮想イメージファイルを仮想イメージ作成＆配信サーバ２４からダウンロードする。リッチクライアント端末１１が再起動することにより、ダウンロードされた仮想イメージファイル内のＯＳ（仮想ＯＳ）３０１がスタートされる。
【００３４】
（３）仮想ＯＳ３０１によってログオン画面が表示される。ユーザは、ログオン画面上でログオン操作を行う。仮想ＯＳ３０１はドメインコントローラ２３と共同してユーザ認証を行う。ユーザ認証が成功すると、仮想マシン１０４（エージェント３０１Ａ）は、接続要求をコネクションブローカ２６に送信して、ログオン操作を行ったユーザに対応するユーザプロファイルの格納場所をコネクションブローカ２６に問い合わせる。接続要求はリッチクライアント端末１１をシステム１１に接続（ログオン）するためのリクエストであり、ログオン操作を行ったユーザのユーザカウント（ユーザＩＤ）を含む。ユーザＩＤはユーザを一意に識別するための識別子である。コネクションブローカ２６は、このユーザのユーザＩＤに関連づけられたユーザプロファイルを格納する、プロファイルストレージ２７内の格納場所（第１の格納場所）へのパスを示す情報、つまり、ストレージパスを、仮想マシン１０４（エージェント３０１Ａ）に送信する。
【００３５】
（４）仮想マシン１０４（エージェント３０１Ａ）は、プロファイルストレージ２７内の上述のユーザプロファイルを、つまり上述の第１の格納場所を、仮想マシン１０４（仮想ＯＳ３０１）のファイルシステム上にマウントする。以降、仮想マシン１０４は、ユーザプロファイルをリードまたはライトするために、リッチクライアント端末１１のローカルストレージではなく、プロファイルストレージ２７内の第１の格納場所をアクセスする。
【００３６】
次に、図３を参照して、シンクライアント端末１２の動作シーケンスについて説明する。  
（１）シンクライアント１２のＯＳ４０２または画面転送ソフトウェア４０３は、使用可能な仮想マシンをコネクションブローカ２６に問い合わせる。コネクションブローカ２６は、シンクライアント端末１２が使用可能なシンクライアント実行サーバ２５上の仮想マシンを指定する情報を、シンクライアント端末１２に送る。この場合、コネクションブローカ２６は、シンクライアント端末１２が使用可能な、シンクライアント実行サーバ２５上の仮想マシンのリストをシンクライアント端末１２に送ってもよい。例えば、コネクションブローカ２６は、問い合わせに含まれるユーザＩＤに基づいて、このユーザに対応するデスクトップ環境を実行可能で、且つ現在使用されていない仮想マシンのリストを表示するための画面を、シンクライアント端末１２に送ることができる。ユーザは、仮想マシンのリスト内からある仮想マシンを選択してもよい。
【００３７】
（２）ＯＳ４０２または画面転送ソフトウェア４０３は、コネクションブローカ２６によって指定されたある仮想マシン５０４に、または仮想マシンのリストから選択されたある仮想マシン５０４に接続し、その接続された仮想マシン５０４を起動する。そして、仮想マシン５０４内の仮想ＯＳ６０１がスタートされる。
【００３８】
（３）仮想ＯＳ６０１によってログオン画面が表示される。ユーザは、ログオン画面上でログオン操作を行う。仮想ＯＳ６０１はドメインコントローラ２３と共同してユーザ認証を行う。ユーザ認証が成功すると、仮想マシン５０４（エージェント６０１Ａ）は、接続要求をコネクションブローカ２６に送信して、ログオン操作を行ったユーザに対応するユーザプロファイルの格納場所をコネクションブローカ２６に問い合わせる。接続要求はシンクライアント端末１２をシステム１１に接続（ログオン）するためのリクエストであり、ログオン操作を行ったユーザのユーザカウント（ユーザＩＤ）を含む。コネクションブローカ２６は、このユーザのユーザＩＤに関連づけられたユーザプロファイルを格納する、プロファイルストレージ２７内の格納場所へのパスを示す情報、つまり、ストレージパスを、仮想マシン５０４（エージェント６０１Ａ）に通知する。
【００３９】
（４）仮想マシン５０４（エージェント６０１Ａ）は、プロファイルストレージ２７内の上述のユーザプロファイルを仮想マシン５０４（仮想ＯＳ６０１）のファイルシステム上に自動的にマウントする。以降、仮想マシン５０４は、ユーザプロファイルをリードまたはライトするために、シンクライアント実行サーバ２５のローカルストレージではなく、プロファイルストレージ２内の格納場所をアクセスする。
【００４０】
次に、図４を参照して、コネクションブローカ２６によって実行されるローミング機能について説明する。  
このローミング機能は、各ユーザがどのリッチクライアント端末１１を使用しても、あるいはどのシンクライアント端末１２を使用しても、そのユーザに対応する同一のユーザプロファイルを利用できるようにする機能である。
【００４１】
ここで、各ユーザの席上にはリッチクライアント端末１１が配置され、会議室またはパブリックスペースにはシンクライアント端末１２が配置されている場合を想定する。各ユーザは、自分の席上のリッチクライアント端末１１を操作してクライアント管理システム１にログオンすることができる。ユーザが会議室またはパブリックスペースに移動した場合には、ユーザはシンクライアント端末１２を操作してクライアント管理システム１にログオンすることができる。この場合、ユーザがどのクライアント端末を使用する場合でも、ローミング機能は、それらクライアント端末に対応する仮想マシンに、同じユーザプロファイルを提供する。
【００４２】
ここで、リッチクライアント端末１１上でログオン操作が行われた際にコネクションブローカ２６によって実行される処理について説明する。
【００４３】
（１）ユーザ（ｕｓｅｒ１）は、自分の席上のリッチクライアント端末１１をシステム１に接続するためのログオン操作を行う。リッチクライアント端末１１の仮想マシン１０４、例えばエージェント３０１Ａは、コネクションブローカ２６に接続要求を送信して、ログオン操作を行ったユーザ（ｕｓｅｒ１）に対応するユーザプロファイルの格納場所をコネクションブローカ２６に問い合わせる。
【００４４】
（２）コネクションブローカ２６は、ユーザ（ｕｓｅｒ１）のユーザプロファイルのストレージパスをリッチクライアント端末１１の仮想マシン１０４に送信する。仮想マシン１０４は、ユーザ（ｕｓｅｒ１）のユーザプロファイルを仮想マシン１０４のファイルシステム上にマウントする。仮想マシン１０４のファイルシステムは、仮想マシン１０４内の仮想ＯＳ３０１によって管理されるファイルシステムである。仮想ＯＳ３０１は、ファイルシステム上にマウントされたユーザプロファイルをプロファイルストレージ２７からリードし、そのユーザプロファイル内の設定情報に基づいて、アプリケーションプログラムの設定およびデスクトップ環境の設定等を行うことができる。また、各種ドキュメントのようなユーザデータもユーザプロファイル内に存在する。仮想ＯＳ３０１は、ファイルシステム上にマウントされたユーザプロファイル内のユーザデータをプロファイルストレージ２７からリードし、そのユーザデータをリッチクライアント端末１１のディスプレイ上に表示することができる。さらに、更新されたユーザデータまたは設定情報等はリッチクライアント端末１１のローカルストレージではなく、プロファイルストレージ２７に格納される。
【００４５】
次に、シンクライアント端末１２上でログオン操作が行われた際にコネクションブローカ２６によって実行される処理について説明する。
【００４６】
（１）ユーザ（ｕｓｅｒ１）は、例えばパブリックスペース等に設置されているシンクライアント端末１２をシステム１に接続するためのログオン操作を行う。シンクライアント端末１２に対応する、シンクライアント実行サーバ４５上の仮想マシン５０４、例えばエージェント６０１Ａは、コネクションブローカ２６に接続要求を送信して、ログオン操作を行ったユーザ（ｕｓｅｒ１）に対応するユーザプロファイルの格納場所をコネクションブローカ２６に問い合わせる。
【００４７】
（２）コネクションブローカ２６は、ユーザ（ｕｓｅｒ１）のユーザプロファイルのストレージパスを、シンクライアント端末１２に対応する、シンクライアント実行サーバ４５上の仮想マシン５０４に送信する。仮想マシン５０４は、ユーザ（ｕｓｅｒ１）のユーザプロファイルを仮想マシン５０４のファイルシステム上にマウントする。仮想マシン５０４のファイルシステムは、仮想マシン５０４内の仮想ＯＳ６０１によって管理されるファイルシステムである。仮想ＯＳ６０１は、ファイルシステム上にマウントされたユーザプロファイル内の設定情報に基づいて、アプリケーションプログラムの設定およびデスクトップ環境の設定等を行うことができる。
【００４８】
このように、各ユーザは、どのクライアント端末上でログオン操作を行っても、同じユーザ環境を利用することができる。
【００４９】
しかし、あるクライアント端末がシステム１にログオンしてプロファイルストレージ２７上のユーザプロファイルを使用している間は、このユーザプロファイルは他のクライアント端末から使用することはできない。このため、あるユーザがあるクライアント端末を用いてシステム１に一旦ログオンした後は、そのクライアント端末上でユーザがログオフ操作またはシャットダウン操作を行わない限り、そのユーザが別のクライアント端末を用いてシステム１へログオンすることはできない。
【００５０】
ユーザは、自席のクライアント端末、例えばリッチクライアント端末１１、を用いてシステム１にログオンした状態で、会議室や公共スペースに移動する場合がある。このユーザは、ドキュメントファイル等の自分のユーザデータ等を見るために、会議室や公共スペースに設置されたクライアント端末、例えばシンクライアント端末１２を用いてシステム１へのログオンすることを希望する場合がある。しかし、このユーザの自席のリッチクライアント端末１１はシステム１にログオンした状態であるので、このユーザのユーザプロファイルはリッチクライアント端末１１によって使用中である。したがって、ユーザは、新たにログオン操作を行ったシンクライアント端末１２を用いてシステム１に正常にログオンすることができない。
【００５１】
本実施形態では、コネクションブローカ２６は、クライアント端末から接続要求が受信された際に、そのクライアント端末上でログオン操作を行ったユーザのユーザプロファイルが他のクライアント端末によって使用中であるか否かを判定する。そして、このユーザプロファイルが使用中であれば、コネクションブローカ２６は、このユーザプロファイルを使用中のクライアント端末に対応する仮想マシンに、このユーザプロファイルをアンマウントさせる処理を自動的に実行する。換言すれば、コネクションブローカ２６は、このユーザプロファイルを使用しているクライアント端末を、システム１から自動的にログオフさせる。これにより、ユーザは、例えば自席のクライアント端末を用いてシステム１にログオンしたままの状態で、会議室やパブリックスペースに移動した場合でも、その会議室やパブリックスペース内のクライアント端末を用いてシステム１にログオンすることができる。さらに、ユーザは、会議室やパブリックスペースのクライアント端末上においても、自席のクライアント端末と同じユーザ環境を使用できる。
【００５２】
図５は、コネクションブローカ２６の機能構成を示している。コネクションブローカ２６は第１の制御部２６１と第２の制御部２６２とを備える。  
（１）第１の制御部２６１は、ユーザ（第１のユーザ）がログオン操作を行ったクライアント端末１１に対応する仮想マシン１０４内のエージェント６０１Ａからの要求（接続要求）を受信する。  
（２）第１の制御部２６１は、第１のユーザのユーザＩＤに関連付けられた第１のユーザプロファイルを格納するプロファイルストレージ２７内の格納場所（第１の格納場所）が仮想マシン１０４のファイルシステム上にマウントされるように、第１の格納場所へのパスを示す情報を仮想マシン１０４内のエージェント６０１Ａに送信する。
【００５３】
プロファイルストレージ２７内の各ユーザプロファイルは仮想ハードディスク（ＶＨＤ）フォーマットのような仮想イメージファイルであってよい。この場合、ユーザプロファイルの仮想イメージファイルは、仮想マシン１０４のファイルシステム上の所定のマウントポイントにマウントされる。例えば、ユーザプロファイルを格納するための、ファイルシステム内の所定のディレクトリ（ユーザプロファイルディレクトリ）が、上述のマウントポイントとして使用される。この様子を図６に示す。図６に示すように、プロファイルストレージ２７においては、複数のユーザＩＤ（ユーザＩＤ１、ユーザＩＤ２、…）に対応するフォルダ（ユーザＩＤ１￥、ユーザＩＤ２￥、…）が存在する。これらフォルダ（ユーザＩＤ１￥、ユーザＩＤ２￥、…）には、複数のユーザＩＤ（ユーザＩＤ１、ユーザＩＤ２、…）にそれぞれ関連づけられたユーザプロファイル（ＵｓｅｒＰｒｏｆｉｌｅ１．ＶＨＤ、ＵｓｅｒＰｒｏｆｉｌｅ２．ＶＨＤ、…）が格納されている。仮想マシン１０４のファイルシステム上のユーザプロファイルディレクトリ（ユーザＩＤ１）には、ＵｓｅｒＰｒｏｆｉｌｅ１．ＶＨＤがマウントされる。
【００５４】
（３）第２の制御部２６２は、第１のユーザが新たにログオン操作を行ったクライアント端末に対応する仮想マシンから、例えば、クライアント端末１２に対応する仮想マシン５０４内のエージェント６０１Ａから、接続要求を受信する。第２の制御部２６２は、第１のユーザのユーザＩＤに関連付けられた上述の第１のユーザプロファイルが他のクライアント端末（ここでは、クライアント端末１１）によって使用中であるか否かを判定する。
【００５５】
（４）第１のユーザプロファイルはクライアント端末１１によって使用されている。したがって、第２の制御部２６２は、クライアント端末１１に対応する仮想マシン１０４に、第１のユーザプロファイルつまりプロファイルストレージ２７内の上述の第１の格納場所のアンマウントを指示し、仮想マシン１０４に第１のユーザプロファイルをアンマウントさせる。仮想マシン１０４に第１のユーザプロファイルをアンマウントさせるために、第２の制御部２６２は、仮想マシン１０４に、クライアント端末１１をシステム１から切断するためのログオフ処理の実行を指示してもよい。
【００５６】
（５）第１のユーザプロファイルがアンマウントされたならば、第２の制御部２６２は、第１のユーザプロファイルが仮想マシン５０４のファイルシステム上にマウントされるように、換言すれば第１のユーザプロファイルを格納するプロファイルストレージ２７内の第１の格納場所が仮想マシン５０４のファイルシステム上にマウントされるように、第１の格納場所へのパスを示す情報を仮想マシン５０４内のエージェント６０１Ａに送信する。
【００５７】
ここでは、あるユーザがリッチクライアント端末１１を用いてシステム１にログオンしている状態で、シンクライアント端末１２に移動し、そのシンクライアント端末１２を用いてシステム１へのログオンを新たに要求する場合、つまり移動元のクライアント端末がリッチクライアント端末１１であり、移動先のクライアント端末がシンクライアント端末１２である場合を説明した。しかし、移動元のクライアント端末がシンクライアント端末１２で、移動先のクライアント端末がリッチクライアント端末１１であってもよい。また、移動元のクライアント端末と移動先のクライアント端末が同じ種類のクライアント端末であってもよい。
【００５８】
以上のコネクションブローカ２６の処理により、ユーザは、あるリッチクライアント端末から別のリッチクライアント端末へ、またはあるリッチクライアント端末からシンクライアント端末へ、またはあるシンクライアント端末から別のシンクライアント端末へと、使用するクライアント端末を変更することができ、さらに、移動元のクライアント端末をシステム１から切断するための操作を行うこと無く、移動元と移動先のクライアント端末で同じユーザ環境を使用することができる。
【００５９】
なお、第１のユーザプロファイルが他のクライアント端末によって使用中である場合、第２の制御部２６２は、接続要求を送信したクライアント端末１２に対応する仮想マシン５０４に、クライアント端末１２をシステム１に接続するか否かを確認するための画面（確認画面）をクライアント端末１１のディスプレイ上に表示させてもよい。この画面には、クライアント端末１１が既にログオン中であることを示すメッセージ、または接続を選択するとクライアント端末１１がログオフされることを示すメッセージを表示してもよい。ユーザが画面上で接続（強制接続）を選択したならば、クライアント端末１２に対応する仮想マシン５０４のエージェント６０１Ａは、接続の実行を示す要求（ログオン要求）をコネクションブローカ２６に送信する。このログオン要求が受信された際に、第２の制御部２６２は、仮想マシン１０４に第１のユーザプロファイルをアンマウントさせる。
【００６０】
ユーザが画面上で接続（強制接続）しないことを選択しなかったならば、クライアント端末１２のログオン処理は終了される。クライアント端末１１はログオン状態を維持する。よって、必要に応じて、新たにログオン操作したクライアント端末のログオン処理を中断できるので、ユーザが使用するクライアント端末を安全に変更することができる。
【００６１】
次に、図７を参照して、コネクションブローカ２６によって実行されるユーザプロファイル排他制御処理を説明する。  
図７はユーザプロフィルの状態遷移を表している。コネクションブローカ２６は、各ユーザプロファイルが使用中であるか否かを、データベース（ＤＢ）を用いて管理する。ユーザが初めてログオン操作を行った場合、コネクションブローカ２６内のＤＢには、このユーザのユーザＩＤに関連づけられたユーザプロファイルの状態「未使用（ｆａｌｓｅ）」が登録される。ユーザがログオン操作を行ったクライアント端末（第１のクライアント端末）に対応する仮想マシンのエージェントは、コネクションブローカ２６によって指定されたプロファイルストレージ２７上の格納場所に、ユーザプロファイルを作成する。そしてエージェントはこのユーザプロファイルをマウントし、これによって第１のクライアント端末はシステム１にログオンすることができる。第１のクライアント端末がシステム１にログオンすると、第１のクライアント端末に対応する仮想マシンのエージェントはログオン通知をコネクションブローカ２６に送信する。このログオン通知が受信された際に、コネクションブローカ２６は、上述のユーザプロファイルの状態を「使用中（ｔｒｕｅ）」に設定する。
【００６２】
第１のクライアント端末上でユーザによってログオフ操作が行われると、第１のクライアント端末に対応する仮想マシンのエージェントは、コネクションブローカ２６にログオフ通知を送信する。このログオフ通知が受信された際に、コネクションブローカ２６は、ユーザプロファイルの状態を「未使用（ｆａｌｓｅ）」に設定する。
【００６３】
ユーザが第１のクライアント端末を用いてシステム１にログオンしている状態で、このユーザが他のクライアント端末（第２のクライアント端末）上でログオン操作を行うと、第２のクライアント端末に対応する仮想マシンのエージェントは、ユーザプロファイルの格納場所を問い合わせるために、コネクションブローカ２６に接続要求を送信する。コネクションブローカ２６は、第２のクライアント端末に上述の確認画面を表示するための処理を実行する。この確認画面には、「他のクライアントがログオン中ですが、ログオンしますか？」といったメッセージが表示される。ユーザによって「Ｙｅｓ」が選択された場合は、第２のクライアント端末に対応する仮想マシンのエージェントは、ログオン要求（強制接続要求）をコネクションブローカ２６に送信する。ログオン要求の受信に応答して、コネクションブローカ２６は、第１のクライアント端末に対応する仮想マシンにユーザプロファイルをアンマウントさせる。
【００６４】
ユーザプロファイルがアンマウントされると、コネクションブローカ２６は、ユーザプロファイルの状態を「未使用（ｆａｌｓｅ）」に設定する。ユーザプロファイルの状態が「未使用（ｆａｌｓｅ）」に設定された後、コネクションブローカ２６は、ユーザプロファイルへのパスを示す情報を、ログオン要求を送信したエージェントに返す。第２のクライアント端末に対応する仮想マシンがプロファイルストレージ２７内のユーザプロファイルをマウントしてシステム１にログオンすると、第２のクライアント端末に対応する仮想マシンのエージェントはログオン通知をコネクションブローカ２６に送信する。このログオン通知が受信された際に、コネクションブローカ２６は、上述のユーザプロファイルの状態を「使用中（ｔｒｕｅ）」に設定する。
【００６５】
次に、図８を参照して、コネクションブローカ２６の内部構成について説明する。  
各クライアント端末のエージェント３０１Ａまたは６０１Ａとコネクションブローカ２６との間の通信は、ＨＴＴＰのようなプロトコルを用いて実行される。一方、エージェント３０１Ａまたは６０１Ａとプロファイルストレージ２７との間の通信は、ＳＭＢ（Ｓｅｒｖｅｒ  Ｍｅｓｓａｇｅ  Ｂｌｏｃｋ）のような、ファイル共有のためのプロトコルを用いて実行される。
【００６６】
コネクションブローカ２６は、Ｗｅｂサーバ７０１、サービスプログラム７０２、およびデータベース（ＤＢ）７０３を備える。Ｗｅｂサーバ７０１は各クライアント端末のエージェントと通信するためのソフトウェアであり、ユーザ管理モジュール７０１Ａを備える。ユーザ管理モジュール７０１Ａは上述の第１の制御部２６１の機能を実行する。さらに、ユーザ管理モジュール７０１Ａは、サービスプログラム７０２と共同して、上述の第２の制御部２６２の機能を実行する。
【００６７】
データベース（ＤＢ）７０３は、ユーザプロファイル管理テーブル７０３Ａとローミング通知要求テーブル７０３Ｂとを備える。ユーザ管理モジュール７０１Ａは、データベース（ＤＢ）７０３を用いて各ユーザプロファイルの使用状態を管理する処理と、エージェント３０１Ａまたは６０１Ａにユーザプロファイルのストレージパスを通知する処理などを実行する。サービスプログラム７０２は、プロファイルストレージ２７内の個々のユーザプロファイルがアンマウントされたか否かをチェックするための処理を実行する。
【００６８】
ユーザプロファイル管理テーブル７０３Ａは、図９に示すように、複数のユーザプロファイルに対応する複数のエントリを含む。各エントリは、プロファイルＩＤ、ユーザＩＤ、使用中フラグ、マシンＩＤ、及びストレージパスを格納する。プロファイルＩＤは、ユーザプロファイルを一意に識別するためのプライマリーキーである。ユーザＩＤは、システム１への接続を要求したユーザの識別子を示す。使用中フラグは、このユーザＩＤに関連づけられたユーザプロファイルが使用中であるか否かを示す。使用中フラグはｔｒｕｅまたはｆａｌｓｅのいずれかに設定される。使用中フラグ＝ｔｒｕｅは、ユーザプロファイルが使用中であることを示す。使用中フラグ＝ｆａｌｓｅは、ユーザプロファイルが使用中でないことを示す。マシンＩＤは、このマシンＩＤと同じエントリ内のユーザＩＤを有するユーザによって現在使用されているクライアント端末の識別子である。ストレージパスは、そのユーザＩＤに関連づけられたユーザプロファイルの格納場所を示す。
【００６９】
ローミング通知要求テーブル７０３Ｂの各エントリは、図１０に示すように、ローミングＩＤ、ユーザＩＤ、マシンＩＤ、リクエストマシンＩＤを格納する。ローミングＩＤは、ログオン要求（強制接続要求）を一意に識別するためのプライマリーキーである。ユーザＩＤはログオン要求（強制接続要求）を送信したユーザの識別子、つまりログオンユーザＩＤである。マシンＩＤは、ユーザプロファイルを現在使用中のクライアント端末の識別子である。リクエストマシンＩＤはログオン要求（強制接続要求）を送信したクライアント端末の識別子である。
【００７０】
以下、図１１〜図１６のシーケンス図を用いて、コネクションブローカ２６の一連の動作を説明する。  
図１１は、クライアント端末をシステム１に接続するためのログオン処理のシーケンス図を示している。  
ユーザはクライアント端末上でログオン操作を行い、クライアント端末の画面上にユーザアカウント情報（ユーザＩＤ、パスワード等）を入力する（ステップＳ１）。クライアント端末は、ドメインコントローラ２３と共同して、ログオン認証を行う（ステップＳ２）。ログオン認証が成功、つまり正当なユーザであることが確認されると、クライアント端末に対応する仮想マシン内のエージェントは、コネクションブローカ２６に接続要求を送信し、これによってユーザプロファイルの状態および格納場所をコネクションブローカ２６に問い合わせる（ステップＳ３）。この問い合わせはＨＴＴＰリクエストを用いて実行される。コネクションブローカ２６は、ユーザプロファイルの状態（使用中（ｔｒｕｅ）または未使用（ｆａｌｓｅ））と、ユーザプロファイルの格納場所（ストレージパス）とを示すレスポンスを、クライアント端末に対応する仮想マシン内のエージェントに返す。なお、コネクションブローカ２６は、ユーザプロファイルが使用中（ｔｒｕｅ）ならば、ユーザプロファイルが使用中（ｔｒｕｅ）であることを示すレスポンスをクライアント端末に対応する仮想マシン内のエージェントに返し、ユーザプロファイルが未使用中（ｆａｌｓｅ）ならば、ストレージパスを示すレスポンスをクライアント端末に対応する仮想マシン内のエージェントに返すようにしてもよい。
【００７１】
エージェントは、ユーザプロファイルが使用中であれば、上述の確認画面をクライアント端末のディスプレイに表示する。この確認画面には、ユーザプロファイルを使用中の他のクライアント端末のＩＤ（マシンＩＤ）を表示してもよい。この場合、「マシンＩＤ＝ｘｘｘでシステムに接続している可能性がありますが、接続しますか？」といったメッセージが表示される。ユーザプロファイルを使用中のクライアント端末のマシンＩＤを示す情報は、上述のレスポンス内に含めることができる。
【００７２】
ユーザが接続を選択した場合は、エージェントは、ログオン要求（強制接続要求）をコネクションブローカ２６に送信する（ステップＳ４）。また、ユーザが初めて、ログオンする場合は、コネクションブローカ２６のプロファイル管理テーブル（Ｐｒｏｆｉｌｅテーブル）７０３ＡにそのユーザのユーザＩＤが登録されていないため、コネクションブローカ２６は、そのユーザのユーザＩＤに対応するユーザプロファイルの格納場所を決定して、そしてその格納場所をレスポンスとして返す。するとエージェントは、プロファイルストレージ２７内のこのその格納場所にユーザプロファイルを作成する（ステップＳ５）。
【００７３】
ユーザプロファイルがすでに作成されており、且つユーザプロファイルが未使用であれば、エージェントは、コネクションブローカ２６からストレージパスを受信することができる。そして、エージェントは、そのユーザプロファイルの格納場所にアクセスして、ユーザプロファイルを、そのエージェントに対応する仮想マシンのファイルシステムにマウントする（ステップＳ６）。そして、エージェントは、エージェントに対応するクライアント端末がシステム１にログオンしたことをコネクションブローカ２６に通知するために、ユーザＩＤおよびクライアント端末のマシンＩＤを含むログオン通知をコネクションブローカ２６に送信する（ステップＳ７）。コネクションブローカ２６は、ログオン通知を受けると、Ｐｒｏｆｉｌｅテーブル７０３Ａをアクセスして、ログオン通知に含まれるユーザＩＤに関連づけられたユーザプロファイルの使用中フラグを、使用中（ｔｒｕｅ）にセットする。
【００７４】
その後、エージェントは、ローミング通知要求をコネクションブローカ２６に送信する。ローミング通知要求は、２重ログオンの発生をエージェントに通知すべきことをコネクションブローカ２６に対して要求するＨＴＴＰリクエストである。ローミング通知要求に対する処理シーケンス（ステップＳ８）の内容は図１３、図１５を参照して後述する。
【００７５】
図１２は、クライアント端末をシステム１から切断するためのログオフ処理のシーケンスを示している。  
ユーザがクライアント端末上でログオフ操作を行うと（ステップＳ１１）、そのクライアント端末のエージェントは、クライアント端末をシステム１から切断するためのログオフ処理を行う。このログオフ処理では、エージェントは、ユーザプロファイルをアンマウントする（ステップＳ１２）。クライアント端末がシステム１から切断（ログオフ）されると、エージェントは、コネクションブローカ２６に対して、ログオフ通知を送信する（ステップＳ１３）。このログオフ通知には、ユーザのユーザＩＤ、クライアント端末のマシンＩＤが含まれている。コネクションブローカ２６は、ログオフ通知を受けると、Ｐｒｏｆｉｌｅテーブル７０３Ａ内の使用中フラグを未使用（ｆａｌｓｅ）にセットする。
【００７６】
図１３は、ローミング通知要求処理のシーケンス図を示している。  
クライアント端末がシステム１にログオンした後、クライアント端末のエージェントは、ローミング通知要求をコネクションブローカ２６に送信する（ステップＳ２１）。ローミング通知要求は、上述したように、２重ログオンの発生を通知すべきことをコネクションブローカ２６に対して要求するＨＴＴＰリクエストである。ローミング通知要求を受信すると、コネクションブローカ２６は、システム１にすでにログオンしているユーザが別のクライアント端末を用いてシステム１への新たなログオンを要求するという２重ログオンが発生するかどうかを判定する。ローミング通知要求が受信されてから所定のタイムアウト時間（例えば１５分）内に２重ログオンが発生しなかったならば、コネクションブローカ２６は、タイムアウトを示すレスポンスをエージェントに返す。エージェントアプリは、再度、ローミング通知要求をコネクションブローカ２６に送信する（ステップＳ２２）。
【００７７】
所定のタイムアウト時間（例えば１５分）内に２重ログオンが発生したならば、コネクションブローカ２６は、ローミング通知要求を送信したクライアント端末のエージェントにユーザプロファイルのアンマウントを指示するために、ローミング通知要求の成功を示すレスポンスをエージェントに返す。成功のレスポンスを受け取ると、エージェントは、ユーザプロファイルをアンマウントする処理を含むログオフ処理を行う（ステップＳ２３）。
【００７８】
図１４は、ログオン要求（強制接続要求）が受信された際に実行される、コネクションブローカ２６の内部シーケンスを示している。  
エージェントからログオン要求（強制接続要求）を受けると、ユーザ管理モジュール７０１Ａは、Ｒｏａｍｉｎｇテーブル７０３Ｂに新たなエントリを追加し、そのエントリに、ログオンユーザＩＤと、ログオンユーザＩＤによって要求されたユーザプロファイルを現在使用中のクライアント端末のマシンＩＤと、ログオン要求を出したクライアント端末のマシンＩＤ（リクエストマシンＩＤ）とを格納する（ステップＳ３１）。ステップＳ３１では、もしすでに同じログオンユーザＩＤのエントリがＲｏａｍｉｎｇテーブル７０３Ｂに存在するならば、そのエントリ内のリクエストマシンＩＤが、ログオン要求を出したクライアント端末のマシンＩＤに変更される。Ｒｏａｍｉｎｇテーブル７０３Ｂにエントリを追加した後に、ユーザ管理モジュール７０１Ａは、リクエストマシンＩＤに関連づけられた監視タスクを起動する（ステップＳ３２）。
【００７９】
この監視タスクは、Ｐｒｏｆｉｌｅテーブル７０３Ａを参照して、ログオン要求によって要求されたユーザプロファイルが未使用（ｆａｌｓｅ）となったかどうかを判定する処理を、例えば３０秒間隔で定期的に繰り返す。ユーザプロファイルが未使用（ｆａｌｓｅ）となったならば、監視タスクは、ユーザ管理モジュール７０１Ａと共同して、ユーザプロファイルのストレージパスを示すレスポンスを、ログオン要求を送信したクライアント端末のエージェントに返す。
【００８０】
もし所定のタイムアウト時間（例えば５分）内にユーザプロファイルが未使用（ｆａｌｓｅ）とならなかったならば、ユーザ管理モジュール７０１Ａは、ログオン要求を送信したクライアント端末のエージェントにタイムアウトを送信する。エージェントは、再度、ログオン要求をコネクションブローカ２６に送信してもよい。
【００８１】
以下、監視タスクの動作を説明する。  
監視タスクは、まず、Ｒｏａｍｉｎｇテーブル７０３Ｂ内の情報の一覧を取得し（ステップＳ３３）、追加されたエントリ内のリクエストマシンＩＤが変更されているかどうか、つまり、追加されたエントリ内のリクエストマシンＩＤが、監視タスクに関連づけられたリクエストマシンＩＤと異なるかどうかを判定する（ステップＳ３４）。追加されたエントリ内のリクエストマシンＩＤが、監視タスクに関連づけられたリクエストマシンＩＤと異なる場合には、監視タスクが起動された後に、同じユーザがさらに別のクライアント端末を操作することによって別のログオン要求が受信された可能性がある。同じユーザからの複数のログオン要求が存在する場合には、最も後のログオン要求が有効となる。たとえば、あるユーザがクライアント端末（ＰＣ１）をシステム１にログオンしたまま、別のクライアント端末（ＰＣ２）を用いてシステム１へのログオンを試行し、さらに別のクライアント端末（ＰＣ３）を用いてシステム１へのログオンを試行した場合（３重ログオン）には、クライアント端末（ＰＣ３）からのログオン要求が、クライアント端末（ＰＣ２）のログオン要求よりも優先され、クライアント端末（ＰＣ３）のログオン要求が有効となる。クライアント端末（ＰＣ２）のログオン要求は、ログオン要求の衝突により、無効化される。
【００８２】
追加されたエントリ内のリクエストマシンＩＤが、監視タスクに関連づけられたリクエストマシンＩＤと異なるならば、監視タスクは、ログオン要求の衝突が発生したことを示すメッセージをユーザ管理モジュール７０１Ａに送信する（ステップＳ３５）。ユーザ管理モジュール７０１Ａは、ログオン要求の衝突の発生を示す内部フラグ（ｃｏｎｆｌｉｃｔ）をセットし、ログオン要求の衝突の発生によってログオン要求が失敗したことを示すレスポンスを、ログオン要求を送信したクライアント端末のエージェントに返す（ステップＳ３６）。
【００８３】
追加されたエントリ内のリクエストマシンＩＤが、監視タスクに関連づけられたリクエストマシンＩＤと一致するならば、監視タスクは、Ｐｒｏｆｉｌｅテーブル７０３Ｂから、ログオン要求したユーザＩＤに対応する情報を取得する（ステップＳ３７）。そして、監視タスクは、ログオン要求したユーザＩＤに関連づけられたユーザプロファイルの使用中フラグの値をチェックし、このユーザプロファイルが未使用（ｆａｌｓｅ）となったかどうかを判定する（ステップＳ３８）。未使用となったならば、つまり、使用中フラグ＝ｆａｌｓｅであるならば、監視タスクは、サービスプログラム７０２に対して（あるいはユーザ管理モジュール７０１Ａに対して）、Ｒｏａｍｉｎｇテーブル７０３Ｂに追加されたエントリの削除を要求する（ステップＳ３９）。そして、監視タスクは、このエントリが削除されたかどうかを定期的にチェックする（ステップＳ３４）。このエントリが削除されたことが確認されたならば、監視タスクは、ログオン要求の成功を示すメッセージをユーザ管理モジュール７０１Ａに送信する（ステップＳ４１）。ユーザ管理モジュール７０１Ａは、ログオン要求の成功を示すレスポンスをエージェントに返し、これによってユーザプロファイルのストレージパスをエージェントに通知する（ステップＳ４２）。ユーザプロファイルが未使用（ｆａｌｓｅ）となってから、あるタイムアウト時間内に、上述のエントリが削除されなかったならば、監視タスクは、ログオン要求の失敗を示すメッセージをユーザ管理モジュール７０１Ａに送信してもよい（ステップＳ４３）。ユーザ管理モジュール７０１Ａは、ログオン要求を送信したクライアント端末のエージェントにタイムアウトを示すレスポンスを返してもよい（ステップＳ４３）。
【００８４】
監視タスクの起動から所定のタイムアウト時間内にユーザプロファイルが未使用（ｆａｌｓｅ）とならなかったならば、監視タスクは、ログオン要求の失敗を示すメッセージをユーザ管理モジュール７０１Ａに送信する（ステップＳ４５）。ユーザ管理モジュール７０１Ａは、ログオン要求を送信したクライアント端末のエージェントにタイムアウトを示すレスポンスを返す（ステップＳ４６）。
【００８５】
図１５は、ローミング通知要求が受信された際に実行される、コネクションブローカ２６の内部シーケンスを示している。
【００８６】
ローミング通知要求をクライアント端末に対応するエージェントから受けると、ユーザ管理モジュール７０１Ａは、監視タスクを起動する（ステップＳ５１）。監視タスクは、Ｒｏａｍｉｎｇテーブル７０３Ｂを参照して、ローミング通知要求を送信したユーザＩＤと同じユーザＩＤを有するログオン要求が発生したがどうかを判定する処理を、例えば３０秒間隔で定期的に繰り返す。ローミング通知要求を送信したユーザＩＤと同じユーザＩＤを有するログオン要求が発生したならば、監視タスクは、ユーザ管理モジュール７０１Ａと共同して、ローミング通知要求を送信したクライアント端末のエージェントにログオフを指示し、これによってエージェントにユーザプロファイルをアンマウントさせる。
【００８７】
もし所定のタイムアウト時間（例えば１５分）内に、ローミング通知要求を送信したユーザＩＤと同じユーザＩＤを有するログオン要求が発生しなかったならば、ユーザ管理モジュール７０１Ａは、ローミング通知要求を送信したクライアント端末のエージェントにタイムアウトを送信する。エージェントは、再度、ローミング通知要求をコネクションブローカ２６に送信してもよい。
【００８８】
以下、監視タスクの動作を説明する。  
監視タスクは、ローミング通知要求を送信したクライアント端末が強制シャットダウン処理等によって既にログオフ状態であるか否かを判定する。すなわち、監視タスクは、ローミング通知要求を送信したユーザＩＤに対応するプロファイル情報をＰｒｏｆｉｌｅテーブル７０３Ａから取得し（ステップＳ５２）、ローミング通知要求を送信したユーザＩＤに対応する使用中フラグが未使用（ｆａｌｓｅ）となっているかどうかを判定する（ステップＳ５３）。使用中フラグが未使用（ｆａｌｓｅ）であるならば、ローミング通知要求を送信したクライアント端末は既にログオフされていると認識することができる。したがって、使用中フラグが未使用（ｆａｌｓｅ）であるならば、監視タスクは、ログオフを検出したことを示すメッセージをユーザ管理モジュール７０１Ａに返す（ステップＳ５４）。これに応答して、ユーザ管理モジュール７０１Ａは、例えばコンフリクトのメッセージ等を、ローミング通知要求に対するレスポンスとしてエージェントに送信してもよい（ステップＳ５５）。
【００８９】
ローミング通知要求を送信したユーザＩＤに対応する使用中フラグが使用中（ｔｒｕｅ）である場合には、監視タスクは、以下の処理を実行する。  
すなわち、監視タスクは、まず、Ｒｏａｍｉｎｇテーブル７０３Ｂ内の情報の一覧を取得し（ステップＳ５６）、ローミング通知要求を出したユーザＩＤと同じユーザＩＤのエントリがＲｏａｍｉｎｇテーブル７０３Ｂに追加されたかどうか、つまり、ローミング通知要求を出したユーザＩＤとログオン要求を出したユーザＩＤが一致するかどうかを判定する（ステップＳ５７）。ローミング通知要求を出したユーザＩＤとログオン要求を出したユーザＩＤが一致する場合、監視タスクは、ローミング通知要求の成功を示すメッセージ（ｔｒｕｅ）をユーザ管理モジュール７０１Ａに送信する（ステップＳ５８）。ユーザ管理モジュール７０１Ａは、ローミング通知要求の成功を示すレスポンスをエージェントに返し、エージェントに対して、ユーザプロファイルをアンマウントすべきこと、つまりシステム１からログオフすべきことを指示する（ステップＳ５９）。
【００９０】
所定のタイムアウト時間内に、ローミング通知要求を出したユーザＩＤと同じユーザＩＤのエントリがＲｏａｍｉｎｇテーブル７０３Ｂに追加されなかったならば、監視タスクは、ローミング通知要求の失敗を示すメッセージをユーザ管理モジュール７０１Ａに送信する（ステップＳ６０Ａ）。ユーザ管理モジュール７０１Ａは、ローミング通知要求を送信したクライアント端末のエージェントにタイムアウトを示すレスポンスを返す（ステップＳ６０Ｂ）。
【００９１】
このように、本実施形態では、ＨＴＴＰのリクエスト（ローミング通知要求、ログオン要求）はコネクションブローカ２６側で保持され、適切なタイミングでレスポンスがエージャントに返される。したがって、ユーザが、使用中のクライアント端末（移動元のクライアント端末）をログオフすることなく別のクライアント端末（移動先のクライアント端末）に移動し、移動先のクライアント端末上でログオン操作を行った場合に、移動元のクライアント端末をシステム１から自動的にログオフさせることができ、さらに移動元のクライアント端末がシステム１からログオフした後に移動先のクライアント端末にユーザプロファイルをマウントさせることができる。
【００９２】
図１６は、コネクションブローカ２６のサービスプログラム７０２の内部シーケンスを示している。サービスプログラム７０２は、ログオン要求によって要求されたユーザプロファイルを使用しているクライアント端末に対応する仮想マシン内のエージェントに、ユーザプロファイルをアンマウントさせるために、ユーザプロファイルが別のクライアント端末によって要求されていることを示す通知ファイルを、そのユーザプロファイルが存在する、ユーザプロファイルストレージ２７上のフォルダに格納する。たとえエージェントとコネクションブローカ２６との間の通信（ＨＴＴＰプロトコルを使用した通信）に障害が発生した場合でも、通知ファイルは、ログオン要求によって要求されたユーザプロファイルを使用中のクライアント端末のエージェントにユーザプロファイルをアンマウントさせることができる。
【００９３】
さらに、サービスプログラム７０２は、ユーザプロファイルストレージ２７をアクセスして、ログオン要求によって要求されたユーザプロファイルの仮想イメージファイル（Ｕｓｅｒｐｒｏｆｉｌｅ．ｖｈｄ）がオープンできるか否かを判定する。ユーザプロファイルが使用中であれば、ユーザプロファイルをオープンすることはできない。したがって、ユーザプロファイルをオープンできたならば、ユーザプロファイルがアンマウントされたと判定することができる。これにより、たとえエージェントとコネクションブローカ２６との間の通信に障害が発生した場合でも、ログオン要求によって要求されたユーザプロファイルがアンマウントされたか否かを正しく判定することができる。
【００９４】
コネクションブローカ２６のＯＳが起動されると、このＯＳによってサービスプログラム７０２が自動的に起動される（ステップＳ６１）。サービスプログラム７０２が起動された際に、サービスプログラム７０２は、ワーカースレッドを起動する（ステップＳ６２）。ワーカースレッドは、ユーザプロファイル状態を監視するためのタイマースレッドを、定期的に（例えば３０ｓ間隔で）繰り返し実行する（ステップＳ６３）。
【００９５】
タイマースレッドは、Ｒｏａｍｉｎｇテーブル７０３Ｂの各エントリの情報を取得し（ステップＳ６４）、ログオン要求が存在すれば、ユーザプロファイルストレージ２７内のフォルダに、上述の通知ファイルを作成する（ステップＳ６５）。たとえばログオン要求を出したユーザＩＤに関連づけられたユーザプロファイルが図６のＵｓｅｒＰｒｏｆｉｌｅ１．ｖｈｄである場合には、通知ファイルは、ユーザプロファイルストレージ２７内のフォルダ（ユーザＩＤ１￥）に格納される。通知ファイルのファイル名には、移動元のクライアント端末のマシンＩＤ、つまり、ログオン要求によって要求されたユーザプロファイル（ＵｓｅｒＰｒｏｆｉｌｅ１．ｖｈｄ）を現在使用しているクライアント端末のマシンＩＤを使用してもよい。これにより、ユーザプロファイル（ＵｓｅｒＰｒｏｆｉｌｅ１．ｖｈｄ）を現在使用しているクライアント端末のエージェントに、自身が使用中のユーザプロファイル（ＵｓｅｒＰｒｏｆｉｌｅ１．ｖｈｄ）が他のクライアント端末から要求されていることを正しく通知することができる。また、ユーザプロファイル（ＵｓｅｒＰｒｏｆｉｌｅ１．ｖｈｄ）を使用中のクライアント端末のマシンＩＤ、ドメイン名およびコンピュータ名をファイル名に使用してもよい。この場合、ファイル名は、（マシンＩＤ）．（ドメイン名）．（コンピュータ名）であってもよい。
【００９６】
タイマースレッドは、ログオン要求を出したユーザＩＤに関連づけられたユーザプロファイルのオープンを試行し、ユーザプロファイルがオープンできるか否かに応じて、このユーザプロファイルが使用中であるか否かを判定する（ステップＳ６６）。ユーザプロファイルを使用中のクライアント端末のエージェントがこのユーザプロファイルをアンマウントすると、このユーザプロファイルをオープンすることが可能となる。
【００９７】
ユーザプロファイルをオープンできた場合には、タイマースレッドは、オープンできたユーザプロファイルが存在するフォルダ内の通知ファイルを削除する（ステップＳ６７）。そして、タイマースレッドは、オープンできたユーザプロファイルに対応する、Ｒｏａｍｉｎｇテーブル７０３Ｂ内のエントリを削除する（ステップＳ６８）。さらに、タイマースレッドは、オープンできたユーザプロファイルに対応する、Ｐｒｏｆｉｌｅテーブル７０３Ａ内の使用中フラグを未使用（ｆａｌｓｅ）にセットする処理を行う（ステップＳ６９）。
【００９８】
図１７はコネクションブローカ２６のユーザプロファイル管理処理が適用される４つの２重ログオンシナリオパターンを示している。どのシナリオパターンにおいても、ユーザ（Ｕｓｅｒ１）がクライアント端末（ＰＣ１）を使用してシステム１にログオンしている状態で、ユーザ（Ｕｓｅｒ１）が別のクライアント端末（ＰＣ２）を使用してシステム１にログオンしようとした場合が想定されている。以下、各パターンにおける処理について説明する。
【００９９】
図１８は、２重ログオンシナリオパターン１の場合のコネクションブローカ２６の動作を示している。
【０１００】
（１）ユーザ（Ｕｓｅｒ１）がＰＣ１上でログオン操作を行う。ＰＣ１に対応する仮想マシン（エージェント）は接続要求をコネクションブローカ２６に送信する。コネクションブローカ２６は、ＰＣ１に対応する仮想マシンに、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルが格納されているプロファイルストレージ２７内の第１の格納場所を示すストレージパスを通知して、ＰＣ１に対応する仮想マシンに、ユーザプロファイルを、つまりプロファイルストレージ２７内の第１の格納場所を、仮想マシンのファイルシステム上にマウントさせる。
【０１０１】
（２）ＰＣ１に対応する仮想マシンはコネクションブローカ２６にログオン通知を送信する。コネクションブローカ２６は、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルに対応する使用中フラグの状態を使用中にセットする。  
（３）ＰＣ１に対応する仮想マシンはコネクションブローカ２６にローミング通知要求を送信する。
【０１０２】
（４）ユーザ（Ｕｓｅｒ１）は、ＰＣ１がシステム１にログオンされている状態で、ＰＣ２に移動する。そして、ユーザ（Ｕｓｅｒ１）がＰＣ２上でログオン操作を行う。  
（５）ＰＣ２に対応する仮想マシン（エージェント）は接続要求をコネクションブローカ２６に送信する。コネクションブローカ２６は、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルが他のクライアント端末によって使用されているか否かを判定する。ここでは、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルはＰＣ１によって使用されているので、コネクションブローカ２６は、ユーザプロファイルが使用中であることを示すレスポンスをＰＣ２に対応する仮想マシンに返し、ＰＣ２に対応する仮想マシンに、上述の確認画面をＰＣ２のディスプレイ上に表示させる。
【０１０３】
（６）ユーザ（Ｕｓｅｒ１）が確認画面上のＹＥＳを選択すると、ＰＣ２に対応する仮想マシンは、接続の実行を示すログオン要求（強制接続要求）をコネクションブローカ２６に送信する。コネクションブローカ２６は、Ｒｏａｍｉｎｇテーブル７０３Ｂにエントリを追加する。この追加されたエントリには、ユーザＩＤ＝Ｕｓｅｒ１、マシンＩＤ＝ＰＣ１、リクエストマシンＩＤ＝ＰＣ２というように情報が格納される。
【０１０４】
（７）コネクションブローカ２６は、ローミング通知要求に対するレスポンスをＰＣ１に返して、ＰＣ１に対応する仮想マシンに、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルのアンマウントを指示する。  
（８）ＰＣ１に対応する仮想マシンは、ログオフ処理を開始し、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルを、つまりプロファイルストレージ２７内の第１の格納場所をアンマウントする。  
（９）ログオフ処理が完了すると、つまりプロファイルストレージ２７内の第１の格納場所がアンマウントされると、ＰＣ１に対応する仮想マシンは、ログオフ通知をコネクションブローカ２６に送信する。ログオフ通知が受信された際、コネクションブローカ２６は、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルに対応する使用中フラグの状態を未使用（ｆａｌｓｅ）にセットする。また、コネクションブローカ２６内では、上述のサービスプログラム７０２もバックグラウンドで動作する。このサービスプログラム７０２は、Ｒｏａｍｉｎｇテーブル７０３ＢへのＵｓｅｒ１のエントリの追加を検出すると、通知ファイルを作成すると共に、およびＵｓｅｒ１のユーザプロファイルが開けるかのチェックを行う。ユーザプロファイルが開けることを確認したら、サービスプログラム７０２は、Ｒｏａｍｉｎｇテーブル７０３ＢのＵｓｅｒ１のエントリを削除すると共に、Ｕｓｅｒ１のユーザプロファイルに対応する使用中フラグの状態を未使用（ｆａｌｓｅ）にセットする。
【０１０５】
（１０）Ｕｓｅｒ１のユーザプロファイルに対応する使用中フラグの状態が未使用（ｆａｌｓｅ）にセットされると、コネクションブローカ２６は、ＰＣ２に対応する仮想マシンに、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルが格納されているプロファイルストレージ２７内の第１の格納場所を示すストレージパスを通知して、ＰＣ２に対応する仮想マシンに、ユーザプロファイルを、つまりプロファイルストレージ２７内の第１の格納場所を、その仮想マシンのファイルシステム上にマウントさせる。
【０１０６】
図１９は、２重ログオンシナリオパターン２の場合のコネクションブローカ２６の動作を示している。
【０１０７】
（１）〜（７）の処理はシナリオパターン１と同じである。シナリオパターン２では、ＰＣ１とプロファイルストレージ２７との間の通信が障害によって切断された場合を想定している。この場合、ＰＣ１に対応する仮想マシンは正常にログオフ処理を実行できない可能性がある。しかし、ＰＣ１とプロファイルストレージ２７との間の通信が障害によって切断された場合には、Ｕｓｅｒ１のユーザプロファイルを開くことができる。サービスプログラム７０２は、Ｕｓｅｒ１のユーザプロファイルを開くことができることを確認すると、Ｒｏａｍｉｎｇテーブル７０３ＢのＵｓｅｒ１のエントリを削除すると共に、Ｕｓｅｒ１のユーザプロファイルに対応する使用中フラグの状態を未使用（ｆａｌｓｅ）にセットする。
【０１０８】
よって、たとえＰＣ１とプロファイルストレージ２７との間の通信が障害によって切断されても、Ｕｓｅｒ１のユーザプロファイルに対応する使用中フラグの状態を未使用（ｆａｌｓｅ）にセットできるので、コネクションブローカ２６は、ＰＣ２に対応する仮想マシンに、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルが格納されているプロファイルストレージ２７内の第１の格納場所を示すストレージパスを通知することができる（（１０））。
【０１０９】
図２０は、２重ログオンシナリオパターン３の場合のコネクションブローカ２６の動作を示している。
【０１１０】
（１）〜（６）の処理はシナリオパターン１と同じである。シナリオパターン３では、（６）の処理の後に、ＰＣ１とコネクションブローカ２６との間の通信が障害によって切断された場合を想定している。この場合、ローミング通知要求に対するレスポンスをコネクションブローカ２６からＰＣ１に送信することができなくなる可能性がある。サービスプログラム７０２は、通知ファイルを作成し、その通知ファイルを、第１の格納場所が存在する、プロファイルストレージ２７内のフォルダに格納する。また、ＰＣ１に対応する仮想マシン（その仮想マシン内のエージェント）は、コネクションブローカ２６とその仮想マシンとの間の接続が切断されたのを検出すると、第１の格納場所が存在する、プロファイルストレージ２７内のフォルダに通知ファイルが作成されたかの監視を定期的に行う。仮想マシンは、例えば、ＰＣ１のマシンＩＤをファイル名として含む通知ファイルがフォルダ内に存在するかどうかを判定する。通知ファイルが存在する場合には、仮想マシンは、ログオフ処理を開始し、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルを、つまりプロファイルストレージ２７内の第１の格納場所をアンマウントする（（８））。サービスプログラム７０２は、Ｕｓｅｒ１のユーザプロファイルが開けるかのチェックを行う。ユーザプロファイルが開けることを確認したら、サービスプログラム７０２は、Ｒｏａｍｉｎｇテーブル７０３ＢのＵｓｅｒ１のエントリを削除すると共に、Ｕｓｅｒ１のユーザプロファイルに対応する使用中フラグの状態を未使用（ｆａｌｓｅ）にセットする。
【０１１１】
よって、たとえＰＣ１とコネクションブローカ２６との間の通信の障害によって、ローミング通知要求に対するレスポンスをＰＣ１に送信できない場合でも、ＰＣ１にＵｓｅｒ１のユーザプロファイルをアンマウントさせることができ、さらに、Ｕｓｅｒ１のユーザプロファイルに対応する使用中フラグの状態を未使用（ｆａｌｓｅ）にセットできる。よって、コネクションブローカ２６は、ＰＣ２に対応する仮想マシンに、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルが格納されているプロファイルストレージ２７内の第１の格納場所を示すストレージパスを通知することができる（（１０））。
【０１１２】
図２１は、２重ログオンシナリオパターン４の場合のコネクションブローカ２６の動作を示している。
【０１１３】
（１）〜（６）の処理はシナリオパターン１と同じである。シナリオパターン４では、（６）の処理の後に、ＰＣ１とコネクションブローカ２６との間の通信が障害によって切断された場合を想定している。シナリオパターン４では、さらに、ＰＣ１とプロファイルストレージ２７との間の通信が障害によって切断された場合を想定している。この場合、ＰＣ１に対応する仮想マシンは通知ファイルを検出できない可能性がある。しかし、ＰＣ１とプロファイルストレージ２７との間の通信が障害によって切断された場合には、Ｕｓｅｒ１のユーザプロファイルを開くことができる。サービスプログラム７０２は、Ｕｓｅｒ１のユーザプロファイルを開くことができることを確認すると、Ｒｏａｍｉｎｇテーブル７０３ＢのＵｓｅｒ１のエントリを削除すると共に、Ｕｓｅｒ１のユーザプロファイルに対応する使用中フラグの状態を未使用（ｆａｌｓｅ）にセットする。
【０１１４】
よって、コネクションブローカ２６は、ＰＣ２に対応する仮想マシンに、ユーザ（Ｕｓｅｒ１）に関連づけられたユーザプロファイルが格納されているプロファイルストレージ２７内の第１の格納場所を示すストレージパスを通知することができる（（１０））。
【０１１５】
なお、以上の説明では、ユーザが移動先のクライアント端末の確認画面上でＹＥＳを選択した場合にログオン要求がコネクションブローカ２６に送信される場合を説明したが、ユーザによる移動先のクライアント端末上でのログオン操作に応じてコネクションブローカ２６に送信される接続要求の受信時に、移動先のクライアント端末の仮想マシンにユーザプロファイルをアンマウントさせるようにしてもよい。
【０１１６】
以上のように、本実施形態によれば、第１のユーザがログオン操作を行った第１のクライアント端末に対応する第１の仮想マシンからの接続要求に応じて、第１のユーザの識別子に関連付けられた第１のユーザプロファイルを格納するネットワーク上のプロファイルストレージ１７内の第１の格納場所が第１のクライアント端末に対応する第１の仮想マシンのファイルシステム上にマウントされるように、第１の格納場所へのパスを示す情報が、第１のクライアント端末に対応する第１の仮想マシンに送信される。そして、第１のユーザが新たにログオン操作を行った第２のクライアント端末に対応する第２の仮想マシンからの接続要求に応じて、第１のユーザプロファイルが第１のクライアント端末によって使用中であるか否かが判定される。第１のユーザプロファイルが使用中である場合には、第１のクライアント端末に対応する第１の仮想マシンに第１の格納場所をアンマウントさせるための処理が実行される。そして、第１の格納場所が第２のクライアント端末に対応する第２の仮想マシンのファイルシステム上にマウントされるように、第１の格納場所へのパスを示す情報が、第２のクライアント端末に対応する第２の仮想マシンに送信される。
【０１１７】
したがって、ユーザが第１のクライアント端末を使用してシステムにログオンしたまま、第２のクライアント端末上でログオン操作をした場合には、第１のクライアント端末に自動的に第１のユーザプロファイルをアンマウントさせることができるので、ユーザがどのクライアント端末を操作する場合でも同じユーザ環境を容易に使用することができる。
【０１１８】
例えば、ユーザは、例えば自席のクライアント端末を用いてシステム１にログオンしたままの状態で、会議室やパブリックスペースに移動した場合でも、その会議室やパブリックスペース内のクライアント端末を用いてシステム１にログオンすることができる。さらに、ユーザは、会議室やパブリックスペースのクライアント端末上においても、自席のクライアント端末と同じユーザ環境を使用できる。
【０１１９】
なお、本実施形態の処理の手順は全てソフトウェアによって実行することができるので、本実施形態の処理の手順を実行するプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのプログラムを、サーバコンピュータのようなコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【０１２０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２１】
１１…リッチクライアント端末、１２…シンクライアント端末、２４…仮想イメージ作成＆配信サーバ、２５…シンクライアント実行サーバ、２６…コネクションブローカ、２７…プロファイルストレージ、１０４…リッチクライアント端末に対応する仮想マシン、５０４…シンクライアント端末に対応する仮想マシン、２６１…第１の制御部、２６２…第２の制御部。
【図１】
0005684170.tif 000002
【図２】
0005684170.tif 000003
【図３】
0005684170.tif 000004
【図４】
0005684170.tif 000005
【図５】
0005684170.tif 000006
【図６】
0005684170.tif 000007
【図７】
0005684170.tif 000008
【図８】
0005684170.tif 000009
【図９】
0005684170.tif 000010
【図１０】
0005684170.tif 000011
【図１１】
0005684170.tif 000012
【図１２】
0005684170.tif 000013
【図１３】
0005684170.tif 000014
【図１４】
0005684170.tif 000015
【図１５】
0005684170.tif 000016
【図１６】
0005684170.tif 000017
【図１７】
0005684170.tif 000018
【図１８】
0005684170.tif 000019
【図１９】
0005684170.tif 000020
【図２０】
0005684170.tif 000021
【図２１】
0005684170.tif 000022