JP4959003B2 - 反復コンポーネントのバインディング - Google Patents

反復コンポーネントのバインディング Download PDF

Info

Publication number
JP4959003B2
JP4959003B2 JP2010545906A JP2010545906A JP4959003B2 JP 4959003 B2 JP4959003 B2 JP 4959003B2 JP 2010545906 A JP2010545906 A JP 2010545906A JP 2010545906 A JP2010545906 A JP 2010545906A JP 4959003 B2 JP4959003 B2 JP 4959003B2
Authority
JP
Japan
Prior art keywords
component
service
components
computer
area
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2010545906A
Other languages
English (en)
Other versions
JP2011511987A5 (ja
JP2011511987A (ja
Inventor
エス.キマーリー ランディ
エル.アンダーソン クリストファー
エー.ジパースキー クレメンス
ジェイ.ムーア アンソニー
エフ.ボックス ドナルド
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2011511987A publication Critical patent/JP2011511987A/ja
Publication of JP2011511987A5 publication Critical patent/JP2011511987A5/ja
Application granted granted Critical
Publication of JP4959003B2 publication Critical patent/JP4959003B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

本発明は、反復コンポーネントのバインディングに関する。
オブジェクト指向プログラミングは、オブジェクトインスタンス、即ち「コンポーネント」の集合としてソフトウェアを構造化しており、その各々は、コンポーネントの方法及びプロパティを定義するクラスにならって形成されている。プログラミングを参照すると、「コンポーネント化」はコンポーネントを定義することを示し、コンポーネントはプログラムにとって都合がよい形に作られる。もちろん、プログラムのコンポーネントは、プログラムのより大きな目標を達成するために機能的に相互接続されている。「コンポジション」は、プログラム内のオブジェクトが互いに関連付けられる方法を定義することを示す。
通常、オブジェクト同士の間の相互関係は、プログラムのコンポーネント同士の間の関係を特に具体的に定義するコードまたは宣言を用いて実現される。オブジェクト指向プログラミング技術は、符号化オブジェクト同士の間の相互接続のかかる明示的なコンポジションを用いて大きく進歩した。従来の明示的なコンポジションにおいて、例えば、プログラムのコンポジション(即ち、コンポーネント同士の間の相互関係)を定義するコードは、ソースコードを用いてプログラムをオーサリングした後にコンパイルされる。よって、実行可能ファイルは、生成時から、プログラムの様々なコンポーネント及びプログラムコンポーネント同士の間の様々な相互関係を表す。
本明細書において説明される実施形態は、コンポーネント領域の使用に関し、コンポーネント領域に付随する様々なコンポーネント同士の間のバインディングを定義する。コンポーネント領域は、各コンポーネントによってインポートされるべき様々なサービスをトラッキングし、各コンポーネントによってエクスポートされる様々なサービスをトラッキングする。コンパイル時よりはむしろランタイムに、コンポーネント同士の間の様々な相互関係は、サービスインポートデータ及びサービスエクスポートデータを用いてバインディングされる。従って、利用可能なコンポーネント及びコンポーネントの特徴により、バインディングは異なっていてもよい。これによって、アプリケーションがより柔軟性を有するようになる。1つの実施形態において、バインディングは反復して行われる。例えば、サービスインポートをサービスエクスポートにバインディングする1つのイテレーションの後ならば、いくつかのコンポーネントはコンポーネントがエクスポートするサービスまたはコンポーネントがインポートすることを所望するサービスを展開することができる。
この概要は、請求された発明の重要な特徴または基本的特徴を識別することを意図しておらず、請求された発明の範囲を決定する際の助けとして用いられることも意図していない。
本明細書において説明される実施形態の上記の利点及び特徴並びにその他の利点及び特徴を得ることができる方法を説明するために、上記に簡潔に説明した本発明のより詳しい実施形態が、添付の図面に示される特定の実施形態を参照することによって示される。これらの図面はより上位の原理の例示的な実施形態だけを表しており、従って、本発明の範囲を限定すると見なされるべきでないという理解の下に、実施形態は、添付の図面を利用して付加的な特異性及び詳細を用いて記述されかつ説明される。
コンポーネント領域を動作させることができる例示的なコンピュータシステムを示す図である。 コンポーネント領域内に含まれる付随される論理及びコンポーネントを有するコンポーネント領域の例示的なアーキテクチャを示す図である。 バインディングされた後のコンポーネント領域の様々なコンポーネントの例を示す図である。 ネストされたコンポーネントの展開に付随するプロセスのフローを示す図である。 コンポーネント領域のコンポーネントを反復してバインディングする方法のフローチャートである。 ネストされたコンポーネントを有するコンポーネントをインスタンス化した後にネストされたコンポーネントを展開する方法のフローチャートである。 サービスインポートをサービスエクスポートで満足させる方法のフローチャートである。
本明細書において説明される実施形態によれば、コンポーネント領域は、コンポーネント領域内の様々なコンポーネント同士の間のバインディングを生成するために用いられる。コンポーネント領域は、各コンポーネントによってインポートされるべき様々なサービスをトラッキングし、各コンポーネントによってエクスポートされる様々なサービスをトラッキングする。コンパイル時よりはむしろランタイムに、コンポーネント同士の間の様々な相互関係は、サービスインポートデータ及びサービスエクスポートデータを用いてバインディングされる。従って、利用できるコンポーネント及びコンポーネントの特徴に応じて、バインディングは異なっていてもよい。これによって、アプリケーションがより柔軟性を有するようになる。1つの実施例において、バインディングは反復して行なわれる。例えば、サービスインポートをサービスエクスポートにバインディングする1つのイテレーションの後ならば、いくつかのコンポーネントはコンポーネントがエクスポートするサービスまたはコンポーネントがインポートすることを所望するサービスを展開することができる。
最初に、コンピュータシステムに関する一般的な導入的議論の後に、基本的なコンピュータシステムが図1に関して説明される。次に、コンポーネント領域論理を有するコンポーネント領域の様々な実施形態及びそのオペレーションの様々な実施形態が、図2乃至7に関して示されかつ説明される。
コンピュータシステムは、今や、ますます多種多様な形式をとっている。コンピュータシステムは、例えば、携帯端末、電化製品、ラップトップコンピュータ、デスクトップコンピュータ、メインフレーム、分散コンピュータシステム、または、従来コンピュータシステムと認められなかったデバイスであるかもしれない。本明細書および特許請求の範囲において、用語「コンピュータシステム」は、少なくとも1つのプロセッサとプロセッサが実行することができるコンピュータ実行可能命令を有することができるメモリとを含む何らかのデバイスまたはシステム(またはこれらの組合せ)を含むものとして広く定義される。メモリは、いかなる形式を取ることもでき、コンピュータシステムの性質及び形式によって決まってもよい。コンピュータシステムは、ネットワーク環境を介して分散されていてもよく、複数の構成のコンピュータシステムを含むことができる。
図1を参照すると、その最も基本的なコンフィギュレーションにおいて、コンピュータシステム100は通常、少なくとも1つの処理装置102及びメモリ104を含む。メモリ104は物理的なシステムメモリであってもよい。物理的なシステムメモリは、揮発性、不揮発性、またはこれら2つのうちのいくつかの組み合わせであってもよい。用語「メモリ」は、また、本明細書において、物理的記憶媒体などの不揮発性の大容量記憶装置を示すために用いられる。コンピュータシステムが分散されている場合、処理能力、メモリ能力及び/または記憶能力も同様に分散されていてもよい。本明細書において用いられるように、用語「モジュール」または「コンポーネント」は、コンピュータシステムで実行するソフトウェアオブジェクトまたはルーチンを示すことができる。本明細書において説明される異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピュータシステムで実行するオブジェクトまたはプロセスとして実施されてもよい(例えば、別個のスレッドとして)。
後に続く詳細な説明において、実施形態が、1つまたは複数のコンピュータシステムによって行なわれる動作を参照して説明される。かかる動作がソフトウェアで実施される場合、動作を行なう付随するコンピュータシステムの1つまたは複数のプロセッサは、コンピュータ実行可能命令を実行したことに応じてコンピュータシステムのオペレーションを指示する。かかるオペレーションの例は、データの操作を含む。コンピュータ実行可能命令(及び操作されたデータ)は、コンピュータシステム100のメモリ104に格納されてもよい。
コンピュータシステム100は、また、通信チャネル108を含むことができ、通信チャネル108によって、コンピュータシステム100が、例えばネットワーク110などを介して他のコンピュータシステムと通信できるようになる。通信チャネル108は、通信媒体の例である。通信媒体は、通常、コンピュータ可読命令、データ構造、プログラムモジュール、または搬送波もしくは他の輸送メカニズムなどの変調されたデータ信号内の他のデータを具体化し、あらゆる情報交付媒体を含む。一例であって限定ではないが、通信媒体は、有線ネットワーク及び直接配線接続などの有線媒体、並びに音響、無線通信、赤外線及び他の無線媒体などの無線媒体を含む。本明細書において用いられる用語コンピュータ可読媒体は、記憶媒体及び通信媒体の両方を含む。
図1において、コンピュータシステム100は、メモリ104の不揮発性部分の中にコンポーネント領域112を有するように示されている。図2及び図2に続く図に関して更に詳細に説明されるように、コンポーネント領域112は様々なコンポーネントをその中にインスタンス化する論理コンテナとして用いられる。次にコンポーネント領域論理114は、コンパイル時にバインディングされたコンポーネントを有するというよりは、様々なコンポーネントを動的にバインディングする。
本発明の範囲内の実施形態は、また、コンピュータ可読媒体を含み、該コンピュータ可読媒体に格納されるコンピュータ実行可能命令またはデータ構造を運ぶかまたはこれらを有している。かかるコンピュータ可読媒体は、汎用コンピュータまたは専用コンピュータがアクセスできるあらゆる利用可能な媒体であってもよい。一例であって限定ではないが、かかるコンピュータ可読媒体は、物理的記憶装置及び/またはメモリ媒体を含むことができ、該物理的記憶装置及び/またはメモリ媒体は、RAM、ROM、EEPROM、CD−ROMもしくは他の光ディスク記憶装置、磁気ディスク記憶デバイスもしくは他の磁気記憶デバイス、またはコンピュータ実行可能命令またはデータ構造の形で所望のプログラムコード手段を運ぶかまたは格納することができかつ汎用コンピュータまたは専用コンピュータがアクセスすることができるあらゆる他の媒体などである。情報がネットワークまたは別の通信接続(配線接続による通信接続、無線による通信接続、または、配線接続による通信接続または無線による通信接続の組み合わせ)を介してコンピュータに転送されるかまたは提供されると、コンピュータは、コンピュータ可読媒体として該接続を適当に表示する。よって、いずれのかかる接続も、コンピュータ可読媒体と称されるのが適当である。上記の組合せも、コンピュータ可読媒体の範囲内に含まれなければならない。
コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理装置に特定の機能または一群の機能を実行させる命令及びデータを含む。本発明は構造上の特徴及び/または方法論的動作に固有の言語で説明されているが、添付の特許請求の範囲において画定される本発明は、本明細書において説明されている特定の特徴または特定の動作に必ずしも限定されるわけではないと理解されなければならない。むしろ、本明細書において説明されている特定の特徴及び動作は、特許請求の範囲を実施する例の一種として開示されている。
図2は、コンポーネント領域210及び「コンポーネント領域論理」と名前を付けられた付随するコンポーネント領域マネージャ220を示す。図2のコンポーネント領域210は、例えば、図1のコンポーネント領域112であってもよい。コンポーネント領域210は、コンポーネントインスタンスを含むことができるいかなる論理コンテナであってもよい。コンポーネント領域210の柔軟性によって、コンポーネント領域が様々なクラスの様々なコンポーネントインスタンスを含むことができるようになる。コンポーネント領域210内に含まれるコンポーネントのタイプは、アプリケーション及びそのアプリケーションによって用いられる構成要素によって決まる。従って、本発明の原理は、コンポーネント領域210内に含まれるコンポーネントのタイプに限定されないし、コンポーネント領域内のコンポーネントの数にも限定されない。そうは言っても、例示を目的として、6つのコンポーネント211、212、213、214、215、及び216が、コンポーネント領域210に含まれるように示されている。
コンポーネント領域210は、実際にまたは論理的に他のコンポーネントを含むことができる何らかの論理コンテナでもあってもよい。例えば、コンポーネント領域210は、様々なコンポーネントインスタンスを与えられることができるコンテナクラスのインスタンスであってもよい。コンポーネントインスタンスの集合は、データ構造である。コンポーネント領域210は、また、直接各コンポーネントインスタンスを含まないが場合によっては付随するコンポーネントに関する情報を有するオブジェクトであってもよい。その場合でさえ、コンポーネントはコンポーネント領域210内で論理的とみなすことができる。例えば、1つの実施形態において、コンポーネント領域は、一群の名前と値の対である一群の値だけを含む場合もある。コンポーネント領域は、サービスをエクスポートするコンポーネントから値を与えられ、そのサービスをインポートするコンポーネントが値を与えられる。そのような状況を考慮してもなお、コンポーネントは、論理的にコンポーネント領域内にまたはその内部にあるとみなすことができる。この明細書においてかつ特許請求の範囲において、コンポーネントがコンポーネント領域内にまたはその内部にあると言う場合、このことは、コンポーネントがコンポーネント領域内に含まれるかまたは、コンポーネント領域論理220がコンポーネント領域に付随する様々なコンポーネントと通信しかつバインディングすることができるようなやり方でコンポーネントがコンポーネント領域に何らかの形で論理的に付随するかのいずれかであるということを意味する。
コンポーネント領域論理220は、例えば、関連メカニズム222、サービスインベントリメカニズム223、ネストされたコンポーネントの展開メカニズム224、付随するマッチングルール226を有するマッチングメカニズム225、抽出メカニズム227、及び付随するカタログ229を有するカタログ化メカニズム228を含む様々なメカニズムを含むように示されている。これらの様々なメカニズム222乃至229は、別個のメカニズムとして示されている。しかしながら、これはコンポーネント領域論理220の機能を説明する際に明確にすることを目的としている。これらが実際に別個のメカニズムであることを表すために用いられていない。いくつかのメカニズムを、単一のコンポーネントに組み合わすことができる。実際、コンポーネント領域論理の全ては、モノリシックであってもよい。他の例では、各メカニズムは複数のコンポーネントから構成されていてもよい。単一のコンポーネントも、複数のメカニズムに関係する論理を含むことができる。様々なコンポーネント領域論理220のメカニズムのオペレーションを、すぐ後に説明する。
しかしながら、最初に、この詳細な説明は、コンポーネント領域210内でインスタンス化される様々な構成コンポーネントを振り返ってみる。図示された例において、構成コンポーネントは、コンポーネント211乃至216を含む。各コンポーネントは、特定のクラスのインスタンスである。この原理を記号で表すために、各コンポーネントは、特定の形式で示されている。例えば、例において、コンポーネント211は正方形で示されている。コンポーネント212及び214は、これらが同じクラスのインスタンスの各々であって各インスタンスはコンポーネント211と同じクラスでないことを示す三角形で示されている。コンポーネント213は、これがコンポーネント211及び212と異なるクラスのインスタンスであることを表す円で示されている。コンポーネント215は、コンポーネント211乃至214と異なったクラスのインスタンスであることを表している上辺が大きい平行四辺形で示されている。最後に、コンポーネント216は、コンポーネント211乃至215と異なったクラスのインスタンスであるということを表している底辺が大きい平行四辺形で示されている。
各コンポーネントは、潜在的に1つまたは複数のサービスインポート及び潜在的に1つまたは複数のサービスエクスポートを含む。コンポーネントに関する「サービスインポート」は、コンポーネントがサービスを要求しているという表示である。コンポーネントに関する「サービスエクスポート」は、コンポーネントがサービスを提供することを提案しているという表示である。サービスインポート及びサービスエクスポートは、対応するコンポーネントから伸びたアームによって、図2において各々記号で表されている。サービスインポートは、その端部にカップの形を有するアームで表されている。サービスエクスポートは、その端部にボールの形を有するアームで表されている。図2のコンフィギュレーションにおいて、コンポーネント211−216の全ては、コンポーネント領域210内でインスタンス化されている。しかしながら、コンポーネントのいずれも互いに接続されていない。コンポーネントが接続されるべき方法は、ランタイムに先立ってさらには明確に特定されていない。その代わりに、サービスインポート及びサービスエクスポートが特定されている。様々なサービスのインポート及びエクスポートは、図2において文字A乃至Fを用いて抽象的に表されている様々なサービスに対するものである。
例えば、コンポーネント211は、アームaで表されるようなサービスBのための1つのサービスエクスポートを有する。更に、2つのサービスインポート、即ち、アームiで表されるようなサービスAのための1つのサービスインポート及びアームjで表されるようなサービスAのためのもう1つのサービスインポートを有する。コンポーネント212は、2つのサービスエクスポート、即ち、アームbで表されるサービスAのための1つのサービスエクスポート及びアームcで表されるサービスEのための1つのサービスエクスポートを有する。コンポーネント212は、サービスインポートを有していない。コンポーネント213は、アームdで表されるサービスFのための1つのサービスエクスポート及び、2つのサービスインポート、即ち、アームkで表されるサービスBのための1つのサービスインポート及びアームmで表されるサービスCのためのもう1つのサービスインポートを有する。コンポーネント214は、コンポーネント212と同じクラスである。1つの実施形態において、サービスインポート及びサービスエクスポートのタイプは、クラスによって画定される。従って、コンポーネント214は、サービスインポートを有しておらず、2つのサービスエクスポート、即ち、アームfで表されるサービスAのための1つのサービスエクスポート及びアームeで表されるサービスEのための1つのサービスエクスポートを有するという点で、コンポーネント212と同様である。コンポーネント215は、サービスインポートを有しておらず、アームgで表されるサービスDのためである1つのサービスインポートを有している。コンポーネント216は、アームnで表されるサービスDのための1つのサービスインポートと、アームhで表されるサービスCのための1つのサービスエクスポートを有している。
コンポーネント領域210は、コンポーネントのコンポジションの前に様々なコンポーネント211乃至216を示す。「コンポジション」は、様々なコンポーネントが相互接続されるべき方法を定義することを示す。最終的に、コンポーネント領域210のコンポーネントは、コンポーネントの定義された相互接続を有する。しかしながら、このことは、コンポーネント領域210の様々なコンポーネントで表されるアプリケーションの実行前に行われなかった。むしろ、コンポーネント領域論理220は、ランタイムにおける様々なコンポーネント同士の間の接続を定義する。
図3は、コンポジション後の様々なコンポーネント211乃至216を示す。1つの特定のマッチングオペレーションにおいて、特定のサービスのためのサービスエクスポートは、同じ特定のサービスのためのサービスインポートに連結することになっている。図3において、コンポーネント212のサービスAのためのサービスエクスポートは、(アームjに接続するアームbで表されるように)コンポーネント211のサービスAのためのサービスインポートに接続されている。これによって、コンポーネント212は、関連するインタフェースを用いてコンポーネント211にサービスAを提供することが表されている。同じ記号で表された意味は、サービスインポート及びサービスエクスポートのそれぞれのサービスに関して図3に示されているサービスインポートとサービスエクスポートとの間の他の接続にあてはまる。例えば以下のアーム対は、接続されて示されている。即ち、サービスAのためのアームfとアームi、サービスBのためのアームaとアームk、サービスCのためのアームhとアームm、及びサービスDのためのアームgとアームnが接続されて示されている。コンポーネント212のサービスEのためのサービスエクスポート(アームcで表されている)は、いずれのサービスインポートにも接続されておらず、このサービスエクスポートが潜在的であることを表している。同じ記号で表された意味が、アームd及びアームeにあてはまる。
コンポーネント同士の間の接続は前もって定義されていないが、コンポーネントのためのサービスエクスポート及びサービスインポートは示されている。サービスエクスポート及びインポートがどこでまたはどのように特定されるかは問題ではない。しかしながら、1つの考えられる場所は、クラス定義自体においてであってもよい。例えば、C#コードで書かれた「Consumer」と称されるクラスのための以下のクラス定義を検討する。
Figure 0004959003
角括弧において、class Consumerは、「Consumer Report」と称されるサービスをインポートすることを宣言する。角括弧の内容は、C#のコンパイルされたオブジェクトの機能に影響を及ぼさない。むしろ、内容は、そのデフォルト実行の一部でない方法でこれを記述するコンパイルされたタイプまたはメンバを伴うメタデータとしてコンパイルされたクラスに書き込まれるが、外部から調べることができかつ影響を与えることができる。この例では、クラスのオブジェクトがインスタンス化されることになっているときに、その事前コンパイルされた形式または事後コンパイルされた形式のいずれかのクラス定義が参照されて、そのクラスの後の特定のオブジェクトのためのサービスインポートを識別してもよい。
サービスインポートとサービスエクスポートとの間の1つの例示的なマッチングにおいて、サービス名は正確にマッチングすることになっているが、他のマッチングルールがあってもよい。以下は、クラスが「Consumer Report」と称されるサービスをエクスポートする、C#で表されたクラス定義を表す。
Figure 0004959003
ここで、角括弧内のメタデータ表現は、クラスReportEnvelopeが「Consumer Report」サービスをエクスポートすることを宣言している。例えば、ReportEnvelopeクラスのオブジェクトがConsumerクラスのオブジェクトと接続されている場合、ConsumerオブジェクトはReportEnvelopeオブジェクトからレポートを得ることができる。
この例では、コンパイルされているかまたは事前コンパイルされているかにかかわらず、クラス自体が参照されて、特定のオブジェクトのためのサービスエクスポート及びサービスインポートを判断することができる。別の実施形態では、オブジェクトは、コンポーネント領域論理が様々なオブジェクトにサービスインポートの識別及びサービスエクスポートの識別を要求するために用いることができるインタフェースを提供してもよい。
コンポーネント領域マネージャ220の様々なメカニズム222−229が、ここで詳細に説明される。今度も、これらのメカニズムは、機能によって分類されており、コンポーネント領域マネージャ220におけるいかなる実際のオブジェクト境界も表していない。下記のように、様々なメカニズム222−229のうちのいくつかは、システムで提供される基本的なランタイムによって提供されることが多いインスタンス化メカニズムを用いることもある。インスタンス化メカニズムは、クラス定義を使用する能力を有していて、そのクラスに続くコンポーネントをインスタンス化する。
関連モジュール222は、インスタンス化されたコンポーネントをコンポーネント領域210に付随させることができる。例えば、図2において、コンポーネント211乃至216は、コンポーネント領域210内に付随して示されており、該コンポーネントはまだインスタンス化されていないが、コンポーネント領域210に付随するというような方法で、インスタンス化されるということを表している。コンポーネント領域210に付随するコンポーネントは、ランタイムに特定のバインディング処理を受ける。コンポーネント領域とのコンポーネントの関連は、各コンポーネントのインスタンス化の時点で行われてもよいし、または、その後しばらくして行われてもよい。
サービスインベントリメカニズム223は、コンポーネント領域に付随するコンポーネントによってエクスポートされたサービス及びインポートされたサービスにインデックスを付ける。サービスインベントリメカニズム223は、これらのサービスを発見するためのメカニズムを有することができる。例えば、1つの実施形態において、特定のクラスのコンポーネントがインスタンス化される場合、サービスインベントリメカニズム223は、クラス定義にアクセスして、インポートされたサービス(もしくは複数のサービス)またはエクスポートされたサービス(もしくは複数のサービス)を判断することができる。別の実施形態では、コンポーネントは、発見の要求に応じるように構成されていてもよい。例えば、コンポーネントは、アプリケーションプログラムインタフェースを提供することができ、該アプリケーションプログラムインタフェースは、エクスポートしかつインポートするサービス(または複数のサービス)のクエリを行っているエンティティに通知する働きをする。あるいは、コンポーネントは、インスタンス化されると直ちに特定の場所にそのサービスインポート及びサービスエクスポートを書き込むように構成されていてもよい。
例えば、図2を参照すると、サービスインベントリメカニズムは、概念的に以下の表1を維持することができる。
Figure 0004959003
サービスインベントリメカニズム223は、表として情報を表す必要はないが、表は、維持される情報のタイプを読む人に示すために役に立つ説明である。更に、サービスインベントリメカニズム223は、特定のコンポーネントによってエクスポートされるサービスまたはインポートされるサービスの全てを知らないかもしれない。
ネストされたコンポーネントの展開メカニズム224は、コンポーネント領域のコンポーネントがその中にネストされたコンポーネントを有しているかどうかを判断する。例えば、図4は、図2のコンポーネントのうちの1つ(即ち、コンポーネント215)が矢印410で表される展開前に、ネストされたコンポーネントの階層を含んでいることを表す。特に、図4のコンポーネント215は、展開前に2つのチャイルドコンポーネント401及び402を含む。これらのチャイルドコンポーネントのうちの1つ符号402は、展開前にこれら自身のチャイルドコンポーネント411及び412を含む。
ネストされたコンポーネントの展開メカニズム224は、ネストされたコンポーネントを発見して、該コンポーネントを展開して、ネストされたコンポーネントによってエクスポートされかつインポートされるサービスもバインディングオペレーションに対して表示させられる。例えば、展開410の後に、様々なネストされたコンポーネント401、402、411、及び412は、バインディングのために表示されるように示されたエクスポートされた該コンポーネントの様々なサービス(コンポーネント411について言えばサービスA及びE)とともに示されている。更に、インポートされた様々なサービス(コンポーネント401のためのサービスA、コンポーネント402のためのサービスB及びコンポーネント412のためのサービスC)がバインディングのために表示されるように示されている。よって、展開後に、これらのネストされたコンポーネントは、サービスインベントリメカニズム223によって認識される。
マッチングメカニズム225は、コンポーネントをバインディングせよという要求に実際に応ずる。バインディングを行うために、マッチングメカニズム225は、一組のマッチングルール226に従う。マッチングメカニズム225は、マッチングルール226に従って、サービスインポートをサービスエクスポートにマッチングさせて、バインディングする。例えば、図3において、コンポーネント領域210の様々なコンポーネントは、互いにバインディングされて示されている。
マッチングルールは、デフォルトの潜在的な一組のマッチングルールであってもよい。または、デフォルトのマッチングルールにオーバライディングする他のマッチングルールがあってもよい。例えばデフォルトで、サービスインポートをサービスエクスポートにマッチングさせることは、サービス名の正確なマッチングを見つけることによって行われる場合もある。例えば、上述のクラス定義の例において、クラス「Consumer」は「Consumer Report」と称されるサービスインポートを有する。一方、クラス「ReportEnvelope」は、正確に同じ名前「Consumer Report」によるサービスエクスポートを有する。サービス名の正確なマッチングルールに従って、ReportEnvelopeのインスタンスのサービスエクスポートは、Consumerのインスタンスのサービスインポートにバインディングすることができる。
しかしながら、他のサービスマッチングルールが適用されてもよい。例えば、いくつかのマッチングルールにおいて無視される場合があるかもしれない。他のルールにおいて、互いにマッチングしているとみなすことができるサービス名のクラスタがあってもよい。例えば、イタリア語のサービス名、フランス語のサービス名などがあってもよく、これらは、各々マッチングしているとみなすことができる。別の一組のマッチングルールによれば、サービスインポートまたはサービスエクスポートが名前で特定されない場合、マッチングメカニズム224は、メンバ名、サービスインポートのタイプ及びパラメータ、対抗するメンバ名、サービスエクスポートのタイプ及びパラメータを実際に構造的に判断することができる。
サービスマッチングメカニズム225は、また、単に論理的にコンポーネントをマッチングさせないステップを取ることができるが、また、サービスインポート及びサービスエクスポートの実際の機能的なバインディングに少なくとも関係することができる。1つの実施形態において、一旦サービスマッチングメカニズム225がマッチングを見つけると、サービスマッチングメカニズム225は、サービスをエクスポートしているコンポーネントからの要求されたサービスを得ることができて、サービスをインポートしているコンポーネントにそのサービスを提供することができる。
別の実施形態において、サービスマッチングメカニズム225は、サービスをインポートしているコンポーネントにハンドルデータ構造を提供することができる。次にサービスをインポートしているメカニズムは、そのハンドルを用いて、サービスをエクスポートしているメカニズムとのバインディングを完了することができる。サービスマッチングメカニズムによって、サービスをインポートしているメカニズムがマッチングを受け入れるようにするかまたは拒絶できるようにするのは任意である。例えば、マッチングが受け入れられる場合、サービスをインポートしているコンポーネントは、サービスマッチングメカニズムに通知することができ、実際のバインディングが生じることに続く。サービスが受け入れられるとみなされない場合、サービスマッチングメカニズムは、受け入れられるマッチングが見つかってサービスをインポートしているコンポーネントによって受け入れられるまで、予備のマッチングなどを見つける場合がある。
例えば、ハンドルデータ構造は、ファクトリを含むことができ、該ファクトリは、サービスをインポートしているコンポーネントが、そのインポートとマッチングコンポーネントによって提案されたエクスポートとの間のバインディングオペレーションを実行するために用いることができる。ハンドルは、また、メタデータ(以後「選択メタデータ」と称される)を含むことができ、メタデータは、サービスをインポートしているコンポーネントが、バインディングを実行するためにファクトリをトリガするべきか否かを判断するために用いることができる情報を含む。1つの実施形態では、サービスをインポートしているコンポーネントは、選択メタデータを用いないかもしれないが、その代わりに自動的にバインディングを受け入れるファクトリを用いることができる。しかしながら、サービスをインポートしているコンポーネントは、提案されたエクスポートがサービスをインポートしているコンポーネントに受け入れられるかどうかを判断するために代わりに選択メタデータを用いることができる。サービスをインポートしているコンポーネントは、バインディングを受け入れることを選択する場合、サービスをインポートしているコンポーネントは、ファクトリを用いてシステムにバインディングの完了をもたらすことができる。
別の場合では、特定のサービスインポートに対するサービスエクスポートの複数の起こ得るマッチングがあるかもしれない。その場合、ハンドルは、ファクトリ及び潜在的なサービスエクスポートの各々のための選択メタデータを含むことができる。次にサービスをインポートしているコンポーネントは、メタデータを用いて、いずれも選択しないかまたはインポートのためのサービスエクスポートのサブセットを選択することができる場合がある。次にサービスをインポートしているコンポーネントは、選択されたサービスエクスポートの対応するファクトリを用いて、選択されたサービスエクスポートの各々とのバインディングを完了することができる。
例えば、コンシューマコンポーネントは、上記の例におけるように「Consumer Report」と称されるサービスをインポートすることになっていると仮定する。「Consumer Report」と称されるサービスを提供する複数のコンポーネントがあった場合、コンシューマコンポーネントは、潜在的なサービスエクスポートのマッチングの各々に対して、ファクトリ及び選択メタデータを与えられてもよい。選択メタデータは、例えば、1)Consumer Reportが生成された日付け、及び2)Consumer Reportが関係している製品クラスの識別、を含むことができる。コンシューマコンポーネントが、「Consumer Report」と称される1つのサービスエクスポートだけに興味があった場合、コンシューマコンポーネントは、選択メタデータを用いて、最近生成されかつコンシューマコンポーネントに最も関連した製品クラスを示すコンシューマレポートサービスのエクスポートを識別することができる。
一部の例では、特定のサービスインポートにマッチングするサービスエクスポートを提供するコンポーネントがコンポーネント領域内にないかもしれない。かかる場合、バインディングはやはり潜在的に行なわれてもよい。バインディングを特定のサービスインポートについて最初に行なうことができない場合を処理する多くの方法がここで説明される。
ある例では、サービスインポートは、「重要性」の特性等に付随してもよく、「重要性」の特性は、サービスインポートが満足する全体的なアプリケーションの機能性に対してどれくらい緊急かについて特定する。重要性が高い場合、サービスエクスポートはどこかで見つけられなければならない。しかしながら、重要性が低い場合、アプリケーションはサービスインポートを全くバインディングすることなしにやっていくことができる場合もある。様々な中間の重要性レベルがあってもよく、これらは、バインディングオペレーションがサービスエクスポートを見つけようとすることになっている範囲まで制御することができる。
1つの実施形態では、特定のサービスインポートのためのサービスエクスポートが、コンポーネント領域内で見つけられない場合、抽出メカニズム227が、別のコンポーネント領域から別のコンポーネントを見つける場合もある。従って、単一のコンピュータシステム上で動作しているかまたは、コンピュータシステムがネットワークを介してアクセスできる多くのコンポーネント領域があってもよい。その場合、バインディングされるべきサービスインポートに対応するサービスエクスポートを提供するコンポーネントが見つかるまで、抽出メカニズム227は、これらの他のコンポーネント領域を求めてサービスインベントリメカニズム(または場合によってはカタログメカニズム228)を調べることができる。1つの実施形態では、抽出メカニズム227は、サービスエクスポートを提供するコンポーネントとして、自身をシミュレーションすることができる。よって、サービスインポートは、抽出メカニズム227自体にバインディングすることができる。サービスをインポートしているコンポーネントがサービスを求めて抽出メカニズム227にコールを行う場合、抽出メカニズム227は、その外部コンポーネントとインタフェースして、要求されたサービスを行なうことができる。
1つの実施形態では、コンポーネント領域は、関連するコンポーネント領域の数に付随してもよい。抽出メカニズム227は、適当なサービスエクスポートのためのこれらの関連するコンポーネント領域の全てを探し出すことができる。他の実施形態では、抽出メカニズム227は、関連するコンポーネント領域のうちのいくつかだけを探し出すことができる。例えば、コンポーネント領域210がコンポーネント領域の階層的ツリーのノードであった場合、抽出メカニズム227は、横系統のコンポーネント領域を探すよりむしろ、縦系統のノードを表しているコンポーネント領域だけを探すことができる場合もある。よって抽出コンポーネント227は、多くの異なるサービスエクスポートのためのサービスエクスポートを抽出することができるとともに、これによってサービスを実行する様々な外部のコンポーネントとのインタフェースに必要な基本的な処理を実行する。
あるいは、または更に、サービスインポートがコンポーネント領域内ですでにインスタンス化されたコンポーネントで満足されない場合、カタログ化メカニズム228はカタログ229を用いて、特定のサービスエクスポートを提供するそのときインスタンス化されていないコンポーネントを見つけることができる。例えば、カタログ229は、様々なクラス定義を含み、各々は、そのクラスのオブジェクトによってエクスポートされるサービスを記述するメタデータを有している。付随するメタデータについての判断に基づいて、カタログメカニズム228は、必要とされるサービスエクスポートを提供する特定のクラス定義を見つけることができる。次にカタログ化メカニズム228は、コンポーネント領域210内でインスタンス化されるべきそのクラスの外部のコンポーネントを選択することができる。あるいは、サービスをインポートしているコンポーネントは、カタログ化されたクラスによってエクスポートされるサービスを記述するメタデータを与えられてもよい。その結果、インポートしているコンポーネントは、エクスポートされたサービスが満足のいくものかどうかに関して自身の判断を行うことができる。これが満足のいくものである場合、サービスをインポートしているコンポーネントは、クラスのコンポーネントをインスタンス化させることができる。例えば、サービスをインポートしているコンポーネントはまた、サービスをエクスポートしているコンポーネントがインスタンス化されるようになるファクトリにアクセスする能力を提供されていてもよい。
図2のコンポーネント領域論理220の様々な機能を説明してきたが、ここで様々なプロセスが図5乃至図7に関して説明される。
図5はプログラムのコンポーネントを作成する方法500のフローチャートを示す。コンポーネント領域を作成した(動作501)後に、最初のコンポーネントセットがインスタンス化されて、コンポーネント領域に付随させられる(動作502)。例えば、図2を参照すると、コンポーネント領域210は、付随するコンポーネント領域論理220のうちのいくつかまたは全てを用いて生成されてもよい。コンポーネント領域の最初のコンポーネントセットは、わずか1つであってもよいが、制限なくもっと多くてもよい。図2の例では、コンポーネント領域に6つのコンポーネント211乃至216がある。しかしながら、最初のコンポーネントセットのコンポーネントの数は、本発明のより上位の原理にとって重要でない。コンポーネント領域においてインスタンス化されなければならない、最初のコンポーネントセットの各コンポーネント及びコンポーネント領域でインスタンス化されるべきいずれかの次のコンポーネントは、コンポーネント領域に付随しており、その結果、コンポーネントのうちのいずれかによってインポートされるサービスがもしあれば当該サービス、及びコンポーネントのうちのいずれかによってエクスポートされるサービスがもしあれば当該サービスが、コンポーネント領域に対して表示される。
このインスタンス化プロセスの中の一部として、ネストされたコンポーネントが展開される(動作503)。図6は、コンポーネントのインスタンス化する方法600のフローチャートを示す。コンポーネント自体は、最初にインスタンス化される(動作601)。コンポーネントがいずれかのネストされたコンポーネント(判断ブロック602のいいえ)を含まない場合、展開は起こらない。その一方で、ネストされたコンポーネントがある場合(判断ブロック602のはい)、これらのネストされたコンポーネントが展開されて(動作603)、その結果、ネストされたコンポーネントによってインポートされるサービスがあれば該サービスがコンポーネント領域に表示されかつネストされたコンポーネントによってエクスポートされるサービスがあればサービスがコンポーネント領域に表示される範囲までネストされたコンポーネントもコンポーネント領域に表示される。この展開の例は、図4に関して説明された。1つまたは複数のネストされたコンポーネントを有するコンポーネントがコンポーネント領域にインスタンス化されるときはいつでも、この展開を行なうことができる。あるいはまたは更に、バインディングが繰り返されるたびに、予め定められた時間にコンポーネントが展開されてもよい。例えば、図3では、ネストされたコンポーネントの展開は、各イテレーションの初めに生じる。
図5に戻ると、一旦コンポーネントの全てが展開されると、コンポーネント領域論理は、コンポーネント領域論理がエクスポートされるサービスを求めてコンポーネントにポーリングしようとしていると最初のコンポーネントセットのうちの少なくともいくつかのコンポーネントに通知することは任意である(動作504)。コンポーネント領域は、そのサービスエクスポートに関してポーリングされるのに備えてとられるようにプログラムされているいずれかのアクションをとることによって応じることができる。例えば、コンポーネントは、別のコンポーネントをコンポーネント領域にプログラム的にインスタンス化することができる。コンポーネントは、そうでなければサービスエクスポートの要求を受け取るために適当な準備状態に入ることができる。
次に、コンポーネント領域論理は、コンポーネントによって提供されるサービスエクスポートを求めてコンポーネント領域の各コンポーネントにポーリングする(動作505)。このリストから、サービスエクスポートデータが策定されてもよい。次に、コンポーネント領域論理は、サービスインポートを求めて各コンポーネントにポーリングすることができて、サービスインポートの各々をサービスエクスポートのリストで満足させることができる(動作506)。図7に関して更に詳細に説明されるように、サービスインポートを満足させるサービスエクスポートが見つけられない場合、コンポーネント領域論理は、サービスを提供するクラスを求めてカタログを捜し、適当であれば、カタログ化されたクラスのコンポーネントをインスタンス化させる。
特定のサービスインポートを満足させることができる複数のサービスエクスポートがあり、かつ複数のエクスポートがサービスインポートに受け入れられる場合、サービスエクスポートの全ては、サービスエクスポートの集合としてサービスインポートが利用できるようにされる。サービスインポートが所望するより多くのサービスインポートを満足させることができるサービスエクスポートがある場合もある。例えば、1つのサービスエクスポートだけが所望されるかまたは1つしかサービスエクスポートが所望されないことを示したサービスインポートを満足させることができる複数のサービスエクスポートがある場合がある。あるいは、4つのサービスエクスポートしか所望しないことを示したサービスインポートに対して利用可能な10個のサービスエクスポートがある場合がある。その場合、これらの場合を処理する方法を識別するためにコンフリクトの解消が用いられる。
サービスインポートが所望するより多くのサービスエクスポートがある場合、1つの任意のコンフリクト解消ステップは単にコンポジションプロセスを失敗させることである。その場合、例外レポートは、コンポジションプロセスを完了できなかった理由に関していくつかのガイダンスを与えることができる。別のオプションは、特定のマッチングの許容性を示すルールを有すること及び、サービスインポートにマッチングされたより多くの受け入れ可能なサービスエクスポート(または複数のサービスエクスポート)を有することであって、その結果適当な数のサービスエクスポートがサービスインポートにバインディングされる。マッチングしているサービスエクスポートがない場合、サービスインポートはまた、中身のないマッチングが受け入れられるか否かを特定することができる。このことは、サービスのインポートによって可能にされる機能の重要性によって決まってもよい。
例えば、図7を参照すると、コンポーネント領域内でコンポーネントを捜すと(動作701)、コンポーネント領域内に特定のサービスインポートを満足させるサービスエクスポートが存在するか否かが判断される(判断ブロック702)。サービスエクスポートを提供するサービスコンポーネントが見つけられる場合(判断ブロック702のはい)、サービスインポートはコンポーネント領域内で見つけられたコンポーネントのサービスエクスポートを用いることで満足している(動作703)。
その一方で、特定のサービスインポートを満足させるサービスコンポーネントがコンポーネント領域内で見つけられない場合(判断ブロック702のいいえ)、適当なサービスをエクスポートするコンポーネントがコンポーネント領域の外側で見つけられる(動作704)。これは、例えば、コンポーネントのクラス及び該コンポーネントのクラスのエクスポートされたサービスの一覧を示しているカタログを参照することによって実現されてもよい。
コンポーネントがコンポーネント領域内でインスタンス化されることになっているか(判断ブロック705の「インスタンス化」)またはコンポーネント領域論理によって抽出されることになっているかどうか(判断ブロック705の「抽出」)によって、異なる動作をとることができる。
コンポーネントのインスタンス化が生じる場合、見つけられたコンポーネントはコンポーネント領域においてインスタンス化されることになっており(動作706)、新しくインスタンス化されたコンポーネントによってエクスポートされるサービスは、コンポーネント領域の前から存在するコンポーネントのサービスインポートにバインディングされる(動作707)。抽出が行われることになっている場合、コンポーネント領域論理の抽出メカニズムは、見つけられたコンポーネントによって提供されるサービスエクスポートを抽出することができる(動作708)。
図5に戻ると、一旦バインディングの最初のイテレーションが完了すると、様々なコンポーネントは、バインディングイテレーションが完了したことを通知される(動作507)。この段階で、コンポーネントは、最初のバインディングに応じて新しいサービスインポートまたはサービスエクスポートを表示させることができる。
この実施形態において、ネストされたコンポーネントの展開が最初に実行され、サービスエクスポートのためのポーリングが次に行われ、サービスインポートのためのポーリング及び各サービスインポートの実現が次に行われる。しかしながら、これらのステップが予め定められた順番で行なわれかつ様々なコンポーネントがその順番について理解している限り、コンポーネントは、所定の順番の中でコンポーネントがある場所に基づいて適当な処置を行うことができる。例えば、上記の例では、コンポーネントはサービスエクスポートのポーリングの前にネストされたコンポーネントを最初に展開することになっていた。更に、サービスは、例えばプログラムで他のコンポーネントをインスタンス化することによって、自身にポーリングの準備をさせる立場にあった。最後に、一旦最初のバインディングが完了したならば、コンポーネントは、イテレーションを繰り返すことができるということを知り、従って、コンポーネントは次のイテレーションのための新しいサービスインポート及び新しいサービスエクスポートを公開する機会を有していた。
図5に戻ると、次に、最後のイテレーションからのバインディングオペレーションによってバインディングオペレーションの別のイテレーションを必要とする何らかの副次的な影響が生じたか否かが判断される(判断ブロック508)。例えば、バインディングオペレーションにおいて、新しいコンポーネントは、コンポーネント領域にインスタンス化されてもよい。例えば、コンポーネントは、カタログの中で見つけられてコンポーネント領域にインスタンス化される場合もあった。これらの新しくインスタンス化されたコンポーネントは、該コンポーネント自体サービスインポートを有することができる。更に、コンポーネントがサービスバインディングを有する場合、該コンポーネントは自身が新しいサービスエクスポートを提供することができるということを発見することができ、新しいサービスインポートを公開する必要があるかもしれない。
反復が要求される場合(判断ブロック508のはい)、コンポーネント領域論理は、(最初のインスタンス化の間にすでに展開されていないならば)もう一度あらゆる新しくインスタンス化されたコンポーネントのうちのあらゆるネストされたコンポーネントを展開し(動作503)、次にそのサービスエクスポートのポーリングが開始されようとしていることをコンポーネントの各々に通知する(動作504)。再イテレーションが行なわれるべきであるという判断は、最初のコンポーネントセットがすでにバインディングされた後に行なわれてもよい。例えば、コンポーネントの各々についての再バインディングオペレーションを必要とするプログラムの新しいバージョンを、利用できるようになるかもしれない。
再イテレーションが要求されていない場合(判断ブロック508のいいえ)、コンポーネントはバインディングオペレーションが完了したことを通知される(動作509)。コンポーネントのこのコンポジションは、コンパイル時にではなく、ランタイムに行なわれ、サービスインポート及びサービスエクスポートの厳密でない識別に基づいていた。これによって、新しいコンポーネントを追加することが可能になり、古いコンポーネントを修正しかつ出荷後の時期にシステムを追加することが可能になる。例えば、新しいコンポーネントが特定のプログラムに利用できるようになるときに、カタログが更新されてもよい。プログラムが次に動作するときに、特定のサービスを提供しているコンポーネントを、例えばプログラムベンダからネットワークを介してなど、遠隔位置から得ることができてもよい。
一部の例では、イテレーションは終了されるかもしれない。例えば、インポートをエクスポートで満足させようとするプロセスにおいて(動作506)、いくつかのインポートは、利用できるコンポーネントから成る最新のセットを用いて我慢できるほどに満足させることができないということが発見されてもよい。その場合、該プロセスは終了してもよい。コンピュータシステムは、自動的にまたは場合によってはユーザのヘルプでもしくは場合によってはいくつかのポリシルールに従って、1つまたは複数のコンポーネントを除去することによってかつ/または1つまたは複数のコンポーネントをコンポーネント領域に追加することによって、コンポーネントセットを変更することができる。次に、コンポジションプロセスは、再び再起動されてもよい。コンポジションプロセスの再起動の時点で、いくつかのインポートがいくつかのエクスポートにすでにバインディングされている場合、再バインディングは、別のエクスポートに再バインディングしようと試みることなしにそのバインディングを履行することができることは任意である。あるいは、コンポジションプロセスは、既存のバインディングを尊重せずに再び最初からやり直すかもしれない。これらの2つの手段の間で、既存のバインディングを尊重する様々な異なるレベルがある。
本発明は、その精神または主要な特徴から逸脱することなく、他の特定の形式で具体化することができる。説明された実施形態は、例示的であってかつ限定的でないと、あらゆる点で考慮されなければならない。従って、本発明の範囲は、前述の詳細な説明によってよりはむしろ添付の特許請求の範囲によって示される。特許請求の意義の範囲内及び特許請求の範囲の同等の範囲内で生じる全ての変更は、特許請求の範囲の中で受け入れられることになっている。

