(57)【要約】【課題】  アプリケーションの開発し直しが不要で、アプリケーションの実行時に部品の置換を可能とする。【解決手段】  複数の部品の間で結合されるべき部品を示す結合部品の情報と、その結合されるべき部品とは異なり、その結合されるべき部品の候補を示す結合候補部品の情報とに従って、結合部品を結合候補部品に置換する。置換された結合候補部品を結合されるべき部品に結合してソフトウェアとして実装されるアプリケーションを構成する。【選択図】      図１
2011237883.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアとして実装されるアプリケーションを複数の部品を結合して構成する部品結合装置であって、
前記複数の部品の間で結合されている部品を示す結合部品の情報と、該結合されている部品とは異なり、結合されるべき部品の候補を示す結合候補部品の情報とを記憶する記憶手段と、
前記結合部品を置換する指示に応じて、前記記憶された前記結合部品の情報と前記結合候補部品の情報とに従って前記結合部品を前記結合候補部品に置換する置換手段と、
前記置換された結合候補部品を結合されるべき部品に結合して前記ソフトウェアとして実装されるアプリケーションを構成する結合手段と、
を有することを特徴とする部品結合装置。
【請求項２】
前記結合部品と前記結合候補部品とを外部装置に出力する出力手段と、
前記外部装置から前記置換すべき結合候補部品を入力する入力手段とを更に有し、
前記置換手段は、前記出力した結合部品を前記入力手段により入力された結合候補部品に置換することを特徴とする請求項１に記載の部品結合装置。
【請求項３】
前記記憶手段は、前記結合部品のインタフェースを示す情報を更に記憶し、
前記入力手段により入力された結合候補部品が結合できるか否かを前記インタフェースを示す情報に基づいて検証する検証手段を更に有し、
前記置換手段は、前記検証手段により結合できると検証された場合に、前記結合部品を前記入力手段により入力された結合候補部品に置換することを特徴とする請求項２に記載の部品結合装置。
【請求項４】
前記結合手段は、サービスコンポーネントアーキテクチャー（ＳＣＡ）仕様に従う部品を結合することを特徴とする請求項１乃至３の何れか１項に記載の部品結合装置。
【請求項５】
前記出力手段及び前記入力手段はＨＴＴＰプロトコルを使用してネットワークを通じて出力及び入力を行うことを特徴とする請求項２又は３に記載の部品結合装置。
【請求項６】
ソフトウェアとして実装されるアプリケーションを複数の部品を結合して構成する部品結合装置における部品結合方法であって、
記憶手段が、前記複数の部品の間で結合されている部品を示す結合部品の情報と、該結合されている部品とは異なり、結合されるべき部品の候補を示す結合候補部品の情報とをメモリに記憶する記憶工程と、
置換手段が、前記結合部品を置換する指示に応じて、前記メモリに記憶された前記結合部品の情報と前記結合候補部品の情報とに従って前記結合部品を前記結合候補部品に置換する置換工程と、
結合手段が、前記置換された結合候補部品を結合されるべき部品に結合して前記ソフトウェアとして実装されるアプリケーションを構成する結合工程と、
を有することを特徴とする部品結合方法。
【請求項７】
コンピュータを請求項１乃至５の何れか１項に記載の部品結合装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア部品を結合してアプリケーションを構築する装置に関し、特に結合させるソフトウェア部品を置換又は変更する技術に関する。
【背景技術】
【０００２】
従来、ソフトウェア部品（以下、単に部品と称す）又はコンポーネントを組み合わせてアプリケーションを構築する多様な技術が存在する。
【０００３】
Open SCA Collaborationが仕様策定したサービスコンポーネントアーキテクチャー仕様（Service Component Architecture）はそのような技術の一つである。部品（ＳＣＡ用語ではコンポーネント）のインタフェースを、サービス、リファレンス、プロパティに単純化し、異言語部品や多様な通信プロトコルを組み合わせし易くしたところに特徴がある。その組み合わせ仕様の詳細は非特許文献１に記載されている。
【０００４】
ＳＣＡ仕様では、部品の結合をＸＭＬ言語で記述された定義ファイルを用いて行うように既定されている。ある部品が別の部品を利用する場合、それらの部品は定義ファイルが定める方法によって結合されるが、利用する側の部品は利用される側の部品の機能を直接呼び出すようなコードを書く必要はない。
【０００５】
従って、部品のインタフェースが一致していれば、アプリケーションの中で使用されている部品を別の部品に置き換える時にコードを書き直す必要はない。これはＳＣＡ技術を使うメリットである。
【０００６】
一方、ＳＣＡ以外の従来の技術として、部品を結合してアプリケーションを構築させる際に部品の置換を行ったり結合させるべき部品間の整合性を検証したりする技術に、以下のようなものが挙げられる。
【０００７】
例えば、アプリケーション毎に、結合するモジュールの情報を管理・更新し、問題発生時や自動切替時に、モジュール情報から切替えるべきモジュールのバージョンを決定し、そのアプリケーションが結合するモジュールバージョンの切り替えを行う。例えば、特許文献１参照。
【０００８】
また、ソフトウェア内の各既開発プログラム部品間の組み合わせ情報および部品の属性情報に基づいて、開発済みのソフトウェアの構造を保持しつつ、当該ソフトウェアの一部をなす特定の既開発プログラム部品を新たな既開発プログラム部品に置換する。例えば、特許文献２参照。
【０００９】
また、コンポーネント呼び出しを監視するモニタにより抽出されたコンポーネント呼び出し情報に基づいて、コンポーネント呼び出しとその対象であるコンポーネントとの整合性を検証する。例えば、特許文献３参照。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００８−１０８１５５号公報
【特許文献２】特開２００２−３６６３５６号公報
【特許文献２】特開２００４−３６２０００号公報
【非特許文献】
【００１１】
【非特許文献１】SCA Service Component Architecuture Assembly Model Specification Version 1.00, March 15 2007
【発明の概要】
【発明が解決しようとする課題】
【００１２】
部品の置き換えがし易いというＳＣＡの特徴は好ましい。しかしながら、ＳＣＡ仕様では、アプリケーションを構築する際に、定義ファイルの内容を決定しておかなければならない。定義ファイルはアプリケーションの一部だからである。つまり、部品の置き換えを行う場合は、定義ファイルを変更せねばならない。それはアプリケーションの構築し直しを意味する。アプリケーションの実行時ではなく、開発時に部品の置き換えが可能ということである。
【００１３】
部品の置き換えの柔軟性はできるだけ高めておくことが望ましい。たとえ部品のインタフェースが同一であったとしても、性能や使用リソース、スケーラビリティ、アベイラビリティなど、部品の特性としてはいくつも考えられ、実現したい特性に応じて多数の部品が提供されることはあり得る。このような状況では、部品を置き換えたいという要求が自然に発生すると考えられる。例えば、ユーザが多数の部品の中から所望の部品を選べたり、機器が備えるリソース条件から動作すべき部品が決定できたりする、そのような機能を提供することは望ましいだろう。
【００１４】
しかし、部品の置換を実現するのにアプリケーションの開発し直しが必要となるのでは柔軟性が高いとは言えない。多様な機器に搭載するアプリケーションの部品を機器毎に変更したい場合に、その度に開発のやり直しを行うのでは開発コストがかかり過ぎる。一方、部品の置換を行いたい別の状況が存在する。
【００１５】
今日、多くのネットワークサービスが提供されている。機器がネットワークサービスと連携することで従来できなかったサービスが実現されていることも多い。機器の付加価値向上のためにはネットワークサービスとの連携が欠かせない。
【００１６】
ここで、新たなネットワークサービスが提供される状況を考えてみる。新ネットワークサービスが作られ、提供される頻度は、機器上のソフトウェアが更新される頻度の比ではない。ネットワーク上のコンピュータの性能、リソース、開発環境と、機器のそれを比べてみれば当然である。従って、機器ソフトウェアが更新されないままであるのに、ネットワークサービスが更新され、向上していく状況が常に起こり得る。
【００１７】
こういった場合、機器が出荷された後、後から作られたネットワークサービスと機器を連携させることは従来は困難であった。一部の機器ではファームウェアアップデート機能が備えられる。それを使えば新ネットワークサービスと連携させることは不可能ではない。しかしながら、ファームウェアアップデートはユーザに負担をかけるし、ＲＯＭ容量等の面からソフトウェアの変更の自由度は低い。さらに、上述したのと同様に、これも開発行為が必要となる。
【００１８】
本発明は、アプリケーションの開発し直しが不要で、アプリケーションの実行時に部品の置換を可能とする装置を提供する。
【課題を解決するための手段】
【００１９】
本発明は、ソフトウェアとして実装されるアプリケーションを複数の部品を結合して構成する部品結合装置であって、
前記複数の部品の間で結合されている部品を示す結合部品の情報と、該結合されている部品とは異なり、結合されるべき部品の候補を示す結合候補部品の情報とを記憶する記憶手段と、
前記結合部品を置換する指示に応じて、前記記憶された前記結合部品の情報と前記結合候補部品の情報とに従って前記結合部品を前記結合候補部品に置換する置換手段と、
前記置換された結合候補部品を結合されるべき部品に結合して前記ソフトウェアとして実装されるアプリケーションを構成する結合手段と、
を有することを特徴とする。
【発明の効果】
【００２０】
本発明によれば、アプリケーションの開発し直しが不要で、アプリケーションの実行時に部品の置換が可能になる。
【図面の簡単な説明】
【００２１】
【図１】第１の実施形態における部品結合装置１００の構成を示すブロック図。
【図２】部品と部品の結合及び部品と外部サービスとの結合を示す図。
【図３】（Ａ）は部品結合関係をＳＣＡ仕様に則って記述した部品結合定義を示す図、（Ｂ）はalternativeタグが追加されている部品結合定義を示す図。
【図４】複数の部品及び複数の外部サービスの部品結合関係を示す図。
【図５】図４に示す部品結合関係を表現した表形式のデータを示す図。
【図６】部品置換を行う際の全体の概略処理を示すフローチャート。
【図７】部品結合処理（Ｓ６０２）の詳細を示すフローチャート。
【図８】部品Ａと部品Ｂとの結合の間に代理オブジェクトが介在する状態を示す図。
【図９】部品実行処理（Ｓ６０４）の詳細を示すフローチャート。
【図１０】部品Ａが外部サービスＣに結合される場合を説明するための図。
【図１１】部品置換処理（Ｓ６０５）の詳細を示すフローチャート。
【図１２】更新後の部品結合定義の一例を示す図。
【図１３】第２の実施形態における部品結合処理を示すフローチャート。
【発明を実施するための形態】
【００２２】
以下、図面を参照しながら発明を実施するための形態について詳細に説明する。本実施形態では、ソフトウェア部品（部品）又はコンポーネントを結合してアプリケーションを構築する部品結合装置について説明する。
【００２３】
［第１の実施形態］
図１は、第１の実施形態における部品結合装置１００の構成を示すブロック図である。図１に示す中央処理装置（ＣＰＵ）１０１は、装置全体を制御すると共に、置換部１１０、結合部１１１、実行部１１２、出力部１１３、入力部１１４、及びインタフェース検証部１１５として機能する。
【００２４】
ハードディスクドライブ（ＨＤＤ）１０２は、記憶部（メモリ）であり、ＨＤＤ１０２にはアプリケーション１２０が記憶されている。尚、アプリケーション１２０は部品結合装置１００の出荷時から格納されていても良いし、出荷後にＨＤＤ１０２にインストールされても良い。
【００２５】
アプリケーション１２０は、１以上の部品１２１と、それらの部品１２１の結合方法を記述した部品結合定義１２２とを含む。また、部品として提供されるソフトウェア以外のソフトウェア、即ち、アプリケーションロジック（不図示）もアプリケーション１２０に含まれる。尚、当然のことながら、アプリケーションロジックから部品１２１を利用することは可能である。
【００２６】
アプリケーションロジックから部品１２１を利用する方法は、部品１２１から他の部品１２１を利用する方法と変わりがない。そのため、以下ではアプリケーションロジックに対して、特に言及しない。
【００２７】
ネットワークＩ／Ｆ１０３は、部品結合装置１００を装置外部に存在するネットワーク１５０に接続するためのインタフェースである。ＲＯＭ１０４には、各種動作プログラムが読み取り可能な形式で格納されている。ＲＡＭ１０５は、ＣＰＵ１０１がＲＯＭ１０４に格納されているプログラムに従って処理を実行中に使用される一時的な値等を保存するメモリである。
【００２８】
ＦｌａｓｈＲＯＭ１０６は、各種設定データファイル等を保存しておくための不揮発性メモリである。尚、不揮発性という性質がＨＤＤ１０２に近いことからＦｌａｓｈＲＯＭ１０６を本発明における記憶部として用いることも可能である。
【００２９】
ディスプレイ１０７は、各種情報をユーザに表示する表示装置である。操作部１０８は、具体的にはキーボード、マウス、タッチディスプレイ等のユーザが入力操作を行うものである。部品結合装置１００はネットワークＩ／Ｆ１０３、ネットワーク１５０を介してＰＣ１３０及びサーバ１４０に接続されている。
【００３０】
次に、上述の構成を有する部品結合装置１００において、アプリケーション１２０の中の部品１２１間の結合及び部品１２１と外部サービスとの部品結合関係を、図２を用いて説明する。
【００３１】
図２は、部品と部品の結合及び部品と外部サービスとの結合を示す図である。サービスコンポーネントアーキテクチャー（ＳＣＡ）仕様によれば、部品がその機能を部品外部に公開するインタフェースはサービスと呼ばれ、部品が別の部品のサービスを利用するためのインタフェースは参照と呼ばれる。図２に示す例では、部品Ａが２つの参照２１０Ａ、２１０Ｂのインタフェースを有し、部品Ｂがサービス２２０Ａのインタフェースを有し、外部サービスＣがサービス２２０Ｂのインタフェースを有する。ここで、ある参照があるサービスを利用するときに、その参照とそのサービスとが結合される。
【００３２】
図２では、部品Ａが部品Ｂを利用する際の参照２１０Ａとサービス２２０Ａとの結合を関係線２３０Ａで示し、部品Ａが外部サービスＣを利用する際の参照２１０Ｂとサービス２２０Ｂとの結合を関係線２３０Ｂで示している。このとき、結合された参照２１０Ａとサービス２２０Ａとのインタフェースを整合しなければならない。整合しなければ、参照２１０Ａからサービス２２０Ａの全ての機能を利用することができないからである。
【００３３】
Ｊａｖａ（登録商標）言語で言えば、参照２１０Ａが依拠するＪａｖａ（登録商標）インタフェースクラスとサービス２２０Ａが依拠するＪａｖａ（登録商標）インタフェースクラスとの互換性がとれていなければならない。
【００３４】
具体的には、サービス２２０Ａが依拠するＪａｖａ（登録商標）インタフェースクラスは参照２１０Ａが依拠するＪａｖａ（登録商標）インタフェースクラスと一致しているか、もしくはスーパーセットでなければならない。非特許文献１には、その他の条件も記載されている。
【００３５】
図２に示すように、結合は同一のアプリケーション１２０の中の部品同士だけでなく、アプリケーション１２０内の部品Ａとアプリケーション１２０外の外部サービスＣとの間でも行うことができる。その意味で、外部サービスＣは部品Ａ、部品Ｂと同様に取り扱うことができる。
【００３６】
図３の（Ａ）に、図２に示す部品結合関係をＳＣＡ仕様に則って記述した部品結合定義１２２の一部を示す。図３に示す（Ａ）では、説明のために行番号が付与されているが、本来はＸＭＬ言語形式で記述されるものである。
【００３７】
２行目は部品Ａについての記述であることを示す。３行目は部品Ａの参照２１０Ａを示し、その名前は「ｂ」であること、それがターゲット（結合先）部品Ｂに結合されることを示す。４行目は参照２１０ＡのインタフェースがＪａｖａ（登録商標）インタフェースクラスＢＢＢ（不図示）に従うことを示す。
【００３８】
以下同様に、６〜９行目は参照２１０Ｂが外部サービスＣに結合されることを示す。尚８行目は結合がＷｅｂサービスを用いて行われることを示す。Ｗｅｂサービスでアクセスするのに必要となるＵＲＩ（Uniform Resource Identifier）はｕｒｉ属性で示される。
【００３９】
部品Ａの参照２１０Ｂと外部サービスＣのサービス２２０Ｂとの間のインタフェースの整合性は次にように確認する。まず、参照２１０Ｂのインタフェースについては、７行目でそれがＪａｖａ（登録商標）インタフェースクラスＣＣＣに従うことが分かる。サービス２２０Ｂが提供するインタフェースについては、それに対応するＷＳＤＬファイル（不図示）の内容を調べる。一般に、Ｗｅｂサービスではサービスのインタフェースの内容を示すＷＳＤＬファイルが提供される。従って、ＷＳＤＬファイルを調べればサービス２２０Ｂのインタフェースの内容を知ることができる。それがＪａｖａ（登録商標）インタフェースクラスＣＣＣと互換性があるか否かを調べれば良い。
【００４０】
次に、第１の実施形態におけるアプリケーション１２０内の複数の部品及び複数の外部サービスの部品結合関係を、図４を用いて説明する。ここで、アプリケーション１２０は複数の部品１２１として部品Ａから部品Ｌを含む。
【００４１】
図２では、参照とサービスとを明示していたが、図４ではそれらを省略し、任意の部品から別の部品への結合を単純な矢印で表現している。実線の矢印は実際に結合されていることを示し、破線の矢印は結合候補であることを示す。例えば、部品Ａは現在、部品Ｂに結合されている。両者の間の結合インタフェースはインタフェースＢＢＢである。部品Ｂの他にインタフェースＢＢＢを満たす２つの部品（部品Ｄ、部品Ｅ）がアプリケーション１２０内に存在し、部品Ａはそれらとも結合することができる。
【００４２】
また、現在結合されているものが部品であれば、結合候補も部品でなければならないということはない。即ち、部品Ｆは部品Ｇに結合されているが、そのインタフェースＧＧＧを満たす外部サービスＣを結合候補とすることもできる。
【００４３】
また、部品Ｈの場合、その結合が示すように、現在は外部サービスＩに結合されているが、インタフェースＩＩＩを満たす外部サービスＪを結合候補とすることもできる。更に、部品Ｋは、現在部品Ｌに結合されているだけで、結合候補は持っていない例である。
【００４４】
ここで、図４に示す部品結合関係を表現した表形式のデータを、図５を用いて説明する。この表の内容となるデータはＲＡＭ１０５に格納される。図５において、部品列５０１は参照２１０を持つ部品１２１のリストである。参照列５０２は、対応する部品列５０１の部品１２１が備える参照２１０である。この例では、一つの部品につき一つの参照しか記述していないが、一つの部品につき複数の参照が存在しても良い。その場合には一つの部品につき複数の行が存在することになる。
【００４５】
使用部品列５０３は、対応する参照列５０２の参照が結合している先の部品である。尚、上述したように、外部サービスはアプリケーション１２０内の部品１２１と同様に取り扱えるので、使用部品列５０３に外部サービスが入っていても良い。
【００４６】
部品候補列５０４は、対応する参照列５０２の参照が結合する候補となる部品のリストである。また、部品候補列５０４の一つのセル内に複数の部品及び外部サービスが入っても良い。インタフェース列５０５は、対応する参照列５０２の参照が従うインタフェースである。
【００４７】
次に、図５に示す表データを生成する基となる部品結合定義１２２を図３に示す（Ｂ）を用いて説明する。図３に示す（Ａ）を用いて説明した、ＳＣＡ仕様で一般的な部品結合定義１２２とほぼ同じであるが、図３の（Ｂ）では更に、alternativeタグが追加されている。このタグを用いて結合候補部品が記述される。
【００４８】
例えば、５〜６行目では、参照ａに対する結合候補として部品Ｄと部品Ｅが記述されている。１２〜１４行目では、参照ｆに対する結合候補として外部サービスＣが挙げられている。これらの結合候補が部品候補列５０４に格納される。
【００４９】
ここで、第１の実施形態における部品結合装置１００が部品置換を行う際の全体の概略処理を、図６を用いて説明する。最初に、部品結合装置１００が外部装置（不図示）からアプリケーション１２０をインストールする（Ｓ６０１）。このインストールの操作は、ユーザが操作部１０８とディスプレイ１０７とを用いて行う。そして、操作部１０８からインストールが指示されると、ＣＰＵ１０１がネットワーク１５０に接続されている外部装置からネットワークＩ／Ｆ１０３を介してアプリケーション１２０をダウンロードしてＨＤＤ１０２に格納する。
【００５０】
次に、ユーザが操作部１０８からアプリケーション１２０の開始を指示すると、ＣＰＵ１０１がアプリケーション１２０内の部品結合定義１２２を読み出し、解析することで、アプリケーション１２０内の部品１２１の結合処理を行う（Ｓ６０２）。この結合処理を行った後、ＣＰＵ１０１はアプリケーション１２０を実際に開始する。それに伴い、部品１２１のコードを実行する（Ｓ６０４）。
【００５１】
ここれ、ユーザが現在使用している部品１２１を置き換えたくなった時、部品１２１の置換処理を指示する。この指示に応じてＣＰＵ１０１は部品１２１の置換処理を実行する（Ｓ６０５）。部品１２１の置換処理を行った後には（Ｓ６０６）、ループの先頭に戻り（Ｓ６０３）、置き換えた部品を使用する。つまり、ＣＰＵ１０１は置換した部品１２１のコードを実行する（Ｓ６０４）。
【００５２】
尚、この例では、一旦、部品１２１を実行した後、部品１２１の置換を行っているが、アプリケーション１２０をインストールした直後、即ち、実行する前に部品１２１の置換を行っても良い。また、図８では省略しているが、アプリケーション１２０を停止したり、アンインストールしたりすることも当然のことながら可能である。
【００５３】
次に、第１の実施形態における部品結合処理（Ｓ６０２）の詳細を、図７を用いて説明する。以下のシーケンスでは結合部１１１として機能するＣＰＵ１０１が部品結合処理の動作主体となる。
【００５４】
最初に、ＣＰＵ１０１がＨＤＤ１０２に格納されたアプリケーション１２０内の部品結合定義１２２を読み出す（Ｓ７０１）。そして、ＣＰＵ１０１は読み出した部品結合定義１２２を解釈する（Ｓ７０２）。即ち、ＣＰＵ１０１は図３に示す（Ｂ）のようなＸＭＬ言語で記述された部品結合定義１２２を解釈し、図５に示すような表形式のデータを生成し、ＲＡＭ１０５に格納する。
【００５５】
部品結合定義１２２には、１以上の部品１２１についてのデータが存在する。そこで、ループ１の先頭（Ｓ７０３）から末尾（Ｓ７０９）までの処理を部品１２１毎に繰り返す。また、一つの部品１２１内には１以上の参照が存在し得る。ここで、ＳＣＡの仕様上は参照が存在しない部品１２１もあり得るが、本発明は部品結合を関心とするので、結合が不可能な参照がない部品１２１のことはここでは考えない。つまり、ループ２の先頭（Ｓ７０４）から末尾（Ｓ７０８）までの処理を参照毎に繰り返す。
【００５６】
次に、ＣＰＵ１０１は処理の対象である参照の結合先部品が外部サービスか否かを判定する（Ｓ７０５）。尚、使用部品列５０３について、外部サービスは部品１２１と同様な取り扱いが可能であると説明したが、それは両者の区別がつかないという意味ではない。Ｓ７０２で部品結合定義１２２を解釈した時に、結合先部品がアプリケーション１２０内の部品１２１（内部部品）か、外部サービスかを示す情報がＲＡＭ１０５に格納される。
【００５７】
Ｓ７０５で、ＣＰＵ１０１が外部サービスではなく、内部部品１２１と判定した場合、内部部品１２１用の代理オブジェクトのインスタンスを生成する（Ｓ７０６）。この代理オブジェクトのインスタンスとは、あるクラスのインタフェースを満たすように、動的に生成される代理クラスのインスタンスである。
【００５８】
Ｊａｖａ（登録商標）言語では、あるインタフェースクラスに対して、代理クラスをプログラム中で生成することができる。その代表的な用途は、あるインタフェースクラスを実装した実装クラスのオブジェクトのメソッドをプログラムが呼び出すときに、代理クラスがその呼び出しをキャッチし、そのタイミングで何か別の処理を行うことである。代理クラスは間接的に呼び出しを行う機能を提供する。部品結合においては、その機能が有用であるため、第１の実施形態においては代理クラスを使用している。
【００５９】
代理クラスは、部品１２１の参照が従うインタフェース４０１に基づいて生成される。従って、Ｓ７０６で代理オブジェクトインスタンスを生成する直前に、代理クラスが生成されれば良い。但し、当然のことながら、図７のループ処理を実行中、同一の代理クラスから複数個の代理オブジェクトインスタンスを生成する場合は、その都度、代理クラスを生成する必要はなく、一度代理クラスを生成すれば良い。
【００６０】
また、上述のＳ７０５で、結合先部品が外部サービスと判定した場合、ＣＰＵ１０１は外部サービス用の代理オブジェクトのインスタンスを生成する（Ｓ７１０）。ここで代理オブジェクトのインスタンスは結合先部品に関連する情報を含むことに注意すべきである。例えば、代理オブジェクトのインスタンス生成時には、結合先の内部部品１２１のクラス情報或いは外部サービスのアクセス用部品（詳細は後述する）のクラス情報がコンストラクタパラメータとして渡され、インスタンス内部に保存される。これらのクラス情報は結合先内部部品１２１或いは外部サービスアクセス用部品のインスタンスを生成するのに用いられる。
【００６１】
上述したＳ７０６又はＳ７１０の処理の後に、部品１２１の参照に対応するフィールドに代理オブジェクトインスタンスを設定する（Ｓ９０７）。ここでフィールドとは、部品１２１オブジェクトの中にある情報格納場所であり、Ｊａｖａ（登録商標）言語で言うところのフィールドに相当する。フィールドに設定されたオブジェクトを通じて、他のクラスのメソッドを呼び出すことができる。他の言語でもこのフィールドに相当するものは存在する。
【００６２】
図８に、部品Ａと部品Ｂとの結合の間に代理オブジェクトが介在する状態を示す。アプリケーション１２０側から見ると、アプリケーション１２０は代理オブジェクトＢの存在を知らないので、部品Ａが部品Ｂに直接結合されているように見える。
【００６３】
しかし、ＣＰＵ１０１は結合の間に代理オブジェクトＢを介在させる。即ち、Ｓ７０６又はＳ７１０で代理オブジェクトＢのインスタンスを生成し、Ｓ７０７でそれを部品Ａの参照２１０Ａに対応するフィールド１２０３Ａに設定する。設定動作を矢印１２０２Ａで示している。この設定により部品Ａと代理オブジェクトＢが結合される。
【００６４】
代理オブジェクトＢは、部品Ａの参照２１０Ａが従うインタフェースと整合性を持つ代理クラスから生成されたものである。従って、代理オブジェクトＢのサービス２２０Ｃのインタフェースは、必然的に参照２１０Ａのインタフェースと互換性を持ち、参照２１０Ａとサービス２２０Ｃが結合される。つまり、部品Ａは、参照２１０Ａを通じて代理オブジェクトＢのメソッドの呼び出しを確実に行うことができる。代理オブジェクトＢと部品Ｂとの結合については後述する。
【００６５】
図７の説明に戻ると、Ｓ７０８でループ２の末尾に至り、Ｓ７０４のループ先頭に戻る。Ｓ７０９でループ１の末尾に至り、Ｓ７０３のループ先頭に戻る。以上で部品結合手順を終了する。
【００６６】
次に、第１の実施形態における部品実行処理（Ｓ６０４）の詳細を、図９を用いて説明する。以下のシーケンスでは実行部１１２として機能するＣＰＵ１０１が部品実行処理の動作主体となる。
【００６７】
最初に、アプリケーション１２０が、部品Ａが提供するサービスを呼び出す（Ｓ９０１）。即ち、ＣＰＵ１０１が、部品Ａが提供するサービスの実装であるメソッドを呼び出す。図８に示すように、部品Ａが部品Ｂを使用しているものとする。部品Ａは部品Ｂを使用するために、参照２１０Ａが従うインタフェースのメソッドを呼び出す（Ｓ９０２）。
【００６８】
参照２１０Ａのインタフェースのメソッドは、フィールド１２０３Ａを通じて代理オブジェクトＢのメソッドを呼び出す（Ｓ９０３）。図７を用いて説明したように、部品結合処理でフィールド１２０３Ａへの設定が済んでいるので、この処理が可能になる。
【００６９】
代理オブジェクトＢのメソッドは、自オブジェクトが外部サービス用か否かを判定する（Ｓ９０４）。Ｓ７０６又はＳ７１０で代理オブジェクトインスタンスを作成した時に、内部部品１２１用或いは外部サービス用の何れの用途で作成したかの情報を記憶しておき、その情報に基づいて判定を行う。判定の結果、内部部品１２１用と判定した場合、代理オブジェクトＢのメソッドは、代理オブジェクトインスタンス内に格納された結合先内部部品のクラス情報を用いて結合先内部部品のインスタンスを生成する（Ｓ９０５）。この処理では、結合先内部部品は部品Ｂであるので、部品Ｂのインスタンスが生成される。
【００７０】
また、Ｓ９０４で外部サービス用と判定した場合、代理オブジェクトＢのメソッドは、結合先外部サービスアクセス用部品のインスタンスを生成する（Ｓ９０８）。このインスタンスの生成は、代理オブジェクトインスタンス内に格納された結合先外部サービスアクセス用部品のクラス情報を用いて行われる。例えば、図１０に示すように、部品Ａが外部サービスＣに結合される場合、外部サービスＣにアクセスするための外部サービスＣアクセス用部品のインスタンスが生成される。
【００７１】
代理オブジェクトＢのメソッドは、Ｓ９０５又はＳ９０８で生成されたインスタンスを、代理オブジェクトＢ内のフィールド１２０３Ｂに設定する（Ｓ９０６）。結合先部品が部品Ｂの場合の設定動作を図８の矢印１２０２Ｂに示す。結合先部品が外部サービスＣの場合の設定動作を図１３の矢印１２０２Ｃに示す。
【００７２】
最後に、代理オブジェクトＢのメソッドは、フィールド１２０３Ｂに設定されたインスタンスのメソッドを呼び出す（Ｓ１００７）。インスタンスが部品Ｂのものである場合は、このメソッド呼び出しは部品Ｂのメソッド呼び出しとなる。また、インスタンスが外部サービスＣアクセス用部品のものである場合は、このメソッド呼び出しは外部サービスＣアクセス用部品のメソッド呼び出しとなる。外部サービスＣアクセス用部品のメソッド呼び出し（不図示）は、外部サービスＣにアクセスするために必要な初期化を行い、その後に実際のサービスアクセス処理、例えばＷｅｂサービス通信処理を行う。
【００７３】
以上の処理をもって、部品Ａから部品Ｂの呼び出し、又は部品Ａから外部サービスＣへのアクセスが完結する。以上が部品実行処理である。
【００７４】
次に、第１の実施形態における部品置換処理（Ｓ６０５）の詳細を、図１１を用いて説明する。以下のシーケンスでは置換部１１０、出力部１１３、入力部１１４、インタフェース検証部１１５として機能するＣＰＵ１０１が部品置換処理の動作主体となる。
【００７５】
最初に、ユーザがＰＣ１３０にインストールされているＷｅｂブラウザを用いて部品結合装置１００が提供するＷｅｂページにアクセスする（Ｓ１１０１）。ここでアクセスは、ＨＴＴＰ（Hyper Text Transfer Protocol）プロトコルを用いて行われる。このとき、ユーザが要求したページは部品の置換機能を提供するページであり、Ｊａｖａ（登録商標）サーブレット（出力サーブレット１１３）によって実現されている。ここでＪａｖａ（登録商標）サーブレットは、Ｗｅｂページを出力する手法の一例であり、他の言語や方法を用いても差し支えない。また、Ｊａｖａ（登録商標）サーブレットによるＷｅｂページ出力もＨＴＴＰプロトコルを用いて行われる。
【００７６】
ＰＣ１３０のＷｅｂブラウザから部品置換の要求を受けて、部品結合装置１００の出力サーブレット１１３が部品置換のためのＷｅｂページをＰＣ１３０に対して送信する（Ｓ１１０２）。ここで部品置換のためのＷｅｂページ（不図示）のページ内容には、現在の部品結合関係と、部品結合候補が記述される。ここでは、図４及び図５において、部品Ａの参照ａに結合される部品を置換しようとしてＷｅｂページが要求された場合を考える。この場合、部品Ａの参照ａには現在部品Ｂが結合されており、参照ａに結合され得る候補部品として部品Ｄと部品Ｅが存在することを示すＷｅｂページが送信される。典型的には、結合候補部品は選択リストとして表現されているものとする。
【００７７】
ＰＣ１３０のユーザは、送信されたＷｅｂページを見て、部品Ａの参照ａに結合すべき部品を選択する。例えば、Ｗｅｂページの選択リストから部品Ｄを選択し、フォーム送信ボタンを押下する。これによって、選択部品を記述したデータがＰＣ１３０から部品結合装置１００に送られ、入力サーブレット１１４が部品の置換内容であるデータを受信する（Ｓ１１０３）。
【００７８】
尚、図１に示す例では、出力サーブレット１１３と入力サーブレット１１４とを異なるものとしているが、同一のサーブレットであっても良い。その場合、部品置換内容データの存在の有無により、出力として機能すべきか、入力として機能すべきかを判断し、判断結果に応じて機能すれば良い。
【００７９】
入力サーブレット１１４は、部品置換内容データを置換部１１０に渡す。置換部１１０は置換後の結合先が外部サービスか否かを判定する（Ｓ１１０４）。ここでは、部品置換内容データを見て、部品Ａの参照ａに新たに結合すべき部品が部品Ｄであることを知る。即ち、外部サービスではなく部品Ｄなので、置換部１１０は部品Ｄ用の代理オブジェクトインスタンスを生成する（Ｓ１１１２）。そして、置換部１１０は部品Ａの参照ａに対応するフィールドにその代理オブジェクトインスタンスを設定する（Ｓ１１０８）。
【００８０】
次に、部品置換内容を反映するように、部品結合関係を示すデータ（図５の表データ）を更新する（Ｓ１１０９）。具体的には、部品Ａの参照ａに対応する使用部品列５０３のセルの内容を、部品Ｂから部品Ｄに置き換える。また、部品候補列５０４のセルの内容のうち、部品Ｄを部品Ｂに置き換える。部品Ｅについてはそのままとする。これによって、部品Ｄが使用部品となると共に、今まで使用していた部品Ｂは結合候補となる。
【００８１】
続いて、部品置換内容を反映するように、部品結合定義１２２を更新する（Ｓ１１１０）。更新後の部品結合定義１２２の一例を図１２に示す。図１２と図３に示す（Ｂ）とを比較すると、３行目において、部品Ａの参照ａに対応する結合先部品が部品Ｂから部品Ｄに置き換えられている。また、５行目において、結合候補が部品Ｄから部品Ｂに置き換えられている。
【００８２】
また、部品結合定義１２２の更新内容は、ＨＤＤ１０２に書き込まれる。これにより、部品結合装置１００が再起動された後、部品結合処理が実行されたとき、置換後の内容で部品１２１が結合されるという効果がある。
【００８３】
最後に、置換部１１０が置換成功を出力サーブレット１１３に通知し、出力サーブレット１１３が置換成功通知のためのＷｅｂページをＰＣ１３０に送信する（Ｓ１１１１）。これにより、ＰＣ１３０のＷｅｂブラウザ上には置換成功を示すＷｅｂページが表示され、ユーザは置換成功を知る。
【００８４】
また同様に、ユーザが部品Ｆの参照ｆに結合される部品を部品Ｇから外部サービスＣに置き換える場合を、図１１を用いて説明する。Ｓ１１０１〜Ｓ１１０３については上述の場合と同様である。ここで、部品Ｆの参照ｆに結合される部品として、外部サービスＣをＰＣ１３０のユーザは選択したとする。
【００８５】
置換部１１０は、ユーザが選択した部品１２１を見て置換後の結合先が外部サービスか否かを判定する（Ｓ１１０４）。この場合、外部サービスなのでＳ１１０５へ進み、インタフェース検証部１１５が、指定された部品である外部サービスＣのインタフェース情報を取得する。具体的には、外部サービスＣに対応するＷＳＤＬファイルの内容を調べる。ＷＳＤＬファイルの位置は、部品結合定義１２２の中に記述されている外部サービスＣに対するアクセスＵＲＩ情報又はそのＷＳＤＬファイル位置情報（不図示）から知ることができる。
【００８６】
次に、インタフェース検証部１１５が、取得したインタフェース情報から外部サービスＣのインタフェースが参照ｆのインタフェースに適合しているか否かを判断する（Ｓ１１０６）。ここで適合していると判断すれば、置換部１１０は外部サービスＣ用の代理オブジェクトインスタンスを生成する（Ｓ１１０７）。そして、置換部１１０は部品Ｆの参照ｆに対応するフィールドに、その代理オブジェクトインスタンスを設定する（Ｓ１１０８）。Ｓ１１０９以降は上述の通りである。
【００８７】
これに対して、Ｓ１１０６で適合していないと判断すれば、置換部１１０は置換エラーを出力サーブレット１１３に通知し、出力サーブレット１１３が置換エラー通知のためのＷｅｂページをＰＣ１３０に送信する（Ｓ１１１３）。これにより、ＰＣ１３０のＷｅｂブラウザ上には置換エラーを示すＷｅｂページが表示され、ユーザは置換エラーを知ることができる。
【００８８】
図１２に示すように、１０〜１４行目は、部品Ｆの参照ｆに結合される部品が部品Ｇから外部サービスＣに置き換えられている。更に、処理は説明していないが、図１２に示す１７〜２３行目は、部品Ｈの参照ｈに結合される部品が外部サービスＩから外部サービスＪに置き換えられている。
【００８９】
上述した処理では、ＰＣ１３０のＷｅｂブラウザに対して結合部品候補を出力し、ＰＣ１３０のユーザがその結合部品候補から結合部品を選択していたが、本発明はこれに限定されるものではない。
【００９０】
Ｓ１１０２で、部品置換用のＷｅｂページを送信するとき、自由入力用のテキストフィールドを含んだＷｅｂページを送信する。ここで、候補にはない外部サービスのＵＲＩをＰＣ１３０のユーザがテキストフィールドに入力し、その入力内容を部品結合装置１００に送ったとする。この場合には、Ｓ１１０３でそのＵＲＩが置換内容として入力される。尚、Ｓ１１０４以降の処理は上述の処理と同様であり、新たに指定された外部サービスが結合される。
【００９１】
このとき、Ｓ１１０９とＳ１１１０は上述の処理と少し異なる。新たに指定された外部サービスは使用部品として認識され、今まで使用していた部品１２１は結合部品の候補として認識される。従って、結合候補の部品が一つ増加する。それを示すように図５に示す表データと部品結合定義１２２が更新される。
【００９２】
第１の実施形態は、結合候補部品の出力と選択した部品の入力を、ＨＴＴＰプロトコルを用いて行っており、そのため、出力部１１３は出力サーブレットであり、入力部１１４は入力サーブレットであった。
【００９３】
しかし、本発明はこれだけに限定されるものではない。結合候補部品の出力と選択した部品の入力は他の一般的な入出力デバイスを用いて行っても良い。例えば、ディスプレイ１０７と操作部１０８を用いて同様に結合候補部品の出力と選択した部品の入力が可能である。
【００９４】
［第２の実施形態］
次に、図面を参照しながら本発明に係る第２の実施形態を詳細に説明する。第１の実施形態では、出力部１１３と入力部１１４を用いて部品１２１を置換した。第２の実施形態では、出力部１１３と入力部１１４を用いずに部品１２１を置換する方法を説明する。
【００９５】
第２の実施形態における部品結合装置の構成は、第１の実施形態での図１に示す構成と同様であり、その説明は省略する。
【００９６】
ここで、第２の実施形態における部品結合処理を、図１３を用いて説明する。図１３において、Ｓ１３０１〜Ｓ１３０４はＳ７０１〜Ｓ７０４と同様である。
【００９７】
Ｓ１３０５で、結合部１１１として機能するＣＰＵ１０１が現在処理中の参照について使用部品と候補部品の情報を取得する。Ｓ１３０２において、図５に示す表データを取得済みなので、そこから取得することができる。
【００９８】
次に、結合部１１１はアプリケーション１２０のメタ情報を取得する（Ｓ１３０６）。ここでメタ情報とは、アプリケーション１２０に付随する情報であり、第２の実施形態では不図示であるが、アプリケーション１２０に内包されるものとする。例えば、Ｊａｖａ（登録商標）アプリケーションの場合、ｊａｒファイルの中のマニフェストファイルがメタ情報に相当する。
【００９９】
メタ情報には様々な情報が格納されるが、ここでは優先使用部品情報が格納されているものとする。この優先使用部品情報とは、それが指す部品１２１が候補部品の中にあれば、使用部品として指定された部品１２１より優先して使用するものである。
【０１００】
次に、結合部１１１は、取得したアプリケーション１２０のメタ情報中の優先使用部品情報を見て現在処理中の参照に対応する使用部品をそのまま使用すべきか否かを判定する（Ｓ１３０７）。
【０１０１】
現在処理中の参照に対応する使用部品が優先使用部品情報の中にあれば、そのまま使用すべきだと判断される。一方、現在処理中の参照に対応する候補部品が優先使用部品情報の中にあれば、現在の使用部品がその候補部品に置き換えられるべきだと判断される。
【０１０２】
ここで使用部品をそのまま使用すべきだと判断された場合は、Ｓ１３０９以降の処理を実行する。Ｓ１３０９〜Ｓ１３１４はＳ７０５〜Ｓ７１０と同様である。
【０１０３】
また、使用部品が置き換えられるべきだと判断された場合は、現在の使用部品を優先使用部品情報の中に存在する候補部品に置換する（Ｓ１３０８）。具体的には、Ｓ１１０９とＳ１１１０で説明したように、表データと部品結合定義１２２が更新される。そして、Ｓ１３０９以降の処理を実行する。
【０１０４】
尚、第２の実施形態では、優先使用部品情報として候補部品情報が格納されている例を示したが、代わりに新たな外部サービスに関する情報が格納されていても良い。その場合、候補にない、新たな外部サービスを使用部品として入力した上述の場合と同様の処理を行う。
【０１０５】
また、第２の実施形態では、アプリケーション１２０のメタ情報の中の優先使用部品情報を用いて部品の置換が行われたが、他の方法によるものでも良い。例えば、ＦｌａｓｈＲＯＭ１０６に優先使用部品情報が格納され、結合部１１１がそれを読出し、使用部品の置換の可否を判断しても良い。
【０１０６】
優先使用部品情報そのものを使用しない実施形態も考えられる。例えば、部品結合装置１００のスペック情報を結合部１１１が取得し、規定以上のスペックであれば、部品Ｄを、或いは規定以下のスペックであれば部品Ｂを使用するなどと判定しても良い。
【０１０７】
実施形態によれば、アプリケーションの開発し直しが不要で、アプリケーションの実行時に部品の置換が可能になる。また、結合候補部品を選ぶだけで部品の置換が可能であり、アプリケーションの実行時に部品の置換が簡単に行える。
【０１０８】
また、外部サービスを指定でき、インタフェースを検証できることでアプリケーションが意図していなかったサービスとも確実に連携できる。例えば、アプリケーションが完成した後に作成されたネットワークサービスとも連携できる。
【０１０９】
［他の実施形態］
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2011237883.tif 000003
【図２】
2011237883.tif 000004
【図３】
2011237883.tif 000005
【図４】
2011237883.tif 000006
【図５】
2011237883.tif 000007
【図６】
2011237883.tif 000008
【図７】
2011237883.tif 000009
【図８】
2011237883.tif 000010
【図９】
2011237883.tif 000011
【図１０】
2011237883.tif 000012
【図１１】
2011237883.tif 000013
【図１２】
2011237883.tif 000014
【図１３】
2011237883.tif 000015