(57)【要約】【課題】呼出元コンポーネントの実行プログラムが含むコンポーネントの呼出の際に、呼出インタフェースや呼出規約にも依存するため、同一の実行環境でローカル呼出規約を使って連携している呼出元コンポーネントと呼出先コンポーネントを修正せずに異なる実行環境へ配備しリモート呼出規約を使って連携できない。【解決手段】コンポーネントの配備記述子と型情報を参照して、呼出元コンポーネントが使う呼出規約と呼出先コンポーネントが使う呼出規約が同じか判定し、異なる場合は、呼出規約変換処理を行うプロキシのクラスとオブジェクトを生成する。【選択図】  図１
2004151800.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションのプログラムとアプリケーションの実行に必要な情報を含むコンポーネントを実行環境へ配備して動作させる計算機システムにおける第一の実行環境へ配備された第一のコンポーネントから第二の実行環境へ配備された第二のコンポーネントへの呼出の制御方法であって、
コンポーネントの呼出または呼出受付は、呼出手順がプログラミング言語のオブジェクト呼出であり、呼出インタフェースが一定のローカル規約インタフェースを継承するローカル呼出規約、または呼出手順が分散オブジェクト呼出であり、呼出インタフェースが一定のリモート規約インタフェースを継承するリモート呼出規約のいずれかの呼出規約と呼出インタフェースに従い、
第一のコンポーネントは、第二のコンポーネントを参照する論理名と第二のコンポーネントへの呼出が従う第一の呼出規約の種別と第二のコンポーネントへの呼出が従う第一の呼出インタフェースの名前を含む第一の配備記述子と、第一の呼出インタフェースのメソッド情報を含む第一の型情報を保持し、
第二のコンポーネントは、ローカル呼出規約に従って呼出受付する第二の呼出インタフェースの名前とリモート呼出規約に従って呼出受付する第三の呼出インタフェースの名前を含む第二の配備記述子と、第二の呼出インタフェースのメソッド情報を含む第二の型情報と、第三の呼出インタフェースのメソッド情報を含む第三の型情報を保持し、
第一の呼出規約がローカル呼出規約である場合は、第一の呼出インタフェースと第二の呼出インタフェースは同じでかつ第一の型情報と第二の型情報は同じであり、第一の呼出規約がリモート呼出規約である場合は第一の呼出インタフェースと第三の呼出インタフェースは同じでかつ第一の型情報と第三の型情報は同じであり、
第二のコンポーネントは、第二の実行環境に配備される際に、第二のコンポーネントの呼出インタフェースごとにネットワーク内で一意な物理名を付与され、第二の実行環境は第二のコンポーネントの呼出インタフェースごとに第二のコンポーネントを参照するオブジェクト識別子を生成して前記物理名に対応つけて物理名管理部へ登録し、
第一のコンポーネントは、第一の実行環境に配備される際に、第二のコンポーネントを参照するように前記論理名に対して前記物理名の一つを対応つけられ、
前記論理名を入力として第一の配備記述子を参照して第一の呼出規約の種別を取得するステップと、
前記論理名に対して対応つけられた前記物理名から前記物理名管理部を参照して登録された前記オブジェクト識別子を取得し、前記オブジェクト識別子に対応する第二のコンポーネントの呼出受付が従う呼出インタフェースの型情報の継承インタフェース名を参照して前記呼出インタフェースが従う第二の呼出規約の種別を取得するステップと、
前記ステップで取得した第一の呼出規約の種別と第二の呼出規約の種別が同じか比較判定し異なる場合は呼出規約を変換するプロキシオブジェクトを生成するステップを含むことを特徴とする呼出規約変換処理の生成方法。
【請求項２】
請求項１記載の呼出規約変換処理の生成方法において、第一の呼出インタフェースの第一の型情報と、前記論理名に対して対応つけられた前記物理名から、前記物理名管理部を参照して登録された前記オブジェクト識別子を取得し、前記オブジェクト識別子に対応する第二のコンポーネントの呼出受付が従う呼出インタフェースの型情報を参照して、第一の実行環境が前記プロキシオブジェクトのクラスを生成するステップを含むことを特徴とする呼出規約変換処理の生成方法。
【請求項３】
請求項１記載の呼出規約変換処理の生成方法において、第二の配備記述子が含む第二の型情報と第三の型情報を参照して、第二の実行環境が前記プロキシオブジェクトのクラスを生成するステップと、第一の実行環境が前記クラスを第二の実行環境から第一の実行環境へ転送するステップを含むことを特徴とする呼出規約変換処理の生成方法。
【請求項４】
請求項１から３のいずれかに記載の呼出規約変換処理の生成方法において、実行環境にＪ２ＥＥ実行環境を適用することを特徴とする呼出規約変換処理の生成方法。
【請求項５】
請求項１から請求項４に記載の呼出の制御方法のいずれかを有することを特徴とする呼出の制御方法の制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、配備記述子を用いて実行環境に配備するアプリケーション間の呼出方法が異なる場合に呼出方法を変換する方法に関する
【０００２】
【従来の技術】
ビジネスの変化に即応するために、エンタープライズシステムには開発期間の短縮、開発コストの低減、規模や機能の拡張容易性への要求が高まっている。これらの要求を実現するため、アプリケーションを部品化して再利用性をもたせたコンポーネントを組合せて連携させることでシステムを構築するコンポーネントモデルが普及しつつある。コンポーネントモデルでは、コンポーネントを修正することなく再利用して異なる複数の実行環境でも利用可能にするため、実行環境に依存する情報をコンポーネントには含めず、管理者がコンポーネントを実行環境へツールを利用して配置するときに設定する。管理者の行う、設定と配置の作業を配備と呼ぶ。
【０００３】
コンポーネントモデルとしてＪａｖａ  ２  Ｐｌａｔｆｏｒｍが知られている（例えば、非特許文献１を参照）。（ＪａｖａおよびＪ２ＥＥは米サンマイクロシステムズ社の登録商標である）非特許文献１では、コンポーネントをアプリケーションコンポーネント（Ａｐｐｌｉｃａｔｉｏｎ  Ｃｏｍｐｏｎｅｎｔ）と呼び、実行環境をコンテナ（Ｃｏｎｔａｉｎｅｒ）と呼び、配備記述子をデプロイメントデスクリプタ（Ｄｅｐｌｏｙｍｅｎｔ  Ｄｅｓｃｒｉｐｔｏｒ）と呼ぶ。
【０００４】
コンポーネントを連携させることは、管理者が呼出元コンポーネントから呼出先コンポーネントへのコンポーネント参照を設定し、呼出元コンポーネントの実行プログラムがコンポーネント呼出を実行することで行う。
【０００５】
コンポーネント参照は、管理者が呼出元コンポーネントの論理名に対して呼出先コンポーネントの物理名を対応付けることで設定する。論理名は、呼出元コンポーネントが他のコンポーネントを実行環境に依存しない形で参照する名前で、呼出元コンポーネントの配備記述子に含まれている。物理名は、呼出先コンポーネントが他コンポーネントに対して公開する実行環境に依存する具体的な名前であり、管理者が呼出先コンポーネントを実行環境へ配備するときに割当てる。
【０００６】
コンポーネントの連携としてＥｎｔｅｒｐｒｉｓｅ  ＪａｖａＢｅａｎｓが知られている（例えば、非特許文献２を参照）。（Ｅｎｔｅｒｐｒｉｓｅ  ＪａｖａＢｅａｎｓは米サンマイクロシステムズ社の登録商標である）。非特許文献２では、コンポーネント呼出における、ローカル呼出規約とリモート呼出規約を規定し、リモート呼出規約を分散オブジェクト呼出と規定している。
【０００７】
【非特許文献１】
「Ｊａｖａ  ２  Ｐｌａｔｆｏｒｍ、  Ｅｎｔｅｒｐｒｉｓｅ  Ｅｄｉｔｉｏｎ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、  ｖ１．３（２００１）」、第１章から第２章（第１ページから第ｌ６ページ）、米サンマイクロシステムズ社発行
【非特許文献２】
「Ｅｎｔｅｒｐｒｉｓｅ  ＪａｖａＢｅａｎｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、  ｖ２．０（２００１）」、第４．２．１節（第４３ページから第４４ページ）と第４．４節（第４９ページ）と第５章（第５１ページから第５４ページ）、米サンマイクロシステムズ社発行
【０００８】
【発明が解決しようとする課題】
従来の技術では、ローカル呼出規約とリモート呼出規約では必ず呼出インタフェースが異なっていた。また、呼出元コンポーネントの実行プログラムが含むコンポーネント呼出の処理は呼出インタフェースに依存し、呼出規約にも依存する。
【０００９】
同一の実行環境でローカル呼出規約を使って連携している呼出元コンポーネントと呼出先コンポーネントを、異なる実行環境へ配備して連携させる場合、使用する呼出規約を変更してリモート呼出規約を使うようにする。呼出元コンポーネントが含む実行プログラムは、ローカル呼出規約を反映しているため呼出規約を変更するのにあわせて修正が必要となる。このように、異なる実行環境へ配備するときにコンポーネントを修正することなく再利用することができなかった。
【００１０】
本発明の目的はこのような場合にも呼出元コンポーネントを修正することなく配備して連携させることができるように呼出規約の変換処理を生成する方法を提供することにある。
【００１１】
【課題を解決するための手段】
本発明では、以下の手順で上記の目的を達成する。
【００１２】
呼出元コンポーネントの配備記述子から論理名に対応する呼出規約と呼出インタフェース名を取得し、呼出元呼出規約と呼出元インタフェース名とする。論理名を指定して取得した呼出先コンポーネントの参照オブジェクトの型情報から継承インタフェースを取得し、呼出先インタフェースとする。呼出先インタフェースが継承する規約インタフェースを取得してローカル呼出規約とリモート呼出規約のいずれかを判定して呼出先呼出規約とする。呼出元呼出規約がローカル呼出規約で呼出先呼出規約がリモート呼出規約の場合に呼出規約の変換処理を行う。
【００１３】
呼出規約の変換処理は、プロキシオブジェクトが行う。プロキシオブジェクトは、呼出元インタフェースを継承して実装したプロキシクラスのインスタンスであり、呼出元コンポーネントからはあたかもローカル呼出規約に従うオブジェクトに見える。プロキシオブジェクトは、呼出先コンポーネントの参照オブジェクトをデータとして保持し、呼出元コンポーネントからのローカル呼出規約に従ったメソッド呼出を受取ると、保持している参照オブジェクトへメソッド呼出を転送して呼出先コンポーネントをリモート呼出規約に従って呼出すことで、呼出規約の変換処理を行う。
【００１４】
プロキシオブジェクトの生成に使うクラスをプロキシクラスと呼ぶ。プロキシクラスは、呼出元インタフェースと呼出先インタフェースの情報を元に生成する。
【００１５】
【発明の実施の形態】
本発明の実施形態について図面を用いて説明する。図１から図２は、本実施例の概要を示した図である。
【００１６】
呼出元コンポーネントであるコンポーネント１００は配備ツールである物理名割当部１４０により呼出元の実行環境１７０へ配備される。呼出先コンポーネントであるコンポーネント１２０は配備ツールである物理名割当部１５０により呼出先の実行環境１９０へ配備される。そのとき呼出先の実行環境１９０はコンポーネント１２０を表すオブジェクト識別子をネームサービスである物理名管理部１６０に登録し呼出元の実行環境１７０から参照できるようにする。実行環境１７０に配備されたコンポーネント１００は物理名管理部１６０に登録されたコンポーネント１２０を表すオブジェクト識別子を取得してオブジェクト呼出を行うことにより実行環境１９０に配備されたコンポーネント１２０を呼出す。
【００１７】
以下に各要素を詳細に説明する。
【００１８】
呼出元コンポーネントであるコンポーネント１００は実行プログラム１０１と配備記述子１１０と型情報群１０３を含む。実行プログラム１０１は論理名「Ｃａｒｔ」（１０２）を参照する。配備記述子１１０は、項目として論理名を記述する論理名項目１１１と、前記論理名を使ってコンポーネントを呼出すときの呼出規約を記述する呼出規約項目１１２と、前記論理名を使ってコンポーネントを呼出すときの呼出インタフェースの型名を記述する型名項目１１３を含む。配備記述子１１０は、コンポーネントが参照する論理名ごとにレコードを含み、レコード１１４は論理名「Ｃａｒｔ」、呼出規約「ローカル」、型名「ＬｏｃａｌＣａｒｔ」を格納する。型情報群１０３は、レコード１１４の型名「ＬｏｃａｌＣａｒｔ」に対するインタフェースの型情報であるＬｏｃａｌＣａｒｔ型情報１０４を含む。インタフェース「ＬｏｃａｌＣａｒｔ」はローカル呼出規約に従うのでローカル呼出規約の規約インタフェースである「Ｌｏｃａｌ」を継承する。
【００１９】
呼出先コンポーネントであるコンポーネント１２０は実行プログラム１２１と配備記述子１３０と型情報群１３５を含む。配備記述子１３０は、項目として呼出受付部のローカル呼出規約が使用する呼出インタフェースを記述するローカル呼出型名項目１３１と、呼出受付部のリモート呼出規約を使用する呼出インタフェースを記述するリモート呼出規約項目１３２を含む。配備記述子１３０は、呼出受付部ごとにレコードを含み、レコード１３３はローカル呼出型名「ＬｏｃａｌＣａｒｔ」、リモート呼出型名「ＲｅｍｏｔｅＣａｒｔ」を格納する。型情報群１３５は、レコード１３３のローカル呼出型名「ＬｏｃａｌＣａｒｔ」のインタフェースの型情報であるＬｏｃａｌＣａｒｔ型情報１０４と、リモート呼出型名「ＲｅｍｏｔｅＣａｒｔ」のインタフェースの型情報であるＲｅｍｏｔｅＣａｒｔ型情報１３６を含む。インタフェース「ＲｅｍｏｔｅＣａｒｔ」はリモート呼出規約に従うのでリモート呼出規約の規約インタフェースである「Ｒｅｍｏｔｅ」を継承する。
【００２０】
物理名割当部１４０はコンポーネント１００を読込み、物理名割当情報１４１と一緒に実行環境１７０へ出力する。物理名割当情報１４１は、項目としてコンポーネントが参照する論理名を記述する論理名項目１４２と、論理名に対応つける物理名を記述する物理名項目１４３を含む。物理名割当情報１４１はコンポーネントが参照する論理名ごとにレコードを含み、レコード１４４は論理名「Ｃａｒｔ」、物理名「ＣａｒｔＲ」を格納する。
【００２１】
物理名割当部１５０はコンポーネント１２０を読込み、物理名割当情報１５１と一緒に実行環境１９０へ出力する。物理名割当情報１５１は、項目として呼出受付部のローカル呼出規約に割当てる物理名を記述するローカル呼出物理名項目１５２と、呼出受付部のリモート呼出規約に割当てる物理名を記述するリモート呼出物理名項目１５３を含む。物理名割当情報１５１は、呼出受付部ごとにレコードを含み、レコード１５４はローカル呼出物理名「ＣａｒｔＬ」、リモート呼出物理名「ＣａｒｔＲ」を格納する。
【００２２】
物理名管理部１６０は、項目として物理名を記述する物理名項目１６１と、物理名に対応するコンポーネントの呼出受付部を記述するオブジェクト識別子項目１６２を含む。物理名管理部１６０は、物理名ごとにレコードを含み、レコード１６３は物理名「ＣａｒｔＬ」、オブジェクト識別子「Ｒｅｆ１」（１６５）を格納し、レコード１６４は物理名「ＣａｒｔＲ」、オブジェクト識別子「Ｒｅｆ２」（１６６）を格納する。
【００２３】
実行環境１７０は、コンポーネント１００、物理名割当情報１４１、名前解決手続き１７２、プロキシ化手続き１７３、プロキシクラス管理部１７５、プロキシオブジェクト１８０を含む。
【００２４】
実行プログラム１０１は、論理名を名前解決手続き１７２に渡して呼出先コンポーネントの参照オブジェクトを取得し、参照オブジェクトのメソッドを呼出すことで呼出先コンポーネントを呼出す。図１の例では、論理名「Ｃａｒｔ」（１０２）に対して参照オブジェクトとしてプロキシオブジェクト１８０を取得している。
【００２５】
名前解決手続き１７２は、論理名を入力とし、論理名と、物理名割当情報１４１と物理名管理部１６０を参照して得た論理名に対応するオブジェクト識別子を、プロキシ化手続き１７３に渡して得た参照オブジェクトを出力する。図１の例では、論理名「Ｃａｒｔ」（１０２）を入力とし、物理名割当情報１４１を参照して論理名「Ｃａｒｔ」（１０２）に対応する物理名「ＣａｒｔＲ」を取得し、物理名管理部１６０を参照して物理名「ＣａｒｔＲ」に対応するオブジェクト識別子「Ｒｅｆ２」（１６６）を取得する。次に、論理名「Ｃａｒｔ」（１０２）とオブジェクト識別子「Ｒｅｆ２」（１６６）をプロキシ化手続き１７３へ渡して得た結果を参照オブジェクトとして出力する。
【００２６】
プロキシ化手続き１７３は、論理名とオブジェクト識別子を入力とする。論理名から配備記述子１１０を参照して得た呼出元の呼出規約と、オブジェクト識別子の型情報から得た呼出先の呼出規約が同じであるか比較する。同じである場合はオブジェクト識別子を参照オブジェクトとして出力する。異なる場合は、論理名から配備記述子１１０を参照して得た型名項目１１３の型名とオブジェクト識別子をプロキシクラス管理部１７５へ渡してプロキシクラスを取得し、プロキシクラスのインスタンスであるプロキシオブジェクトを生成してオブジェクト識別子を格納したものを参照オブジェクトとして出力する。
【００２７】
図１の例では、論理名「Ｃａｒｔ」（１０２）とオブジェクト識別子「Ｒｅｆ２」（１６６）を入力とする。論理名「Ｃａｒｔ」（１０２）からは配備記述子１１０を参照して呼出規約「ローカル」を得、呼出元の呼出規約はローカル呼出規約となる。オブジェクト識別子「Ｒｅｆ２」からはＲｅｍｏｔｅＣａｒｔ型情報１３６を得、継承インタフェースの型名２８３が「Ｒｅｍｏｔｅ」であることから呼出先の呼出規約はリモート呼出規約となる。呼出元の呼出規約がローカル呼出規約で、呼出先の呼出規約がリモート呼出規約であるので、論理名「Ｃａｒｔ」（１０２）から配備記述子１１０を参照して得た型名項目１１３の型名「ＬｏｃａｌＣａｒｔ」とオブジェクト識別子「Ｒｅｆ２」（１６６）をプロキシクラス管理部１７５へ渡してプロキシクラス１７４を取得し、プロキシクラス１７４のインスタンスであるプロキシオブジェクト１８０を生成してオブジェクト識別子「Ｒｅｆ２」（１６６）を格納したものを参照オブジェクトとして出力する。
【００２８】
プロキシクラス管理部１７５は、型情報を参照してプロキシクラス１７４を生成、または、実行環境１９０から取得する。プロキシクラス１７４はプロキシオブジェクト１８０のクラスである。プロキシオブジェクト１８０はプロキシクラス１７４を参照するクラス記述子１８１と、データ１８２を含み、データ１８２はオブジェクト識別子「Ｒｅｆ２」（１６６）を含む。
【００２９】
実行環境１９０は、コンポーネント１２０、物理名割当情報１５１、オブジェクト識別子「Ｒｅｆ１」（１６５）、オブジェクト識別子「Ｒｅｆ２」（１６６）、プロキシクラス管理部１９５を含む。実行環境１９０は、コンポーネントが配備されると、物理名割当情報１５１を参照して呼出受付部の呼出規約ごとにオブジェクト識別子１６５、１６６を生成し、物理名とオブジェクト識別子の組を物理名管理部１６０へ登録する。プロキシクラス管理部１７５がプロキシクラス管理部１９５からプロキシクラス１７４を取得する実施の形態では、プロキシクラス管理部１９５は、実行環境１９０にある情報を参照してプロキシクラス１７４を生成し、プロキシクラス管理部１７５がプロキシクラス１７４を取得できるようにする。
【００３０】
図２は、型情報と呼出規約の変換処理を行うプロキシクラスの詳細と、プロキシクラス生成部を示した図である。
【００３１】
プロキシクラス生成部２３０は、呼出元の呼出インタフェースの型情報と呼出先の呼出インタフェースの型情報を含んだ型情報対２２０を入力としてプロキシクラス１７４を生成する。
【００３２】
型情報対２２０は、呼出元型情報２２１と呼出先型情報２２２を含む。呼出元型情報２２１は呼出元の呼出インタフェースの型情報である。呼出先型情報２２２は呼出先の呼出インタフェースの型情報である。図２の例では呼出元型情報２２１はＬｏｃａｌＣａｒｔ型情報１０４を含み、呼出先型情報２２２はＲｅｍｏｔｅＣａｒｔ型情報１３６を含む。
【００３３】
型情報は、型名、継承インタフェース型名、メソッド情報を含む。
【００３４】
ＬｏｃａｌＣａｒｔ型情報１０４は、型名２０１と継承インタフェース型名２０２とメソッド情報を含む。型名２０１は自分自身の型名を記述し、値「ＬｏｃａｌＣａｒｔ」を格納する。継承インタフェース型名２０２は、ＬｏｃａｌＣａｒｔインタフェースが継承するインタフェースを記述し、継承するインタフェースごとにレコードを持ち、レコード２０３にローカル呼出規約に対応する規約インタフェース「Ｌｏｃａｌ」を格納する。メソッド情報は、項目としてインタフェースのメソッド名を記述するメソッド名項目２１１と、メソッドの引数を記述する引数情報項目２１２を含む。メソッド情報は、メソッドごとにレコードを含み、レコード２１３はメソッド名「ａｄｄ」、引数情報「整数型」を格納し、レコード２１４はメソッド名「ｃｌｅａｒ」、引数情報「引数なし」を格納する。
【００３５】
ＲｅｍｏｔｅＣａｒｔ型情報１０４は、型名２８１と継承インタフェース型名２８２とメソッド情報を含む。型名２８１は自分自身の型名を記述し、値「ＲｅｍｏｔｅＣａｒｔ」を格納する。継承インタフェース型名２８２は、ＲｅｍｏｔｅＣａｒｔインタフェースが継承するインタフェースを記述し、継承するインタフェースごとにレコードを持ち、レコード２８３にリモート呼出規約に対応する規約インタフェース「Ｒｅｍｏｔｅ」を格納する。メソッド情報は、項目としてインタフェースのメソッド名を記述するメソッド名項目２９１と、メソッドの引数を記述する引数情報項目２９２を含む。メソッド情報は、メソッドごとにレコードを含み、レコード２９３はメソッド名「ａｄｄ」、引数情報「整数型」を格納し、レコード２９４はメソッド名「ｃｌｅａｒ」、引数情報「引数なし」を格納する。
【００３６】
呼出元型情報２２１が含むメソッド情報と呼出先型情報２２２が含むメソッド情報は、図２に示すように同じメソッド名と引数情報を含む。
【００３７】
プロキシクラス１７４は、ローカル呼出規約の呼出インタフェースを継承してメソッドを実装したクラスである。プロキシクラス１７４は型情報２４０とメソッド実装２７０を含む。型情報２４０は、型名２４１、継承インタフェース型名２４２、メソッド情報、データ情報、を含む。型名２４１は自分自身の型名を記述し、値「ＬｏｃａｌＣａｒｔＰｒｏｘｙ」を格納する。継承インタフェース型名２４２は、プロキシクラスが継承するインタフェースを記述し、継承するインタフェースごとにレコードを持ち、レコード２４３に呼出インタフェース「ＬｏｃａｌＣａｒｔ」を格納する。メソッド情報は、項目としてプロキシクラスのメソッド名を記述するメソッド名項目２５０と、メソッドの引数を記述する引数情報項目２５１を含む。メソッド情報は、メソッドごとにレコードを含み、レコード２５２はメソッド名「ａｄｄ」、引数情報「整数型」を格納し、レコード２５３はメソッド名「ｃｌｅａｒ」、引数情報「引数なし」を格納する。データ情報は、項目としてプロキシクラスが保持するデータの名前を記述するデータ名項目２６０と、データの型を記述するデータ型名項目２６１を含む。データ情報は、１つのレコード２６２を含み、データ名「ｒｅｆ」、データ型名「ＲｅｍｏｔｅＣａｒｔ」を格納する。データ名はプロキシクラスのメソッド実装が参照できる名前であればよく、他の名前でも構わない。
【００３８】
プロキシオブジェクトでは、データには呼出先コンポーネントの参照オブジェクトを格納する。メソッド実装２７０は、インタフェースのメソッドごとの処理手続き、ａｄｄ手続き２７１、ｃｌｅａｒ手続き２７２、を含む。ａｄｄ手続き２７１は、プロキシクラス１７４のインスタンスのａｄｄメソッドが呼出されると実行され、データ名ｒｅｆに格納されている参照オブジェクトのａｄｄメソッドを呼出して呼出を転送する。ｃｌｅａｒ手続き２７１は、プロキシクラス１７４のインスタンスのｃｌｅａｒメソッドが呼出されると実行され、呼出をデータ名ｒｅｆに格納されている参照オブジェクトのｃｌｅａｒメソッドを呼出して呼出を転送する。インタフェースのメソッドごとの処理手続きは、呼出を転送するときに呼出規約の違いを変換する。例えば、呼出規約の種別に応じて決まっているＪａｖａの例外を相互に変換する。
【００３９】
プロキシクラス生成部２３０がプロキシクラス１７４を生成する手順を説明する。呼出元型情報２２１が含むＬｏｃａｌＣａｒｔ型情報１０４の型名２０１「ＬｏｃａｌＣａｒｔ」に「Ｐｒｏｘｙ」を連結した型名「ＬｏｃａｌＣａｒｔＰｒｏｘｙ」をプロキシクラス１７４の型名２４１へ出力する。プロキシクラスの型名の生成方法は、「Ｐｒｏｘｙ」を連結する方法に限らず、呼出元の呼出インタフェース名から一定の規則で一意に識別できる方法であれば何でもよい。呼出元型情報２２１が含むＬｏｃａｌＣａｒｔ型情報１０４の型名２０１「ＬｏｃａｌＣａｒｔ」をプロキシクラス１７４の継承インタフェース型名のレコード２４３へ出力する。呼出先型情報２２２が含むＲｅｍｏｔｅＣａｒｔ型情報１３６の型名２８１「ＲｅｍｏｔｅＣａｒｔ」をプロキシクラス１７４のレコード２６２のデータ型名項目へ出力する。呼出元型情報２２１が含むＬｏｃａｌＣａｒｔ型情報１０４のメソッド情報の内容をプロキシクラス１７４のメソッド情報へ複写して出力する。プロキシクラス１７４のレコード２６２のデータ名項目に「ｒｅｆ」を出力する。データ名はプロキシクラスのメソッド実装が参照できる名前であればよく、他の名前でも構わない。プロキシクラス１７４のメソッド情報のレコードごとに、メソッド名と引数情報を参照してメソッド実装２７０にメソッドごとの手続きを生成して出力する。
【００４０】
図６は装置の構成を示した図である。
【００４１】
計算機６０１は、二次記憶装置６０２、主記憶装置６０３、ＣＰＵ６８０、マウス６８１、ディスプレイ６８２、キーボード６８３、ネットワークインタフェース６８５、及びこれらを相互接続するバス６７０から構成される。そして、計算機６０１はネットワークインタフェース６８５を介してネットワーク６９０に接続される。二次記憶装置６０２には、コンポーネント１００、コンポーネント１２０を記憶している。主記憶装置６０３には、オペレーティングシステム６０４、物理名割当部１４０、物理名割当部１５０、物理名管理部１６０、実行環境１７０、実行環境１９０を記憶している。実行環境１７０、実行環境１９０のいずれかはネットワーク６９０で接続された別の計算機の主記憶が記憶してもよい。
【００４２】
プロキシクラスの生成は、呼出元の実行環境１７０が行う場合と呼出先の実行環境１９０が行う場合がある。図３と図４を用いてそれぞれの場合を説明する。
【００４３】
図３は、呼出元の実行環境１７０がプロキシクラスの生成を行う場合のプロキシクラス管理部の実施の形態を示した図である。
【００４４】
図３の実施の形態ではプロキシクラス管理部１７５が型情報を参照してプロキシクラス１７４を生成する。
【００４５】
プロキシクラス管理部１７５は、型情報対２２０、プロキシクラス生成部２３０、プロキシクラス１７４を含む。
【００４６】
図３の例のオブジェクト識別子１６６は呼出先の呼出インタフェースの型情報であるＲｅｍｏｔｅＣａｒｔ型情報１３６を含む。
【００４７】
プロキシクラス管理部１７５は、呼出元の呼出インタフェースの型名３１０とオブジェクト識別子１６６を入力とする。呼出元コンポーネントの型情報群を参照して呼出元の呼出インタフェースの型名３１０から取得した型情報を型情報対２２０の呼出元型情報２２１へ格納し、オブジェクト識別子１６６の型情報１３６を型情報対２２０の呼出先型情報２２２へ格納し、型情報対２２０をプロキシクラス生成部２３０へ入力する。プロキシクラス生成部２３０はプロキシクラス１７４を生成し出力する。
【００４８】
図３の例では、呼出元の呼出インタフェースの型名「ＬｏｃａｌＣａｒｔ」（３１０）とオブジェクト識別子「Ｒｅｆ２」（１６６）を入力とする。呼出元コンポーネントであるコンポーネント１００の型情報群１０３を参照して呼出元の呼出インタフェースの型名３１０「ＬｏｃａｌＣａｒｔ」に対応するＬｏｃａｌＣａｒｔ型情報１０４を取得して型情報対２２０の呼出元型情報２２１へ格納し、オブジェクト識別子「Ｒｅｆ２」（１６６）の型情報であるＲｅｍｏｔｅＣａｒｔ型情報１３６を型情報対２２０の呼出先型情報２２２へ格納し、型情報対２２０をプロキシクラス生成部２３０へ入力する。プロキシクラス生成部２３０は図２と同じ動作を行い、プロキシクラス１７４を生成して出力する。
【００４９】
呼出先の呼出インタフェースの型情報を取得する方法は、オブジェクト識別子１６６が呼出先の呼出インタフェースの型情報であるＲｅｍｏｔｅＣａｒｔ型情報１３６を取得する型情報取得メソッドを備え、型情報対取得部３０１がオブジェクト識別子１６６の型情報取得メソッドを呼出す方法でもよい。
【００５０】
図４は、呼出元の実行環境１９０がプロキシクラスの生成を行う場合のプロキシクラス管理部の実施の形態を示した図である。
【００５１】
図４の実施の形態ではプロキシクラス管理部１９５が実行環境１９０にある情報を参照してプロキシクラス１７４を生成し、プロキシクラス管理部１７５が生成されたプロキシクラス１７４を取得し実行環境１７０で利用する。
【００５２】
プロキシクラス管理部１９５は型情報対２２０、プロキシクラス生成部２３０、プロキシクラス１７４を含む。プロキシクラス管理部１９５はプロキシクラス１７４を生成して格納する動作を行い、プロキシクラス管理部１７５からの要求により格納してあるプロキシクラス１７４をプロキシクラス管理部１７５へ渡す動作を行う。
【００５３】
プロキシクラス管理部１９５がプロキシクラス１７４を生成して格納する動作では、プロキシクラス管理部１９５は配備記述子１３０を入力とし、配備記述子１３０のレコードごとに型情報対２２０を生成してプロキシクラス生成部２３０を用い、プロキシクラス１７４を生成して格納する。型情報対２２０の生成では、レコードのローカル呼出型名項目１３１の値から型情報群１３５を参照して取得した型情報を呼出元型情報２２１へ格納し、レコードのリモート呼出型名項目１３２の値から型情報群１３５を参照して取得した型情報を呼出先型情報２２２へ格納する。
【００５４】
図４の例では、プロキシクラス管理部１９５は配備記述子１３０を入力とし、レコード１３３に対して型情報対２２０を生成してプロキシクラス生成部を用い、プロキシクラス１７４を生成して格納する。型情報対２２０の生成では、レコード１３３のローカル呼出型名項目１３１の値「ＬｏｃａｌＣａｒｔ」から型情報群１３５を参照して取得したＬｏｃａｌＣａｒｔ型情報１０４を呼出元型情報２２１へ格納し、レコード１３３のリモート呼出型名項目１３２の値「ＲｅｍｏｔｅＣａｒｔ」から型情報群１３５を参照して取得したＲｅｍｏｔｅＣａｒｔ型情報１３６を呼出先型情報２２２へ格納する。プロキシクラス生成部２３０へ入力する。プロキシクラス生成部２３０は図２と同じ動作を行い、プロキシクラス１７４を生成し出力する。
【００５５】
プロキシクラス管理部１９５がプロキシクラス管理部１７５からの要求により格納してあるプロキシクラス１７４をプロキシクラス管理部１７５へ渡す動作では、プロキシクラス管理部１９５はプロキシクラス管理部１７５から要求された型名を入力とし、型名が示す格納してあるプロキシクラス１７４をプロキシクラス管理部１７５へ出力する。
【００５６】
プロキシクラス管理部１７５はプロキシクラス取得部４０３、プロキシクラス１７４を含む。プロキシクラス管理部１７５は、呼出元の呼出インタフェースの型名３１０とオブジェクト識別子１６６を入力とする。図４の例のオブジェクト識別子１６６は呼出先コンポーネントの呼出受付部の所在を識別する受付部アドレス４０１と、呼出先コンポーネントのある実行環境１９０の所在を識別する実行環境アドレス４０２を含む。プロキシクラス取得部４０３は、呼出元の呼出インタフェースの型名３１０からプロキシクラスの型名を生成し、オブジェクト識別子１６６の実行環境アドレス４０２が識別する実行環境１９０にあるプロキシクラス管理部１９５へ生成した型名のプロキシクラス１７４を要求して取得する。プロキシクラス管理部１７５は取得したプロキシクラス１７４を出力する。
【００５７】
図４の例では、呼出元の呼出インタフェースの型名「ＬｏｃａｌＣａｒｔ」（３１０）とオブジェクト識別子「Ｒｅｆ２」（１６６）を入力とする。オブジェクト識別子「Ｒｅｆ２」（１６６）の実行環境アドレス４０２は実行環境１９０の所在を識別している。プロキシクラス取得部４０３は、型名「ＬｏｃａｌＣａｒｔ」（３１０）からプロキシクラスの型名「ＬｏｃａｌＣａｒｔＰｒｏｘｙ」を生成しオブジェクト識別子１６６の実行環境アドレス４０２が識別する実行環境１９０にあるプロキシクラス管理部１９５へ生成した型名「ＬｏｃａｌＣａｒｔＰｒｏｘｙ」のプロキシクラス１７４を要求して取得する。プロキシクラス管理部１７５は取得したプロキシクラス１７４を出力する。
【００５８】
図５は、名前解決手続き１７２とプロキシ化手続き１７３の動作をフローチャートで示した図である。
【００５９】
（ステップ５０１）名前解決手続き１７２は、入力の論理名から、物理名管理部１６０を参照して対応するオブジェクト識別子を得る。
【００６０】
（ステップ５０２）名前解決手続き１７２は、論理名とオブジェクト識別子をプロキシ化手続き１７３へ入力し、プロキシ化手続き１７３は、入力の論理名から配備記述子１１０を参照して呼出規約項目１１２の値を取得し、呼出元の呼出規約とする。
【００６１】
（ステップ５０３）入力のオブジェクト識別子の型情報の継承インタフェースがローカルとリモートのいずれの規約インタフェースに一致するか調べ、呼出先の呼出規約とする。
【００６２】
（ステップ５０４）呼出元の呼出規約と呼出先の呼出規約が同じか判定する。
【００６３】
（ステップ５０９）同じである場合は、オブジェクト識別子を参照オブジェクトとする。同じでない場合は、ステップ５０５からステップ５０８を実行する。
【００６４】
（ステップ５０５）プロキシ化手続き１７３は、論理名から配備記述子１１０を参照して得た型名項目１１３の型名とオブジェクト識別子をプロキシクラス管理部１７５へ渡してプロキシクラスを取得する。
【００６５】
（ステップ５０６）プロキシクラスのインスタンスであるプロキシオブジェクトを生成する。
【００６６】
（ステップ５０７）プロキシオブジェクトのデータにオブジェクト識別子を設定する。
【００６７】
（ステップ５０８）プロキシオブジェクトを参照オブジェクトとする。
【００６８】
（ステップ５１０）プロキシ化手続き１７３が参照オブジェクトを名前解決手続き１７２へ出力し、名前解決手続き１７２は前記参照オブジェクトを出力する。
【００６９】
【発明の効果】
本発明により、同一の実行環境でローカル呼出規約を使って連携している呼出元コンポーネントと呼出先コンポーネントを、修正せずに再利用して異なる実行環境へ配備して連携できる。
【図面の簡単な説明】
【図１】本実施例の概要の構成を示した図である。
【図２】型情報と呼出規約の変換処理を行うプロキシクラスの詳細とプロキシクラス生成部を示した図である。
【図３】プロキシ管理部の１つ目の実施例である。
【図４】プロキシ管理部の２つ目の実施例である。
【図５】名前解決手続きとプロキシ化手続きの動作を示すフローチャートである。
【図６】本実施例の構成を示す図である。
【符号の説明】
１００、１２０：コンポーネント、１０１、１２１：実行プログラム、１０２：論理名、１１０、１３０：配備記述子、１０３、１３５：型情報群、１０４、１３６：型情報、１４０、１５０：物理名割当部、１４１、１５１：物理名割当情報、１６０：物理名管理部、１６５、１６６：オブジェクト識別子、１７０、１９０：実行環境、１７２：名前解決手続き、１７３：プロキシ化手続き、１７４：プロキシクラス、１７５、１９５：プロキシクラス管理部、１８０：プロキシオブジェクト、２２０：型情報対、２２１：呼出元型情報、２２２：呼出先型情報、２３０：プロキシクラス生成部、６０１：計算機、６０２：二次記憶装置、６０３：主記憶装置、６０４：オペレーティングシステム、６７０：バス、６８０：ＣＰＵ、６８１：マウス、６８２：ディスプレイ、６８３：キーボード、６８５：ネットワークインタフェース、６９０：ネットワーク
【図１】
2004151800.tif 000003
【図２】
2004151800.tif 000004
【図３】
2004151800.tif 000005
【図４】
2004151800.tif 000006
【図５】
2004151800.tif 000007
【図６】
2004151800.tif 000008