Claims (14)

  1. コンピュータ実行可能命令を格納する1つまたは複数のコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令は、コンピュータシステムの1つまたは複数のプロセッサによって実行されると、前記コンピュータシステムにプログラムの複数のコンポーネントを作成する方法を実行させ、前記方法は、
    コンポーネント領域を前記コンピュータシステムのメモリ内に生成する動作と、
    前記コンポーネント領域に付随する1つまたは複数のコンポーネントから成る初期コンポーネントセットをインスタンス化する動作であって、前記初期コンポーネントセットの前記コンポーネントの各々によってインポートされるサービスがあればこれらを前記コンポーネント領域に表示、かつ前記初期コンポーネントセットの前記コンポーネントの各々によってエクスポートされるサービスがあればこれらも前記コンポーネント領域に表示する、インスタンス化する動作と、
    前記初期コンポーネントセットの中から、1つまたは複数のネストされたコンポーネントを含む任意のコンポーネントを識別する動作と、
    前記識別されたコンポーネントについて、前記ネストされたコンポーネントを展開する動作であって、前記ネストされたコンポーネントによってインポートされるサービスがあればこれらが前記コンポーネント領域に表示される範囲まで前記ネストされたコンポーネントが前記コンポーネント領域に表示され、かつ前記ネストされたコンポーネントによってエクスポートされるサービスがあればこれらが前記コンポーネント領域に表示される展開する動作と、
    エクスポートされるサービスを求めて前記初期コンポーネントセットにポーリングを行う動作と、
    インポートされるサービスを求めて前記初期コンポーネントセットにポーリングを行って、前記初期コンポーネントセットのうちの、少なくとも1つの前記コンポーネントのインポートされた前記サービスのうちの少なくとも1つを満足させるサービスをエクスポートする前記初期コンポーネントセットのうちの別のコンポーネントを特定する動作と
    備え前記展開する動作、前記ポーリングを行う動作、及び前記特定する動作は、予め定められた順番で行われ、前記予め定められた順番は、第1前記展開する動作、第2を前記ポーリングを行う動作、及び第3を前記特定する動作とすることを特徴とするコンピュータ可読記憶媒体
  2. 前記方法が更に、
    前記ポーリングを行う動作の前に、エクスポートされるサービスを求めるポーリングが開始されようとしていることを前記初期コンポーネントセットのうちの少なくともいくつかに通知する動作を含むことを特徴とする請求項1に記載のコンピュータ可読記憶媒体
  3. 前記方法が更に、
    前記特定する動作の後に、前記特定する動作が完了したことを前記初期コンポーネントセットのうちの少なくともいくつかに通知する動作を含むことを特徴とする請求項2に記載のコンピュータ可読記憶媒体
  4. 前記方法が更に、
    前記特定する動作の後に、前記特定する動作が完了したことを前記初期コンポーネントセットのうちの少なくともいくつかに通知する動作を含むこと特徴とする請求項1に記載のコンピュータ可読記憶媒体
  5. 前記展開する動作、ポーリングを行う動作、前記特定する動作を含む集合動作は、前記集合動作のうちの最初のイテレーションにおいて行なわれ、
    前記方法は更に、
    前記集合動作のうちの前記最初のイテレーションにおいて行なわれる前記特定する動作の後に、前記特定する動作の結果として追加された更なるサービスのインポートがあればこれを判断する動作と、
    前記集合動作のうちの次のイテレーションを行う動作と
    を含むことを特徴とする請求項1に記載のコンピュータ可読記憶媒体
  6. 前記集合動作は、全てのサービスのインポートを満足させるまで、複数のイテレーションについて反復して行われることを特徴とする請求項5に記載のコンピュータ可読記憶媒体
  7. 1または複数の追加のサービスインポートは、追加のコンポーネントが前記コンポーネント領域に付随する結果として追加され、前記初期コンポーネントセットのサービスインポートを満足させ、前記追加のサービスインポートの少なくとも1つは、前記追加のコンポーネントのうちの少なくとも1つのサービスインポートであることを特徴とする請求項5に記載のコンピュータ可読記憶媒体
  8. 前記追加のサービスインポートの少なくとも1つは、そのサービスインポートのうちの別のサービスインポートを満足させた後に、前記初期コンポーネントセットのうちの1つによって追加されたことを特徴とする請求項7に記載のコンピュータ可読記憶媒体
  9. コンピュータ実行可能命令を格納する1つまたは複数のコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令は、コンピュータシステムの1つまたは複数のプロセッサで実行されると、前記コンピュータシステムにプログラムの複数のコンポーネントを作成する方法を実行させ、前記方法は、
    インスタンス化されたコンポーネントを結びつけるためのコンポーネント領域を前記コンピュータシステムのメモリ内に作成するステップと、
    ランタイムにおいて、インスタンス化され前記コンポーネント領域と関連付けられた前記コンポーネントのサービスインポートとサービスエクスポートのマッチングと、論理メカニズムの使用に基づいて、ランタイムにおいて、前記コンポーネント領域に含まれるコンポーネントを動的にバインディングするために用いられる前記論理メカニズムを含むコンポーネント領域マネージャを作成するステップであって、前記コンポーネント領域マネージャはランタイムにおいて
    複数のインスタンス化されたコンポーネントを前記コンポーネント領域に関連付けるステップと、
    ネストされたコンポーネントである、前記コンポーネント領域に関連付けられた任意のコンポーネント識別し、前記ネストされたコンポーネントを展開することと、
    前記ネストされたコンポーネントによってエクスポートされるサービスとインポートされるサービスを前記コンポーネント領域の前記インスタンス化されたコンポーネントのそれぞれによって識別し、インデックスをつけることであって、前記コンポーネント領域は、前記展開されたネストされたコンポーネントの任意のエクスポートされたサービス及び任意のインポートされたサービスむ、識別し、インデックスをつけることと
    ランタイムにおいてサービスエクスポートデータとサービスインポートデータを比較し、少なくとも特定のサービスをエクスポートする第1のコンポーネントと、少なくとも前記特定のサービスとインポートする第2のコンポーネントとを識別し、ランタイムにおいて前記第1のコンポーネントが前記特定のサービスを前記第2のコンポーネントに対して利用可能にるように前記特定のサービスに対する前記第1のコンポーネントと前記第2のコンポーネントとをバインディングすることと
    バインディングする必要があるインポートされた他のサービスがあるかどうかを判断し、あれば、次の前記イテレーションを続けることと
    を反復して実行するステップと
    を実行する、作成するステップと
    を備えたことを特徴とするコンピュータ可読記憶媒体
  10. 前記イテレーションのうちの少なくとも1つについて、前記バインディングすることは、
    前記コンポーネント領域内の前記インスタンス化されたコンポーネントを探す動作と、
    前記コンポーネント領域内の前記インスタンス化されたコンポーネントのうちのいずれも、少なくとも1つのほかのインスタンス化されたコンポーネントによってインポートされた少なくとも1つのサービスとバインディング可能なサービスをエクスポートしないと判断する動作と、
    まだインスタンス化されておらず、前記コンポーネント領域と関連付けられていない異なるコンポーネントを見つけるためのカタログを探す動作であって、前記異なるコンポーネントは前記少なくとも1つのほかのインスタンス化されたコンポーネントによってインポートされた前記サービスとバインディング可能な前記サービスをエクスポートする、探す動作と
    前記異なるコンポーネントをインスタンス化し、前記コンポーネント領域と関連付ける動作と、
    前記異なるコンポーネントの前記インスタンス化によってエクスポートされるサービスを、前記少なくとも1つのほかのインスタンス化されたコンポーネントによってインポートされる前記少なくとも1つのサービスにバインディングする動作と
    を含むことを特徴とする請求項9に記載のコンピュータ可読記憶媒体
  11. 前記展開されたネストされたコンポーネントは、少なくとも2段階ネストされたコンポーネントを含むことを特徴とする請求項9に記載のコンピュータ可読記憶媒体
  12. 前記イテレーションのうちの少なくとも1つについて、前記ネストされたコンポーネントによってエクスポートされる前記サービスを識別する前に、前記コンポーネント領域の前記コンポーネントに通知する動作を更に含むことを特徴とする請求項9に記載のコンピュータ可読記憶媒体
  13. 前記反復して実行するステップが完了した後に、前記コンポーネント領域の前記コンポーネントに通知する動作を更に含むことを特徴とする請求項9に記載のコンピュータ可読記憶媒体
  14. コンピュータ実行可能命令を格納する1つまたは複数のコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令は、コンピュータシステムの1つまたは複数のプロセッサで実行されると、前記コンピュータシステムにプログラムの複数のコンポーネントを作成する方法を実行させ、前記方法は、
    コンピュータシステムメモリの一部内にコンポーネント領域を作成することであって、前記コンポーネント領域は、論理コンテナの中でインスタンス化されたコンポーネントと関連付ける、前記論理コンテナとしての機能を果たす、作成することと
    ランタイムにおいてインスタンス化され、前記コンポーネント領域に関連付けられる前記コンポーネントのサービスインポートとサービスエクスポートとをマッチングすることに基づいて、ランタイムにおいて前記コンポーネント領域内に含まれるコンポーネントを動的にバインディングするために使用される論理メカニズムを含むコンポーネント領域マネージャを作成することであって、前記論理メカニズムは、
    複数のインスタンス化されたコンポーネントと前記コンポーネント領域とを関連付ける関連メカニズムと、
    ネストされたコンポーネントである、前記コンポーネント領域に関連付けられた任意のコンポーネント識別し、前記ネストされたコンポーネントを展開するネストされたコンポーネントメカニズムと、
    ランタイムにおいて、前記コンポーネント領域の前記インスタンス化されたコンポーネントのそれぞれによって、前記ネストされたコンポーネントがエクスポートするサービスとインポートするサービスとを識別し、インデックスをつける前記コンポーネント領域マネージャのサービスインベントリメカニズムであって、前記コンポーネント領域は、前記展開されたネストされたコンポーネントの任意のエクスポートされたサービス、及び任意のインポートされたサービスを含む、サービスインベントリメカニズムと、
    ランタイムにおいてサービスエクスポートデータとサービスインポートデータとを比較し、少なくとも特定のサービスをエクスポートする第1のコンポーネントと少なくとも前記特定のサービスをインポートする第2のコンポーネントとを識別し、前記第1のコンポーネントが、前記第2のコンポーネントに対して前記特定のサービスを利用可能にするように、前記特定のサービスに対して前記第1のコンポーネントを前記第2のコンポーネントにバインディングする、前記コンポーネント領域マネージャのマッチングメカニズムと
    を含む、作成することと
    を備えたことを特徴とするコンピュータ可読記憶媒体
