(57)【特許請求の範囲】
【請求項１】
プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたプログラムを実行する実行環境を少なくとも１つ有し、前記実行環境上にて、クライアントからの要求に応じて所定のサービスを提供するためのサーバプログラムを実行する情報処理装置であって、
当該情報処理装置が現在接続されているネットワーク上でのアドレスを取得する第１の取得手段と、
前記第１の取得手段で取得されたアドレスを保持する手段と、
保持されているアドレスを定期的に読み出して、前回読み出したアドレスと比較することにより、当該情報処理装置のアドレスの変更を検知する検知手段と、
前記検知手段でアドレスの変更を検知したとき、その旨を前記実行環境へ通知する手段とを備え、
前記実行環境は、
当該情報処理装置のアドレスを記憶する第１の記憶手段と、
前記クライアントが前記サービスの提供を受けるために必要な手続きを記述したファイルを記憶する第２の記憶手段と、
前記ネットワーク上のクライアントが前記ファイルをダウンロードするために必要な、前記ファイルの所在を示した表記データを記憶する第３の記憶手段と、
前記通知を受けて、現在保持されているアドレスを取得する第２の取得手段と、
前記第１の記憶手段に記憶されているアドレスを、前記第２の取得手段で取得されたアドレスで書き換える第１の更新手段と、
前記第３の記憶手段に記憶されている表記データを、前記第２の取得手段で取得されたアドレスを用いて書き換える第２の更新手段と、
前記ネットワーク上のクライアントが前記サービスの提供を受け得るように、当該サービス提供元の前記アドレス及び前記表記データを登録する装置へ、前記第１の更新手段での更新後に前記第１の記憶手段に記憶されている新たなアドレス及び前記第２の更新手段での更新後に前記第３の記憶手段に記憶されている新たな表記データを登録するための手段と、
を具備したことを特徴とする情報処理装置。
【請求項２】
プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたプログラムを実行する実行環境を少なくとも１つ有し、前記実行環境上にて、クライアントからの要求に応じて所定のサービスを提供するためのサーバプログラムを実行する情報処理装置であって、
当該情報処理装置が現在接続されているネットワーク上でのアドレスを取得する第１の取得手段と、
前記第１の取得手段で取得されたアドレスを保持する手段と、
前記実行環境は、
当該情報処理装置のアドレスを記憶する第１の記憶手段と、
前記クライアントが前記サービスの提供を受けるために必要な手続きを記述したファイルを記憶する第２の記憶手段と、
前記ネットワーク上のクライアントが前記ファイルをダウンロードするために必要な、前記ファイルの所在を示した表記データを記憶する第３の記憶手段と、
保持されているアドレスを定期的に読み出して、前回読み出したアドレスと比較することにより、当該情報処理装置のアドレスの変更を検知する検知手段と、
前記検知手段でアドレスの変更を検知したとき、前記第１の記憶手段に記憶されているアドレスを、読み出したアドレスで書き換える第１の更新手段と、
前記検知手段でアドレスの変更を検知したとき、前記第３の記憶手段に記憶されている表記データを、読み出されたアドレスを用いて書き換える第２の更新手段と、
前記ネットワーク上のクライアントが前記サービスの提供を受け得るように、当該サービス提供元の前記アドレス及び前記表記データを登録する装置へ、前記第１の更新手段での更新後に前記第１の記憶手段に記憶されている新たなアドレス及び前記第２の更新手段での更新後に前記第３の記憶手段に記憶されている新たな表記データを登録するための手段と、
を具備したことを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はＪａｖａ（サン・マイクロシステムズ登録商標）実行環境による分散情報処理システムに関する.
【０００２】
【従来の技術】
近年、プラットフォーム独立なプログラム実行環境Ｊａｖａ（米サンマイクロシステムズ社登録商標、文献  Ｋｅｎ  Ａｒｎｏｌｄ，Ｊａｍｅｓ  Ｇｏｓｌｉｎｇ，”Ｔｈｅ  Ｊａｖａ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｌａｎｇｕａｇｅ，Ｓｅｃｏｎｄ  Ｅｄｉｔｉｏｎ，”参照）の発展により、多種多様な情報機器をＪａｖａにより連携させる取り組みが盛んに行われている。
【０００３】
分散アプリケーションをＪａｖａで実装する場合、通信手段として遠隔メソッド呼び出し(Ｒｅｍｏｔｅ  Ｍｅｔｈｏｄ  Ｉｎｖｏｃａｔｉｏｎ  以下ＲＭＩと呼ぶ)という通信技術を利用するのが一般的である(文献  Ｔｒｏｙ  Ｂｒｙａｎ  Ｄｏｗｎｉｎｇ、”ＲＭＩ：Ｄｅｖｅｌｏｐｉｎｇ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｊａｖａ  Ａｐｐｌｉｃａｔｉｏｎｓ  ｗｉｔｈ  Ｒｅｍｏｔｅ  Ｍｅｔｈｏｄ  Ｉｎｖｏｃａｔｉｏｎ  ａｎｄ  Ｓｅｒｉａｌｉｚａｔｉｏｎ，”ＩＤＧＢｏｏｋｓ  ＷｏｒｌｄＷｉｄｅ，Ｉｎｃ．１９９８参照)。
【０００４】
ＲＭＩは、Ｊａｖａのオブジェクト間のメソッド呼び出し機構を通信用に拡張したものであり、複雑な通信処理を隠蔽した、簡単でかつ強力な通信機構である。
【０００５】
【発明が解決しようとする課題】
しかし、ＪａｖａおよびＲＭＩは、実行される計算機（ホスト）のＩＰアドレス（以下、ネットワークアドレスとも呼ぶ）の変更に対応できないという問題がある。具体的には、以下の2点がある。
【０００６】
（１）ＲＭＩでは、クライアントがサーバに接続する際、リモートリファレンス（リモート参照）と呼ばれる情報を利用して接続する。このリモート参照には、サーバプログラムが実行されている計算機のネットワークアドレス(ＩＰアドレス)とポート番号などの情報が含まれている。この情報(リモートリ参照)は、例えば、計算機で電源が投入されて（起動されて）、サービスを公開する時にサーバプログラムが作成するが、作成する時のネットワークアドレスがリモート参照に埋め込まれてしまい、その後のネットワークアドレスの変更に対応して更新するメカニズムを持たない。
【０００７】
そのため、計算機が移動して、ネットワークアドレス（以下、簡単にネットワークとも呼ぶ）が変更された後に、サーバプログラムが配布する（ディレクトリサービスプログラムに登録する）リモート参照には、移動前のネットワークアドレスが埋め込まれている。このリモート参照を受け取ったクライアントプログラムは、移動前のネットワークアドレスに対してコネクションを張ろうと試みてしまい、新しいネットワークアドレスを持ったサーバとのコネクションが確立できないという問題点があった。
【０００８】
（２）ＲＭＩではサーバとクライアント間でＪａｖａオブジェクトを送受信する。受信側のＪａｖａプログラムは、受け取ったＪａｖａオブジェクトに対応するクラスファイルを必要とする。このクラスプァイルを既に持っている場合には、それを利用して受信したＪａｖａオブジェクトの処理を行う。しかし、このクラスを持っていない場合には、Ｊａｖａオブジェクトに付与されているクラスファイルの供給元の情報を参照し、そこからダウンロードを行い、その後にＪａｖａオブジェクトの処理を行う。Ｊａｖａオブジェクトに付与されたクラスファイルの供給元情報はコードベースと呼ばれ、Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ(ＵＲＬ)形式で指定する。
【０００９】
このコードベースも前述のリモートリ参照と同様に設定は静的であり、ネットワークアドレスの変更に対応して更新するメカニズムを持たない。このため、ネットワーク移動を行う計算機の様に、動的にネットワークアドレスが変更される計算機がクラスファイル供給元となる場合に、コードベースの更新が行われず、受信側のプログラムが正常に動作できないという問題点があった。
【００１０】
そこで、本発明は、上記問題点に鑑み、プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたプログラムを実行する実行環境を少なくとも１つ有する端末のＩＰアドレスが、例えば上記プログラム実行中に不意に変更されても、そのＩＰアドレスの変更を上記実行環境上に反映して、後に、再び他の端末との通信を可能にする通信方法および情報処理装置を提供することを目的とする。
【００１１】
例えば、Ｊａｖａ仮想マシンを少なくとも１つ有する端末のＩＰアドレスの変更に伴い、ＲＭＩにて定義されているリモート参照中のＩＰアドレス、コードベースも容易に変更でき、ＩＰアドレス変更後もＪａｖａプログラムを用いた端末間の通信を可能にする通信方法およびそれを用いた情報処理装置を提供することを目的とする。
【００１２】
【課題を解決するための手段】
本発明は、プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたプログラムを実行する実行環境（例えばＪａｖａ仮想マシン）を少なくとも１つ有する複数の端末があり、これらのうちの特定の端末（例えばサーバプログラムが実行される端末）が、自装置のネットワークアドレス（例えばＩＰアドレス）の変更を検知したとき、他の端末（例えば、クライアントプログラムが実行される端末）が前記特定の端末へのアクセスを可能にするため、変更後の新たなネットワークアドレスを前記他の端末が参照可能なように提供し（例えば、リモート参照中のネットワークアドレスを更新して、ディレクトリサービスプログラムへ再度登録し直す）、また、前記特定の端末が、自装置のネットワークアドレスの変更を検知したとき、前記特定の端末に記憶されているファイルであって、前記特定の端末が前記他の端末に提供すべきファイル（例えば、スタブファイルやその他のクラスファイル）の所在を示す表記データ（コードベース）を更新し、この更新された表記データに基づき前記ファイルを前記他の端末が参照可能なように提供する（例えば、スタブファイル中のコードベースを更新したり、必要に応じて、相手端末へ送付する）することにより、プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたプログラムを実行する実行環境（例えば、Ｊａｖａ仮想マシン）を少なくとも１つ有する端末のネットワークアドレスの変更に伴い、例えば、クライアントに提供されるリモート参照中のＩＰアドレス、コードベースも容易に変更でき、端末のＩＰアドレスが不意に変更された場合も（例えば、Ｊａｖａプログラムを用いた）端末間の通信を可能にする。
【００１３】
特に、プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたサーバプログラムを実行する実行環境（例えば、Ｊａｖａ仮想マシン）を少なくとも１つ有する端末が、自装置のネットワークアドレスの変更を検知する検知手段と、この検知手段でネットワークアドレスの変更を検知したとき、前記クライアントが自装置へのアクセスを可能にするため、少なくとも変更後の新たなネットワークアドレスを前記クライアントが参照可能なように提供する提供手段とを具備し、好ましくは、前記クライアントが前記サービスの提供を受けるために必要な手続きを記述したファイルを記憶する記憶手段と、前記検知手段でネットワークアドレスの変更を検知したとき、前記ファイルの所在を示した表記データ（例えば、コードベース）を更新する更新手段と、更新された表記データに基づき前記ファイルを前記クライアントが参照可能なように提供する提供手段とを具備したことにより、プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたサーバプログラムを実行する実行環境（例えば、Ｊａｖａ仮想マシン）を少なくとも１つ有する端末のネットワークアドレスの変更に伴い、クライアントに提供するためにディレクトリサービスプログラムに登録するサーバプログラムへのリモート参照中のＩＰアドレス、コードベースも容易に変更でき、サーバプログラム実行中にその端末のＩＰアドレスが不意に変更されても、後にクライアントからのアクセス（例えば、遠隔メソッド呼び出し）を可能にし、（例えば、Ｊａｖａプログラムを用いた）端末間の通信を可能にする。
【００１４】
本発明は、プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたプログラムを実行する実行環境を少なくとも１つ有するコンピュータを、クライアントからの要求に応じて所定のサービスを提供するための前記実行環境上のサーバとして機能させるためのプログラム製品であって、
自装置のネットワークアドレスの変更を検知する機能と、
前記ネットワークアドレスの変更を検知したとき、前記クライアントが自装置へのアクセスを可能にするため、少なくとも変更後の新たなネットワークアドレスを前記クライアントが参照可能なように提供する機能と、
前記ネットワークアドレスの変更を検知したとき、前記クライアントが前記サービスの提供を受けるために必要な手続きを記述したファイルの記憶場所を示した表記データを更新する機能と、
更新された表記データを前記クライアントが参照可能なように提供する機能と、
をコンピュータに実現させる。本発明によれば、プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたプログラムを実行する実行環境（例えば、Ｊａｖａ仮想マシン）を少なくとも１つ有するコンピュータのネットワークアドレス（例えば、ＩＰアドレス）の変更に伴い、クライアントに提供されるリモート参照中のＩＰアドレス、コードベースも容易に変更でき、移動先においても（例えば、Ｊａｖａプログラムを用いた）コンピュータ間の通信を可能にする。
【００１５】
【発明の実施形態】
図1は、本実施形態に係る分散情報処理システムの構成例を示す図で、プラットフォーム独立の機械語で実行されるオブジェクト指向言語として、Ｊａｖａで記述されたプログラムを実行する実行環境（Ｊａｖａ仮想マシン）を少なくとも１つ有する複数（例えば、ここでは３つの）計算機１０１〜１０３が、例えばインターネット等のネットワークを介して接続され、ＪａｖａのＲＭＩを用いてＪａｖａプログラム間で通信を行うことにより、分散情報処理を実現するものである。
【００１６】
ＪａｖａのＲＭＩを用いて分散情報処理を実現するためには、サービスを提供するサーバプログラムと、サービスを利用するクライアントプログラム、およびサーバとクライアントを仲介するディレクトリサービスプログラムが必要である。
【００１７】
図１において、サーバプログラム、クライアントプログラム、ディレクトリサービスプログラムは、それぞれ、異なる計算機(計算機１０２、計算機１０３、計算機１０１)上のＪａｖａ仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）Ｓ、Ｃ、Ｄで実行されているプログラムである（同じ計算機上の異なるＪａｖａ仮想マシンであっても一般性を失わない）。
【００１８】
ディレクトリサービスプログラムは、クライアントプログラムがサーバプログラムを発見するための手段を提供するプログラムで、クライアントプログラムから要求されたサービス名やサービス属性などをキーとして、サーバプログラムを検索する機能を有する。例えば、Ｊａｖａの開発環境に含まれるｒｍｉｒｅｇｉｓｔｒｙというプログラムや、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ社が提唱するＪｉｎｉ(文献  Ｋ．Ａｒｎｏｌｄ，Ｂ．Ｏ’Ｓｕｌｌｉｖａｎ，Ｒ．Ｗ．Ｓｃｈｅｉｆｌｅｒ，Ｊ．Ｗａｌｄｏ，  ａｎｄ  Ａ．Ｗｏｌｌｒａｔｈ，”ＴｈｅＪｉｎｉ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，”Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ，１９９９  参照)のＬｏｏｋｕｐ  Ｓｅｒｖｅｒというプログラムがこれにあたる。
【００１９】
サーバプログラムは、他のＪａｖａ仮想マシン上のクライアントプログラムからのサービス要求を遠隔メソッド呼び出しの形で受信し、サービス結果をメソッドヘの返り値として返す。サーバプログラムは、サービス提供を開始するにあたり、まずディレクトリサービスプログラムに、そのサーバプログラムから提供するサービス名や属性と、当該サーバプログラムへの接続に必要な情報(ネットワークアドレス（ネットワークレイヤアドレスで、ここでは、ＩＰアドレス）、ポート番号、オブジェクト識別子などで、これを後述するスタブファイルに埋め込んで登録する。
【００２０】
クライアントプログラムは、サーバプログラムに対して遠隔メソッド呼び出しを用いて要求を発行し、応答を受け取って目的を完遂する。クライアントプログラムは、サービスを受けるにあたってまずサーバプログラムか稼働するネットワーク上の位置を知らなければならない。そこで、クライアントプログラムはまずディレクトリサービスプログラムに接続して、サービス名やサービス属性などをキーとして、所望のサーバプログラムの検索を行なう。検索に成功すると、ディレクトリサービスプログラムに登録されているリモート参照を獲得するので、リモート参照に基づきサーバフログラムヘ接続し、サービスの提供を受ける。
【００２１】
Ｊａｖａ仮想マシンは、ＲＭＩを利用するために、同じＪａｖａ仮想マシン内にリモート参照管理部を具備する。
【００２２】
リモート参照管理部は、同一Ｊａｖａ仮想マシン内のオブジェクトに対するリモート参照の作成や、他のＪａｖａ仮想マシン内のオブジェクトを参照するリモート参照を受信し管理するためのものである。
【００２３】
ここで、あるサービスを提供するサーバプログラムがＪａｖａ仮想マシンＳ内で作成され、これに、Ｊａｖａ仮想マシンＣ内のクライアントプログラムがアクセスしたとする。
【００２４】
まず、移動（ネットワークアドレスの変更）がない場合について説明する。
【００２５】
図２は、サーバプログラムが稼働する仮想マシンＳの構成を示したもので、図３に示すフローチャートを参照して図２の仮想マシンＳの機能と動作について説明する。
【００２６】
図２において、仮想マシンＳは、主に、サーバオブジェクト２と登録管理部３とリモート参照管理部４とネットワークアドレス獲得部５とから構成される。
【００２７】
Ｊａｖａによるサーバプログラムは、一般に、複数のｊａｖａオブジェクトで構成されるが、その中にＲＭＩによる遠隔メソッド呼び出しを受け付けるオブジェクトが含まれる。このオブジェクトは、「ｊａｖａ．ｒｍｉ．ｓｅｒｖｅｒ．ＲｅｍｏｔｅＳｅｒｖｅｒ」クラスを継承したクラスのオブジェクトである。このオブジェクトを以下サーバオブジェクト２と呼ぶ。
【００２８】
リモート参照管理部４は、主に、リモート参照更新部４ａとリモート参照格納部４ｂとから構成され、リモート参照更新部４ａは、サーバオブジェクト２へのリモート参照の作成、更新を行い、作成、更新されたリモート参照をリモート参照格納部４ｂに格納する。また、リモート参照管理部４は、他のＪａｖａ仮想マシン内のオブジェクトを参照するためのリモート参照を受信し、管理する。
【００２９】
登録管理部３は、リモート参照格納部４ｂに格納されたサーバオブジェクト２へのリモート参照をディレクトリサービスプログラムＤに登録するためのものである。
【００３０】
ネットワークアドレス獲得部５は、サーバオブジェクト２が構築、すなわち、起動された（クラスがインスタンス化された）ときに、計算機１０２のオペレーティングシステム（例えば、Ｗｉｎｄｏｗｓ（マイクロソフト社登録商標）、Ｌｉｎｕｘ等で、以下、簡単にＯＳと呼ぶ）から、そのときの計算機１０２のネットワークアドレスを獲得する。例えば、「ｊａｖａ．ｎｅｔ．ＩｎｅｔＡｄｄｒｅｓｓ」クラスが提供する「ｇｅｔＬｏｃａｌＨｏｓｔ()」メソッドがその一例である。Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ杜が提供するＪＤＫ（Ｊａｖａ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｋｉｔ）１．１およびＪＤＫ１．２で用意されているものは、ネットワークアドレスを一度獲得すると、Ｊａｖａ仮想マシンが終了するまで、その獲得したネットワークアドレスを保持し続けるようになっている。
【００３１】
リモート参照更新部４ａは、ネットワークアドレス獲得部５で獲得されたネットワークアドレスをリモート参照に書き込む。
【００３２】
さて、計算機１０２に電源が投入されて、Ｊａｖａ仮想マシンによりサーバオブジェクト２が構築されると（クラスがインスタンス化されると）（図３のテップＳ１）、その際、リモート参照管理部４は、ネットワークアドレス獲得部５からネットワークアドレスを取り出して、このサーバオブジェクト２ヘのリモート参照を作成し、リモート参照格納部４ｂに格納する（ステップＳ２）。
【００３３】
次に、登録管理部３が、このサーバオブジェクト２ヘのリモート参照をディレクトリサービスプログラムＤに登録する（ステップＳ３）。
【００３４】
一方、クライアントプログラムは複数のＪａｖａオブジェクトから構成されており、これを以下、クライアントオブジェクトと呼ぶ。クライアントプログラムは、所望のサービスを提供してくれるサーバプログラムを検索するために、ディレクトリサービスプログラムに接続して、サービス名、サービス属性などをキーとして所望のサーバプログラムを検索する（図４のステップＳ１１）。そして、ディレクトリサービスプログラムに登録されている所望のサーバプログラムへのリモート参照を獲得すると（ステップＳ１２）、リモート参照に記述されたネットワークアドレス等を用いて、当該サーバプログラムに接続し（ステップＳ１３）、サービスの提供を受ける（ステップＳ１４）。
【００３５】
以上図３のステップＳ１〜ステップＳ３までのサーバプログラムの動作は、従来同様である。
【００３６】
次に、本発明の実施形態に係るサーバプログラムの動作について、上記の移動（ネットワークアドレスの変更）がない場合と異なる部分について説明する。
【００３７】
ここで、サーバプログラムが稼働している計算機１０２のネットワークアドレスが変更された場合について考える。これは、たとえば携帯型のノートパソコンの様な移動可能な計算機をユーザが移動しながら、あるいはサスペンドの状態で持ち運び、別のＩＰネットワーク（以下、簡単にネットワークと呼ぶ）に接続した場合に生じる。また、移動できないようなデスクトップ型の計算機等であっても、ダイアルアップで接続されている場合、電話回線を一旦切断した後に再接続した際に異なるネットワークアドレスが割り当てられる事がある。
【００３８】
このような計算機１０２のネットワークアドレスの変更が、サーバプログラム稼働中に生じたとする（図３のステップＳ４）。この場合、ＩＰネットワーク移動後もサーバオブジェクト２が再構築されることがないので、リモート参照管理部４内に保持されているサーバオブジェクト２への接続のためにリモート参照は、サーバオブジェクト２が構築された時点でのネットワークアドレスを保持するため、ネットワークアドレスの変更に伴って、リモート参照の書き換えが必要となる。
【００３９】
また、ネットワークアドレス獲得部５は、前述したように、ネットワークアドレスを一度獲得すると、その値を保持し、ネットワークアドレス変更後もその保持さえた値をリモート参照管理部４に報告してしまう。このため、ネットワークアドレス獲得部５は、その保持した値とネットワークアドレスを削除し、ネットワークアドレス獲得部５が呼ばれた場合にネットワークアドレスを再獲得することが必要である。
【００４０】
すなわち、サーバプログラムが稼働する計算機１０２のネットワークアドレスが変更されたときに、速やかにリモート参照が更新されるよう、計算機１０２のネットワークアドレスが更新されたことを検知するメカニズムが必要となる。このメカニズムは、ネットワークアドレスを管理するＯＳが具備してもよいし、図６に示すように、ネットワークアドレスをモニタするプログラム（ネットワークアドレスモニタ６）が、Ｊａｖａ仮想マシンＳ外部に常駐していてもよい。これらの場合には、Ｊａｖａ仮想マシンＳ外部からリモート参照管理部４（リモート参照更新部４ｂ）へ、ネットワークアドレスの変更を通知する手段があれば良い。この手段には、ソケットなどの通常のプロセス間通信を用いても良い。または、図７に示すように、ネットワークアドレスモニタ７をＪａｖａ仮想マシンＳ内部に持っても良い。
【００４１】
図６のネットワークアドレスモニタ６の機能について、図８（ａ）を参照して説明する。ネットワークアドレスは、計算機１０２に搭載されている、ＤＨＣＰ（Ｄｙｎａｍｉｃ  Ｈｏｓｔ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）１２やＰＰＰ（Ｐｏｉｎｔ−ｔｏ−Ｐｏｉｎｔ  Ｐｒｏｔｏｃｏｌ）１３のようなプロトコルを用いて必要に応じて取得され、計算機１０２のＯＳ１１に渡され、ここで保持される。ネットワークアドレスモニタ６は、ＯＳ１１に保持されているネットワークアドレスを定期的に読み出し、前回読み出したネットワークアドレスと比較する。前回読み出しネットワークアドレスと今回読み出したネットワークアドレスとが異なるときは、その旨をリモート参照管理部４（リモート参照更新部４ｂ）へソケットなどの通常のプロセス間通信を用いて通知する。それを受けて、リモート参照更新部４ｂはネットワークアドレス獲得部５を起動して、新たなネットワークアドレスを獲得する。
【００４２】
図７のネットワークアドレスモニタ７の機能について、図８（ｂ）を参照して説明する。ネットワークアドレスは、上記同様、計算機１０２に搭載されている、ＤＨＣＰ１２やＰＰＰ１３のようなプロトコルにて取得され、計算機１０２のＯＳ１１に保持されている。ネットワークアドレスモニタ７は、定期的にネットワークアドレス獲得部５を呼び出し、ネットワークアドレス獲得部５で獲得されたネットワークアドレスを前回のものと比較してネットワークアドレスの変更を検知する。ネットワークアドレスの変更を検知した場合には、リモート参照更新部４ｂのメソッド呼び出しをして、新たなネットワークアドレスを通知する。
【００４３】
図３の説明に戻り、ネットワークアドレスの変更が検知され、新たなネットワークアドレスを取得したリモート参照更新部４ｂは、リモート参照格納部４ａに格納されているリモート参照中のネットワークアドレスを書き換える（ステップＳ５）。
【００４４】
リモート参照格納部４ｂは、複数のリモート参照を管理しており、大別すると同一Ｊａｖａ仮想マシン内のオブジェクトを参照するものと、他のＪａｖａ仮想マシン内のオブジェクトを指すものがある。ネットワークアドレスの変更に伴って書き換えが必要となるリモート参照は、同一Ｊａｖａ仮想マシン内のオブジェクトを指すものだけである。
【００４５】
ここで、図５に示すフローチャートを参照して、図３のステップＳ５のリモート参照更新部４ｂのリモート参照更新処理動作について説明する。
【００４６】
リモート参照更新部４ａは、リモート参照格納部４ａで管理されているリモート参照の中から、同一Ｊａｖａ仮想マシンＳ内のもので、ネットワークアドレス更新処理を行っていない、未処理のもの選択し（ステップＳ２１〜ステップＳ２２）、その選択したリモート参照中に計算機１０２が移動する前の変更前のネットワークアドレスが含まれているときは（ステップＳ２３）、それを移動後の新しいネットワークアドレスに書き換える（ステップＳ２４）。
【００４７】
なお、ネットワークアドレスの変更を検知する方法としては、上記のような定期的にモニタするのではなく、移動後最初にネットワークアクセスを行う時点でモニタして検出するのでも良い。リモート参照は、計算機１０２のＪａｖａ仮想マシンＳのプログラムが他の計算機のＪａｖａ仮想マシンと通信を行う時点で更新されていれば良いので、例えば、図６に示した構成の場合、計算機１０２がＪａｖａ仮想マシンＳ外のプログラムが受信したパケットに応答しようとしたときに、ネットワークアドレスモニタ６がネットワークアドレスのチェックを行い、変更されていれば、ネットワークアドレスモニタ６がリモート参照更新部４のメソッド呼び出しをすれば良い。
【００４８】
以上、ネットワークアドレスの変更に伴うリモート参照中のネットワークアドレスを書き換える場合を説明したが、実際、ネットワークアドレスの変更に伴い、書き換えるべきものは、これだけではない。
【００４９】
まず、図９を参照して、ＪａｖａのＲＭＩを用いた通信の概略を説明する。
【００５０】
ＪａｖａのＲＭＩでは、計算機１０３のクライアントプログラムが計算機１０２のサーバオブジェクト２が提供するリモートメソッドを呼ぶ際に、当該サーバオブジェクト２用のスタブクラスが必要となる。また、サーバプログラムには、このスタブクラスに対応するスケルトンクラスを有する。クライアントプログラムが実行されている計算機１０３上に、サーバオブジェクト２用のスタブクラスが無い場合、サーバオブジェクト２のスタブオブジェクトに含まれるコードベースに指定された場所から、スタブクラスを記述したファイル（スタブファイル）をダウンロードする。スタブオブジェクトには、コードベースとリモート参照を含んでいる。
【００５１】
スタブファイルの保存場所としては、サーバプログラムが稼働する計算機１０２内にある場合と、異なる計算機にある場合がある。前述したように、計算機１０２の移動に伴ってネットワークアドレスが変更するような場合に影響を受けるのは、明らかに前者の場合である。
【００５２】
計算機１０３上のクライアントプログラムにスタブファイルを提供する場合、通常ＨＴＴＰ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）が利用される。そこで、本実施形態では、図１０に示すように、サーバプログラムが稼働する計算機１０２上で、ＨＴＴＰにてデータファイルの送受信を行うＨＴＴＰサーバ１０４が並行して稼働する。
【００５３】
図９において、計算機１０２上のサーバプログラムが通信相手のクライアントプログラムに提供すべきサーバオブジェクト２用のスタブファイルは、ＨＴＴＰサーバ１０４に格納する（ステップＳ１０１）。また、サーバオブジェクト２用のスタブファイルの格納場所を示すコードベースは、スタブオブジェクトをディレクトリサービスプログラムに登録するために送出する際に、スタブオブジェクトに（コードベースが）付与される（ステップＳ１０２、図３のステップＳ２）。クライアントプログラムは、図４に示したように、ディレクトサービスリプログラムから所望のサーバプログラムのスタブオブジェクトを受け取り（ステップＳ１０３）、そのスタブオブジェクトに付与されているコードベースを基に、スタブファイルの供給元にアクセスして、スタブファイルをダウンロードする（ステップＳ１０４）。その後、クライアントプログラムは、図４のステップＳ１３以降の動作を行う。
【００５４】
さて、サーバオブジェクト２用のスタブファイルの格納場所は、計算機１０２にある。従って、前述のようにして、サーバプログラムが稼働する計算機１０２のネットワークアドレスが変更された場合、前述同様にリモート参照の書き換えが必要であるが、さらに、スタブファイルを提供するＨＴＴＰサーバ１０４のネットワークアドレスも変更されるため、スタブファイルの供給元を示すコードベ一スも書き換える必要がある。
【００５５】
ＲＭＩでは、ＲＭＩ用クラスローダが定義されている。ＲＭＩ用クラスローダは、ＲＭＩ用のスタブクラスやスケルトンクラス、ＲＭＩのメソッドのパラメータや戻り値として渡されるクラスを管理するものである。具体的には、クラスファイルの在処を、所定の順番に検索、ロードし、合わせでどこからロードしたかを記憶する。そして、オブジェクトを他のＪａｖａ仮想マシンへ渡す場合、受け手側でクラスがロードできるように在処を示すＵＲＬを付与する。この時、スケルトンやスタブなどのクラスに対して付与されるコードベースはＲＭＩクラスローダが管理するローカルコードベースの値がコピーされる(詳細はＲＭＩ仕様書)。このローカルコードベースは、初期値は起動時にプロパティで指定するのが一般的である。
【００５６】
図１１に示すように、サーバプログラムが稼働する仮想マシンＳは、上記のＲＭＩ用クラスローダ８を有する。なお、図２、図６と同一部分には同一符号を付し、以下、異なる部分について説明する。計算機１０２のネットワークアドレスが変更された場合には、ＲＭＩ用クラスローダ８が管理しているローカルコードベース８ａの値が更新されればよい。そこで、ネットワークアドレスの変更を検知した場合には、ローカルコードベース更新部８ｂを呼んで、ローカルコードベース８ａに含まれる自計算機１０２を示す部分を、新しいネットワークアドレスに対応したものに更新すればよい。
【００５７】
例えば、計算機１０２のネットワークアドレスが「１００．１０１．１０２．１０３」、コードベースが「ｈｔｔｐ：／／１００．１０１．１０２．１０３／ｃｏｄｅｂａｓｅ／」であったものが、ネットワーク移動により、計算機１０２のネットワークアドレスが「２００．２０１．２０２．２０３」に移動になった場合、コードベースも「ｈｔｔｐ：／／２００．２０１．２０２．２０３／ｃｏｄｅｂａｓｅ／」に更新されれば良い。
【００５８】
ネットワークアドレス変更の検知は、図８に示したように、Ｊａｖａ仮想マシンＳ外部で行う方法（図８（ａ）参照）とＪａｖａ仮想マシンＳ内部で行う方法（図８（ｂ））とがあるが、図１１では、Ｊａｖａ仮想マシンＳ外部にネットワークアドレスモニタ６がある場合の構成例を示している。すなわち、前述したように、ネットワークアドレスモニタ６がネットワークアドレスの変更を検知すると、その旨をリモート参照管理部４（リモート参照更新部４ｂ）、ＲＭＩ用クラスローダ８（コードベース更新部８ｂ）へソケットなどの通常のプロセス間通信を用いて通知する。それを受けて、リモート参照更新部４ｂ、コードベース更新部８ｂは、ネットワークアドレス獲得部５を起動して、新たなネットワークアドレスを獲得する。コードベース更新部８ｂは、獲得した新たなネットワークアドレスを用いて、ローカルコードベース８ａを書き換える。
【００５９】
図３のステップＳ５では、リモート参照更新部４ｂは、リモート参照中のネットワークアドレスを新たなネットワークアドレスに書き換えるとともに、コードベース更新部８ｂでローカルコードベース８ａを更新する。
【００６０】
以上のようにして、リモート参照更新部４ｂにより更新されたリモート参照は、計算機１０２の移動先のＩＰネットワーク上に存在するディレクトリサービスプログラムに登録される（図３のステップＳ３）。なお、このときのディレクトリサービスプログラムは、計算機１０１上で稼働するものであるとは限らない。
【００６１】
このように、計算機１０２の移動に伴うＩＰアドレスの変更に応じて、リモート参照更新部４ａがリモート参照中のネットワークアドレスを書き換えて、計算機１０２の移動した先においても、スタブオブジェクトにその新たなリモート参照と新たなローカルコードベースを付与して、ディレクトリサービスプログラムに登録することにより、計算機１０２上のサーバプログラムは、新たなクライアントとの間の通信が可能となる。
【００６２】
以上説明したように、上記実施形態によれば、サーバプログラムを実行するＪａｖａ仮想マシンＳを少なくとも１つ有する計算機１０２が、ネットワークアドレスモニタ６あるいは７で自装置のＩＰアドレスの変更を検知したとき、サーバプログラムへのリモート参照中のネットワークアドレスとコードベースの更新を行い、この更新されたリモート参照とローカルコードベースを含むスタブオブジェクトをディレクトリサービスプログラムへ登録し直すことで、計算機１０２のＩＰアドレスの変更後も、このサーバプログラムへのクライアントからのアクセスが可能になる。
【００６３】
なお、上記実施形態では、スタブファイルを例にとり説明したが、この場合に限らず、例えば、サーバからクライアントへのサービス提供の際、クライアントがサーバに対し渡す引数に、例えばその解釈のために所定のクラスファイルが必要なときに、そのクラスファイルの所在を記述したデータを当該引数と伴に渡すことになるが、クライアントプログラムの稼働する計算機の移動に伴いＩＰアドレスが変更した場合、当該クラスファイルが同じ計算機内に存在するときには、前述同様にして、このクラスファイルの所在を記述したデータも変更して、サーバプログラムへ送り直せばよい。
【００６４】
また、サーバがクライアントから受け取った引数に対し行った処理結果に、例えばその解釈のために所定のクラスファイルが必要なときも、そのクラスファイルの所在を記述したデータを当該処理結果と伴に渡すことになるが、サーバプログラムの稼働する計算機の移動に伴いＩＰアドレスが変更した場合、当該クラスファイルが同じ計算機内に存在するときには、前述同様にして、このクラスファイルの所在を記述したデータも変更して、クライアントプログラムへ送り直せばよい。
【００６５】
なお、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、上記実施形態には種々の段階の発明は含まれており、開示される複数の構成用件における適宜な組み合わせにより、種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題（の少なくとも１つ）が解決でき、発明の効果の欄で述べられている効果（のなくとも１つ）が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【００６６】
【発明の効果】
以上説明したように、本発明によれば、プラットフォーム独立の機械語で実行されるオブジェクト指向言語で記述されたプログラムを実行する実行環境を少なくとも１つ有する端末のネットワークアドレスが、例えば上記プログラム実行中に不意に変更されても、そのネットワークアドレスの変更を上記実行環境上に反映して、後に、再び他の端末との通信を可能にする。
【図面の簡単な説明】
【図１】本実施形態に係る分散情報処理システムの構成例を示す図。
【図２】従来のサーバプログラムが稼働する仮想マシンの構成を示した図。
【図３】サーバプログラムの処理動作を説明するためのフローチャート。
【図４】クライアントプログラムの処理動作を説明するためのフローチャート。
【図５】サーバプログラムのリモート参照更新処理動作を説明するためのフローチャート。
【図６】本実施形態に係るサーバプログラムが稼働する仮想マシンおよびそれを有する計算機の構成を示した図。
【図７】本実施形態に係るサーバプログラムが稼働する仮想マシンおよびそれを有する計算機の他の構成を示した図。
【図８】ネットワークアドレス変更の検知方法を説明するための図。
【図９】ＪａｖａのＲＭＩを用いた通信の概略を説明するための図。
【図１０】本実施形態に係る分散情報処理システムの他の構成例を示す図で、サーバプログラムが実行される計算機上にＨＴＴＰサーバを有する場合を示している。
【図１１】本実施形態に係るサーバプログラムが稼働する仮想マシンおよびそれを有する計算機のさらに他の構成を示した図。
【符号の説明】
Ｓ、Ｃ、Ｄ…Ｊａｖａ仮想マシン
２…サーバオブジェクト
３…登録管理部
４…リモート参照管理部
４ａ…リモート参照格納部
４ｂ…リモート参照更新部
５…ネットワークアドレス獲得部
６、７…ネットワークアドレスモニタ
１０１、１０２、１０３…計算機
１０４…ＨＴＴＰサーバ
【図１】
0003688571.tif 000002
【図２】
0003688571.tif 000003
【図３】
0003688571.tif 000004
【図４】
0003688571.tif 000005
【図５】
0003688571.tif 000006
【図６】
0003688571.tif 000007
【図７】
0003688571.tif 000008
【図８】
0003688571.tif 000009
【図９】
0003688571.tif 000010
【図１０】
0003688571.tif 000011
【図１１】
0003688571.tif 000012