(57)【特許請求の範囲】
【請求項１】
第１の計算機と第２の計算機とを含む複数の計算機が通信可能に接続されたオブジェクト計算機システムであって、
前記第１の計算機は、
複数のアプリケーション定義クラスを定義しオブジェクト指向言語によって作成されたアプリケーション・プログラムを変換した複数のアプリケーション定義クラス用バイトコードを保持し、
前記アプリケーション・プログラムとしての処理を担当する複数の実体オブジェクトを生成するための前記複数のアプリケーション定義クラス用バイトコードに基づいて前記複数の実体オブジェクトを生成するための前記複数のアプリケーション定義クラスの内容を前記第１の計算機のメモリに配置する第１のアプリケーション定義クラス用クラスローダを具備し、
前記複数のアプリケーション定義クラスを代理する複数のプロキシクラスの複数のプロキシクラス用バイトコードを保持し、
前記複数の実体オブジェクトの代理となる複数の代理オブジェクトを生成するための前記複数のプロキシクラス用バイトコードに基づいて前記複数の代理オブジェクトを生成するための前記複数のプロキシクラスの内容を前記第１の計算機のメモリに配置する第１のプロキシクラス用クラスローダと、
前記複数のアプリケーション定義クラスを前記複数の計算機のどの計算機に配置するか設定されている第１のクラス配置情報と、
前記第１のクラス配置情報を参照し、前記複数のアプリケーション定義クラスのうち前記第１の計算機に配置する第１の実体オブジェクトを生成するための第１のアプリケーション定義クラスの内容を前記第１の計算機のメモリに配置し、前記複数のプロキシクラスのうち前記第２の計算機に配置する第２の実体オブジェクトに処理を依頼する第１の代理オブジェクトを生成するための第１のプロキシクラスの内容を前記第１の計算機のメモリに配置する第１のメインクラスローダと、
前記第２の計算機との間でメソッドコール及び戻り値の受け渡しを行い、前記第１のクラス配置情報を前記第２の計算機に通知する第１の命令処理部と
を具備し、
前記第１の計算機は、前記第１のメインクラスローダによって前記第１の計算機のメモリに配置された前記第１のアプリケーション定義クラスの内容と前記第１のプロキシクラスの内容とに基づいて、前記第１の実体オブジェクトと前記第１の代理オブジェクトとを生成し、
前記第２の計算機は、
前記第１の計算機との間でメソッドコール及び戻り値の受け渡しを行い、前記第１の命令処理部から前記第１のクラス配置情報の通知を受ける第２の命令処理部と、
前記第１の命令処理部から通知された前記第１のクラス配置情報に基づいて、前記複数のアプリケーション定義クラス用バイトコードのうち前記第２の計算機に配置する前記第２の実体オブジェクトを生成するための第２のアプリケーション定義クラス用バイトコードを、前記第１の命令処理部及び前記第２の命令処理部を介して受信し、前記第２のアプリケーション定義クラス用バイトコードに基づいて前記第２の実体オブジェクトを生成するための第２のアプリケーション定義クラスの内容を前記第２の計算機のメモリに配置する第２のアプリケーション定義クラス用クラスローダと、
前記第１の命令処理部から通知された前記第１のクラス配置情報に基づいて、前記複数のプロキシクラス用バイトコードのうち前記第１の計算機に配置する前記第１の実体オブジェクトに処理を依頼する第２の代理オブジェクトを生成するための第２のプロキシクラス用バイトコードを、前記第１の命令処理部及び前記第２の命令処理部を介して受信し、前記第２のプロキシクラス用バイトコードに基づいて前記第２の代理オブジェクトを生成するための第２のプロキシクラスの内容を前記第２の計算機のメモリに配置する第２のプロキシクラス用クラスローダと
を具備し、
前記第２の計算機は、前記第２の計算機のメモリに配置された前記第２のアプリケーション定義クラスの内容と前記第２のプロキシクラスの内容とに基づいて、前記第２の実体オブジェクトと前記第２の代理オブジェクトとを生成し、
前記第１の計算機において前記第２の実体オブジェクトに関する第１のメソッドコールが発生すると、前記第１の代理オブジェクトによって前記第１のメソッドコールが受け付けられ、前記第１の代理オブジェクトは、前記第２の命令処理部に対して前記第１のメソッドコールを依頼し、前記第２の命令処理部は、依頼された前記第１のメソッドコールを前記第２の実体オブジェクトに発し、前記第２の実体オブジェクトは、前記第１のメソッドコールに基づき実体処理を実行し、第１の返り値を前記第１の命令処理部経由で前記第１の代理オブジェクトに提供し、前記第１の代理オブジェクトは前記第１の返り値を当該メソッドコール元に返し、
前記第２の計算機において前記第１の実体オブジェクトに関する第２のメソッドコールが発生すると、前記第２の代理オブジェクトによって前記第２のメソッドコールが受け付けられ、前記第２の代理オブジェクトは、前記第１の命令処理部に対して前記第２のメソッドコールを依頼し、前記第１の命令処理部は、依頼された前記第２のメソッドコールを前記第１の実体オブジェクトに発し、前記第１の実体オブジェクトは、前記第２のメソッドコールに基づき実体処理を実行し、第２の返り値を前記第２の命令処理部経由で前記第２の代理オブジェクトに提供し、前記第２の代理オブジェクトは前記第２の返り値を当該メソッドコール元に返し、
前記第１の計算機には、前記第１のクラス配置情報を前記第１の計算機に保持させるとともに、前記第１のアプリケーション定義クラス用クラスローダ、前記第１のプロキシクラス用クラスローダ、前記第１のメインクラスローダ、前記第１の命令処理部としての機能を前記第１の計算機に実現させるためのアプリケーション展開プログラムが搭載されており、
前記第２の計算機には、前記第２の命令処理部、前記第２のアプリケーション定義クラス用クラスローダ、前記第２のプロキシクラス用クラスローダとしての機能を前記第２の計算機に実現させるためのリモート処理プログラムが搭載されている
ことを特徴とするオブジェクト計算機システム。
【請求項２】
請求項１記載のオブジェクト計算機システムにおいて、
前記リモート処理プログラムは、前記第２の計算機に、第２のメインクラスローダをさらに実現させ、
前記第２のメインクラスローダは、
前記第２の命令処理部に通知された前記第１のクラス配置情報に基づいて、前記第１の命令処理部と前記第２の命令処理部とを介して、前記第２の計算機上に配置すべき旨の指定がされている前記第２のアプリケーション定義クラスの前記第２のアプリケーション定義クラス用バイトコードを受信して前記第２のアプリケーション定義クラス用クラスローダに提供し、前記第２の計算機上に配置すべきでない旨の指定がされている前記第１のアプリケーション定義クラスの代理となる前記第２のプロキシクラスの前記第２のプロキシクラス用バイトコードを受信して前記第２のプロキシクラス用クラスローダに提供する
ことを特徴とするオブジェクト計算機システム。
【請求項３】
請求項１記載のオブジェクト計算機システムにおいて、
前記第１のアプリケーション定義クラス用クラスローダは、前記第１のアプリケーション定義クラス用クラスローダによって前記第１の計算機のメモリに配置されたクラスの名称とクラスとを関係付けたアプリケーション定義クラス用テーブルを前記第１の計算機に登録し、
前記第１のプロキシクラス用クラスローダは、前記第１のプロキシクラス用クラスローダによって前記第１の計算機のメモリに配置されたクラスの名称とクラスとを関係付けた第１のプロキシクラス用クラステーブルを前記第１の計算機に登録し、
前記第１のメインクラスローダは、前記第１のクラス配置情報に基づいて、前記第１の計算機上に配置すべき旨の指定がされているクラスに関しては前記第１のアプリケーション定義クラス用クラスローダによって前記第１の計算機のメモリに配置されたクラスを利用し、前記第１の計算機上に配置すべきでない旨の指定がなされているクラスに関しては前記第１のプロキシクラス用クラスローダによって前記第１の計算機のメモリに配置されたクラスを利用する旨を指定する第１のクラステーブルを前記第１の計算機に登録し、
前記リモート処理プログラムは、前記第２の計算機に、第２のメインクラスローダをさらに実現させ、
前記第２の命令処理部は、前記第１の命令処理部から通知された前記第１のクラス配置情報に基づいて前記第２の計算機用の第２のクラス配置情報を生成し、
前記第２のメインクラスローダは、
前記第２のクラス配置情報に基づいて、前記第１の命令処理部と前記第２の命令処理部とを介して、前記第２の計算機上に配置すべき旨の指定がされている前記第２のアプリケーション定義クラスの前記第２のアプリケーション定義クラス用バイトコードを受信して前記第２のアプリケーション定義クラス用クラスローダに提供し、前記第２の計算機上に配置すべきでない旨の指定がされている前記第１のアプリケーション定義クラスの代理となる前記第２のプロキシクラスの前記第２のプロキシクラス用バイトコードを受信して前記第２のプロキシクラス用クラスローダに提供し、
前記第２のクラス配置情報において、前記第２の計算機上に配置すべき旨の指定がされているクラスに関しては前記第２のアプリケーション定義クラス用クラスローダによって前記第２の計算機のメモリに配置されたクラスを利用し、前記第２の計算機上に配置すべきでない旨の指定がなされているクラスに関しては前記第２のプロキシクラス用クラスローダによって前記第２の計算機のメモリに配置されたクラスを利用する旨を指定する第２のクラステーブルを前記第２の計算機に登録し、
前記第２のアプリケーション定義クラス用クラスローダは、前記第２のアプリケーション定義クラス用クラスローダによって前記第２の計算機のメモリに配置されたクラスの名称とクラスとを関係付けた第２のアプリケーション定義クラス用テーブルを前記第２の計算機に登録し、
前記第２のプロキシクラス用クラスローダは、前記第２のプロキシクラス用クラスローダによって前記第２の計算機のメモリに配置されたクラスの名称とクラスとを関係付けた第２のプロキシクラス用テーブルを前記第２の計算機に登録する
ことを特徴とするオブジェクト計算機システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向言語を用いて作成されたプログラムの分散化を実現するオブジェクト計算機システムに関する。
【０００２】
【従来の技術】
計算機システムを構成する複数のマシン上で動作する複数のアプリケーション・プログラム（以下、「アプリケーション」という）が相互に通信を行う場合、この各アプリケーションを分散化アプリケーションという。
【０００３】
相互に通信を行いつつ動作する複数の分散化アプリケーションをまとめて分散化アプリケーション群とすると、この分散化アプリケーション群を作成する場合には、分散化アプリケーション群全体として必要になる機能を列挙する作業が必要である。
【０００４】
また、この機能をいくつかのグループに分け、各グループ毎に分散化アプリケーションを定義する作業が必要である。
【０００５】
さらに、各分散化アプリケーションが他の分散化アプリケーションと相互に通信を行うための通信用インターフェイスを設計・実装する作業が必要である。
【０００６】
【発明が解決しようとする課題】
上記のように、従来において分散化アプリケーション群を開発する場合には、分散化アプリケーションを複数作成する必要がある。また、各分散化アプリケーションの開発において、メインの処理（実体的処理）のみではなく、他の分散化アプリケーションと相互に通信するための通信用インタフェース（補助的処理）の設計や実装を行う必要がある。
【０００７】
したがって、通常のアプリケーション開発に比べて開発時の負荷が高くなる傾向がある。
【０００８】
また、従来において既存のアプリケーションを分散化する場合にも上記と同様に作業の負荷が高くなるという問題がある。すなわち、既存のアプリケーションを分散化する場合にも、既存のアプリケーションの機能分割と機能のグループ化とを行って分散化アプリケーション群を定義する必要がある。また、既存のアプリケーションを複数のアプリケーションに分離し、適宜修正する必要がある。さらに、この分離した既存のアプリケーションのそれぞれに対して通信用インターフェイスを設計・実装する必要がある。
【０００９】
さらに、一旦、機能別に分散化した分散化アプリケーション群は、予め特別な実装をしていない限り、ある分散化アプリケーションの機能の一部を分離して別途単独の分散化アプリケーションにする場合、他の関連する分散化アプリケーションも修正する必要がある。同様に、ある分散化アプリケーションの機能の一部を分離して他のアプリケーションに追加する場合にも、他の関連する分散化アプリケーションに対しても修正を行う必要がある。さらに、ある分散化アプリケーションを他の分散化アプリケーションに融合する場合も同様である。
【００１０】
これらの作業は、分散化アプリケーション群の開発負荷を高くする原因となる。
【００１１】
本発明は、以上のような実情に鑑みてなされたもので、オブジェクト指向言語を使用して分散化アプリケーション間のインターフェイスを簡略化させることにより、分散化アプリケーションの開発負荷を軽減するオブジェクト計算機システムに関する。
【００１２】
【課題を解決するための手段】
本発明の骨子は、アプリケーション・プログラムを定義するクラスを指定された計算機上に配置し、指定されなかった計算機上に代理となるプロキシクラスを配置する点にある。
【００１３】
以下、本発明を実現するにあたって講じた具体的手段について説明する。
【００１４】
第１の発明は、第１の計算機と第２の計算機とを含む複数の計算機が通信可能に接続されたオブジェクト計算機システムに関する。
【００１５】
この第１の発明のオブジェクト計算機システムにおいて、第１の計算機は、複数のアプリケーション定義クラスを定義しオブジェクト指向言語によって作成されたアプリケーション・プログラムを変換した複数のアプリケーション定義クラス用バイトコードを保持し、アプリケーション・プログラムとしての処理を担当する複数の実体オブジェクトを生成するための複数のアプリケーション定義クラス用バイトコードに基づいて複数の実体オブジェクトを生成するための複数のアプリケーション定義クラスの内容を第１の計算機のメモリに配置する第１のアプリケーション定義クラス用クラスローダを具備し、複数のアプリケーション定義クラスを代理する複数のプロキシクラスの複数のプロキシクラス用バイトコードを保持し、複数の実体オブジェクトの代理となる複数の代理オブジェクトを生成するための複数のプロキシクラス用バイトコードに基づいて複数の代理オブジェクトを生成するための複数のプロキシクラスの内容を第１の計算機のメモリに配置する第１のプロキシクラス用クラスローダと、複数のアプリケーション定義クラスを複数の計算機のどの計算機に配置するか設定されている第１のクラス配置情報と、第１のクラス配置情報を参照し、複数のアプリケーション定義クラスのうち第１の計算機に配置する第１の実体オブジェクトを生成するための第１のアプリケーション定義クラスの内容を第１の計算機のメモリに配置し、複数のプロキシクラスのうち第２の計算機に配置する第２の実体オブジェクトに処理を依頼する第１の代理オブジェクトを生成するための第１のプロキシクラスの内容を第１の計算機のメモリに配置する第１のメインクラスローダと、第２の計算機との間でメソッドコール及び戻り値の受け渡しを行い、第１のクラス配置情報を第２の計算機に通知する第１の命令処理部とを具備する。
第１の計算機は、第１のメインクラスローダによって第１の計算機のメモリに配置された第１のアプリケーション定義クラスの内容と第１のプロキシクラスの内容とに基づいて、第１の実体オブジェクトと第１の代理オブジェクトとを生成する。
第２の計算機は、第１の計算機との間でメソッドコール及び戻り値の受け渡しを行い、第１の命令処理部から第１のクラス配置情報の通知を受ける第２の命令処理部と、第１の命令処理部から通知された第１のクラス配置情報に基づいて、複数のアプリケーション定義クラス用バイトコードのうち第２の計算機に配置する第２の実体オブジェクトを生成するための第２のアプリケーション定義クラス用バイトコードを、第１の命令処理部及び第２の命令処理部を介して受信し、第２のアプリケーション定義クラス用バイトコードに基づいて第２の実体オブジェクトを生成するための第２のアプリケーション定義クラスの内容を第２の計算機のメモリに配置する第２のアプリケーション定義クラス用クラスローダと、複数の第１の命令処理部から通知された第１のクラス配置情報に基づいて、プロキシクラス用バイトコードのうち第１の計算機に配置する第１の実体オブジェクトに処理を依頼する第２の代理オブジェクトを生成するための第２のプロキシクラス用バイトコードを、第１の命令処理部及び第２の命令処理部を介して受信し、第２のプロキシクラス用バイトコードに基づいて第２の代理オブジェクトを生成するための第２のプロキシクラスの内容を第２の計算機のメモリに配置する第２のプロキシクラス用クラスローダとを具備する。
第２の計算機は、第２の計算機のメモリに配置された第２のアプリケーション定義クラス用バイトコードと第２のプロキシクラス用バイトコードとに基づいて、第２の実体オブジェクトと第２の代理オブジェクトとを生成する。
第１の計算機において第２の実体オブジェクトに関する第１のメソッドコールが発生すると、第１の代理オブジェクトによって第１のメソッドコールが受け付けられ、第１の代理オブジェクトは、第２の命令処理部に対して第１のメソッドコールを依頼し、第２の命令処理部は、依頼された第１のメソッドコールを第２の実体オブジェクトに発し、第２の実体オブジェクトは、第１のメソッドコールに基づき実体処理を実行し、第１の返り値を第１の命令処理部経由で第１の代理オブジェクトに提供し、第１の代理オブジェクトは第１の返り値を当該メソッドコール元に返す。
第２の計算機において第１の実体オブジェクトに関する第２のメソッドコールが発生すると、第２の代理オブジェクトによって第２のメソッドコールが受け付けられ、第２の代理オブジェクトは、第１の命令処理部に対して第２のメソッドコールを依頼し、第１の命令処理部は、依頼された第２のメソッドコールを第１の実体オブジェクトに発し、第１の実体オブジェクトは、第２のメソッドコールに基づき実体処理を実行し、第２の返り値を第２の命令処理部経由で第２の代理オブジェクトに提供し、第２の代理オブジェクトは第２の返り値を当該メソッドコール元に返す。
第１の計算機には、第１のクラス配置情報を第１の計算機に保持させるとともに、第１のアプリケーション定義クラス用クラスローダ、第１のプロキシクラス用クラスローダ、第１のメインクラスローダ、第１の命令処理部としての機能を第１の計算機に実現させるためのアプリケーション展開プログラムが搭載されている。
第２の計算機には、第２の命令処理部、第２のアプリケーション定義クラス用クラスローダ、第２のプロキシクラス用クラスローダとしての機能を第２の計算機に実現させるためのリモート処理プログラムが搭載されている。
【００１６】
この第１の発明においては、指定された計算機上に実際の処理を実行するためのクラスに関するオブジェクトが配置される。一方、指定されていない計算機上にはこの実際の処理を実行するクラスの代理となるプロキシクラスに関するオブジェクトが作成される。このプロキシクラスに関するオブジェクトは、実際の処理を担当するオブジェクトへの処理を代理して受け取り、実行を依頼する。
【００１７】
これにより、自動的にアプリケーションを分散化させることができ、処理負荷の軽減が図られる。
また、アプリケーションの分散化に必要となる労力が削減される。
【００１９】
第１の発明においてアプリケーション展開プログラムはモジュール化してよい。または、リモート処理プログラムはデーモンとして動作させてもよい。
【００２０】
第２の発明は、上記第１の発明において、リモート処理プログラムは、第２の計算機に、第２のメインクラスローダをさらに実現させる。
第２のメインクラスローダは、第２の命令処理部に通知された第１のクラス配置情報に基づいて、第１の命令処理部と第２の命令処理部とを介して、第２の計算機上に配置すべき旨の指定がされている第２のアプリケーション定義クラスの第２のアプリケーション定義クラス用バイトコードを受信して第２のアプリケーション定義クラス用クラスローダに提供し、第２の計算機上に配置すべきでない旨の指定がされている第１のアプリケーション定義クラスの代理となる第２のプロキシクラスの第２のプロキシクラス用バイトコードを受信して第２のプロキシクラス用クラスローダに提供する。
【００２１】
第３の発明は、上記第１の発明において、第１のアプリケーション定義クラス用クラスローダは、第１のアプリケーション定義クラス用クラスローダによって第１の計算機のメモリに配置されたクラスの名称とクラスとを関係付けたアプリケーション定義クラス用テーブルを前記第１の計算機に登録する。
第１のプロキシクラス用クラスローダは、第１のプロキシクラス用クラスローダによって第１の計算機のメモリに配置されたクラスの名称とクラスとを関係付けた第１のプロキシクラス用クラステーブルを第１の計算機に登録する。
第１のメインクラスローダは、第１のクラス配置情報に基づいて、第１の計算機上に配置すべき旨の指定がされているクラスに関しては第１のアプリケーション定義クラス用クラスローダによって第１の計算機のメモリに配置されたクラスを利用し、第１の計算機上に配置すべきでない旨の指定がなされているクラスに関しては第１のプロキシクラス用クラスローダによって第１の計算機のメモリに配置されたクラスを利用する旨を指定する第１のクラステーブルを前記第１の計算機に登録する。
リモート処理プログラムは、第２の計算機に、第２のメインクラスローダをさらに実現させる。
第２の命令処理部は、第１の命令処理部から通知された第１のクラス配置情報に基づいて第２の計算機用の第２のクラス配置情報を生成する。
第２のメインクラスローダは、第２のクラス配置情報に基づいて、第１の命令処理部と第２の命令処理部とを介して、第２の計算機上に配置すべき旨の指定がされている第２のアプリケーション定義クラスの第２のアプリケーション定義クラス用バイトコードを受信して第２のアプリケーション定義クラス用クラスローダに提供し、第２の計算機上に配置すべきでない旨の指定がされている第１のアプリケーション定義クラスの代理となる第２のプロキシクラスの第２のプロキシクラス用バイトコードを受信して第２のプロキシクラス用クラスローダに提供し、第２のクラス配置情報において、第２の計算機上に配置すべき旨の指定がされているクラスに関しては第２のアプリケーション定義クラス用クラスローダによって第２の計算機のメモリに配置されたクラスを利用し、第２の計算機上に配置すべきでない旨の指定がなされているクラスに関しては第２のプロキシクラス用クラスローダによって第２の計算機のメモリに配置されたクラスを利用する旨を指定する第２のクラステーブルを第２の計算機に登録する。
第２のアプリケーション定義クラス用クラスローダは、第２のアプリケーション定義クラス用クラスローダによって第２の計算機のメモリに配置されたクラスの名称とクラスとを関係付けた第２のアプリケーション定義クラス用テーブルを第２の計算機に登録する。
第２のプロキシクラス用クラスローダは、第２のプロキシクラス用クラスローダによって第２の計算機のメモリに配置されたクラスの名称とクラスとを関係付けた第２のプロキシクラス用テーブルを第２の計算機に登録する。
この第３の発明においては、アプリケーション展開プログラムにおいて第１の計算機のメモリに配置された各種クラスがテーブルで管理されている。
また、リモート処理プログラムにおいて第２の計算機のメモリに配置された各種クラスがテーブルで管理されている。
【００３２】
上記第１の発明で説明したオブジェクト計算機システムの機能をコンピュータにより実現するためのプログラムを記憶したコンピュータ読み取り可能な記憶媒体を用いることによって、上述した機能を有していない計算機、コンピュータ、計算機システムに対しても、簡単に上述した機能を付加することができる。
【００３４】
なお、上記第２及び第３の発明で説明したオブジェクト計算機システムも、同様にコンピュータにより実現するためのプログラムとし、このプログラムを記憶したコンピュータ読み取り可能な記憶媒体としてもよい。
【００３５】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施の形態について説明する。
【００３６】
（第１の実施の形態）
本実施の形態に係るオブジェクト計算機システムは、非分散型のアプリケーションとしての実体処理を担当する実体オブジェクトと、実体処理を実行する各オブジェクトの代理となる代理オブジェクトを必要に応じて配置する。
【００３７】
図１は、本実施の形態に係るオブジェクト計算機システムの構成例を示すブロック図である。
【００３８】
このオブジェクト計算機システム１は、サーバマシン２、３が通信可能に接続されて構成されている。
【００３９】
サーバマシン２には、非分散型として開発された既存のアプリケーション・プリグラム（以下、「アプリケーション」という）４とが搭載されている。
【００４０】
このアプリケーション４は、オブジェクト指向言語により作成されており、クラスＡ、Ｂが定義されている。ここでは、アプリケーション４はＪａｖａ言語により作成され、Ｊａｖａバイトコードに変換されているとしている。すなわち、アプリケーション４を定義するクラス（以下、「アプリケーション定義クラス」という）Ａ、Ｂ用のバイトコード（以下、「アプリケーション定義クラス用バイトコード」という）４ａ、４ｂが保持されている。
【００４１】
また、アプリケーション４を搭載するサーバマシン２上にはアプリケーション展開モジュール５が搭載されており、その他のサーバマシン３にはリモート処理デーモン６が搭載されている。
【００４２】
アプリケーション展開モジュール５は、アプリケーション４を読み込んでリモート処理デーモン５と連係動作しつつ、予め設定された状況を満たすようにアプリケーション４に係る処理内容をサーバマシン２、３に振り分け、実行する。
【００４３】
このアプリケーション展開モジュール５は、主に、アプリケーション定義クラス用クラスローダ７、プロキシバイトコード作成部８、プロキシクラス用クラスローダ９、クラス配置テーブル１０、メインクラスローダ１１、命令処理部１２を備える。
【００４４】
アプリケーション定義クラス用クラスローダ７は、アプリケーション定義クラス用バイトコード４ａ、４ｂをロードし、これによりサーバマシン２上にそれぞれクラスＡ、Ｂに関するアプリケーション定義クラス１３ａ、１３ｂが得られる。
【００４５】
なお、ロードとは、バイトコードからクラスを認識し、オブジェクトを生成可能な状態にすること、すなわちクラスの内容がサーバマシンのメモリ上に配置されることをいう。
【００４６】
プロキシクラスバイトコード作成部８は、アプリケーション定義クラス用バイトコードに４ａ、４ｂ基づいて、それぞれクラスＡ、Ｂに関するプロキシクラスを定義するバイトコード（以下、「プロキシクラス用バイトコード」という）１４ａ、１４ｂを生成する。
【００４７】
なお、プロキシクラスとは、アプリケーション定義クラスのいずれかに対応付けされており、自己のメソッドコールが実行されると自己に対応付けされているアプリケーション定義クラスを有するサーバマシン上の命令処理部に対し、自己の対応付けされているアプリケーション定義クラスに対するメソッドコールを要求する旨の定義がされているクラスである。また、メソッドコールを要求してアプリケーション定義クラスによる処理が実行された後に、その結果として返り値あるいは終了通知を受け付けて、メソッドコール元に返す旨の定義がされているクラスである。
【００４８】
すなわち、プロキシクラスは、自己の対応付けされているアプリケーション定義クラスのメソッドコールを代理して受け付けて、アプリケーション定義クラスによる実体処理を実行させる処理、これにより得られる返り値あるいは終了通知を代理してメソッドコール元に返す処理を含む。また、このプロキシクラスは、自己が最初に実行された際に、自己が対応付けられているアプリケーション定義クラスを配置すべきサーバマシン上の命令処理部に、このアプリケーション定義クラスのロードを依頼する初期化処理を含む。
【００４９】
上記のように、プロキシクラスバイトコード作成部８では、上記のような各アプリケーション定義クラス１３ａ、１３ｂを代理するそれぞれクラスＡ、Ｂに関するプロキシクラス用バイトコード１４ａ、１４ｂが作成される。
【００５０】
プロキシクラス用クラスローダ９は、プロキシクラスバイトコード作成部８で作成された各プロキシクラス用バイトコード１４ａ、１４ｂをロードし、これによりサーバマシン２上にそれぞれクラスＡ、Ｂに関するプロキシクラス１５ａ、１５ｂが得られる。
【００５１】
クラス配置テーブル１０は、どのクラスをどのサーバマシン上に配置するかを予め設定するためのテーブルであり、クラス名とサーバマシン名とが関係付けされている。このクラス配置テーブル１０では、クラスＡをサーバマシン２上に配置し、クラスＢをサーバマシン３上に配置する旨が設定されている。
【００５２】
メインクラスローダ１１は、クラス配置テーブル１０を参照し、自サーバマシン２上に配置すべきクラスＡに関してはこのクラスＡに関するアプリケーション定義クラス１３ａをロードし、他サーバマシン３上に配置すべきクラスＢに関してはこのクラスＢに関するプロキシクラス１５ｂをロードする。
【００５３】
サーバマシン２上でオブジェクトを生成する際には、このメインクラスローダ１１でロードされたクラスにしたがってオブジェクトが生成される。
【００５４】
すなわち、このサーバマシン２上でクラスＡに関するオブジェクトを生成する場合には、このクラスＡに関するアプリケーション定義クラス１３ａに基づいて実体処理を担当する実体オブジェクト１６ａが生成される。一方、サーバマシン３上でクラスＢに関するオブジェクトを生成する場合には、このクラスＢに関するプロキシクラス１５ｂに基づいて代理処理を行う代理オブジェクト１６ｂが生成される。この代理オブジェクト１６ｂは、他のサーバマシン３上に配置されている実体オブジェクト２２ｂへのメソッドコール（処理依頼）を代理して受け付け、この実体オブジェクト２２ｂに処理を依頼し、この結果である返り値あるいは処理終了通知を受け付けて、代理してメソッドコール元に返す。
【００５５】
命令処理部１２は、他のサーバマシン３のリモート処理デーモン６の命令処理部１７との間で、メソッドコール、返り値、各種情報、クラスの内容等の受け渡しを行う。
【００５６】
一方、サーバマシン３上のリモート処理デーモン６は、主に、命令処理部１７、アプリケーション定義クラス用クラスローダ１８、プロキシクラス用クラスローダ１９を備える。
【００５７】
命令処理部１７は、サーバマシン２上のアプリケーション展開モジュール５の命令処理部１２からクラス管理テーブル１０の内容を受け付け、クラス管理テーブル２０を生成する。この命令処理部１７は、サーバマシン２上のリモート処理デーモン６の命令処理部１７との間で、メソッドコール、返り値、各種情報、クラスの内容等の受け渡しを行う。
【００５８】
アプリケーション定義クラス用クラスローダ１８は、クラス配置テーブル２０において自サーバマシン３に配置すべきと設定されているクラスＢに関するアプリケーション定義クラス用バイトコード１３ｂを、アプリケーション展開モジュール５からリモート処理デーモン６の命令処理部１７を介して受信し、ロードする。これにより、サーバマシン３上にアプリケーション定義クラス２１ｂが得られる。
【００５９】
プロキシクラス用クラスローダ１９は、クラス配置テーブル２０において他のサーバマシン２に配置すべきと設定されているクラスＡに関するプロキシクラス用バイトコード１５ａを、アプリケーション展開モジュール５からリモート処理デーモン６の命令処理部１７を介して受信し、ロードする。これにより、サーバマシン３上にプロキシクラス２１ａが得られる。
【００６０】
サーバマシン３上でオブジェクトを生成する際には、このアプリケーション定義クラス用クラスローダ１８でロードされたアプリケーション定義クラス２１ｂ、あるいはプロキシクラス用クラスローダ１９でロードされたプロキシクラス２１ａにしたがってオブジェクトが生成される。
【００６１】
すなわち、このサーバマシン３上でクラスＡに関するオブジェクトを生成する場合には、このクラスＡに関するプロキシクラス２１ａに基づいて代理処理を行う代理オブジェクト２２ａが生成される。この代理オブジェクト２２ａは、他のサーバマシン２上に配置されている実体オブジェクト１６ａへのメソッドコールを代理して受け付け、この実体オブジェクト１６ａに処理を依頼し、この結果である返り値あるいは処理終了通知を代理して受け付けて、代理してメソッドコール元に返す。一方、サーバマシン３上でクラスＢに関するオブジェクトを生成する場合には、このクラスＢに関するアプリケーション定義クラス２１ｂに基づいて実体処理を行う実体オブジェクト２２ｂが生成される。
【００６２】
上記のような構成を持つ本実施の形態に係るオブジェクト計算機システム１の動作について以下に説明する。
【００６３】
このシステム１を利用する際には、どのクラスに関する処理をどのサーバマシン上で実行させるかの設定がサーバマシン２上でなされ、サーバマシン３上のリモート処理デーモン６が起動される。ここでは、アプリケーション展開モジュール５のクラス配置テーブル１０に、クラスＡに関する処理はサーバマシン２で実行し、クラスＢに関する処理はサーバマシン３で実行する旨が設定され、サーバマシン３上のリモート処理デーモン６が起動されたとする。
【００６４】
ここで、サーバマシン２上のアプリケーション４が実行される場合には、アプリケーション４のクラスＡ、Ｂに関するバイトコード４ａ、４ｂがアプリケーション分散モジュール５に読み込まれる。
【００６５】
すると、読み込まれたバイトコード４ａ、４ｂがアプリケーション定義クラス用クラスローダ７にロードされ、これにより各クラスＡ、Ｂに関するアプリケーション定義クラス１３ａ、１３ｂがロードされる。
【００６６】
また、読み込まれたバイトコード４ａ、４ｂに基づいて、プロキシクラスバイトコード作成部８により各クラスＡ、Ｂに関するプロキシクラス用バイトコード１４ａ、１４ｂが作成される。
【００６７】
そして、この作成された各クラスＡ、Ｂに関するプロキシクラス用バイトコード１４ａ、１４ｂがプロキシクラス用クラスローダ９にロードされ、これにより各クラスＡ、Ｂに関するプロキシクラス１５ａ、１５ｂがロードされる。
【００６８】
続いて、クラス配置テーブル１０においてクラスＡに関してはこのサーバマシン２上で処理を行う旨が設定されているため、メインクラスローダ１１ではアプリケーション４のロード結果として、クラスＡに関してアプリケーション定義クラス１３ａがロードされる。
【００６９】
一方、クラス配置テーブル１０においてクラスＢに関しては他のサーバマシン３上で処理を行う旨が設定されているため、メインクラスローダ１１ではアプリケーション４のロード結果として、クラスＢに関してプロキシクラス１５ｂがロードされる。
【００７０】
したがって、このサーバマシン２上でクラスＡに関するオブジェクトを作成する場合には、アプリケーション定義クラス１３ａが利用されて実体オブジェクト１６ａが生成される。一方、クラスＢに関するオブジェクトを生成する場合には、プロキシクラス１５ｂが利用されて代理オブジェクト１６ｂが生成される。
【００７１】
サーバマシン２上で代理オブジェクト１６ａが生成され、この代理オブジェクト１６ａの初期化処理が実行されると、この代理オブジェクト１６ａに対応する実体オブジェクトの生成が命令処理部１２を介して命令処理部１７に要求される。
【００７２】
すると、クラス配置テーブル１０の内容が命令処理部１２を介して命令処理部１７に通知され、クラス配置テーブル２０が生成される。
【００７３】
アプリケーション定義クラス用クラスローダ１８では、サーバマシン３上に配置すべきクラスＢに関するアプリケーション定義クラス用バイトコード１３ｂが命令処理部１２、１７を介してロードされる。
【００７４】
これに対し、サーバマシン３上に配置すべきでないクラスＡに関するプロキシクラス用バイトコード１５ａが命令処理部１２、１７を介してロードされる。
【００７５】
したがって、このサーバマシン３上でクラスＡに関するオブジェクトを作成する場合にはプロキシクラス２１ａが利用される。これにより、サーバマシン２上の実体オブジェクト１６ａの代理となる代理オブジェクト２２ａが生成される。一方、クラスＢに関するオブジェクトを生成する場合には、アプリケーション定義クラス２１ｂが利用されて実体オブジェクト２２ｂが生成される。
【００７６】
上記のような本実施の形態に係るオブジェクト計算機システム１におけるメソッドコールの遷移について説明する。
【００７７】
図２は、本実施の形態に係るオブジェクト計算機システム１で生成されたオブジェクトのメソッドコールの遷移を示すブロック図である。
【００７８】
図２（ａ）は、メソッドコールの発生したサーバマシン上に実体オブジェクトが存在する場合の状態を示している。
【００７９】
サーバマシン２上で実体オブジェクト１６ａのメソッドコールがなされると（ｓ１）、
このメソッドコールに介する実体処理が実体オブジェクト１６ａで実行され、その結果として返り値がメソッドコール元に返される（ｓ２）。
【００８０】
図２（ｂ）は、メソッドコールの発生したサーバマシン上に実体オブジェクトがなく、代理オブジェクトが存在する場合の状態を示している。
【００８１】
サーバマシン２上でオブジェクト２２ｂに関するメソッドコールが発生すると、オブジェクト２２ｂに対応付けされている代理オブジェクト１６ｂによってメソッドコールが受け付けられる（ｔ１）。
【００８２】
代理オブジェクト１６ｂは、自己の対応付けられている実体オブジェクト２２ｂを配置するサーバマシン３上の命令処理部１７に対して実体オブジェクト２２ｂのメソッドコールを依頼する（ｔ２）。
【００８３】
命令処理部１７は、代理オブジェクト１６ｂからメソッドコールの依頼を受け付けると、この代理オブジェクト１６ｂに対応付けられている実体オブジェクト２２ｂに対してメソッドコールを発する（ｔ３）。
【００８４】
実体オブジェクト２２ｂは、メソッドコールに基づき実体処理を実行し、返り値を自己の対応付けされている代理オブジェクト１６ｂを配置するサーバマシン２上の命令処理部１２に提供する（ｔ４）。
【００８５】
命令処理部１２は、実体オブジェクト２２ｂから返り値を受け付けると、この実体オブジェクト２２ｂに対応付けられている代理オブジェクト１６ｂに対して返り値を提供する（ｔ５）。
【００８６】
代理オブジェクト１６ｂは、受け付けた返り値を代理としてメソッドコール元に返す（ｔ６）。
【００８７】
図３は、本実施の形態に係るオブジェクト計算機システム１を３台のサーバマシンで構成した場合のブロック図である。
【００８８】
このオブジェクト計算機システム１のハードウェア構成は、サーバマシン２、３、２３が通信媒体やネットワーク接続装置２４を介して互いに通信可能に接続されている。
【００８９】
また、このオブジェクト計算機システム１のソフトウェア構成は、サーバマシン２上のアプリケーション４及びアプリケーション展開モジュール５、サーバマシン３上のリモート処理デーモン６、サーバマシン２３上のリモート処理デーモン２５とから構成されている。
【００９０】
先でも述べたように、サーバマシン２上のアプリケーション展開モジュール５は、アプリケーション４を内部に取り込んで実行する。
【００９１】
サーバマシン３、２３上で動作する各リモート処理デーモン６、２５は、アプリケーション展開モジュール５や他のリモート処理デーモンと通信をしつつ、実体処理を行う実体オブジェクトを分散させ、アプリケーション４の分散処理依頼を受信・実行する。
【００９２】
この図３に示すオブジェクト計算機システム１においては、まずリモート処理デーモン６、２５が起動される。次に、アプリケーション４がアプリケーション展開モジュール５に取り込まれて実行される。
【００９３】
すると、予め設定されたクラス配置テーブル（分散処理情報）にしたがって、アプリケーション展開モジュール５から各リモート処理デーモン６、２５に対して分散処理が依頼される。
【００９４】
これにより、各リモート処理デーモン６、２５において依頼された分散処理が実行される。
【００９５】
以上説明したように、本実施の形態に係るオブジェクト計算機システム１においては、予めクラス毎に配置先のサーバマシンが設定されている。
【００９６】
そして、各クラスに関するオブジェクトを生成する場合、配置先とされているサーバマシン上ではそのクラスに関するアプリケーション定義クラスがロードされ、配置先でないサーバマシン上ではそのクラスに関するプロキシクラスがロードされる。
【００９７】
アプリケーション定義クラスを利用して生成される実体オブジェクトは実体処理を実行するが、プロキシクラスを利用してい生成される代理オブジェクトは他のサーバマシン上に配置されている実体オブジェクトに対し実体処理を依頼する。
【００９８】
すなわち、クラスの配置先として指定されているサーバマシン上には、このクラスに関する実体オブジェクトが配置されるが、クラスの配置先として指定されていないサーバマシン上には、この実体オブジェクトに代わって処理依頼を受け付けて実体オブジェクトに処理を依頼する代理オブジェクトが配置される
したがって、既存の非分散化アプリケーションであっても、自動的にオブジェクトを分散させることができ、自動的に非分散化アプリケーションを分散化アプリケーション群として利用することができる。
【００９９】
ゆえに、非分散化アプリケーションから分散化アプリケーション群を開発する労力を極めて低減させることができる。
【０１００】
また、非分散化アプリケーションから分散化アプリケーション群への変更を行っても非分散化アプリケーションとして単独に実行できる形式を保つことができる。
【０１０１】
ゆえに、動作の不具合が発生した場合であっても、その原因がアプリケーションの作成によるものなのか、この計算機システムとの組合せによるものなのかの原因切り分けが容易になる。
【０１０２】
また、どのサーバマシン上でどのクラスに係るオブジェクトを配置するかを変更する場合であっても、先に登録しておく設定を変更するのみで自由に変更させることができる。
【０１０３】
ゆえに、アプリケーション実行時点でもマシンの性能、負荷に即した分散が可能となる。
【０１０４】
また、新規にオブジェクト指向言語を利用して分散化アプリケーション群を開発する場合であっても、通信インターフェイスの設計やアプリケーションの分離等を考慮する必要がないため、非分散化アプリケーションと同等な開発量で分散化アプリケーション群を開発することができる。
【０１０５】
なお、本実施の形態においては、サーバマシンが２台又は３台の場合について説明しているが、これに限定されるものではなく、４台以上であっても同様の作用により同様の効果を得ることができる。
【０１０６】
また、本実施の形態においては、アプリケーションが２つのクラスで定義されている場合を説明しているが、１つ又は３つ以上で定義されている場合でも同様の作用により同様の効果を得ることができる。
【０１０７】
（第２の実施の形態）
本実施の形態においては、各種ローダのローディング結果をテーブルで管理するオブジェクト計算機システムについて説明する。
【０１０８】
図４は、本実施の形態に係るオブジェクト計算機システムの詳細構成を示すブロック図であり、図１と同一の部分については同一の符号を付してその説明を省略し、ここでは異なる部分についてのみ詳しく説明する。
【０１０９】
サーバマシン２上のアプリケーション２６は、例えばＪａｖａ言語等のオブジェクト指向言語で各種クラスＡ〜Ｃが定義されており、各クラスＡ〜Ｃの内容がアプリケーション定義クラス用バイトコード２７ａ〜２７ｃに変換されている。
【０１１０】
なお、アプリケーション定義クラス用バイトコード２７ａ〜２７ｃをまとめてアプリケーション定義クラス用バイトコード群２７とする。すなわち、このアプリケーション定義クラス用バイトコード群２７は、各クラスＡ〜Ｃ自体を定義するデータ群である。
【０１１１】
サーバマシン２上にはさらにアプリケーション展開モジュール２８が搭載されている。以下に、このアプリケーション展開モジュール２８の構成について述べる。
【０１１２】
メインクラスローダ２９は、クラス名によりクラスのロードを受け付け、分散条件に適したクラス定義を返す。
【０１１３】
クラス配置テーブル３０は、各クラスＡ〜Ｃの実体をロードさせるプロセスを定義した分散配置情報を持つ。このクラス配置テーブル３０は、どのサーバにどのクラスに関するオブジェクトを配置するかを保持する設定ファイル３０ａから作成される。
【０１１４】
メインクラステーブル３１は、クラス名とクラス定義との関係を持つ。このメインクラステーブル３１は、このサーバマシン２上においてあるクラスに関するオブジェクトを作成する場合に、具体的にどのクラスを利用してオブジェクトを生成するかを示している。
【０１１５】
アプリケーション定義クラス用クラスローダ３２は、アプリケーション定義クラス３３ａ〜３３ｃをロードする。
【０１１６】
アプリケーション定義クラス群３３は、アプリケーション定義クラス３３ａ〜３３ｃの集合である。
【０１１７】
アプリケーション定義クラス用クラステーブル３４は、クラス名とアプリケーション定義クラスとの関係を持つ。
【０１１８】
プロキシクラスバイトコード生成部３５は、アプリケーション定義クラス３３ａ〜３３ｃに対応したプロキシクラスのバイトコード（プロキシクラス用バイトコード）を生成する。
【０１１９】
プロキシクラス用クラスローダ３６は、プロキシクラス３７ａ〜３７ｃをロードする。
【０１２０】
プロキシクラス群３７は、プロキシクラス定義の集合である。
【０１２１】
プロキシクラス用クラステーブル３８は、クラス名とプロキシクラスとの関係を持つ。
【０１２２】
命令処理部３９は、ここではクラスロード命令（プロキシクラス型オブジェクから発生。なお、プロキシクラス型オブジェクトとは先で述べた代理オブジェクトと同様である）をサーバ３上のリモート処理デーモン４０に通知する。また、命令処理部３９は、リモート処理デーモン４０のメインクラスローダ４１からの要求に応じて、アプリケーション定義クラス用バイトコードやプロキシクラス用バイトコードを送信する。
【０１２３】
サーバマシン３上にはリモート処理デーモン４０が搭載されている。以下に、このリモート処理デーモン４０の構成について述べる。
【０１２４】
メインクラスローダ４１は、クラス名によりクラスのロードを受け付け、分散条件に適したクラス定義を返す。
【０１２５】
クラス配置テーブル４２は、各クラスの実体をロードさせるプロセスを定義した分散配置情報を持つ。
【０１２６】
メインクラステーブル４３は、クラス名とクラス定義との関係を持つ。このメインクラステーブル４３も、先のメインクラステーブル３１と同様に、このサーバマシン３上においてあるクラスに関するオブジェクトを作成する場合に、具体的にどのクラスを利用してオブジェクトを生成するかを示している。
【０１２７】
アプリケーション定義クラス用クラスローダ４４は、自サーバマシン３に配置すべきクラスＣに関するアプリケーション定義クラス４５ｃをロードする。
【０１２８】
アプリケーション定義クラス群４５は、アプリケーション定義クラスの集合である。
【０１２９】
アプリケーション定義クラス用クラステーブル４６は、クラス名とアプリケーション定義クラスとの関係を持つ。
【０１３０】
プロキシクラス用クラスローダ４７は、自サーバマシン３に配置すべきでないクラスＡ、Ｂに関するプロキシクラス４８ａ、４８ｂをロードする。
【０１３１】
プロキシクラス群４８は、プロキシクラスの集合である。
【０１３２】
プロキシクラス用クラステーブル４９は、クラス名とプロキシクラスとの関係を持つ。
【０１３３】
命令処理部５０は、ここではアプリケーション展開モジュール２８からのクラスロード命令をメインクラスローダ４１に通知し、またメインクラスローダ４１からの要求に応じて、アプリケーション展開モジュール２８のアプリケーション定義クラス用バイトコードやプロキシクラス用バイトコードの送信をアプリケーション展開モジュール２８に依頼する。
【０１３４】
上記図４のような構成を持つ本実施の形態に係る示すオブジェクト計算機システムの動作について以下に説明する。
【０１３５】
このオブジェクト計算機システムにおいては、まず、リモート処理デーモン４０が起動される。次に、アプリケーション２６がアプリケーション展開モジュール２８に取り込まれ、このアプリケーション展開モジュール２８の動作が開始される。
【０１３６】
すると、まずメインクラスローダ２９に対して、アプリケーション定義クラスのうち起動時に必要とされているクラスのロード依頼がクラス名により指定される。ここでは、クラスＡ〜Ｃのロード依頼が指定されたとする。
【０１３７】
これにより、アプリケーション定義クラス用バイトコード群２７の中から、要求されたクラスＡ〜Ｃに関するバイトコード２７ａ〜２７ｃがメインクラスローダ２９によって読み込まれ、アプリケーション定義クラス用クラスローダ３２に提供される。
【０１３８】
アプリケーション定義クラス用クラスローダ３２にアプリケーション定義クラス用バイトコード群２７の一部あるいは全部（要求されたバイトコード）が受け付けられると、このアプリケーション定義クラス用クラスローダ３２によって各クラスＡ〜Ｃのロードがなされ、アプリケーション定義クラス群３３が生成される。なお、クラスとは、オブジェクトを生成する際のひな型となるものである。
【０１３９】
また、この生成されたアプリケーション定義クラス群３３の各アプリケーション定義クラス３３ａ〜３３ｂと各クラスＡ〜Ｃの名称とが対応付けされ、アプリケーション定義クラス用クラスローダ３２によってアプリケーション定義クラス用テーブル３４に登録される。
【０１４０】
その後、アプリケーション定義クラス用クラスローダ３２からアプリケーション定義クラス用バイトコード群２７の一部あるいは全部が、プロキシクラスバイトコード作成部３５に提供される。
【０１４１】
プロキシクラスバイトコード作成部３５では、受け付けたアプリケーション定義クラス用バイトコード２７ａ〜２７ｃのインターフェイス情報が参照され、同一のインターフェイスを持ち実体処理をコールするプロキシクラスバイトコードが生成される。
【０１４２】
この生成されたプロキシクラスバイトコードは、プロキシクラスバイトコード作成部３５からプロキシクラス用クラスローダ３６に提供される。
【０１４３】
プロキシクラスバイトコードを受け付けたプロキシクラス用クラスローダ３６では、各クラスＡ〜Ｃに関するプロキシクラス３７ａ〜３７ｂがロードされ、プロキシクラス群３７が生成される。
【０１４４】
なお、このプロキシクラスに基づいて生成されたプロキシクラス型オブジェクトは、依頼された命令を対応するアプリケーション定義クラス型オブジェクト（先で述べた実体オブジェクトと同様）に仲介する。ここで、プロキシクラス型オブジェクトとこれに対応するアプリケーション定義クラス型オブジェクトとは別のプロセスである。
【０１４５】
また、この生成されたプロキシクラス群３７の各プロキシクラス３７ａ〜３７ｃと各クラスＡ〜Ｃの名称とが対応付けされ、プロキシクラス用クラスローダ３６によってプロキシクラス用テーブル３８に登録される。
【０１４６】
以上のような過程によるアプリケーション展開モジュール２８におけるクラスのロードが終了すると、メインクラスローダ２９によって設定ファイル３０ａが読み込まれてクラス配置テーブル３０が生成される。
【０１４７】
そして、このクラス配置テーブル３０の分散配置情報に基づきメインクラスローダ２９によってメインクラステーブル３１が以下の規則にしたがって作成される。
【０１４８】
第１に、クラス配置テーブル３０においてサーバマシン２と指定されているクラス名に関するアプリケーション定義クラスがクラス定義としてメインクラステーブル３１に登録される。ここでは、クラス配置テーブル３０においてサーバマシン２と指定されているクラスＡ、Ｂに関してそれぞれのアプリケーション定義クラス３３ａ、３３ｂがメインクラステーブル３１に登録される。
【０１４９】
第２に、クラス配置テーブル３０において他のサーバマシン３と指定されているクラス名に関するプロキシクラスがクラス定義としてメインクラステーブル３１に登録される。ここでは、クラス配置テーブル３０においてサーバマシン２と指定されているクラスＣに関するプロキシクラス３７ｃがメインクラステーブル３１に登録される。
【０１５０】
本実施の形態においては、アプリケーション２６に対するクラスロードの結果として、このメインクラステーブル３１に登録されている内容のクラスがロードされる。すなわち、本サーバマシン２に配置するクラスＡ、Ｂに関するロードを行う場合にはアプリケーション定義クラス３３ａ、３３ｂがロードされる。一方、本サーバマシン２に配置しないクラスＣに関するロードを行う場合にはプロキシクラス３７ｃがロードされる。
【０１５１】
この結果、クラスＡに対応するクラスにより定義されるオブジェクトはアプリケーション定義型オブジェクトとなり、クラスＣに対応するクラスにより定義されるオブジェクトはプロキシクラス型オブジェクトとなる。
【０１５２】
上記の同様のクラスロード過程は、アプリケーション２６から未だロードされていないクラスのロードが依頼される度に、適時実行される。
【０１５３】
一方、本実施の形態においては、サーバマシン３にアプリケーション２６の処理の分散を依頼する形式を採用しているため、上記のクラスロード過程に加えて分散過程も必要である。
【０１５４】
この分散過程としては、まずアプリケーションの起動過程において、サーバマシン３に分散配置されるクラス（ここではクラスＣ）のオブジェクト生成要求があると、上記のクラスロード過程によりサーバマシン２上にロードされたクラスＣに関するプロキシクラス３７ｃ型のオブジェクトが生成される。
【０１５５】
次に、この生成されたプロキシクラス３７ｃ型のオブジェクトの初期化処理により、分散先であるサーバマシン３上のリモート処理デーモン４０に対する通信接続が実行される。
【０１５６】
通信接続確立後、アプリケーション展開モジュール２８の命令処理部３９からリモート処理デーモン４０の命令処理部５０にクラス配置テーブル３０の内容が通知される。
【０１５７】
リモート処理デーモン４０の命令処理部５０では、通知されたクラス配置テーブル３０を元にして自サーバマシン３用のクラス配置テーブル４２が生成される。
【０１５８】
次に、サーバマシン２上で生成されたプロキシクラス３７ｃ型のオブジェクトの初期処理では、このプロキシクラス３７ｃに対応するアプリケーション定義クラス３３ｃのクラスロード依頼がリモート処理デーモン４０の命令処理部５０に対してなされる。
【０１５９】
すると、このクラスロード依頼に係るアプリケーション定義クラス３３ｃが、アプリケーション展開モジュール２８の命令処理部３９からリモート処理デーモン４０の命令処理部５０を中継しリモート処理デーモン４０のメインクラスローダ４１に提供される。
【０１６０】
また、メインクラスローダ４１から命令処理部４０を介して命令処理部３６に対し、サーバマシン３でクラスロードすべきアプリケーション定義クラス用バイトコード２７ｃの提供が依頼される。
【０１６１】
これにより、命令処理部３６によってアプリケーション定義クラス用バイトコード２７ｃが読み込まれ、命令処理部４０に対して送信される。
【０１６２】
この命令処理部４０に受信されたアプリケーション定義クラス用バイトコード２７ｃは、メインクラスローダ４１に提供される。
【０１６３】
そして、アプリケーション定義クラス用バイトコード２７ｃは、メインクラスローダ４１からアプリケーション定義クラス用クラスローダ４４に提供される。
【０１６４】
アプリケーション定義クラス用クラスローダ４４では、受け付けたアプリケーション定義クラス用バイトコード２７ｃからアプリケーション定義クラス４５ｃが生成され、アプリケーション定義クラス用テーブル４６に登録される。なお、このサーバマシン３側で生成されたアプリケーション定義クラス４５ｃは、サーバマシン２側で生成されたアプリケーション定義クラス３３ｃのコピーにあたる。
【０１６５】
上記と同様の手法により、必要に応じて、プロキシクラス４８ａ（サーバマシン２側のプロキシクラス３７ａにあたる）、プロキシクラス４８ｂ（サーバマシン２側のプロキシクラス３７ｂにあたる）がプロキシクラス用クラスローダ４７によってロードされ、プロキシクラステーブル４９に登録される。
【０１６６】
また、このリモート処理デーモン４０のメインクラスローダ４１においては、上記の処理によりサーバマシン３でロードされた具体的なクラス定義４８ａ、４８ｂ、４５ｃとクラスの名称とが対応付けされてメインクラステーブル４３が生成される。このメインクラステーブル４３はアプリケーション展開モジュール２８のメインクラスローダ２９で生成されたメインクラステーブル３１と逆の状況となる。
【０１６７】
すなわち、リモート処理デーモン４０側のメインクラステーブル４３は、以下の規則にしたがって生成される。
【０１６８】
第１に、クラス配置テーブル４２においてサーバマシン２と指定されているクラス名に関するプロキシクラスがクラス定義としてメインクラステーブル４３に登録される。ここでは、クラス配置テーブル４２においてサーバマシン２と指定されているクラスＡ、Ｂに関してそれぞれのプロキシクラス４６ａ、４８ｂがメインクラステーブル４３に登録される。
【０１６９】
第２に、クラス配置テーブル４２においてサーバマシン３と指定されているクラス名に関するアプリケーション定義クラスがクラス定義としてメインクラステーブル４３に登録される。ここでは、クラス配置テーブル４２においてサーバマシン３と指定されているクラスＣに関するアプリケーション定義クラス４５ｃがメインクラステーブル４３に登録される。
【０１７０】
すなわち、このメインクラステーブル４３では、クラス配置テーブル４２にしたがってサーバマシン３上に配置されるクラスＣに関してはサーバマシン３でロードされたアプリケーション定義クラス４５ｃが対応付けされる。一方、サーバマシン２上に配置されるクラスＡ、Ｂに関してはサーバマシン３でロードされたプロキシクラス４８ａ、４８ｂが対応付けされる。
【０１７１】
以上により、プロキシクラス３７ｃ型のオブジェクトの初期化処理が終了されるが、以後も必要に応じて上記のバイトコード送信、クラスロード、テーブルへの登録が行われる。
【０１７２】
図５は、本実施の形態に係るオブジェクト計算機システムで生成されるオブジェクトの状態を示すブロック図である。
【０１７３】
このオブジェクト計算機システムにおいて、クラスＡに関するオブジェクトを生成する場合には、サーバマシン２上のアプリケーション定義クラス３３ａに基づいて生成される。ここでは、このアプリケーション定義クラス３３ａ型のオブジェクト５１、５２がサーバマシン２上に生成されている。
【０１７４】
すると、サーバマシン３においてこの実体オブジェクト５１、５２に対応するプロキシクラス４８ａ型のオブジェクト５１ｐ、５２ｐが生成される。
【０１７５】
同様に、クラスＢに関するオブジェクトを生成する場合には、サーバマシン２上のアプリケーション定義クラス３３ｂに基づいて生成される。ここでは、このアプリケーション定義クラス３３ｂ型のオブジェクト５３〜５５がサーバマシン２上に生成されている。
【０１７６】
すると、サーバマシン３においてこの実体オブジェクト５３〜５５に対応するプロキシクラス４８ｂ型のオブジェクト５３ｐ〜５５ｐが生成される。
【０１７７】
一方、このオブジェクト計算機システムにおいて、クラスＣに関するオブジェクトを生成する場合には、サーバマシン３上のアプリケーション定義クラス４５ｃに基づいて生成される。ここでは、このアプリケーション定義クラス４５ｃ型のオブジェクト５６がサーバマシン３上に生成されている。
【０１７８】
すると、サーバマシン2においてこの実体オブジェクト５６に対応するプロキシクラス５６ｐが生成される。
【０１７９】
以上のオブジェクトにおいて、各実体オブジェクト５１〜５６と各代理オブジェクト５１ｐ〜５６ｐとは互いに対応関係にある。
【０１８０】
サーバマシンが増設されると、実体オブジェクト５１〜５６に対応する代理オブジェクト５１ｐ〜５６ｐ等がこのサーバマシン上に生成されるが、アプリケーション定義クラスＡ型オブジェクトが生成されることはない。これは、１つのオブジェクト生成命令に対して生成される実体オブジェクト（アプリケーション定義クラス型オブジェクト）はただ１つとするためである。
【０１８１】
以上説明したように、本実施の形態に係るオブジェクト計算機システムにおいては、予め指定されたサーバマシンに所定のクラスに基づく実体オブジェクトが配置され、他のサーバマシンにはこの実体オブジェクトに処理を依頼する代理オブジェクトが配置される。また、各クラスの配置はテーブルで管理される。
【０１８２】
ゆえに、非分散型のアプリケーションを自動的に分散させて分散アプリケーション群として実行させることができ、開発労力を省力化させることができる。
【０１８３】
なお、上記各実施の形態に係るオブジェクト計算機システムは、同様の作用・機能を実現可能であれば各構成要素の配置を変更させてもよく、また各構成要素を自由に組み合わせてもよい。
また、上記各実施の形態に係るオブジェクト計算機システムの各機能、各要素は、コンピュータに実行させることのできるプログラムとして、例えば磁気ディスク（フロッピーディスク、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ等）、半導体メモリなどの記録媒体に書き込んで適用したり、通信媒体により伝送して計算機あるいは計算機システムに適用することも可能である。上記各機能を実現するコンピュータは、記録媒体に記録されたプログラムを読み込み、プログラムによって動作が制御されることにより、上述した処理を実行する。
【０１８４】
【発明の効果】
以上詳記したように本発明においては、アプリケーション・プログラムを定義するクラスに関するオブジェクトを生成する場合、予め配置先に指定されている計算機上ではアプリケーション・プログラムを定義するクラスがロードされ、配置先に指定されていない計算機上ではそのクラスに関するプロキシクラスがロードされる。
【０１８５】
アプリケーションを定義するクラスを利用して生成されるオブジェクトは実体処理を実行するが、プロキシクラスを利用して生成されるオブジェクトは他の計算機上に配置されており実体処理を行うオブジェクトに対し処理を依頼する。
【０１８６】
これにより、アプリケーション・プログラムを自動的に分散させることができる。
【０１８７】
ゆえに、アプリケーション・プログラムを修正して分散化アプリケーションを開発する労力を極めて低減させることができる。
【０１８８】
また、アプリケーション・プログラムを分散化アプリケーションに変更しても非分散化の状態であったアプリケーション・プログラムとして単独に実行できる形式を保つことができる。
【０１８９】
ゆえに、動作の不具合が発生した場合であっても、その原因がアプリケーション・プログラムの作成によるものなのか、この計算機システムとの組合せによるものなのかの原因切り分けが容易になる。
【０１９０】
また、どの計算機上でどのクラスに係るオブジェクトを配置するかを変更する場合であっても、先に登録しておく設定を変更するのみで自由に変更させることができる。
【０１９１】
ゆえに、アプリケーション・プログラム起動時点でも計算機の性能、負荷に即した分散が可能となる。
【０１９２】
また、新規にオブジェクト指向言語を利用して分散化アプリケーション・プログラムを開発する場合であっても、通信インターフェイスの設計やアプリケーション・プログラムの分離等を考慮する必要がないため、非分散化アプリケーションと同等な開発量で分散化アプリケーションを開発することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係るオブジェクト計算機システムの構成例を示すブロック図。
【図２】同実施の形態に係るオブジェクト計算機システムで生成されたオブジェクトのメソッドコールの遷移を示すブロック図。
【図３】同実施の形態に係るオブジェクト計算機システムを３台のサーバマシンで構成した場合のブロック図。
【図４】本発明の第２の実施の形態に係るオブジェクト計算機システムの詳細構成を示すブロック図。
【図５】同実施の形態に係るオブジェクト計算機システムで生成されるオブジェクトの状態を示すブロック図。
【符号の説明】
１…オブジェクト計算機システム
２、３、２３…サーバマシン
４、２６…アプリケーション
２７…アプリケーション定義クラス用バイトコード群
４ａ、４ｂ、２７ａ〜２７ｃ…アプリケーション定義クラス用バイトコード
５、２８…アプリケーション展開モジュール
６、４０…リモート処理デーモン
７、１８、３２、４４…アプリケーション定義クラス用クラスローダ
８、３５…プロキシクラスバイトコード作成部
９、１９、３６、４７…プロキシクラス用クラスローダ
１０、２０、３０、４２…クラス配置テーブル
１１、２９、４１…メインクラスローダ
１２、１７、３９、４０…命令処理部
３３、４５…アプリケーション定義クラス群
１３ａ、１３ｂ、２１ｂ、３３ａ〜３３ｃ、４５…アプリケーション定義クラス
３７、４８…プロキシクラス群
１４ａ、１４ｂ…プロキシクラス用バイトコード
１５ａ、１５ｂ、２１ａ、３７ａ〜３７ｃ、４８ａ、４８ｂ…プロキシクラス
１６ａ、２２ｂ、５１〜５６…実体オブジェクト
１６ｂ、２２ａ、５１ｐ〜５６ｐ…代理オブジェクト
【図１】
0004149624.tif 000002
【図２】
0004149624.tif 000003
【図３】
0004149624.tif 000004
【図４】
0004149624.tif 000005
【図５】
0004149624.tif 000006