JP2010545906A 2008-02-07 2009-01-06 反復コンポーネントのバインディング Active JP4959003B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/027,990 US8108831B2 (en) 2008-02-07 2008-02-07 Iterative component binding
US12/027,990 2008-02-07
PCT/US2009/030211 WO2009099691A2 (en) 2008-02-07 2009-01-06 Iterative component binding

Publications (3)

Publication Number Publication Date
JP2011511987A JP2011511987A (ja) 2011-04-14
JP2011511987A5 JP2011511987A5 (ja) 2012-03-22
JP4959003B2 true JP4959003B2 (ja) 2012-06-20

Family

ID=40939976

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010545906A Active JP4959003B2 (ja) 2008-02-07 2009-01-06 反復コンポーネントのバインディング

Country Status (5)

Country Link
US (1) US8108831B2 (ja)
EP (1) EP2257868B1 (ja)
JP (1) JP4959003B2 (ja)
CN (1) CN101939723B (ja)
WO (1) WO2009099691A2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8307329B2 (en) * 2008-02-07 2012-11-06 Microsoft Corporation Implicit composition of component bindings
KR101059658B1 (ko) * 2010-07-01 2011-08-25 엔에이치엔(주) 개발자 인터페이스 제공 방법 및 시스템
US8930886B2 (en) * 2011-12-15 2015-01-06 Microsoft Corporation Identifying application resources through implicit application models

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4965743A (en) * 1988-07-14 1990-10-23 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Discrete event simulation tool for analysis of qualitative models of continuous processing system
CA2113417C (en) * 1992-12-24 2000-02-22 C. Douglas Hodges Method and system for aggregating objects
US5850548A (en) * 1994-11-14 1998-12-15 Borland International, Inc. System and methods for visual programming based on a high-level hierarchical data flow model
US5680619A (en) * 1995-04-03 1997-10-21 Mfactory, Inc. Hierarchical encapsulation of instantiated objects in a multimedia authoring system
US5970152A (en) * 1996-04-30 1999-10-19 Srs Labs, Inc. Audio enhancement system for use in a surround sound environment
US6088739A (en) * 1996-06-28 2000-07-11 Microsoft Corporation Method and system for dynamic object clustering
US6230309B1 (en) * 1997-04-25 2001-05-08 Sterling Software, Inc Method and system for assembling and utilizing components in component object systems
US5970252A (en) * 1997-08-12 1999-10-19 International Business Machines Corporation Method and apparatus for loading components in a component system
US7076784B1 (en) * 1997-10-28 2006-07-11 Microsoft Corporation Software component execution management using context objects for tracking externally-defined intrinsic properties of executing software components within an execution environment
US6161051A (en) * 1998-05-08 2000-12-12 Rockwell Technologies, Llc System, method and article of manufacture for utilizing external models for enterprise wide control
US6330710B1 (en) * 1998-06-19 2001-12-11 At&T Corp. Servlet-based architecture for dynamic service composition
JP2000056958A (ja) * 1998-08-10 2000-02-25 Toshiba Corp 画像処理ソフトウエアの自動生成方法及びその装置
US6490719B1 (en) * 1999-07-26 2002-12-03 Gary Thomas System and method for configuring and executing a flexible computer program comprising component structures
US6550057B1 (en) * 1999-08-31 2003-04-15 Accenture Llp Piecemeal retrieval in an information services patterns environment
US6601234B1 (en) * 1999-08-31 2003-07-29 Accenture Llp Attribute dictionary in a business logic services environment
US6442748B1 (en) * 1999-08-31 2002-08-27 Accenture Llp System, method and article of manufacture for a persistent state and persistent object separator in an information services patterns environment
US7089583B2 (en) * 2000-01-14 2006-08-08 Saba Software, Inc. Method and apparatus for a business applications server
AU2001227857A1 (en) * 2000-01-14 2001-07-24 Saba Software, Inc. Method and apparatus for a business applications management system platform
JP2001216142A (ja) * 2000-02-04 2001-08-10 Hitachi Ltd プログラム作成支援装置
US6901588B1 (en) * 2000-04-17 2005-05-31 Codemesh, Inc. Sharing components between programming languages by use of polymorphic proxy
US7155713B1 (en) * 2000-04-27 2006-12-26 Microsoft Corporation Componentized operating system
US20040205692A1 (en) * 2001-01-12 2004-10-14 Robinson Marck R. Method and system for creating reusable software components through a uniform interface
US8171454B2 (en) * 2001-03-15 2012-05-01 International Business Machines Corporation Method and apparatus for programming software components
EP1410204B1 (en) * 2001-06-22 2016-11-09 Wonderware Corporation Supervisory process control and manufacturing information system application having an extensible component model
US20060010425A1 (en) * 2001-10-29 2006-01-12 Willadsen Gloria J Methods and apparatus for automated mangement of software
US7246350B2 (en) * 2002-01-07 2007-07-17 Intel Corporation Dynamic composition and maintenance of applications
US7234132B2 (en) * 2002-08-29 2007-06-19 International Business Machines Corporation Application integration model for dynamic software component assembly within an application at runtime
US8589861B2 (en) * 2002-11-06 2013-11-19 Code Valley Corp Pty Ltd Code generation
US7660998B2 (en) * 2002-12-02 2010-02-09 Silverbrook Research Pty Ltd Relatively unique ID in integrated circuit
US7496890B2 (en) * 2003-06-30 2009-02-24 Microsoft Corporation Generation of configuration instructions using an abstraction technique
US7698383B2 (en) * 2004-02-27 2010-04-13 Research In Motion Limited System and method for building component applications using metadata defined mapping between message and data domains
US20050229186A1 (en) * 2004-03-15 2005-10-13 Canyonbridge, Inc. Method and apparatus for dynamic runtime object aggregation
CA2566000C (en) * 2004-05-20 2016-11-08 Code Valley Corp Pty Ltd. Code generation techniques
JP2005338996A (ja) * 2004-05-25 2005-12-08 Denso Corp モデル自動結合プログラムおよびモデル自動結合装置
US7757213B2 (en) * 2005-05-18 2010-07-13 Microsoft Corporation Aggregation-based management of a distributed business process application
US20060277537A1 (en) * 2005-06-01 2006-12-07 International Business Machines Corporation Deployment of containers and container extensions in a modular code runtime platform through a runtime platform extension point
US7930629B2 (en) * 2005-07-14 2011-04-19 Microsoft Corporation Consolidating local and remote taxonomies
JP4756947B2 (ja) * 2005-08-05 2011-08-24 キヤノン株式会社 情報処理装置及び方法
US20070050756A1 (en) * 2005-08-24 2007-03-01 Nokia Corporation Component architecture
US20070079282A1 (en) * 2005-09-30 2007-04-05 Pawan Nachnani Browser based designer and player
US7886286B2 (en) * 2006-05-05 2011-02-08 International Business Machines Corporation Integration of non-componentized libraries in component-based systems
US7496893B2 (en) * 2006-06-15 2009-02-24 International Business Machines Corporation Method for no-demand composition and teardown of service infrastructure
EP2174472A2 (fr) * 2007-07-27 2010-04-14 Goojet Procede et dispositif de creation d'applications informatiques
US8307329B2 (en) * 2008-02-07 2012-11-06 Microsoft Corporation Implicit composition of component bindings

Also Published As

Publication number Publication date
WO2009099691A3 (en) 2009-10-08
CN101939723B (zh) 2013-11-20
JP2011511987A (ja) 2011-04-14
EP2257868A4 (en) 2013-03-13
WO2009099691A2 (en) 2009-08-13
US20090204942A1 (en) 2009-08-13
EP2257868B1 (en) 2019-08-14
US8108831B2 (en) 2012-01-31
EP2257868A2 (en) 2010-12-08
CN101939723A (zh) 2011-01-05

Similar Documents

Publication Publication Date Title
US6178546B1 (en) System and method of making software product deliverables
CN101329636B (zh) 虚拟化窗口信息的方法和设备
US7047518B2 (en) System for software application development and modeling
US6104874A (en) Object oriented framework mechanism for order processing including pre-defined extensible classes for defining an order processing environment
US7505995B2 (en) Object-relational model based user interfaces
US5414854A (en) Object-oriental system for managing shared libraries
US8099735B2 (en) Method and system for module initialization
US8230121B2 (en) Method and apparatus for identifying a device handle in a computer system
US7496926B2 (en) Method and apparatus to encapsulate a queue in a namespace
JPH10505693A (ja) 異種オブジェクトシステム相互間にインタオペラビリティを提供するシステム及び方法
JP2005293578A (ja) 属性を介して制御されるテストケース継承
JPH11327919A (ja) オブジェクト指向割込みシステム用の方法およびデバイス
US4964063A (en) System and method for frame and unit-like symbolic access to knowledge represented by conceptual structures
JPH047640A (ja) クラス継承解決処理方法
US7770159B2 (en) Virtual types
US20090164760A1 (en) Method and system for module initialization with an arbitrary number of phases
US7350197B2 (en) Method and apparatus for object-to-object Java Native Interface mapping
JP2000187594A (ja) インタ―フェ―スのランタイム付加
JP4959003B2 (ja) 反復コンポーネントのバインディング
CN113568603B (zh) 组件对象创建及接口方法调用方法、终端及存储装置
CN111666115B (zh) 用于寻找引擎插件的装置、方法及存储介质
US8307329B2 (en) Implicit composition of component bindings
CN108008983B (zh) 基于单进程的多接口数据处理方法
US10768912B1 (en) Platform class creation
Mascolo et al. CodeWeave: Exploring fine-grained mobility of code

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120106

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120106

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120202

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20120202

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20120213

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120217

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120319

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150330

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4959003

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250