JP2012230710A - 計算機が実行可能なコードを生成する方法及び計算機が実行可能なコードを生成するために使用されるコンポーネントを提供する方法 - Google Patents

計算機が実行可能なコードを生成する方法及び計算機が実行可能なコードを生成するために使用されるコンポーネントを提供する方法 Download PDF

Info

Publication number
JP2012230710A
JP2012230710A JP2012162763A JP2012162763A JP2012230710A JP 2012230710 A JP2012230710 A JP 2012230710A JP 2012162763 A JP2012162763 A JP 2012162763A JP 2012162763 A JP2012162763 A JP 2012162763A JP 2012230710 A JP2012230710 A JP 2012230710A
Authority
JP
Japan
Prior art keywords
component
components
agent
processing system
code
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.)
Pending
Application number
JP2012162763A
Other languages
English (en)
Inventor
William Lovisa Noel
ロビーサ、ノエル、ウィリアム
Phillip Lawrey Eric
ローレイ、エリック、フィリップ
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.)
CORD BALLY CORP Pty Ltd
Original Assignee
CORD BALLY CORP Pty Ltd
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
Priority claimed from AU2004902675A external-priority patent/AU2004902675A0/en
Application filed by CORD BALLY CORP Pty Ltd filed Critical CORD BALLY CORP Pty Ltd
Publication of JP2012230710A publication Critical patent/JP2012230710A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)
  • Communication Control (AREA)

Abstract

【課題】所望の機能を実行する実行可能コードを生成する。
【解決手段】方法は、所望の機能に基づいてコンポーネントの組み合わせを定義することを含み、コンポーネントの組み合わせは、実装されるコンポーネント及びコンポーネント間の接続を示す。そして、コンポーネントの組み合わせを使用して、コンポーネントの組み合わせにおけるコンポーネントが実装され、コンポーネントは接続を使用して通信し且つコードフラグメントを生成する。コンポーネントのうちの少なくとも2つは、コンテキストを確定するように通信し、コードフラグメントのうちの1つ又は複数は、少なくとも部分的に、確定されたコンテキストに基づく。生成されたコードフラグメントは結合され、それにより、適当な処理システムによって実行されると処理システムに対して所望の機能を実行させる実行可能コードを形成する。
【選択図】図1

Description

(発明の背景)
本発明は、コンピュータによって実行可能なコードを生成する方法及び装置に関し、特に、各々が、それぞれのコードの断片の生成等、データを処理する各サービスに対応するコンポーネントを使用して、コンピュータによって実行可能なコードを生成する方法及び装置に関する。
(背景技術の説明)
本明細書におけるいずれの従来技術への参照も、従来技術が通常の一般的な常識を成すと認めるものではなく、又は示唆ものでもない。また、そのように解釈されるべきではない。
現在のソフトウェア開発技法には、たとえば以下に例示する多数の問題がある。
・バグ又はミス−高レベルのソフトウェアの欠陥。
・ソフトウェアの肥大化−実行可能コードの容量が、その機能に不相応に大幅に増大すること。
・複雑性の限界−増大する要求による複雑性が、こうしたシステムを設計する能力を脅かす。
・予測不能性−開発コスト、スケジュール、パフォーマンス、又は資源使用量が予測不能である。
・生産性−過去10年において開発者の生産性は著しく向上していない。
特に、これらの問題は、現在のソフトウェア生成技術に存在するものであり、現在のソフトウェア生成技術では、一般化されていないため最適化されていないライブラリを使用して、限られたレベルでのみコードを再使用することによって、走り書き(scratch)からコードを作成することが、かなりの程度まで、熟練したプログラマに必要とされる。移植性が高く且つ条件(コンテキスト;context(s))から独立したコードを生産することに重きが置かれている。
諸問題を解決するために複数の以下の試みがなされた。
・プログラマをマシンコードから切り離すことを目指した、第3世代言語、第4世代言語及び第5世代言語の開発が、初期のいくらかの生産性における成功に貢献した。プログラム言語が今日まで、生産性向上を追求するにあたっての核心であり続けているほどに、初期の生産性増大は成功した。
・データを、そのデータの処理に使用されるコードと一緒にカプセル化する新しいタイプの抽象化であるオブジェクト指向プログラミングが、許容を達成しているが、いかなる有効な生産性の向上も提供していない。
・大きなソフトウェアの開発の複雑性の管理を支援することを目指したコンピュータ支援ソフトウェア工学(CASE)。
・以前の知的努力を再使用しようとする取り組みであるコード再使用。
・数学的証明を利用して正確性を検証するとともに、ソフトウェア開発に伴う多数の欠陥及びバグに取り組む、形式的方法。
・履歴コードから知的内容を抽出するデコンパイラ。
しかし、これらの構想にもかかわらず、ソフトウェア生産の向上においては、ほとんど進歩がない。
同時係属出願PCT/AU03/01474号は、実行可能コードが生成されるのを可能にするデータ処理を実行する技術について記載する。特に、このシステムは、データ処理サービスをカプセル化するためにコンポーネントを利用する。これは、コンポーネントを結合することにより、連続したデータ処理が実行されるのを可能にし、それによりコンピュータによって実行可能なコードが生成されるのを可能にする。
ソフトウェア生産の向上を向上させるコード生成方法を提供する。
[発明の概要]
第1の幅広い形態において、本発明は、所望の機能を実行する実行可能コードを生成する方法を提供し、本方法は、
a)所望の機能に基づいて、
i)実装されるコンポーネント、
ii)コンポーネント間の接続
を示すコンポーネントの組み合わせを定義すること、
b)コンポーネントを組み合わせたコンポーネントであって、該コンポーネントのうちの少なくともいくつかは接続を使用して通信し且つコードフラグメントを生成し、コンポーネントのうちの少なくとも2つは条件を確定するために通信し、コードフラグメントのうちの1つ又は複数は、少なくとも部分的に、確定された条件に基づいたコンポーネントが実装されるようにすること、
c)生成されたコードフラグメントを結合することによって、実行可能コードを形成すること、
d)実行可能コードを計算機の処理システムに提供することよって該実行可能コードの該処理システムによる実行により、該処理システムが所望の機能を実行するようにすること
を含む。
通常、実行可能コードは、コンポーネントを実装するために使用される。
通常、コードフラグメントは、実行可能コードの断片である。
通常、実行可能コードは、
a)前記条件、
b)前記コンポーネントの組み合わせ、
c)コンポーネント間の1つ又は複数の合意、及び
d)1つ又は複数のネゴシエーションによる設定
のうちの少なくとも1つによって定義される方法で前記コードフラグメントを連結することによって形成される。
通常、結合は、
a)コンポーネントのうちの1つ又は複数、及び
b)処理システム
のうちの少なくとも1つによって実行される。
通常、本方法は、コンポーネントに対しデータシーケンスで提供されるデータ部分を処理させることを含み、データ部分は、実行可能コードの断片であり、処理は、
a)データ部分をシーケンスの所定の場所に追加すること、
b)シーケンス内の第1の場所から第2の場所にデータ部分を移動させること、
c)シーケンスからデータ部分を除去すること、及び
d)シーケンスのデータ部分を変更すること
を含む。
通常、本方法は、コンポーネントに対し、それらのそれぞれの条件を確定するようにネゴシエートさせることを含む。
通常、本方法は、少なくともメモリ、スタック及びレジスタを含む処理システムを使用して実行され、条件は、レジスタ、スタック及びメモリのうちの少なくとも1つの状態のうちの少なくとも1つを含む。
通常、条件は、
a)定義されたコンポーネントの組み合わせにおける他のコンポーネント、
b)定義されたコンポーネントの組み合わせにおける他のコンポーネントとの合意、
c)定義されたコンポーネントの組み合わせにおける他のコンポーネントとのネゴシエーションの結果、及び
d)偶発的要因
のうちの少なくとも1つを含む。
通常、本方法は、データ処理を
a)ディザリング、
b)メッシング、及び
c)遮蔽
のうちの少なくとも1つによる条件に依存することを含む。
通常、本方法は、少なくとも1つのコンポーネントに対し、他のコンポーネントの1つ又は複数のエージェントと通信する1つ又は複数のエージェントを生成することを含む。
通常、エージェントは、所定の順序で2つ以上の他のエージェントと通信する。
通常、順序は、
a)コンポーネントの組み合わせ、及び
b)1つ又は複数のネゴシエーションによる設定
のうちの少なくとも1つによって定義される。
通常、本方法は、通信ネットワークを介して1つ又は複数のコンポーネント処理システムに接続される処理システムを使用して実行され、各コンポーネント処理システムは、1つ又は複数のそれぞれのコンポーネントを実装するようになっている。
通常、各コンポーネント処理システムは、実行可能コードから形成され、且つコンポーネント処理システムに対し、
a)所定のデータ処理サービス、及び
b)それぞれのコードフラグメントの生成
のうちの少なくとも1つを実行させる、コンポーネントサーバを実装する。
通常、コンポーネントサーバは、本発明の第1の形態の方法を使用して生成される実行可能コードから形成される。
通常、本方法は、処理システムにおいて、且つコンポーネントの組み合わせの各コンポーネントに対し
a)コンポーネントの仕様を受け取ること、及び
b)コンポーネントの仕様を使用してコンポーネント要求を生成し、コンポーネント要求は、コンポーネント処理システムに転送されることによって、コンポーネントに対応するコンポーネントサーバの実装がもたらされること
を含む。
通常、本方法は、各コンポーネント処理システムに対し、
a)少なくとも1つのエージェントを実装させること、及び
b)少なくとも1つのエージェントに対し、1つ又は複数の他のコンポーネント処理システムによって実装される1つ又は複数のエージェントと通信させるようにさせることを含む。
通常、本方法は、コンポーネント処理システムへのエージェント接続を表す接続データを提供することによって、少なくとも1つのエージェントが1つ又は複数の他のエージェントと通信することができるようにすることを含む。
通常、接続データは、1つ又は複数の他のエージェントに対するアドレスを含み、アドレスは、エージェントを通信できるようにするためのエージェントメッセージが転送されるアドレスを示す。
通常、コンポーネント要求は接続データを含む。
通常、コンポーネントの組み合わせを確定する方法は、処理システムにおいて、
a)利用可能なコンポーネントのリストからコンポーネントを選択すること、及び
b)コンポーネントのそれぞれのエージェント間の接続を定義すること
を含む。
通常、本方法は、処理システムに対し、
a)1つ又は複数の選択されたコンポーネントのグラフィカル表現を生成させること、及び
b)ユーザから受け取られた入力コマンドに応じてグラフィカル表現を処理することによって、コンポーネントの組み合わせを定義させること
を含む。
通常、本方法は、
a)選択されたコンポーネントが1つ又は複数の選択肢を有するか否かを判断すること、及び
b)肯定的な判断に応じて、
i)選択肢のうちの1つ又は複数を設定すること、及び
ii)各設定された選択肢の指示を、対応するコンポーネントを実装するために使用されるコンポーネント処理システムに転送すること
を含む。
通常、本方法は、
a)コンポーネントの仕様から1つ又は複数の選択肢を確定すること、
b)選択肢のうちの1つ又は複数を設定すること、及び
c)設定された選択肢に基づいて更新されたコンポーネントの仕様を確定すること
を含む。
通常、本方法は、第2の処理システムに対し、
a)いくつかのコンポーネントの詳細を確定させること、及び
b)詳細を使用して第1の処理システムを介して利用可能なコンポーネントのリストをユーザに提供させること
を含む。
通常、詳細は、
a)それぞれのデータ処理サービスの指示、
b)コンポーネントのグラフィカル表現、及び
c)他のコンポーネントに必要な任意の接続の指示
のうちの少なくとも1つを含む、コンポーネントの仕様を含む。
通常、本方法は、第2の処理システムに対し、
a)コンポーネントの実装に関連する1つ又は複数の基準を表すパフォーマンス情報を確定させること、及び
b)パフォーマンス情報をユーザに提供し、ユーザはパフォーマンス情報に従ってコンポーネントを選択する、提供させること
を含む。
通常、パフォーマンス情報は、
a)コンポーネントを実装するエンティティの指示、
b)エンティティが格納される位置の指示、
c)コンポーネントを実装するための時間の指示、
d)それぞれのコンポーネントを実装することに関するコストの指示、及び
e)コンポーネントの出来を示す格付け
のうちの少なくとも1つを含む。
通常、本方法は、各コンポーネントの使用に対して費用を課すことにより利益を生じさせることを含む。
通常、本方法は、
a)コンポーネントを実装するそれぞれのエンティティに対し利益の少なくとも一部を提供すること、及び
b)第2の処理システムの運営者に対し、利益の少なくとも一部を保持させること
を含む。
第2の形態において、本発明は、所望の機能に基づいて組み合わされるコンポーネントの組み合わせを実装することにより所望の機能を実行する計算機が実行可能なコードを生成する方法であって、本方法は、処理システムにおいて、
a)コンポーネントの組み合わせから
i)実装されるコンポーネント、
ii)コンポーネントのそれぞれの間の接続
を確定すること、
b)各コンポーネントに対し、任意の必要な接続を表す接続データを含み、コンポーネントの実装を要求するコンポーネント要求を生成すること、
c)コンポーネント要求をコンポーネント処理システムに転送することによりコンポーネント処理システムのうちの少なくともいくつかに対し接続を使用して通信させ且つコードフラグメントを生成させ、コンポーネント処理システムのうちの少なくとも2つは、条件を確定するために通信し、コードフラグメントのうちの1つ又は複数は、少なくとも部分的に、確定された条件に基づいていること、
d)コンポーネント処理システムからコードフラグメントを受け取り、コードフラグメントは、結合されると、実行可能コードを形成すること
を含む。
通常、本方法は、
a)実行可能コードを形成するコードフラグメントを結合すること、及び
b)所定の順序でフラグメントを受け取ること
のうちの少なくとも1つを含む。
通常、コンポーネントの組み合わせを確定する方法は、
a)利用可能なコンポーネントのリストからコンポーネントを選択すること、及び
b)コンポーネントのそれぞれのエージェントの間の接続を定義すること
を含む。
通常、本方法は、処理システムを使用して実行され、処理システムにおいて、且つコンポーネントの組み合わせにおける各コンポーネントに対し
a)コンポーネントの仕様を受け取ること、及び
b)コンポーネントの仕様を使用してコンポーネント要求を生成し、コンポーネント要求はコンポーネント処理システムに転送されることによって、コンポーネントに対応するコンポーネントサーバの実装がもたらされること
を含む。
第3の形態において、本発明は、所望の機能を実行する実行可能コードを生成するために使用されるコンポーネントを提供する方法を提供し、本方法は、実装されるコンポーネントとコンポーネントの間の接続とを示すコンポーネントの組み合わせを使用し、処理システムにおいて、
a)任意の必要な接続を表す接続データを含むコンポーネント要求を受け取ること、
b)接続を使用して他のコンポーネント処理システムと通信することによって、条件を確定すること、
c)確定された条件に基づいてコードフラグメントを生成すること、及び
d)コードフラグメントを別の処理システムに転送し、コードフラグメントは、他のコードフラグメントと結合されると実行可能コードを形成し、実行可能コードは、適当な処理システムによって実行されると、処理システムに対し所望の機能を実行させること、
を含む。
第4の形態において、本発明は、データ処理サービスを提供するためにコンポーネントサーバを実装し、計算機が実行可能なコードを生成する方法を提供し、本方法は、
a)コンポーネントの組み合わせを確定し、コンポーネントの組み合わせは少なくとも2つのコンポーネントシーケンスを含み、各コンポーネントシーケンスはデータ処理サービスを提供するそれぞれの方法を表し、コンポーネントの組み合わせは、
ii)実装されるコンポーネント、
ii)コンポーネント間の接続
を示し、
b)コンポーネントの組み合わせにおけるコンポーネントが実装されるようにし、コンポーネントのうちの少なくともいくつかは接続を使用して通信し、且つ各コンポーネントシーケンスに対応する少なくとも1つのコードフラグメントを含むコードフラグメントを生成すること、
c)生成されたコードフラグメントを結合することによって実行可能コードを生成すること、及び
d)実行可能コードを処理システムに提供し、実行可能コードの処理システムによる実行により、処理システムが、各コンポーネントシーケンスに対応する生成されたコードフラグメントのうちの少なくとも1つを実行することによってコンポーネントサーバを実装するようにすることによって、データ処理をそれぞれの方法で提供すること
を含む。
通常、実行可能コードは、いずれのコードフラグメントが実行されるかを選択する機能を備えることを含む。
通常、コンポーネントの組み合わせは、実装されると、選択コードフラグメントの生成をもたらす選択コンポーネントシーケンスを含み、コンポーネントサーバが実装されると、選択コードフラグメントは実行するためにコードフラグメントのうちの1つを選択する。
通常、コードフラグメント選択は条件に依存する。
通常、条件は、データ処理が実行される条件を反映する。
通常、コードフラグメントの選択は、コンポーネントサーバと1つ又は複数の他のコンポーネントサーバとのネゴシエーションの結果に応じて実現される。
通常、コードフラグメントの選択は、データ処理サービスが提供される方法に関連する選択肢に対応する。
通常、選択肢は、コンポーネントサーバの実装を要求するエンティティによって選択される。
通常、コンポーネントサーバは、処理結果のコンポーネントの組み合わせの一部として使用される処理結果のコンポーネントを実装するために使用される。
通常、処理結果のコンポーネントは、処理結果のコンポーネントの組み合わせを実装するエンティティによって定義可能な1つ又は複数の関連選択肢を含み、選択肢は、いずれのコードフラグメントが実行されるかを選択するために使用される。
通常、データ処理サービスは、処理結果のコードフラグメントの生成を含み、処理結果のコードフラグメントは、実行されるコードフラグメントによって決まる。
通常、各コンポーネントは、対応するコンポーネントサーバを実装することによって実装され、各コンポーネントサーバは、適当な処理システムにおいて実行されると、処理システムに対し、
a)所定のデータ処理サービス、及び
b)それぞれのコードフラグメントの生成
のうちの少なくとも1つを実行させる実行可能コードから形成される。
第5の形態において、本発明は、処理システムを使用してコンポーネントに具体化されるサービスを提供する本方法は、処理システムに対し、
a)コンポーネント要求を受け取らせること、及び
b)本発明の第1の幅広い形態の方法によって生成されるアプリケーションソフトウェアを実行させること
を含む。
第6の形態において、本発明は、コンポーネントの組み合わせを実装することによりコンポーネントサーバを実装し、計算機が実行可能コードを生成する方法であって、コンポーネントの組み合わせは所望のデータ処理サービスに基づいており、且つ少なくとも2つのコンポーネントシーケンスを含み、各コンポーネントシーケンスは、データ処理サービスを提供するそれぞれの方法を表す、方法であり、処理システムにおいて、
a)コンポーネントの組み合わせから
i)実装されるコンポーネント、
ii)コンポーネントのそれぞれの間の接続
を確定すること、
b)各コンポーネントに対し、コンポーネントの実装を要求するコンポーネント要求を生成し、コンポーネント要求は、任意の必要な接続を表す接続データを含むこと
c)コンポーネント要求をコンポーネント処理システムに転送することによって、コンポーネント処理システムのうちの少なくともいくつかに対し、接続を使用して通信させ且つ各コンポーネントシーケンスに対応する少なくとも1つのコードフラグメントを生成させること、及び
d)コンポーネント処理システムからコードフラグメントを受け取り、コードフラグメントは、結合されると、実行可能コードを形成し、実行可能コードは、適当な処理システムによって実行されると、処理システムに対しコンポーネントサーバを実装させ、コンポーネントサーバは、生成されたコードフラグメントのうちの少なくとも1つを実行することによりデータ処理サービスを提供すること
を含む。
第7の形態において、本発明は、コンポーネントサーバを実装するため計算機が実行可能なコードを生成するために使用されるコンポーネントを提供することによって、コンポーネントサーバがデータ処理サービスを提供することができるようにする方法であって、実装されるコンポーネントとコンポーネント間の接続とを示すコンポーネントの組み合わせを使用し、コンポーネントの組み合わせは少なくとも2つのコンポーネントシーケンスを含み、各コンポーネントシーケンスはデータ処理サービスを提供するそれぞれの方法を表し、本方法は、処理システムにおいて、
a)任意の必要な接続を表す接続データを含むコンポーネント要求を受け取ること、
b)接続を使用して他のコンポーネント処理システムと通信すること、
c)確定された条件に基づいてコードフラグメントを生成すること、及び
d)コードフラグメントを別の処理システムに転送し、コードフラグメントは、他のコードフラグメントと結合されると実行可能コードを形成し、実行可能コードは、適当な処理システムによって実行されると、処理システムに対しコンポーネントサーバを実装させ、コンポーネントサーバは生成されたコードフラグメントのうちの少なくとも1つを実行し、それによりデータ処理サービスを提供すること
を含む。
第8の形態において、本発明は、第1のコンポーネントと第2のコンポーネントとの間のネゴシエーションを実行する方法であって、各コンポーネントはそれぞれのデータ処理サービスを具体化し、本方法は、処理システムにおいて、
a)第1のコンポーネントに関連する第1のネゴシエーションデータを確定すること、第1のネゴシエーションデータは、
i)少なくとも1つのネゴシエーション選択肢、及び
ii)各ネゴシエーション選択肢に関連するそれぞれの重み付け
を含む第1のネゴシエーションリストを示し、
b)第2のコンポーネントに関連する第2のネゴシエーションデータを確定すること、第2のネゴシエーションデータは
i)少なくとも1つのネゴシエーション選択肢、及び
ii)各ネゴシエーション選択肢に関連するそれぞれの重み付け
を含む第2のネゴシエーションリストを示し、
c)第1のネゴシエーションリストを第2のネゴシエーションリストと比較すること、並びに
d)比較及びそれぞれの重み付けの結果を使用してネゴシエーションの選択肢のうちの1つを選択すること
を含む。
通常、本方法は、所定のアルゴリズムを使用してネゴシエーション選択肢のうちの1つを選択することを含む。
通常、本方法は、
a)両ネゴシエーションリストに共通の任意のネゴシエーション選択肢を選択すること、及び
b)各選択された共通のネゴシエーション選択肢に対し、各ネゴシエーションリストにおけるそれぞれの重み付けから形成される結合された重み付けを確定すること、及び
c)確定された結合された重み付けに従って共通のネゴシエーションの選択肢のうちの1つを選択すること
により、処理システムにおけるネゴシエーションリストを比較することを含む。
通常、本方法は、処理システムにおいて、
a)各ネゴシエーションリストにおける重み付けを正規化すること、
b)各ネゴシエーションリストにおけるそれぞれの重み付けの平均を確定することにより、結合された重み付けを確定すること
を含む。
通常、本方法は、1つの共通のネゴシエーション選択肢を、処理システムにおいて、
a)結合された重み付けが最も高い重み付けを有する共通のネゴシエーションの選択肢を選択すること、並びに
b)少なくとも2つの共通のネゴシエーションの選択肢が等しく最も高い結合された重み付けを有する場合、
i)少なくとも2つの共通のネゴシエーションの選択肢の各々に対して確定される平均自乗誤差、及び
ii)任意の規則の使用
のうちの少なくとも1つを使用すること
によって選択することを含む。
通常、本方法は、処理システムにおいて、negotiationコンポーネントを実装することであって、それによりネゴシエーションを実装することを含む。
通常、処理システムは、第1のコンポーネントに対応する第1のコンポーネントサーバを実装する。
通常、本方法は、処理システムにおいて、
a)コンポーネント要求を受け取ること、及び
b)コンポーネント要求に応じて第1のコンポーネントサーバを実装すること
を含む。
通常、本方法は、処理システムにおいて、第2のコンポーネントに対応する第2のコンポーネントサーバを実装する第2の処理システムから第2のネゴシエーションデータを受け取ることを含む。
通常、本方法は、処理システムにおいて、
a)少なくとも1つのエージェントを実装すること、及び
b)少なくとも1つのエージェントに対し、第2のコンポーネントサーバによって実装される1つ又は複数のエージェントと通信させることよって、第2のネゴシエーションデータを確定すること
を含む。
通常、本方法は、コンピュータシステムにおいて、
a)接続要求の一部として接続データを受け取ることであって、接続データは、第2のコンポーネントサーバに関連する1つ又は複数のエージェントのエージェントアドレスを含む、受け取ること、及び
b)接続要求に応じて第1のコンポーネントサーバを実装すること
を含む。
通常、本方法は、処理システムにおいてコードフラグメントを生成し、コードフラグメントはネゴシエーションの結果によって決まることを含む。
通常、各コンポーネントは、対応するコンポーネントサーバを実装することによって実装され、各コンポーネントサーバは、適当な処理システムで実行されると、処理システムに対し、
a)ネゴシエーション、
b)所定のデータ処理サービス、及び
c)それぞれのコードフラグメントの生成
のうちの少なくとも1つを実行させる実行可能コードから形成される。
第9の形態において、本発明は、所望の機能を実行する実行可能コードを生成する方法を提供し、本方法は、
a)所望の機能に基づいてコンポーネントの組み合わせを定義し、コンポーネントの組み合わせは、ネゴシエーションを実行する少なくとも2つのコンポーネントを含むこと、及び
b)コンポーネントの組み合わせにおけるコンポーネントが実装されるようにし、コンポーネントのうちの少なくともいくつかが通信して、結合されると実行可能コードを形成するコードフラグメントを生成し、少なくとも2つのコンポーネントは、共通のネゴシエーションの選択肢を確定するために通信するようになっており、コードフラグメントのうちの少なくとも1つは、確定されたネゴシエーションの選択肢に少なくとも部分的に依存して生成されること
を含む。
通常、本方法は、所定のアルゴリズムを使用していくつかのあり得るネゴシエーション選択肢から共通のネゴシエーション選択肢を選択することを含む。
通常、ネゴシエーションデータは、プロトコルに従って定義され、プロトコルは、いくつかの最小の所定のネゴシエーション選択肢を定義する。
通常、本方法は、少なくとも2つのコンポーネントの相対的な実装に関する条件を定義するために使用される。
第10の幅広い形態において、本発明は、コンポーネントの組み合わせを実装することにより所望の機能を実行し、計算機が実行可能なコードを生成する方法であって、コンポーネントの組み合わせは所望の機能に基づき、且つネゴシエーションを実行する少なくとも2つのコンポーネントを含み、本方法は、
a)コンポーネントの組み合わせから
i)実装されるコンポーネント、
ii)コンポーネントのそれぞれの間の接続
を確定すること、
b)各コンポーネントに対し、コンポーネントの実装を要求するコンポーネント要求を生成し、コンポーネント要求は、任意の必要な接続を表す接続データを含むこと、
c)コンポーネント要求をコンポーネント処理システムに転送することによって、コンポーネント処理システムの少なくともいくつかに対し、接続を使用して通信させ且つコードフラグメントを生成させ、コンポーネント処理システムのうちの少なくとも2つは、いくつかの利用可能なネゴシエーションの選択肢から共通のネゴシエーションの選択肢を確定するために通信し、コードフラグメントのうちの1つ又は複数は、少なくとも部分的に共通のネゴシエーション選択肢に基づいていること、
d)コンポーネント処理システムからコードフラグメントを受け取り、コードフラグメントは、結合されると、実行可能コードを形成すること
を含む。
第11の形態において、本発明は、コンポーネントの組み合わせにおける少なくとも1つの他のコンポーネントとのネゴシエーションを実行するコンポーネントであって、当該コンポーネントは、適当にプログラムされた処理システムで実装されると、処理システムに対し、
a)第1のコンポーネントに関連する第1のネゴシエーションデータを確定させ、第1のネゴシエーションデータは
i)少なくとも1つのネゴシエーション選択肢、及び
ii)各ネゴシエーション選択肢に関連するそれぞれの重み付け
を含む第1のネゴシエーションリストを示し、
b)コンポーネントに関連する第2のネゴシエーションデータを確定させ、第2のネゴシエーションデータは
i)少なくとも1つのネゴシエーション選択肢、及び
ii)各ネゴシエーション選択肢に関連するそれぞれの重み付け
を含む第2のネゴシエーションリストを示し、
c)第1のネゴシエーションリストを第2のネゴシエーションリストと比較させ、且つ、
d)比較の結果及びそれぞれの重み付けを使用してネゴシエーション選択肢のうちの1つを選択させる、コンピュータによって実行可能なコードによって具体化される。
別の形態において、本発明は、第1のコンポーネント群と第2のコンポーネント群との間のネゴシエーションを実行する方法であって、各コンポーネントはそれぞれのデータ処理サービスを具体化し、本方法は、処理システムにおいて、
a)第1のコンポーネント群に関連する第1のネゴシエーションデータを確定し、第1のネゴシエーションデータは
i)少なくとも1つのネゴシエーション選択肢、及び
ii)各ネゴシエーション選択肢に関連するそれぞれの重み付け
を含む第1のネゴシエーションリストを示し、
b)第2のコンポーネント群に関連する第2のネゴシエーションデータを確定し、第2のネゴシエーションデータは
i)少なくとも1つのネゴシエーション選択肢、及び
ii)各ネゴシエーション選択肢に関連するそれぞれの重み付け
を含む第2のネゴシエーションリストを示し、
c)第1のネゴシエーションリストを第2のネゴシエーションリストと比較すること、及び
d)比較の結果及びそれぞれの重み付けを使用してネゴシエーション選択肢のうちの1つを選択すること
を含む。
別の形態において、本発明は、所望の機能を実行し、計算機が実行可能なコードを生成する方法を提供し、本方法は、
a)所望の機能に基づいてコンポーネントの組み合わせを定義することであって、コンポーネントの組み合わせは、ネゴシエーションを実行する少なくとも2つのコンポーネント群を含み、コンポーネントの組み合わせは、
i)実装されるコンポーネント
ii)コンポーネント間の接続
を示し、
b)コンポーネントの組み合わせにおけるコンポーネントが実装されるようにし、コンポーネントのうちの少なくともいくつかは、接続を使用して通信し且つコードフラグメントを生成し、コードフラグメントは、結合されると実行可能コードを形成し、少なくとも2つのコンポーネント群は、共通のネゴシエーション選択肢を確定するために通信するようになっており、コードフラグメントのうちの少なくとも1つは、確定されたネゴシエーション選択肢に少なくとも部分的に依存して生成されること
を含む。
通常、各コンポーネント群は、
a)1つ又はコンポーネント、及び
b)1つ又は複数のコンポーネント群
のうちの少なくとも1つから形成される。
第12の幅広い形態において、本発明は、多段階データ処理サービスを表すコンポーネントを実装する方法を提供し、本方法は、処理システムにおいて、
(a)少なくとも1つの下位コンポーネントの組み合わせを表す内部略図を確定すること、
(b)内部略図に従って各下位コンポーネントの実装をもたらすこと、
(c)各下位コンポーネントが実装されると、各下位コンポーネントの終了をもたらすこと、
(d)必要に応じてステップ(a)〜(c)を繰り返すこと
を含む。
第13の形態において、本発明は、多段階データ処理サービスを具体化する多段階コンポーネントを定義する方法を提供し、本方法は、
(a)1つ又は複数の下位コンポーネントの組み合わせを表す少なくとも1つの内部仕様を定義し、各下位コンポーネントは、それぞれのデータ処理サービスを表し、それにより定義された組み合わせは必要なサービスを表すこと、
(b)いくつかのエージェントを定義し、エージェントのうちの少なくとも1つは、受け取ったデータに応じて内部略図を選択するようになっており、エージェントは、内部仕様の終了時に存続するようになっていること、及び
(c)少なくとも1つの内部略図及びエージェントを定義する仕様を生成すること
を含む。
本方法は、通常、処理システムにおいて、
(a)1つ又は複数の他のコンポーネントと通信すること、及び
(b)通信に従って内部仕様を選択すること
を含む。
本方法は、概して、いくつかの所定の内部仕様のうちの1つから内部仕様を選択することを含む。
本方法は、概して、エージェントを使用して通信することを含む。
本方法は、通常
(a)下位コンポーネントの各々に対して通知を生成させること、
(b)通知の指示を終了コンポーネントに転送すること、
(c)終了コンポーネントに対し、指示を受け取ることに応じて終了命令を生成させること、及び
(d)終了命令を下位コンポーネントに転送すること
を含む。
第14の形態において、本発明は、データ処理サービスを表すコンポーネントを実装する方法を提供し、本方法は、処理システムにおいて、
(a)下位コンポーネントの組み合わせを表す内部仕様を確定し、下位コンポーネントは少なくとも1つの局所基本コンポーネントを含むこと、
(b)下位コンポーネントの各々の実装を、
(i)各非局所基本コンポーネントに関連するそれぞれの処理システムにコンポーネント要求を転送すること、及び
(ii)局所基本コンポーネントを表す所定の実行可能コードを実装すること
によりもたらすこと、並びに
(c)下位コンポーネントに対し、内部仕様に従って通信させることによって、データ処理サービスを実行すること
を含む。
第15の形態において、本発明は、コンポーネントを使用してコードを生成する方法であって、各コンポーネントはそれぞれのデータ処理サービスに対応し、本方法は、処理システムにおいて、
(a)コード要求を定義するコンポーネントの組み合わせを確定し、コンポーネントは少なくとも1つの局所基本コンポーネントを含むこと、及び
(b)コンポーネントの組み合わせを実装することによって定義されたデータ処理のシーケンスを実行し、それによってコンピュータコードが生成され、局所基本コンポーネントは処理システムを使用して所定のコードを実行することにより実装されること
を含む。
局所基本コンポーネントは、通常、コンポーネントインスタンスを表す実行可能コード内に埋め込まれる実行可能コードから形成される。
本方法は、通常、局所基本コンポーネントに対しコンポーネントインスタンス、処理システム及び他のコンポーネントのうちの少なくとも1つと通信させることを含む。
局所基本コンポーネントは、通常、所定のデータ処理サービスを具体化する。
本方法は、通常、局所基本コンポーネントを使用して、
(a)内部仕様内の下位コンポーネント間で転送されるデータを監視し、
(b)処理システムからデータをロードし、且つ、
(c)処理システムにデータを保存する
ことを含む。
第16の形態において、本発明は、仕様内のコンポーネントに対し終了を実行する方法であって、コンポーネントはデータ処理サービスを表し、本方法は、処理システムにおいて、
(a)コンポーネントの完了を示す指示を受け取ること、及び
(b)終了命令がコンポーネントに転送されるようにし、いくつかのコンポーネントは終了命令に応じて終了すること
を含む。
コンポーネントは、第2の処理システムによって実装され、本方法は、処理システムにおいて、第2の処理システムに終了指示を転送することを含み、第2の処理システムは、終了指示に応じて、
(a)通知指示を受け取ることに応じて終了命令を生成し、且つ
(b)いくつかのコンポーネントのうちの少なくとも1つに終了命令を転送し、コンポーネントは終了命令に応じることによって終了する。
本方法は、通常、処理システムにおいて、
(a)いくつかの所定の規則を確定すること、及び
(b)所定の規則に従って終了命令を生成すること
を含む。
本方法は、通常、処理システムにおいて、
(a)通知指示を受け取ること、及び
(b)通知指示を使用していくつかの所定の規則を確定すること
を含む。
本方法は、通常、
(a)いくつかのコンポーネントのうちの1つ、
(b)いくつかのコンポーネントのうちの複数、及び
(c)いくつかのコンポーネントの各々
を終了させることを含む。
第17の形態において、本発明は、第1のコンポーネントに提供されるいくつかのエージェントに関連するエージェントバンドルを提供することにより第1のコンポーネントが第2のコンポーネントと通信することができるようにし、各コンポーネントはそれぞれのデータ処理サービスを具体化し、本方法は、第1のコンポーネントにおいて、
(a)エージェントの各々に関連するそれぞれのバンドリングコンポーネントを提供すること、
(b)各バンドリングコンポーネントに対し、
(i)それぞれのエージェントに対する接続情報を確定させ、
(ii)エージェントバンドルに対して接続情報を追加させ、
(iii)エージェントバンドルに提供されるカウンタをインクリメントさせること、及び
(c)エージェントバンドルを第2のコンポーネントに転送し、第2のコンポーネントはエージェントバンドルに応じて接続情報を確定すること
を含む。
第18の形態において、エージェントをいくつかのエージェントに関連するエージェントバンドルに追加する本方法は、処理システムにおいて、
(a)エージェントバンドルを受け取ること、
(b)それぞれのエージェントに対して接続情報を確定すること、
(c)接続情報をエージェントバンドルに追加すること、
(d)エージェントバンドルに提供されるカウンタをインクリメントすること、及び
(e)変更されたエージェントバンドルを提供すること
を含む。
接続情報は、通常、エージェントアドレスを含む。
本方法は、第2のコンポーネントにおいて、
(a)エージェントバンドルを受け取ること、
(b)エージェントの数をカウンタから確定すること、及び
(c)対応する数のエージェントを実装することによって、その数のエージェントが処理されることが可能になること
を含むことができる。
さらに他の形態において、本発明は、コンポーネントを使用してコードを生成する方法であって、各コンポーネントはそれぞれのデータ処理サービスを具体化する本方法は、
(a)コンポーネントの組み合わせを確定し、コンポーネントの組み合わせは一連のデータ処理を定義し、且つ所望の機能が実現され得るようにする要求に従って定義されること、
(b)コンポーネントの組み合わせを、
(i)組み合わせにおける各コンポーネントに対応するコンポーネントサーバの実装をもたらし、各コンポーネントサーバは処理システムによって実装されること、
(ii)各コンポーネントサーバに対し、定義された一連のデータ処理に従ってそれぞれのデータ処理サービスを実行させ、コンポーネントサーバのうちの少なくともいくつかは、データシーケンスと対話することによってそれぞれのサービスを実行し、コンポーネントサーバの少なくともいくつかは
(1)1つ又は複数のコンポーネントサーバと通信すること、及び
(2)さらなるコンポーネントの実装をもたらすこと
のうちの少なくとも1つによってサービスを実行すること
によってコンピュータコードを生成するように実装すること、
(c)一連のデータ処理を実行する結果として且つデータシーケンスから、結果としてのデータシーケンスを取得し、結果としてのデータシーケンスはコンピュータコードであること、及び
(d)コンピュータコードを処理システムに提供し、処理システムによるコンピュータコードの実行により、処理システムは所望の機能を実行すること
を含む。
通常、本発明の任意の形態の方法を、本発明の他の形態のうちの任意の1つの方法を使用して実行してもよい。
以下、添付図面を参照して本発明の一例について説明する。
本発明によるソフトウェア生産の一例を概説した流れ図である。 コンピュータによって実行可能なコードを生成する処理システムの一例の概略図である。 コンピュータによって実行可能なコードを生成するウェブベースシステムの一例の概略図である。 図3のエンドステーションの一例の概略図である。 図3のエンティティ処理システムの一例の概略図である。 PrintNumberコンポーネントを使用する略図の例の概略図である。 PrintNumberコンポーネントを使用する略図の例の概略図である。 negotiateコンポーネントの一例の概略図である。 2つのnegotiateコンポーネントの動作の一例の概略図である。 2つのnegotiateコンポーネントの動作の一例の概略図である。 2つのnegotiateコンポーネントの動作の一例の概略図である。 図7Aのnegotiationコンポーネントによって使用されるアルゴリズムの一例のフローチャートである。 複数のnegotiationコンポーネントの動作の一例の概略図である。 ADDコンポーネントの一例の概略図である。 ALERTコンポーネントの一例の概略図である。 WATCHコンポーネントの一例の概略図である。 多段階トランザクションを実装する略図の概略図である。 多段階トランザクションを実装する略図の概略図である。 多段階トランザクションを実装する略図の概略図である。 多段階トランザクションを実装する略図の概略図である。 terminateコンポーネントの一例の概略図である。 終了及び多段階トランザクションを説明する第1の特定の実施例の概略図である。 終了及び多段階トランザクションを説明する第1の特定の実施例の概略図である。 終了及び多段階トランザクションを説明する第1の特定の実施例の概略図である。 number sourceコンポーネントの概略図である。 number sourceコンポーネントの概略図である。 number sinkコンポーネントの概略図である。 number sinkコンポーネントの概略図である。 ネゴシエーション及びコンテキスト独立性を説明する第2の特定の実施例の概略図である。 ネゴシエーション及びコンテキスト独立性を説明する第2の特定の実施例の概略図である。 ネゴシエーション及びコンテキスト独立性を説明する第2の特定の実施例の概略図である。 ネゴシエーション及びコンテキスト独立性を説明する第2の特定の実施例の概略図である。 ネゴシエーション及びコンテキスト独立性を説明する第2の特定の実施例の概略図である。 多対1接続を提供するnbundleコンポーネントの使用を示す概略図である。 多対1接続を提供するnbundleコンポーネントの使用を示す概略図である。 多対1接続を提供するnbundleコンポーネントの使用を示す概略図である。 多対1接続を提供するnbundleコンポーネントの使用を示す概略図である。 多対1接続を提供するnbundleコンポーネントの使用を示す概略図である。 図17Cのtestコンポーネントの内部略図の一例である。 図17Cのtestコンポーネントの内部略図の一例である。 図17Cのtestコンポーネントの内部略図の一例である。 エージェントntreeの使用の例を示す概略図である。 エージェントntreeの使用の例を示す概略図である。 エージェントntreeの使用の例を示す概略図である。 エージェントntreeの使用の例を示す概略図である。 エージェントntreeの使用の例を示す概略図である。 エージェントntreeの使用の例を示す概略図である。 多点接続の例を示す概略図である。 多点接続の例を示す概略図である。 多点接続の例を示す概略図である。 サーバ構築の例を示す概略図である。 サーバ構築の例を示す概略図である。 サーバ構築の例を示す概略図である。
[好適な実施形態の詳細な説明]
コンピュータによって実行可能なコードを生産するプロセスの一例について、これより図1を参照して概説する。
図1に示すように、最初のステップは、ステップ100において、コンピュータによる実行可能なコードの作成要求があるかを決定することである。これは、結果として得られる、コンピュータによって実行可能なコードによって実装が必要な機能を考慮することによって実現する。所望の機能が決定されると、ステップ110において、複数のコンポーネントが選択される。
各コンポーネントは、コンポーネントの適当な組み合わせによりコンピュータによって実行可能なコードが生産され得るようにそれぞれのデータ処理サービスを具体化する。使用の際、コンポーネントは、互いにデータを転送することによって通信する。このため、たとえば、1つのコンポーネントの出力を別のコンポーネントの入力に接続してもよく、それにより2つのサービスを連続して実行することができる。階層構造がより基本レベルのコンポーネントのうち適当なものを結合することにより、より複雑なサービスをより基本的なサービスの集まりとして実装することも可能である。
その後、ステップ120において、選択されたコンポーネントの組み合わせが定義される。これにより、コンポーネントによって提供されるサービスがステップ130において実装されるときに、通信によって所望のコンピュータによって実行可能なコードが生成されるように、コンポーネントをどのように相互接続すべきかが指定される。
この技術の実施態様は複数の方法で実現可能なことが理解されよう。しかし、最も広い形態では、このプロセスは、図2に例示する一つの処理システムを使用して実行することができる。
具体的には、一般に、処理システム10は、少なくとも、バス24を介して図に示すように共に接続されたプロセッサ20、メモリ21、キーボード等の入力装置22、ディスプレイ等の出力装置23を備える。処理システムをデータベース11等の記憶装置に接続するために、25に示す外部インタフェースも設けることができる。
使用の際に、処理システムは、利用可能なコンポーネントの詳細をデータベース11に記憶することができるようになっている。次いで、ユーザが、入力装置22及び出力装置23を使用して、選択されたコンポーネントの組み合わせを定義することができ、処理システム10がコンピュータによって実行可能なコードを生成できるようにする。これから、処理システム10がコンピュータ、ラップトップ、サーバ、専用ハードウェア等、いずれの形態の処理システムであってもよいことが理解されよう。
処理システム10を使用してコンピュータによって実行可能なコードを生成することができる方法については、同時係属出願PCT/AU03/01474号においてより詳細に説明されている。
通常、システムは分散アーキテクチャを使用して実装される。その例を図3に示す。具体的には、この例では、1つ又は複数の中央処理システム10(この例では、単に明確にするために2つを示す)がベースステーション1に設けられ、ベースステーション1は、インターネット2及び/又は複数のローカルエリアネットワーク(LAN)4等の通信ネットワークを介して複数のエンドステーション3に接続される。
使用の際、上述したように、コンポーネントは、処理システム10に設けられ、且つ処理システム10によって実装されることが可能である。別法として、図示するように、コンポーネントを、1つ又は複数のそれぞれのエンティティによって設けてもよく、それらエンティティの各々は、同じくインターネット2及び/又はLAN4に接続された1つ又は複数のそれぞれのエンティティステーション5(明確にするために2つのみを示す)を運用する。この例では、各エンティティステーション5は、図示するように、データベース16等の記憶装置に接続されたエンティティ処理システム15から形成される。
使用の際、システムのユーザは、エンドステーション3を使用してベースステーション1と通信し、それにより適当なコンポーネントによって具体化されるサービスの提供を受けることができる。
これは複数の方法で実現することができるが、この例では、単に例示を目的としてであるが、サービスへのアクセスはウェブページを使用することによって提供される。したがって、これを実現するために、各エンドステーション3は、必要に応じてウェブページにアクセスしデータをベースステーション1に転送するようになっている処理システムから形成される。
適当なエンドステーション3の一例を図4に示す。図示するように、エンドステーション3は、バス34を介して互いに接続されたプロセッサ30、メモリ31、キーボード等の入力装置32、ディスプレイ等の出力装置33を備える。処理システムには、必要に応じてエンドステーション3をインターネット2又はLAN4に接続する外部インタフェース35も設けられる。
使用の際、プロセッサ30は、ベースステーション1に設けられた処理システム10と通信ネットワーク2、4を介して通信して、処理システムのサービスへのアクセスを可能にするようになっている。したがって、エンドステーション3を、通常、データ転送を可能にし、場合によってはウェブブラウジングを可能にするアプリケーションソフトウェアを動かしている、適当にプログラムされたPC、インターネット端末、ラップトップPC、ハンドヘルドPC等、任意の適当な処理システムから形成することができる、ということが理解されよう。
コンポーネントは、コンポーネント及びコンポーネントにおいて提供されるサービスの性質に応じて、処理システム10自体に実装することができ、又はエンティティ処理システム15の1つに実装することもできる。
したがって、エンティティ処理システム15は、通信ネットワーク2、4を介して処理システム10と通信できなければならない。これを実現するために、エンティティ処理システム15は、一般的に、図5に示す処理システムと同様である。
図示するように、エンティティ処理システム15は、プロセッサ40、メモリ41、キーボード等の入力装置42及びモニタ等の出力装置43を備え、これらは、バス44を介して互いに接続される。処理システムにはまた、必要に応じてエンティティステーション5をインターネット2又はLAN4、同様にデータベース16に接続するための外部インタフェース45も設けられる。
使用の際、プロセッサ40は、エンティティがそれぞれのコンポーネントにカプセル化されたサービスを実行できるようにするようする。したがって、エンティティステーション5を、適当にプログラムされたPC、インターネット端末、ラップトップPC、ハンドヘルドPC等の任意の適当な処理システムから形成することができることが理解されよう。サービスはデータ集約的であり得るため、エンティティ処理システム15はサーバ等から形成されることが多い。
いずれの場合も、エンドステーション3及びエンティティステーションを、共通の処理システムを使用して実装してもよく、エンドステーション3とエンティティステーション5との区別は主に単に説明を目的としたものであることが理解されよう。
エンドステーション3のユーザがベースステーション1を介してコンポーネントにおいて提供されるサービスにアクセスすることを依然として可能にしながら、コンポーネントをエンティティステーション5によって実装することができるようにするためには、通常、コンポーネントの少なくともいくらかの詳細がコンポーネントの仕様の形態でデータベース11に格納される。
コンポーネントの仕様は、多数の形式のうちのいずれの形式であってもよく、グラフィカル表現等を含んでもよい。しかしながら、一般に、コンポーネントの仕様は、ユーザがそれぞれのコンポーネントによって具体化されるサービスのタイプを確定するために十分な情報を含む。コンポーネントの仕様は、コンポーネントを選択し使用することができるようにするために十分な情報を提供することが留意されるべきである。したがって、コンポーネントの仕様は、実行することができるデータ処理の指示を含むが、これがどのように実現されるかについては必ずしも含まない。
そして、ベースステーション1は、ユーザがコンポーネントの組み合わせを定義することによって、データ処理を実行し又はコンピュータコードを生成することができるようにする、フォーラムを提供することも可能である。一例では、これは、使用されるコンポーネント及びそれらの間の通信を設定する仕様を定義することによって実現される。仕様書は、通常、エンドステーション3を介して適当なGUIを使用して定義され、したがって、それによりユーザは、フォーラムに提示されるコンポーネントを選択し、これらを略図にドラグアンドドロップし、それらコンポーネント間の適当な接続を定義してコンポーネントの通信を定義することができる。これに関して、フォーラムは、コンポーネントの仕様へのアクセスを提供するポータルとして作用する。
仕様が完成すると、これを、ビルドとして知られるプロセスで実装することができる。ビルドの間、仕様の各コンポーネントに対してそれぞれのコンポーネントインスタンスを生成することができる。各コンポーネントインスタンスを、通常エンティティステーション5のそれぞれ1つを使用して実装されるそれぞれのコンポーネントサーバで作成してもよい。使用の際、システムが実装されると、データを、それぞれのコンポーネントインスタンスの間で転送することができ、コンポーネントインスタンスのうちの少なくともいくつかが受け取ったデータに対し必要なデータ処理を実行することによって、必要に応じて処理されたデータの出力が提供される。
コンポーネントインスタンスは、互いに通信することができ、特に、両コンポーネントが理解できる形式で情報及びデータを転送できる、ということが理解されよう。
一例では、これは、エージェントを使用して実現され、それぞれのエージェントはコンポーネントの各ポートに対して提供される。このため、1つのコンポーネントのポートに関連するエージェントは、別のコンポーネントのポートに関連するエージェントと協働する。ポートは、一般に、情報の双方向の交換に対して使用されるが、データの転送に関連する指向性があることが多く、したがって、ポートは通常入力及び出力と呼ばれる。
エージェント間の通信は、通常、アドレス情報を含むヘッダと転送される任意のデータを含むペイロードとを含むメッセージを転送することによって実現される。エージェント間の通信は、1つのエージェントに対して別のエージェントにメッセージを送信させる程度に単純であってもよく、それ以上の通信は行われなくてもよい。別の方法として、実装によって通信の追加の段階を実行してもよい。
ビルドプロセス中に仕様が構築される場合、仕様内のコンポーネントを提供する各エンティティに対して取得命令が送信される。そして、各エンティティは、関連する任意のエージェントとともにそれぞれのコンポーネントインスタンスを含むそれぞれのコンポーネントサーバを構築することができる。これが完了すると、エージェントは、コンポーネント間でデータを通信することにより、コンポーネントがそこにおいて具体化されるそれぞれのデータ処理を実行することが可能になる。
データ処理は、多数のタイプのうちの任意の1つであってもよいが、一般に、処理コンポーネント及びコード生成コンポーネントとして知られる2つのカテゴリのうちの1つである。ビルドプロセス中、処理コンポーネントは、データを処理して出力を提供するかまたは別の動作を実行する。このため、たとえば、これは、2つの数字を受け取って加算することによって出力を提供することを含むことができる。
対照的に、コンポーネントに対するコード生成により、コードの一部(コードフラグメントとして知られる)が生成され、それは、より大きい実行可能ファイルの一部として実行される場合、データ処理を提供する。このため、コンポーネントは、実行される時に2つの数字の加算が行われるようにするコードフラグメントを生成することができる。コンポーネントの2つの層を異なる方法で使用してもよいが、一般原理はコンポーネントの両タイプに適用される。したがって、明確にするために、以下の説明ではコンポーネントのタイプの間には必ずしも区別しない。このため、コンポーネントによって実行されるように説明する処理を、コンポーネント自体によって実行してもよく、又はコンポーネントによって生成されるコードフラグメントによって実行してもよい。
この例では、エンティティは、コンポーネントに関連するエージェントと他のコンポーネントのエージェントとの間で形成される必要のある接続を指定する、それぞれのコンポーネントに対する取得命令を受け取る。特に、これには、コンポーネントインスタンス及び対応するエージェントが構築される時に、エージェントが他のエージェントと直接通信することができるように、他のエージェントのエージェントアドレスが含まれる。
一例では、生成されたコードは、生成されたコードが以下のような要素に依存するという意味で、コンテキスト(context(s);条件)に依存するコードであってもよい。
・開始時の実行可能ファイルが既知の状態。このため、たとえば、結果としてのコンピュータによって実行可能なコードがアプリケーションである場合、開始時のアプリケーションの既知の状態はオペレーティングシステムによって確定される。
・前の命令からのレジスタの既知の状態
・スタック及びメモリの既知の状態
・レジスタ、スタック及びメモリの割り当て
・プロジェクト内のそれ自体(コンポーネント)の番号
・どのコンポーネントが自分のコンポーネントに接続されるか
・コードを置くべき場所
コンテキストに依存するコードは、同じタスクを実行する多くの方法があり、方法によってはシステムの他の部分に依存することを利用する。コンテキストに依存するコードを作成することによって、第3者が、あまり書き換えることなくコードを容易に再使用することが防止されるか、又はリバースエンジニアリングすることが防止される。或るレベルの依存性を越えると、リバースエンジニアリングし書き換えるよりも、コンポーネントを単に再購入するほうが経済的になる。
コンテキストの依存性は、結果によって生成されるコンテキストを供給者が調べることによって実現される。各コンテキストは一意であるため、各コンテキストをカスタマイズすることが可能である。
コンテキストに依存するコードを生成することにより、従来のコードに比較してコードサイズを実質的に低減することができる。さらに、コンポーネント供給者がコード生成プロセスのわずかではあるが、詳細な態様に焦点を合わせることができるようにすることによって実現することができる特殊化により、信頼性、生産性及び最適化を劇的に向上させることができる。
ここで、本発明のいくつかの追加の特徴について説明する。
<ネゴシエーション>
使用の際、コンポーネントは、所定のデータ処理サービスを提供するように動作する。データ処理サービスには、データの処理又は実行可能ファイルの一部の生成が含まれてもよい。したがって、コンポーネントが実装される方法は、処理されるデータのタイプ、実行される処理のタイプ及びデータが処理されるコンテキスト等、複数の要素によって決まる。
たとえば、コンポーネントは数字の加算を実行するようになっていてもよく、その場合、実装は、数字のフォーマット、又はその数字が別のコンポーネントから受け取られたペイロードの一部としてレジスタで提供されるか等の複数の要素によって決まってもよい。
同様に、コンポーネントは、完全な実行可能プログラムの一部として実行される場合に2つの数字の加算を実行するように動作するコードフラグメントを生成してもよい。この場合、生成された実行可能コードは、この場合もまた加算される数字によって決まり、したがってコンテキスト依存となる。
このため、たとえば、図6Aは、数字をプリントするコードフラグメントを作成することに関与するPrintNumberコンポーネントを示す。これを実現するために、コンポーネントは、そのコンテキストから、コンピュータによって実行可能なコードが実行される時にその数字がどのように送られるかを判断しなければならない。
概して、データ及びコンテキストのタイプは、通常、仕様内の他のコンポーネントによって決まり、そのため、それは、結果としての実行可能コードの異なる部分の動作に影響を与える。したがって、コンポーネントが複数の異なるコンポーネントと通信するために十分頑強でなければならない場合、それは異なるデータタイプ及び/又はコンテキストを操作するために十分柔軟でなければならない。
これを、任意の状況においても、同じコンポーネントの実装を使用して操作されるのを可能にする一般化された機能性を提供することによって達成することができるが、これは、通常、それほど効率的ではなく、一般に実装するのがより複雑である。したがって、コンポーネントが、ビルドプロセス中にデータ及び/又はコンテキストのタイプを確定するためにネゴシエーションを利用することが一般的である。図6Aにおいて、この目的のために、コンポーネントPrintNumberにおける専用の通信接続(PrintCode)が確保され、エージェントAは、エージェントAとエージェントPrintCodeとの間の通信チャネルを介してPrintNumberコンポーネントに対して数字を送る方法を通信することに関与している。
コンテキストを、コンポーネントがどのピアに接続されているかによって確定してもよい。これらのピアコンポーネントもまた、同様にそれらのそれぞれのコンテキストを確定することができる。このため、大抵の場合、コンポーネントは、それらの相互のコンテキストを確定するために通信しなければならない。この通信は、提供されているサービスの複雑性によって異なる。
図6Bにおいて、コンポーネントPrintNumberは、種々の数字移送選択肢を使用して提供されるディジットをプリントする適当なコード断片を生産することができる知識を具体化する。同様に、ReadDigitコンポーネントは、キーボードから数字を読み取るコードフラグメントを作成することに関与してもよいが、また、コードが最終的に実行される時に数字をいかに送ることができるかを、そのコンテキストから確定しなければならない。
PrintNumberコンポーネントは、ReadDigitコンポーネントにそのエージェントDigitを介して接続されるエージェントPrintCodeを有し、それによりそれらコンポーネントは、数字を送り/供給するためのコンテキストを発見するために通信することができる。
しかしながら、通信は、このコンテキストにおいていくつかの有効なソリューションを有するコンポーネントPrintNumber及びコンポーネントReadDigitによって複雑になる。これは、コンポーネントがコンテキストの範囲で動作するために十分に柔軟であることが必要である結果である。これらのコンポーネントは、いくつかの方法のうちの任意の1つで数字を移送するためのコードフラグメントを生成することによって、それらのサービスをうまく完了することができる。しかしながら、方法によっては、他の方法より複雑であるか又はより多くのコードを送る可能性があるため、他の方法よりコストがかかる。また、移送方法が与えられて各コンポーネントに対してコードフラグメントを確定する相対的なコストは異なる可能性がある。
この問題を克服するために、ネゴシエーションとして知られるプロセスが使用される。ここで、negotiateコンポーネントを利用するネゴシエーションプロセスの一例について説明する。この例示の目的で、negotiationコンポーネントは、処理コンポーネントとみなされ、したがって、ビルド中にネゴシエーションサービスを提供する。しかしながら、代替形態として、PrintNumber及びReadDigitサーバは、ネゴシエーション処理をサーバ内に予め構築するネゴシエーションコードコンポーネントとともに部分的に構築されていることも可能である。これらのサーバは、動作時、ネゴシエーションが実行されるようにすることができる。この技法を、後により詳細に説明するように、より高レベルのコンポーネントを実装するために使用することができる。
特に、図7Aは、Inエージェント、Listエージェント、Typeエージェント及びValueエージェントを有するnegotiateコンポーネントを示す。このコンポーネントは、Listエージェントを使用してネゴシエーションによる設定のリストを検索するようになっており、それは後に、Inエージェントを介して別のnegotiationコンポーネントと交換され、それにより同様のリストが提供される。
そして、各negotiationコンポーネントは、2つのリストを比較することによって共通のネゴシエーションによる設定を確定することができる。所定のアルゴリズムに従ってこれを実行することにより、各negotiationコンポーネントは相互の結果を確定することができる。
これに続いて、ネゴシエーションによる設定の指示を、Typeエージェントを介して仕様の後続するコンポーネントに転送することができ、必要に応じて、データ値はValueエージェントを介して提供される。
ここで、図7Bを参照してnegotiationコンポーネントの使用の一例についてより詳細に説明する。
この例では、何らかの連続したデータ処理が実行されるのを可能にする2つのコンポーネント1000、1050が設けられている。この場合、各コンポーネントは、同様に図示する2つの下位コンポーネント1010、1020及び1060、1070から形成される。コンポーネント1000、1050はまた、図示するように、コンポーネント1000、1050が相互接続されるのを可能にする外部エージェント1001、1051と、それぞれの内部エージェント1002、1052とを含む。
コンポーネント1010、1060は、それぞれのInエージェント1011、1061、Listエージェント1012、1062、Typeエージェント1013、1063及びValueエージェント1014、1064を有するnegotiationコンポーネントであり、コンポーネント1020、1070は各々、2つのエージェント1021、1022;1071、1072を含む。概して、コンポーネント1000、1020、1050、1070は、他のエージェント及びそれぞれのデータ処理を提供する下位コンポーネントを有してもよいが、これは、明確にするためにこの説明から省略する。
ここで、negotiationコンポーネントの動作について説明する。
この例では、各コンポーネントは、エンティティステーション5のうちの1つによって取得命令が受け取られることに応じてそれぞれのコンポーネントサーバによってそれぞれのコンポーネントインスタンスとして実装されるものとする。
特に、図示するように、取得命令が受け取られコンポーネント1000及び1050が構築されると、エージェント1001、1051が相互接続し、各コンポーネントサーバは取得命令を生成し、それによりコンポーネント1010、1020、1060、1070が生成される。
これに続いて、エージェント1001、1051は、それら自体によってそれ以上の動作が必要とされないと確定し、したがって、これらエージェントは受け渡しをし、エージェント1011、1061が直接相互接続することができるようにする。同様に、Listエージェント1012、1062は、それぞれの内部エージェント1002、1052と接続し、それらからネゴシエーションポジションを表すリストを取得し、エージェント1013、1014;1063、1064はそれぞれ、図7Cに示すようにエージェント1021、1022;1071、1072と相互接続する。
ネゴシエーションポジションは、通常、複数の選択肢及びそれらの選好の指示を含む。リストは、それぞれのコンポーネントによるそれぞれのデータ処理サービスの実装に基づくため、コンポーネントが最初に設計され、したがってコンポーネントの仕様等の一部として提供される、コンポーネントインスタンスを実装するために使用されるソフトウェア内にハードコード化されることが可能である時に確定される。いずれの場合も、エージェント1002、1052は、それぞれのリストを、エージェント間通信に従ってメッセージペイロードの一部としてListエージェント1012、1062に提供するように動作する。
このため、たとえば、ネゴシエーションがレジスタの使用に関する場合、各リストは、それぞれのコンポーネント1000、1050がサポートすることができるレジスタと、それぞれの重み付けによって指示される好ましい順序とを指示する。
この時点で、エージェント1011、1061は、それらそれぞれのリストをペイロードとして含むメッセージを交換する。したがって、これに続いて、各negotiateコンポーネントが両リストのコピーを有することが理解されよう。そして、negotiateコンポーネント1010、1060は、合意に達するために所定のアルゴリズムを実行する。一例では、これは、最大合致(best match)ゲーム理論アルゴリズムの実装に基づく。ここで、この一例についてより詳細に説明する。
一旦合意に達すると、各negotiationコンポーネント1010、1060は、それぞれのエージェント1013、1063を介してコンポーネント1020、1070に指示を提供することができる。エージェント1014、1064は、通常、受け渡し手続きを受け、そのためエージェント1022、1072は、図7Dに示すように直接相互接続する。この時点で、エージェント1022、1072によって交換されるメッセージのペイロードにデータを含めることにより、コンポーネント1020、1070間でデータを直接転送することができる。
当業者には、コンポーネント1020、1070のいずれか1つの実装が、ネゴシエーションポジションの結果に依存してもよい、ということが理解されよう。したがって、同時係属出願PCT/AU03/01474号に記載されているように、通常、コンポーネント1020、1070が動的構築手法を実装する。
これは、エージェント1021、1022、1071、1072のうちの1つをセレクタエージェントにすることにより、コンポーネント1020、1070及びコンポーネント1000、1050の実装の方法がネゴシエーションの結果によって決まるようにすることによって実現される。これは、選択されたネゴシエーションポジションか又は受け取られたデータのそれぞれの値のいずれかによって決まってもよく、コンポーネントがネゴシエーションのすべての結果をサポートすることができる限り無関係である。
たとえば、ネゴシエーションは、数字が整数として交換されるということを確定してもよいが、コンポーネントの内部仕様の設計は、整数として転送されている数字だけでなく数字の値によって決まってもよい。
ここで、図8を参照してネゴシエーションを実行するために使用されるアルゴリズムの一例について説明する。この例では、negotiateコンポーネント1010、1060に関連するポジションは、以下の表1に示す通りである。
Figure 2012230710
ステップ200において、negotiateコンポーネント1010、1060は、Inエージェント1011、1061を介してネゴシエーションポジションを交換するように動作する。この結果、両コンポーネントは互いの重み付きリストにアクセスすることができるようになる。ステップ210において、各コンポーネント1010、1060は、各リストの重み付けが合計して1になるように各リストを正規化するように動作する。この例では、上述した表1は事前に正規化されたリストを含むが、これは必須ではない。
ステップ220において、各negotiationコンポーネント1010、1060は、各リストに対して最大化され正規化された重み付けを確定するように動作する。この例では、最大化された重み付け値は各リストに対して0.4である。
ステップ230において、各negotiationコンポーネント1010、1060は、両リストに共通していないオプションを除去するように動作する。この場合、オプションA、B、E及びFは両リストに共通しておらず、したがって除去され、その結果新たなリストが生成され、それは次いでステップ240において再正規化され、表2に示すリストとなる。
Figure 2012230710
ステップ250において、各negotiationコンポーネント1010、1060は、両リストの各ネゴシエーションオプションに対して平均重み付けを確定するように動作する。この場合、C及びD両方の平均重み付けは0.5に等しい。
ステップ260において、各negotiationコンポーネントは、明確な(distinct)選択肢があるか判断するように動作する。これは、たとえば、リストの選択肢のうちの1つが他の選択肢のすべてより高い重み付き平均を有する場合に発生する。この特定の例では、重み付け平均は等しく、したがって、プロセスはステップ270に進み最小平均二乗誤差を計算する。
特に、ステップ220において確定されるような最大重み付き値からの最小平均二乗誤差は、標準技法に従って生成される。ステップ280において、negotiationコンポーネント1010、1060は、明確な選択肢があるか判断するように動作する。ここでもまた、これを、あるとすれば選択肢のいずれがより低い最小平均二乗誤差を有するか判断することによって実現してもよい。
この場合、最小平均二乗誤差は両場合において0.01に等しく、したがって、本方法はステップ290に進み任意の規則を使用して明確な選択肢を選択する。一例では、これは、後により詳細に論考するように、コンポーネントのいずれか一方又は両方のリストに現われる最初の選択肢を選択することを含んでもよい。したがって、この例では、任意の規則によって選択肢Cが選択されることになる。
ステップ260、280又は290のいずれかにおいて適当な選択肢が確定されると、ネゴシエーションは完了する。
ステップ290の前に優先ポジションが確定されていない場合、確実に、各negotiateコンポーネントが同じネゴシエーションポジションを選択し、これが、コンポーネント1000、1050を実装するエンティティに対して過度に損害を与えることがないように公正に実行されることが必要である。
当業者により、これをいくつかの方法で実現してもよい、ということが理解されよう。たとえば、アルゴリズムは、各negotiateコンポーネント1010、1060に関連するか又は各コンポーネント1000、1050に関連する擬似乱数を生成することができ、その後それらが比較されることにより、最大の数を有するコンポーネントのネゴシエートリストが選択されることが可能になる。
しかしながら、1つの好ましい例では、結合された状況におけるネゴシエーションポジションの選択は、ビルドプロセス中に割り当てられる一意のエージェントIDを使用することによって確定される。ここでもまた、この場合、最高エージェントIDを選択することがまたいくつかのエンティティに対して有利である可能性がある。したがって、これは、各negotiateコンポーネントに関連する一意のエージェントIDに所定のハッシュ関数を適用することにより数字を計算することによって回避される。こうした計算は、各エージェントがシステム全体を通して一意のIDを有するため、デッドロックがないことが保証され、一意のエージェントIDをハッシュすることにより、一貫して高いエージェントID番号を享受するコンポーネントから発生する可能性のある優位が回避される。
プロトコル
要件の集まりを、プロトコルに分解することができ、ネゴシエーションはそれに関して実施され、異なるプロトコルは選択肢の異なるリストを定義する。
図7A及び図7Bに示す例では、ネゴシエーションは、数字プロトコルを使用する数字の移送方法に対するものである。数字プロトコルで利用可能な多くの移送方法がある可能性があり、これらの方法はプロトコルの一部として記録される。
コンポーネントは、記録されたセットに加えて結果をサポートすることができ、それにより、既に販売されているコンポーネントを、より柔軟にすることによって強化することができる。しかしながら、コンポーネントがプロトコルとのコンプライアンスを宣伝したい場合にサポートしなければならない結果の最小セットがある。この最小セットは、プロトコルとのコンプライアンスを主張するコンポーネントの間の任意のネゴシエーションにおけるソリューションを保証し、したがって、ビルド例外(ビルドプロセス中のエラー)の頻度を最小限にする。
ディシジョンツリー
negotiateコンポーネントをカスケードにすることによりディシジョンツリーを作成することができる。
この一例を図9に示す。図9は、2つのコンポーネント1080、1090を表し、それらの各々は、図示されるように接続された2つのそれぞれのnegotiationコンポーネント1081、1082、1091、1092を含む。
この例では、2つのnegotiateコンポーネント1081、1091はまず、図7に関して上で概説したように相互接続して合意に達する。
これが完了すると、negotiateコンポーネント1081、1091によって確定される値は、それぞれのValueエージェント及びInエージェントを介してnegotiationコンポーネント1082、1092に転送される。そして、negotiateコンポーネント1082、1092は、必要に応じてさらなるネゴシエーションを実行する。
この場合、negotiateコンポーネント1081、1091から得られる値は、negotiateコンポーネント1082、1092によってそれぞれのListエージェントを介してそれぞれのリストを選択する際に使用される。このため、第1のネゴシエーションの結果を使用して、後に実行されるネゴシエーションの性質に影響を与えることができる。
値は、後続するコンポーネント1081、1091のInエージェントに接続されているように示されているが、先のnegotiationコンポーネント1081、1091のTypeエージェントを仕様のセレクタエージェントに接続してもよく、それには、たとえば、後続するnegotiationコンポーネント1082、1092のInエージェントが含まれてもよい、ということが理解されよう。このため、ネゴシエーションを、先のネゴシエーションによって確定されたタイプに応じるように行うことができる。
これにより、ネゴシエートポジションのツリーを定義することができ、ツリーの各ブランチは先のネゴシエーションの結果を反映する。
代替形態
ネゴシエーションを実行する代りに、強制されたネゴシエーションポジションを使用することができる。これを、たとえば単一ネゴシエーション選択肢のみが定義されたプロトコルを実装することによって実現することができる。別の方法として、これを、他のコンポーネントが所定の選択肢に従って直接通信するようにnegotiationコンポーネントを単に除去することによって実現してもよい。
ネゴシエーションの選択肢を大幅に除去することにより、接続プロトコルが簡略化するが、コンポーネント間の通信が制限され、コンポーネントがよりもろくなることによって、ビルドプロセスにおけるエラーが増加する、ということが理解されよう。
さらなる選択肢は、ビルドプロセス中にエラーの発生を可能にするというものである。このため、たとえば、2つのリストの間に共通のネゴシエーション選択肢がない場合、又はネゴシエーションが提供されない場合で、且つコンポーネントがたとえば異なるフォーマットの数字又はデータを転送しようと試みている場合、ビルドプロセス中にエラーを生成することが可能である。
この例では、システムのユーザは、ビルドエラーが発生したという事実が警告され、それによりビルドエラーを何らかの方法で調整することが可能になる。これを、たとえば、ユーザが必要に応じてデータのフォーマットを変換するために、追加のコンポーネントを挿入することができるようにすることにより、実現することができる。システムは、こうした場合、手動プロセスに立ち戻ることができ、その場合、オペレータは、問題の性質を検査した後、難局を解決するために特注の仕様を構築する。
多点ネゴシエーション
ネゴシエーションが2つのコンポーネント間で直接実行されることに加えて、より多くのコンポーネントの間で多重ネゴシエーションを実行することも可能である。ここで、この一例を、ADDコンポーネントの一例を示す図10を参照して説明する。
この例では、addコンポーネントは、それぞれIn1、In2及びOutと付された3つのエージェントを有し、それらは、実行時に加算するデータを収集し送る、結果としてのコード断片の設計において使用される移送選択肢をネゴシエートするために使用される。当業者には理解されるように、ビルドチェインに接続するためにBuildエージェントが提供され、それにより結果としてのコードを送ることが可能になる。
コードは、addコンポーネントによって生成されることが可能になる前に、仕様において隣接するコンポーネントから、データがいかにして収集され送られるかを確定しなければならない。この特定の例では、addコンポーネントの実装の方法は、加算されるデータを移送するための選択肢及び結果を提供するための選択肢が多く存在することを意味する。したがって、addコンポーネントは、この移送の正確な形式を確定するために他のコンポーネントとネゴシエートし、それにより加算関数が送られるコードにおいて具体化されることができるようにすることが必要である。
一例では、データの移送に関連するネゴシエーションのすべてを、互いから分離して行うことができる。このため、たとえば、各エージェントIn1、In2及びOutは、それぞれの移送メカニズムを提供するためにそれぞれのコンポーネントとネゴシエートすることができる。この例では、addコンポーネントによって生成されるコードフラグメントは、所定のレジスタに提供される値を加算するようになっていてもよく、それによりこれらを、同様に所定のレジスタに提供されている結果と結合することができる。しかしながら、この技法による加算コード断片の動作には、加算関数が実行されるのを可能にするために必要な命令より多くの命令が必要となる可能性がある。これは、たとえば、値がレジスタ以外のメカニズムを使用して提供され、後にその値を要求されたレジスタに移動させなければならない場合に発生する可能性がある。これにより、速度、メモリ使用率等のパフォーマンスに不利益がもたらされる。
したがって、1つのネゴシエーションの結果が別のネゴシエーションの結果に影響を与えるようにネゴシエーションを連鎖させることが好ましい。このため、ネゴシエーションを連鎖させることにより、それより前のネゴシエーションの結果に基づいてコンポーネントのネゴシエーションポジションが変更される。これにより、後にさらなるネゴシエーションが実行される前に、情報を収集しいくつかの設計選択肢を決定することができ、それにより合意されたネゴシエーションポジションを、すでに確定された気に入ったソリューションに基づいて確定することができる。
連鎖を、それぞれの実装に応じて順方向に又は逆方向に行うことができ、ここでこの例について説明する。
順方向連鎖の一例では、In1エージェント及びIn2エージェントを介してデータを供給するコンポーネントは、所定のレジスタにデータを置くことを含むデータ移送の好ましい形態を有することができる。この場合、好ましい選択肢は、これらのレジスタを使用して加算を実行することである。このため、ネゴシエーションの結果を提供するためにレジスタを使用することに対し、Outエージェントによって後続するコンポーネントと実行される任意のネゴシエーションにおいて高い重み付けが与えられることになる。
このため、この例では、供給者がデータをメモリレジスタにコピーすることによって移送することを好むため、addコンポーネントは、Outエージェントに対しデータ移送のこの形態に対し高い重み付けを置くようになっている。Outエージェントに結合されたコンポーネントもまたメモリレジスタを介して転送されるデータを受け取ることができるものとすると、これは、すべてのコンポーネント間の合意されたネゴシエーションポジションであると確定されることになる。
同様に、逆方向連鎖方法では、Outエージェントに結合されたコンポーネントは、まず、ネゴシエーション手続き中に、addコンポーネントと後続するコンポーネントとの間のデータ移送の好ましい形態を確定する。たとえば、これは、特定のレジスタに対する選好なしにメモリレジスタを介してデータを移送することが好ましいと指定してもよい。そして、addコンポーネントは、In1エージェント及びIn2エージェントによって実行されるネゴシエーションに対しそれぞれのメモリレジスタのデータを移送するためにネゴシエーションポジションに対する重み付けを上昇させる。
このため、ここでもまた、これを使用して、In1エージェント及びIn2エージェントに結合されたコンポーネントによって生成されるコード断片が、実行時に事前に確定された(In1、In2を通してのネゴシエーションを介する)メモリレジスタ位置にデータを提供し、それによりソリューションのパフォーマンスが向上することを保証することができる。
当業者には、ネゴシエーションを独立して行うことにより、加算機能を実装するために追加の命令コードを利用してaddコンポーネントによってコードフラグメントが生成され得ることが理解されよう。特に、加算コードフラグメントには、データを所定のレジスタに移動させる2つの命令と、加算を実行するさらなる命令と、結果を適当なレジスタに移動させる最後の命令とが必要である。
しかしながら、ネゴシエーションを連鎖させることにより、加算コードフラグメントは単一命令のみを必要とするようにすることができる。この場合、In1エージェント及びIn2エージェントに結合されたコンポーネントからのコードフラグメントは、加算されるデータを、加算コードフラグメントによって要求される所定のレジスタに配置する。そして、加算コードフラグメントは、これらのレジスタの内容が加算されるようにする単一命令を生成することができ、結果レジスタもまた、outエージェントに接続されたコンポーネントとなされた移送合意を満足させる。
<局所基本要素>
使用の際、ビルドプロセス中に仕様が実装されると、コンポーネントを、それぞれのコンポーネントサーバによってそれぞれのコンポーネントインスタンスとして実装することができる。コンポーネントサーバは、通常、コンポーネントサービスを構築し送るために使用されるコンポーネントの内部仕様を具体化する。この内部仕様は、それぞれのコンポーネント内に含まれる下位コンポーネントの相対編成を表し、結果は、コンポーネントサービスを送ることである。
当業者には、これが階層配置であり、仕様全体において高い方のコンポーネントの内部仕様内の下位仕様として実装されるコンポーネント自体が、下位コンポーネントの配置を定義する内部仕様を含むことができる、ということが理解されよう。
しかしながら、最終的に、自身がさらなる下位コンポーネントからは構成されておらず、したがってそれ自体が内部仕様を有していないコンポーネントが提供される。この特定の例では、コンポーネントは、たとえばオペレータに対してデータを手動で処理させるか、又は処理が実行可能コード等を使用して実行されるようにすることにより、データ処理を直接実行する。
内部仕様を有しておらずそれ以上下位コンポーネントに分解されないこうしたコンポーネントを、一般に基本コンポーネントと呼ぶ。
したがって、基本コンポーネントは、下位コンポーネントにそれ以上分解することができず、したがってそれ自体データ処理を実行するサーバによって実装されるコンポーネントである。当業者には、これらコンポーネントを基本コンポーネントと呼ぶが、それらは、単純な処理に制限されるものではなく、それらがそれぞれの実装及び実装するサーバの複雑性に応じて実行するサービスにおいて、任意に複雑であり得る、ということが理解されよう。
このことから、後により詳細に説明するように、基本コンポーネントサーバ自体が、適当な仕様を構築することによって作成される実行可能コードであることが理解されよう。基本コンポーネントを提供することに加えて、局所基本コンポーネントと呼ばれるコンポーネントの追加の下位分類がある。
局所基本コンポーネントは、高レベルのコンポーネントの内部仕様の一部として実装される基本コンポーネントである。内部コンポーネント内の下位コンポーネントに加えて、局所基礎コンポーネントは、より高レベルのコンポーネントを具体化するコンポーネントサーバの一部として実装される。
このため、コンポーネントサーバがより高レベルのコンポーネントに対応するコンポーネントインスタンスを生成する場合、このコンポーネントインスタンスを表すコードは、局所基本コンポーネントの機能を組み込む。これにより、局所基本コンポーネントを内部仕様の一部として実装することができ、必要なデータ処理及び機能のすべてがコンポーネントサーバ自体によって実行される。そして、これにより、局所コンポーネントを局所的にすることができ、システムのパフォーマンスが大幅に向上する。
このため、たとえば、コンポーネントが実装される場合、局所基本コンポーネントによって提供される機能は、それぞれのコンポーネントサーバ自体によって実装され、したがって、遠隔地でサービスが実行される必要はない。これにより、データをコンポーネントサーバから世界中の別の場所にある別のコンポーネントサーバに転送する必要が低減し、局所基本コンポーネントの機能を実装することができる。これにより、ネットワークトラフィックが低減し、局所基本コンポーネントによって具体化されるそれぞれのサービスに対する取得命令等の必要がなくなる。
さらに、サーバ自体内に機能を提供することにより、コンポーネントがサーバ自体の挙動を変更することができるメカニズムが提供される。
ここで、この一例を図11Aに示すalertコンポーネントを参照して説明する。特に、alertコンポーネントは、図示するようにInエージェント及びOutエージェントを含む。
使用の際、トラフィックは、alertコンポーネントを通ってInエージェントからOutエージェントにルーティングされ、したがって、これを、単に、コンポーネントの内部仕様内の2つのそれぞれの下位コンポーネント間の任意の接続に提供することができる。
使用の際、alertコンポーネントは、そこを通って転送されるトラフィックを監視し、障害又は予測されないトラフィックが発生した場合にサーバオペレータに対してポップアップダイアログを表示するようになっている。これにより、サーバオペレータに対し、障害が発生した事実を警告することができ、ポップアップダイアログボックスは、障害の性質を示す。
当業者には理解されるように、alertコンポーネントが異なるコンポーネントサーバのコンポーネントとして実装される場合、異なるマシンに提供されるalertコンポーネントサーバは、ポップアップダイアログボックスを意味のあるコンテキストで表示するために親サーバのディスプレイにアクセスする必要がある。しかしながら、サーバの動作に関する情報がシステムの他のサーバによって要求されるため、これは深刻な安全性問題をもたらす。
これに加えて、局所基本要素は、仕様等によって実行される計算で使用するためにサーバからの構築時間データへのアクセスを提供するようになされることが可能である。
たとえば、局所基本コンポーネントを使用して、サーバのアクティブなインスタンスの数の指示を含む仕様を実装するコンポーネントサーバを提供してもよい。これにより、現サーバに対する負荷が管理不能となるように見える場合、処理を他の二次サーバにオフロードすることができる。
局所基本コンポーネントのさらなる例には、ロード及び保存機能を提供するために必要とされるloadコンポーネント及びsaveコンポーネントが含まれる。特に、コンポーネントインスタンスが、遠隔地からファイルをロードすることが必要とされる場合、サーバ自体によってロードプロセスが制御されることが好ましい。したがって、loadコンポーネントを、コンポーネントインスタンスの一部として提供することができ、それにより、コンポーネントインスタンス及び故にサーバがそれぞれのロード動作を実行することが可能になる。
このように、局所基本コンポーネントがコンポーネントインスタンス自体の一部を形成することを確実にすることにより、局所基本コンポーネントが、コンポーネントサーバが利用することができる方法でその動作を実行するようにコンポーネントサーバと正確に通信することが保証され、したがって、上記例では、ファイルが局所設定に基づいて正確にロードされることが保証される。当業者には、異なるコンポーネントサーバにロードコンポーネントが提供された場合、このタスクははるかに複雑になるということが理解されよう。
図11Bに、基本コンポーネントの別の例を示す。特に、この例は、入力エージェントIn、出力エージェントOut及びwatchエージェントWを有するwatchコンポーネントのものである。使用の際、watchエージェントは、上述したalertコンポーネントと同様に、単に、入力Inにおいて受け取られた任意のデータを通過させ、通過するすべてのトラフィックを監視するように動作する。しかしながら、この例では、watchコンポーネントは、たとえばwatchエージェントWを介してwatchコンポーネントに問い合わせることにより、watchエージェントを介してトラフィックの詳細を確定することを可能にするようになっている。
コンポーネントの内部仕様内にいくつかのwatchコンポーネントを提供することによって、コンポーネントの実装を監督しているエンティティが、コンポーネントがビルドプロセス中にどのように動作しているかを監視し、ネゴシエーション又は他のエージェントメッセージを許可し、且つ実行中にメッセージのペイロードを監視することにより転送されているデータを確定することが可能になる。
したがって、当業者には、これを、局所基本コンポーネントとして、又はそれぞれの監視サーバによって実装される標準基本コンポーネントとして実装することができることが理解され、それにより、局所基本コンポーネントとしての基本コンポーネントの状態が、その実装に依存し、コンポーネント自体の性質には必ずしも依存しないことが強調される。
留意すべきさらなる点は、局所基本コンポーネントが、メインサーバ内に構築されるミニサーバとして実装される、ということである。したがって、取得及び管理を通して必要な処理を実行するような方法で配置される局所基本コンポーネントの集まりを使用して局所処理を実装するのではなく、且つメインサーバの一部として多くのミニサーバを実装するのではなく、局所処理を、メインコンポーネントサーバの実行可能ファイルの一部を形成するカスタムコードフラグメントにひとまとめにすることができる。これを使用して、部分的には基本コンポーネントであるが依然として下請けであるカスタムコンポーネントサーバを提供することができる。
<多段階トランザクション>
状況によっては、連続して複数回コンポーネントを実装することができることが有用である。これを実現するために、コンポーネントが順に複数回定義される仕様を構築することが可能である。しかしながら、状況によっては、これは、問題に対する適当なソリューションを表していないことが理解されよう。
たとえば、長さが不確定のループを実装することが必要である場合、それぞれのループにおいて各動作を実行するために必要なコンポーネントの数が未知であるため、単に複数のコンポーネントを合せて順に連鎖させることは不可能である。
この問題に対する代替ソリューションは、コンポーネントの多段階トランザクション動作を提供することであり、ここで、この一例について、図12A〜図12Dを参照して説明する。
図12Aに示すように、それぞれの入力エージェント1101及び出力エージェント1102を有するコンポーネント1100が提供される。コンポーネント1100は、図示するようにそれぞれの入力エージェント1111及び出力エージェント1112を有する下位コンポーネント1110を含む。使用の際、文字列$を外部エージェント1103から内部エージェント1101に転送することが望まれる。そして、文字列は、エージェント1111に転送され、コンポーネント1110を使用して操作される。結果としての変更文字列$'は、エージェント1112及びエージェント1102を介して出力され、図示するように入力1101に再循環され、それにより文字列はコンポーネント1110を通過することができ、さらに変更される($")。この構成では、ループは絶えず繰り返されることが理解されよう。
コンポーネント1100を単一動作ループコンポーネントとして提示することが望ましく、したがって、それには、コンポーネント1100がコンポーネント1110を未知の回数実装することが必要である。これを実現するために、図12Bに示す仕様構成が使用される。
この例では、コンポーネント1100の内部仕様は、コンポーネント1100自体を破棄せずに、その動作の完了後に破棄される。これを、実施態様に応じて複数の方法で実現することができ、それについては後により詳細に説明する。
コンポーネント1100は、そのエージェント1101、1102の各々が複数のトランザクションを受けることができるという点で多段階コンポーネントである。これは、コンポーネント1100の境界を越えた受け渡しを禁止することによって実現され、それにより、コンポーネント1100を終了させることなく内部仕様を複数回構築し破棄することができる。これに加えて、エージェント1101はまた、セレクタエージェントとして動作するようになっており、たとえばエージェント1101によって受け取られるデータに応じて、コンポーネント1100の内部仕様を選択することが可能となる。
これに加えて、メモリコンポーネント1120が提供される。メモリコンポーネントは、図示するように仕様内で相互接続される3つのそれぞれのエージェント1121、1122及び1123を含む。この例では、図示するように、エージェント1123は、初期メモリ値を含むペイロードを受け取るように動作し、ペイロードは、エージェント1121を介してエージェント1101に転送される。メモリコンポーネント1120は、エージェント1122を介してペイロードを受け取ると、後により詳細に説明するように、ペイロードの値を記憶し、その後記憶した値を、エージェント1121を介してペイロードとして転送する。
このため、図12Bに示すように、ビルドプロセス中、エージェント1101、1121;1102、1122;及び1123、1103は、適当なメッセージを交換することによって相互接続する。この段階では、コンポーネント1100の内部仕様は未決定である。
通信が確立すると、エージェント1123は、エージェント1103から文字列$を受け取り、これを、エージェント1121を介してエージェント1101に転送する。これは、通常、エージェント間で転送されるそれぞれのメッセージのペイロードとして文字列を提供することによって実行される。
この時点で、エージェント1101は、コンポーネント1100に対して内部仕様を確定するように動作し、したがってエージェント1101は、図12Bに示す十字記号によって示すように多段階セレクタエージェントである。仕様は事前に定義されており、エージェント1121から受け取られたペイロードの内容によって決まってもよい。この例では、内部仕様は、上述したようにコンポーネント1110を含む。
これに加えて、多段階トランザクションエージェント1101、1102は、それぞれ一時的エージェント1101B、1102Bを生成するように動作する。これら一時的エージェントは、内部仕様が終了した後に終了する単一段階トランザクションエージェントである。この場合、内部仕様は、図12Cに示すように、エージェント1111、1112がそれぞれエージェント1101B、1102Bに接続するように構築される。
一時的エージェント1101B、1102Bが使用されることにより、エージェント1101に提示されたペイロードを、「通過(hand through)」と呼ばれるプロセスで一時的エージェント1101Bを介してエージェント1111に転送することができるようにすることによって、多段階セレクタエージェント1101が開いたままである。したがって、通過は、上述した受け渡しの代替メカニズムである。
通過では、エージェント1101Bを提示することにより、エージェント1101が開いたままであるのを可能にしながら接続を切断しエージェント1101Bを終了させることにより、コンポーネント1100及び故にコンポーネント1110の内部仕様が正しく終了するようにすることができる。
文字列$はエージェント1101Bを介してエージェント1111に転送され、それにより、コンポーネント1110は文字列を変更して変更文字列$'を生成することができ、これはエージェント1112を介してエージェント1102Bに転送される。
この時点で、コンポーネント1100は、内部仕様が必要な処理を実行したと判断し、これは、通常、仕様自体の中で固有である何らかの形態の終了メカニズムを使用して実現される。したがって、これを、後により詳細に説明するように、終了コンポーネント等を使用して実現してもよい。いずれの場合も、コンポーネント1100及び故にコンポーネント1110の内部仕様は、図12Dの点線によって表されるように終了する。通常、これには、コンポーネント1110を表すコンポーネントインスタンスを終了させるコンポーネントサーバが関与する。
エージェント1101は、メッセージペイロードの変更文字列$'をメモリコンポーネント1120のエージェント1122に転送し、それにより、メモリに格納された文字列$は文字列$'に置き換えられる。エージェント1121は、文字列$'をセレクタエージェント1101に転送するように試みる。しかしながら、セレクタエージェントは、内部仕様が完全に終了するまでいかなる入来ペイロードもブロックするようになっており、それにより、新たな内部仕様を構築することができる。したがって、メモリコンポーネント1120は、その時点で新たな内部仕様を構築することができることを確認するエージェント1101からのメッセージを待ち、したがって、必要に応じて、且つ図12Dに示すように、文字列$'をエージェント1101に転送する。
変更文字列$'を受け取ると、多段階セレクタエージェント1101は、図12Cに示す内部仕様が構築されるようにする取得命令を生成するように動作し、それによりループが繰り返されることが可能になる。
この例では、このプロセスは連続的に繰り返されるため、文字列はコンポーネント1110によって変更され、その後、コンポーネント1110は、再取得されそれにより文字列を再度変更する前に終了する、ということが理解されよう。
しかしながら、これとは対照的に、コンポーネント1100は、より大きい仕様内では一度しか構築されず、ループの繰返し毎に再取得されないという点で不変である。このため、コンポーネント1100は、外部的には不変コンポーネントを提示するが、内部的には再取得されたコンポーネントを利用して多段階トランザクションを実行する。
より複雑な状況でこうしたループの平滑な動作を確実にするために、ループにおけるコンポーネントのすべてによるすべての処理が次のループの繰返しの前に確実に完了していることが重要であり、それにより同期問題が回避される。
たとえば、上述した状況では、コンポーネント1110の終了前にエージェント1101に出力文字列$'を提示することにより、問題が引き起こされる可能性がある。
これを防止するために、エージェント1101は、通常、コンポーネント1100が終了するまでブロックされ、これは、後により詳細に説明するように実現される。
<終了>
コンポーネントが具体化されたサービスを実行すると、コンポーネントインスタンスは終了する。コンポーネントが終了していない場合、コンポーネントインスタンスがコンポーネントサーバで生成されると、これは無期限に持続することになる。その結果、コンポーネントサーバは、使用済みのそれ以上必要でないコンポーネントインスタンスによって過負荷状態となる。これを回避するために、コンポーネントを、適当なイベントが発生した時に実装サーバに対しそれぞれのコンポーネントインスタンスを閉じさせることにより終了させる。
これは、たとえば、それぞれのサービスが完了した時に自動的に行われてもよい。以前、これは、コンポーネントインスタンスによるサービスの受け渡し又は完了等のイベントによってトリガされた。しかしながら、この場合、コンポーネントインスタンスは、仕様全体においてその義務を果たすために必要である時間しか持続しない。
しかしながら、これに関連して多数の潜在的な欠点がある。
特に、コンポーネントビルドが開始されると、コンポーネントがすでにそのタスクを完了し終了している場合、プロセスを停止して、いくつかのコンポーネントの実装を繰り返し、誤りを訂正することは不可能である。これに加えて、コンポーネントに対しそれらの現状態について問い合わせる必要のある場合がある。さらに、通常、コンポーネントは、タスクを上位コンポーネントから完全に受け渡しする下位コンポーネントに分解し、それによりタスクを委任した上位コンポーネントが終了することになる。
最後に、コンポーネントを完成した時に自動的に終了させることにより、サービスを提供することによって、サービスの提供に対する正確な報酬を保証することが困難になる可能性がある。
これを回避するために、一例では、コンポーネントは、終了コマンドによって命令されるまで終了しない。この終了コマンドは、通常、階層のより高いレベルにあるコンポーネントから受け取られる。この機能を、terminationコンポーネントによって実現することができ、その一例を図13に示す。
terminationコンポーネントは、それぞれの仕様における他のコンポーネントから通知メッセージを受け取るようになっているエージェントInを含む。この通知メッセージを使用して、terminationコンポーネントに対し、コンポーネントがその処理を完了しており、したがってそれ以上必要とされないということが示される。
通知メッセージを受け取ることに応じて、terminationコンポーネントは、仕様から確定されるように指定されたコンポーネントに転送される終了命令を提供する。これは、取得命令と同様のメカニズムを使用して転送される。このため、terminateionコンポーネントを、局所基本コンポーネントとして実装してもよく、それにより、コンポーネントインスタンスを実装するサーバが、終了しているコンポーネントを実装しているサーバに終了命令を転送する。
これに加えて、terminationコンポーネントは、所定の規則にしたがって終了命令を生成するように動作してもよい。これは、終了命令が送信されるべき時刻を指定してもよく、それによりコンポーネントは、その処理を完了し、terminationコンポーネントに通知メッセージを転送することができる。そして、terminationコンポーネントは、終了命令を生成する前に適当な時間待機する。
別の方法として、これを、外部イベントに従って実現してもよく、それによりterminationコンポーネントがイベントに反応しそれによって終了をもたらす。
これに加えて、これは、システム内の報酬に対するメカニズムを提供する。詳細には、報酬は、終了命令内に何らかの形態の報酬指標又は指示を含めることによって実現される。したがって、コンポーネントインスタンスは、終了命令を受け取ると、報酬指標を記録するように動作し、それによりエンティティが後に何らかの方法で報酬を得ることができるようにする。これは、報酬指標を適当な支払い機関に対して提示することによって実現され、これは、たとえば、フォーラムの銀行を通して実現されてもよい。
概して、terminationコンポーネントは、内部仕様の階層のそれぞれのレベル内のすべてのコンポーネントが同時に終了するように動作する。このため、たとえば、コンポーネントが終了する時、そのコンポーネントが複数の下位コンポーネントを含む場合、terminationコンポーネントは、通常、それらの下位コンポーネントの各々に対し実質的に同時に終了命令を提供する。このように、終了は、処理が順に完了するに従って仕様を通して伝播する。
<多接続機能>
バンドリングの一例については、以前、本出願人による同時係属出願PCT/AU03/01474号において述べられている。
これらのバンドリングの形態では、既知の数のエージェントが互いにバンドルされることにより単一バンドルエージェントが形成される。そして、バンドルエージェントを別のコンポーネントのエージェントに転送し、その後バンドルコンポーネントの対応する構成を使用してバンドルを解除することができる。この意味で、エージェントのバンドルを使用する通信は、エージェントメッセージを使用して実現され、そのエージェントメッセージのペイロードは、バンドルコンポーネントの各々によって収集されたエージェントアドレスからのペイロードの組み合わせから形成される、ということが理解されよう。
エージェントバンドルを受け取ると、コンポーネントは、そこに含まれるエージェントを抽出し、必要に応じてこれらをそのコンポーネント内のエージェントに接続することができなければならない。このため、コンポーネントは、エージェントバンドルを正確にバンドルを解除する場合、バンドルに含まれるエージェントと、エージェントが提供される順序とを知らなければならず、それにより、必要に応じてエージェントをバンドルから抽出し他のエージェントに接続することができるようになる。
これを実現するために、したがってエージェントは、通常、標準化された方法でバンドルされ、それにより、エージェントの一定構造を有する標準バンドルが使用される。これにより、バンドルコンポーネントの事前に確定された構成をバンドルの形成及び分解に使用することができる。このため、これは、入力エージェント及び出力エージェントの数が事前に定義されている環境でしか使用することができない。
しかしながら、例によっては、より多くのエージェントの単一エージェントへのバンドリングを提供することができることが有用である。この場合、この数をサポートする個々のコンポーネントの数が実際的でなくほど大きくなる。
これを、1対1接続性に対応する機能を依然として維持しながら、たとえば、可変数の出力エージェントを単一入力エージェントに接続するために使用してもよく、又はその逆でもよい。この一例を図17Aに示す。
この例では、3つのエージェントA1、A2、A3をtestコンポーネントの単一IOエージェントに接続することが望まれる。しかしながら、3つのエージェントの使用は単に例として示されており、他の仕様では追加のエージェントを設けてもよい、ということが理解されよう。したがって、testコンポーネントが或る範囲の仕様で使用されるために十分汎用性がある場合、IOエージェントは、未知の数のエージェントに接続することができなければならない。このため、testコンポーネントは、未知の数のエージェントのバンドルを受け取り、そのバンドルを正しく分解し解釈することができなければならない。
一例では、これは、概してnbundleコンポーネントと呼ばれるバンドルコンポーネントの変更された形態を使用して実現される。nbundleコンポーネントの2つの例を図17Bに示す。
この例では、nbundleコンポーネントnbundle1は2つのエージェントを含み、それらは、概念的に入力エージェント及び出力エージェントを形成する。後述するように、このコンポーネントを使用して、nbundleコンポーネントのチェーンを終了させる。このため、入力エージェントは、エージェントA1、A2、A3のうちの1つと通信するようになっており、出力エージェントは、チェーンのより高い他のnbundleコンポーネントと通信するようになっている。
これとは対照的に、第2のnbundleコンポーネントnbundle2は、概念的には2つの入力エージェント及び1つの出力エージェントを形成する3つのエージェントを有する。この場合、入力エージェントのうちの1つは、チェーンのより低いnbundleコンポーネントに結合され、他の入力エージェントは、エージェントA1、A2、A3のうちの1つに結合される。出力エージェントは、チェーンのより高い他のnbundleコンポーネントに結合される。
nbundleコンポーネントがいかに結合されチェーンを形成するかの一例を図17Cに示す。
使用の際、nbundleコンポーネントの動作は、いくつかの相違はあるが上述したbundleコンポーネントの動作に類似する。第1に、nbundleコンポーネントは、エージェントA1、A2、A3に結合される入力エージェントをブロックするように動作し、それによりエージェントA1、A2、A3がnbundleコンポーネントに任意のペイロードを転送するのを防止する。これにより、nbundleコンポーネントとエージェントA1、A2、A3又はそれに関連する任意のコンポーネントとの直接の通信が防止される。第2に、nbundleコンポーネントは、生成されたエージェントバンドル内のカウンタを維持するように作用し、それにより、nbundleを受け取るコンポーネントがそれに含まれるエージェントの数を確定することができる。エージェントメッセージは、XMLファイルの形式であり、したがってカウンタは、適当なXMLタグを使用することによって識別されるファイル内の数値として提供される。
このため、使用の際、nbundleコンポーネントは、結合されているエージェントのエージェントアドレスを、nbundle1コンポーネントを含むチェーンの底部から開始して収集することによって作用する。当業者には、同時係属特許出願PCT/AU03/01474号に記載されているように、エージェントA1、A2、A3のアドレスが、そこに結合されたnbundleコンポーネントの構築を開始するために使用される取得命令の一部として提供されるということが理解されよう。
このため、nbundle1コンポーネントは、エージェントA3のエージェントアドレスを確定し、これを、チェーンの次のnbundleコンポーネントnbundle2に転送されるエージェントメッセージのペイロードに挿入する。同時に、nbundle1コンポーネントはまた、エージェントバンドルがこの時点で単一エージェントのみを含むことを示す、初期カウンタ値「1」をエージェントメッセージに提供する。
エージェントメッセージは、次のnbuncle2コンポーネントに転送され、この場合、次のnbundle2コンポーネントはエージェントA2のアドレスを追加し、エージェントメッセージをチェーンの次のnbundleコンポーネントに転送する前にカウンタを「1」だけインクリメントする。
このことから、testコンポーネントは、エージェントA1、A2、A3のアドレス及びカウンタ値「3」を含む単一エージェントメッセージを受け取ることが理解されよう。
このため、IOエージェントの観点からすると、それは、単一エージェントメッセージを受け取って通信を開始し、したがって、1対1エージェント接続が提供されるかのように見える。
使用の際、testコンポーネントは、バンドルからエージェントを抽出する何らかの形態のメカニズムを実装する。当業者には理解されるように、たとえば図17Dに示すように、これを、それぞれのエージェントB1、B2、B3に接続されたnbundleコンポーネントの対応する構成を使用して実現してもよい。
この場合、nbundleコンポーネントの各々はエージェントアドレスを交換し、それによりnbundleコンポーネントは(上述した技法を使用して)受け渡しをすることができ、それによって、図17Eに示すようにエージェントB1、B2、B3及びエージェントA1、A2、A3が直接接続する。このため、エージェントバンドルに対応するエージェントメッセージを受け取るnbundleコンポーネントは、エージェントメッセージをチェーンの次のnbundleコンポーネントに転送する前に、そこから第1のエージェントアドレスを抽出するように動作する。このプロセス中、カウンタの値もまたデクリメントされ、バウンドルの最後のエージェントを識別することができるようになる。
testコンポーネント内のnbundleの必要なチェーンを正確に生成するためには、testコンポーネントの内部仕様を実装される際に変更することができることが必要である。当業者には、IOエージェントによって受け取られるエージェントメッセージに提供されるカウンタ値に従ってこれを実行することができ、それによってtestコンポーネントがnbundleコンポーネントの適当なチェーンを生成することができ、それにより必要に応じてバンドルからエージェントを抽出することができる、ということが理解されよう。
これを、セレクタエージェントの使用を介して実現することができ、ここでこの一例を、図18A〜図18Eを参照して説明する。
特に、図18Aは、上述したDUPコンポーネントと、各々がそれぞれXML Inエージェント、TAG Inエージェント、Value Outエージェント、XML Outエージェント及びエラーEエージェントを有する2つのFind Tagコンポーネントとを利用する、testコンポーネントのための内部仕様の一例を示す。この内部仕様はまた、図示するようにSizeエージェント及びInputエージェントを有するdecisionと付されたコンポーネントも含む。
使用の際、2つのFind Tagコンポーネントは、図示するように、DUPコンポーネントと、nbundleタグエージェント及びsize tagエージェントとに接続される。XML Outエージェント及びEエージェントは、この例では使用されず、その結果、内部仕様の内部エージェントに接続される。この内部エージェントは、エージェントが別のエージェントに接続しその後正常に終了することができるように動作するエージェントである。
使用の際、図17Cに示すnbundleコンポーネントのシーケンスによって生成されるエージェントバンドルは、図18Aの左側に示すIOエージェントにおいて受け取られる。エージェントバンドルは、DUPコンポーネントに転送され、DUPコンポーネントは、エージェントバンドルのコピーを第1のFind TagコンポーネントのXMLエージェントとdecisionコンポーネントのInputエージェントとに転送する。
Find Tagコンポーネントは、XMLファイルを含むエージェントメッセージの形式であるエージェントバンドルを受け取る。XMLファイル内に含まれる特定のnbundleタグの指示は、Tag Inエージェントを介して受け取られ、これは、通常、ルックアップテーブル(LUT)等から取得される。Find Tagコンポーネントは、XMLファイル内の指定されたタグを見つけ、そこに含まれる値をValue Outエージェントを介して図示する第2のFind Tagコンポーネントに転送するように動作する。
第2のFind Tagコンポーネントは、同様の手続きを実行しsize tagエージェントからサイズタグを受け取るように動作し、これには通常、LUTにアクセスすることが含まれる。サイズタグは、エージェントバンドルにおけるエージェントの数を指示するカウンタ値の指示を含む第1のFind Tagコンポーネントから受け取られた値の中で提供される。この値は、図示するdecisionコンポーネントのsizeエージェントに供給される。
使用の際、sizeエージェントはセレクタエージェントであり、したがって、エージェントバンドルのサイズに従ってdecisionコンポーネントに対し内部仕様を確定するように動作する。このため、エージェントメッセージ内に含まれるインクリメントされたカウンタ値は、2つのFind Tagコンポーネントによって抽出され、decisionコンポーネントに対しそれぞれの内部仕様を選択するために使用される。
バンドルが2つ以上のエージェントを含む場合、選択される内部仕様は図18Bに示すようなものである。詳細には、内部仕様は、図示するように、SUBコンポーネント、RNDコンポーネント、nbundle2コンポーネント、decisionコンポーネント及びprocess connectionコンポーネントを含む。
使用の際、エージェントバンドルは、inputエージェントを介してnbundle2コンポーネントに転送される。nbundle2コンポーネントは、階層構造の第1のエージェントのバンドルを解除するように動作し、これをprocess connectionコンポーネントのclientエージェントに転送する。したがって、図17Cの例では、第1のエージェントはエージェントA1に対応し、これは、process connectionコンポーネントのclientエージェントと相互接続される。エージェントバンドルの残りは、decisionコンポーネントのinputエージェントに転送される。
このように、このプロセスは、エージェントA1のアドレスを分離するように動作し、エージェントメッセージにはエージェントA2、A3のアドレスが残される。
同時に、sizeエージェントを介して受け取られるサイズ値がSUBコンポーネントのエージェント1に転送され、それにより、SUBコンポーネントは、エージェント2で受け取られた値、この場合は「1」を減算するように動作する。結果としての出力値は、エージェントO及びエージェントIを介してRNDコンポーネントに転送される。RNDコンポーネントは、受け取った値を丸め、結果としての整数値を出力エージェントOからdecisionコンポーネントのsizeエージェントに転送するように動作する。これが必要であるのは、この例では、SUBコンポーネントは10進数値を生成するが、整数値が必要とされるためである、ということが理解されよう。
これは、上述したようにエージェントバンドルからエージェントが除去されたことを示すために実行される。
ここでもまた、decisionコンポーネントにおけるsizeエージェントはセレクタエージェントであり、エージェントサイズにおいて提示される値に従ってdesicionコンポーネントに対し内部仕様を選択するように動作する。したがって、エージェントバンドルのサイズが依然として1を上回る場合、decisionコンポーネントは同じ内部仕様を使用して実装され、したがって上述したように動作する、ということが理解されよう。
このため、この例では、エージェントA2のアドレスはさらなるprocessor connectionコンポーネントに送られ、エージェントバンドルの残りは対応するdecisionコンポーネントに転送される。
sizeエージェントに提示されるサイズが「1」に等しい場合、decisionコンポーネントの内部仕様は図18Cに示すようになる。このため、この場合、サイズエージェントは未接続のままであり、内部仕様を選択するためのみに使用される。入力エージェントがnbundle1コンポーネントに結合されることにより、残りのエージェントA3をprocess connectionコンポーネントのclientエージェントに接続することができる。
したがって、testコンポーネントの内部仕様、詳細には、内部仕様がエージェントバンドルにおけるエージェントの数に基づいて選択されるdecisionコンポーネントの繰り返される取得により、任意の数のエージェントのバンドルを正しく解除することができる、ということが理解されよう。したがって、バンドル内に含まれる可変数のエージェントをtestコンポーネントのIOエージェントに提示することができ、それにより、testコンポーネントは、エージェントをそれぞれのprocess connectionコンポーネントのそれぞれのclientエージェントに受け渡す。
使用の際、nbundleコンポーネントはその後、エージェントA1、A2、A3がそれぞれのclientエージェントと直接接続するように受け渡しをする。
このため、カウンタを含むエージェントバンドルを実装するために変更されたnbundleコンポーネントを利用することができ、それによりそこに含まれるエージェントの数を確定することができる。これにより、可変数のエージェントを単一エージェントとして提示することができ、それにより図17Aに示すように、有効に、複数のエージェントを単一エージェントに接続することが可能になる。
単純なnbundleチェーンを生成することができるようにすることに加えて、nbundleコンポーネントを階層的に連鎖させることも可能であり、それにより以下エージェントntreeと呼ぶnbundleツリーが実装される。
ntreeの一例を図19Aに示す。詳細には、この例では、階層の最下レベルでは3つのnbundleコンポーネントが相互接続されており、階層の中間レベルでは6つのnbundleコンポーネントが相互接続されており、階層の最上レベルでは5つのnbundleコンポーネントが相互接続されている。
この例では、結果としての最終出力エージェントは、ツリーをバンドル解除するように動作するntreeコンポーネントのエージェントIOに接続される。
ntreeコンポーネントの内部仕様の一例を図19Bに示す。この例では、内部仕様は、図示するように2つのDUPコンポーネント、3つのFind Tagコンポーネント、CATコンポーネント、LUTコンポーネント、SW1コンポーネント及びntreeコンポーネントを含む。
使用の際、エージェントツリーはエージェントIOで受け取られ、第1のDUPコンポーネントに、その後第2のDUOコンポーネントに転送され、3倍になることができる。エージェントバンドルは、第1のFind Tagコンポーネント及び第2のFind Tagコンポーネントと、ntreeコンポーネントのエージェントIOとに転送される。
第1のFind Tagコンポーネントは、後続するCATコンポーネントの入力エージェント1に結合されるエラーエージェントEを有し、CATコンポーネントは、第2のFind TagコンポーネントのエラーエージェントEに結合される第2の入力エージェント2を有する。使用の際、エラーエージェントEによって提供されるエラー値は、CATコンポーネントによって連結され、LUTコンポーネントの入力エージェントIに転送される。
LUTの出力エージェントOは、コンポーネントSW1の入力エージェントSに結合され、入力エージェント2は第3のFind Tagコンポーネントのvalue outエージェントに結合される。
この内部仕様の動作は以下の通りである。詳細には、第1のFind Tagコンポーネントに提供されるエージェントntreeは、図示するように、neg1 tagエージェントから確定されるneg1タグの存在を確定するために分析される。neg1タグ内に含まれる値と確定されたXMLとは無視され、エラー値Eはcat1エージェントに転送される。neg1タグが存在する場合、TRUE値がCATコンポーネントに提供され、neg1タグにアクセスされる場合、FALSE値が提供される。
これは、処理されるエージェントが、チェーンの最後に発生するもののようなnbundleからの抽出を必要とするエージェントを表すか否かを表す。
したがって、受け取られたエージェントntreeが、図19Aに示すコンポーネントの組み合わせによって生成されるntreeに対応する場合、FALSE値が返される。
同様に、第2のFind Tagコンポーネントは、処理されるエージェントがエージェントntreeを形成するか否かを示すnbundleタグを探索するように動作し、TRUE又はFALSEの出力を示す。この場合、TRUE値が返される。
エージェントがエージェントntreeである場合、値が確定され第3のFind Tagコンポーネントに転送され、第3のFind Tagコンポーネントは、サイズタグを探索し確定されたサイズ値をスイッチコンポーネントSW1に転送するように動作する。サイズ値は、ntreeのそれぞれのチェーンのサイズを表し、この場合、それは、上述したように第1のチェーンである。
neg1タグ及びnbundleタグの存在は排他的であり、それにより結果としての連結はFALSETRUEとなるか又はTRUEFALSEとなることが理解されよう。この例では、LUTコンポーネントは、TRUEFALSE又はFALSETRUEの連結をそれぞれTRUE値又はFALSE値に変換するように動作する。
スイッチコンポーネントSW1は、TRUE/FALSE値を検査するように動作する。TRUEが確定される場合、これは、受け取られたエージェントが処理されることを示し、値neg1が入力エージェント1から出力エージェントAまで転送される。そうでない場合、入力エージェント2で受け取られたサイズ値が出力エージェントAに転送される。
先の例と同様に、ntreeコンポーネントのsizeエージェントは、ntreeコンポーネントの内部仕様を選択するために使用されるセレクタエージェントである。
この例では、受け取られるサイズ値がneg1値に対応する場合、これは、次のエージェントが処理されることを示し、したがって、図19Cに示す内部仕様が選択され、エージェントがprocess connectionコンポーネントに直接接続されることが可能になる。これは、上述した方法と同様に実現され、必要に応じて中間コンポーネントの受け渡しが実行される。
受け取られたサイズ値が1より大きい場合、選択された内部仕様は図19Dに示すようになる。
この例では、エージェントntreeはIOエージェントからnbundleコンポーネントに転送され、nbundleコンポーネントはエージェントを抽出し、そのエージェントは、第1のDUPコンポーネントに、故にさらなるDUPコンポーネント、3つのFind Tagコンポーネント、CATコンポーネント、LUTコンポーネント及びSW1コンポーネントに転送される。これらコンポーネントは、図19Bを参照して上述した構成にある。
したがって、これは、抽出されたエージェントを検査し、これが処理されるべきエージェント、この場合はntree階層の第2のレベルであるエージェントntreeのさらなる部分であるかを判断するように動作することが理解されよう。前者の場合、動作は、図19Cに関して上述したようなものであり、第2の場合、これは、目下説明しているようなntreeコンポーネントの内部仕様を選択するために使用される値を確定するために使用される。
これに加えて、この例では階層の最高レベルにある次のエージェントであるチェーンの次の部分が抽出され、図示するように後続するntreeコンポーネントのIOエージェントに転送される。これに加えて、受け取られたサイズ値は、SUBコンポーネントにより1だけ低減されRNDコンポーネントにより整数に丸められる。このサイズはこの場合もまたそれぞれの内部仕様を選択するために使用される。
サイズ値が「1」である場合、これは、これが考慮されるべきエージェントntreeの最後のエージェントであることを示す。したがって、sizeエージェントは、図19Eに示す内部仕様を選択する。
この場合、仕様は、最終エージェントを抽出し、これが処理されるべきエージェント、又は階層の後続するレベルに対応するかを判断するように動作する。
エージェントが階層の別のレベルである場合、選択されたチェーンのサイズは、ntreeコンポーネントの内部仕様が図19D又は図19Eのいずれかに示される内部仕様であるように確定される。そうでない場合、図19Cに示す内部仕様が選択され、エージェントが処理される。
図19Fに示すように、最終的に追加された接続を単一バンドルに隠すことが可能であり、その後それを、バンドルを操作する適当なコンポーネントの内部コマンドコンポーネントに提供される適当なセレクタエージェントを使用することによって操作することができる。このため、これにより、多対1、1対多又は多対多の接続が可能となり、可変数のエージェントが実装される。
コンポーネントがntree接続をサポートする場合、接続の単一エージェントを含む別のコンポーネントは、内部処理を使用して必要に応じて新たな接続を作成するためにntreeの特性を利用することができる。所与のnbundleチェーンに対する任意の動的拡張は、チェーンが完了するまで所与のnbundleチェーンに対するラベル付き処理となることに留意することが重要である。
このため、必要に応じて新たな接続を実現するために所与のnbundleチェーンを動的に拡張することは可能ではないが、一方は処理のために使用され他方は他の接続が必要に応じて確保される、2つのエージェントの完全なバンドルチェーンを供給することは可能である。
別の接続が必要である場合、図19Fに詳述するように、完全な2エージェントnbundleチェーンを未使用入力に接続することができ、それによりこの場合もまた一方のエージェントを処理のために使用し他方のエージェントをさらなる拡張のために確保することが可能になる、という点でプロセスが繰り返される。
当業者は、多数の変形及び変更が明らかとなることを理解するであろう。当業者に明らかとなるこうした変形及び変更のすべてを説明していないが、それらは本発明の説明をする前の特許請求の範囲にあるようにみなされるべきである。
<多点接続>
上述した例のほとんどにおいて、各エージェントは、他の1つのエージェントのみと相互接続するようになっている。この例では、多重接続が必要な場合、これがバンドリングを用いて実現される。
しかしながら、これに対する代替形態として、複数の異なるエージェントと同時に相互接続することができる多点接続エージェントを提供することができる。
この一例を図20に示す。ここでは、コンポーネントCの第1のエージェントAは、複数のエージェントS1、S2、S3、S4と選択的に相互接続するようになっている。
エージェントが仕様の2つ以上の他のエージェントと相互接続される場合にこれを実現するために、エージェントは多点エージェントとして定義される。これを、後により詳細に説明する選択肢を用いて実現してもよく、したがって、コンポーネント供給者はエージェントが単一エージェントであるか又は多点エージェントであるかを選択することができる。
いずれの場合も、エージェントは、エージェントが必要に応じて多数の異なるエージェントアドレスからメッセージを受け取ることを可能にするように変更される。これを実現するために、コンポーネントCによって受け取られる取得命令は、エージェントAが接続すべきエージェントのアドレスを含む。このため、たとえば、取得命令がエージェントS1、S2、S3のアドレスを含む場合、これによりエージェントAは多点接続を提供し、それによってエージェントはエージェントS1、S2、S3の各々とメッセージを交換することができるようになる。
エージェントAがエージェントS1、S2、S3と通信する方法は、当業者には理解されるようにそれぞれのコンポーネントの機能によって決まる。
ビルドプロセス中に追加のエージェントS4が追加される必要がある場合、コンポーネントCに対する取得命令がコンポーネントによってすでに影響されているため別個のプロトコルが必要である。したがって、追加の取得命令又は他の適当なメッセージを、コンポーネントCを実装するコンポーネントサーバに転送しなければならず、それにより追加のエージェントアドレスをエージェントAに関連するエージェントリストに追加することが可能になる。
これを、ルートサーバを介してメッセージを転送することによって実現してもよい。しかしながら、エージェントAのアドレスは、エージェントS4を実装するコンポーネントには既知でない場合があり、そのため、別法として、メッセージをビルドプロセス中に介入コンポーネントを介して転送することができる。
ここで、この一例を、図20Bを参照して説明する。この例では、仕様は、最初に3つのコンポーネント1500、1510、1520で構築され、各々がそれぞれの入力エージェント及び出力エージェント1501、1502;1511、1512;1521,1522を有する。この例では、エージェントは指向性を示すことができるように三角形として表されている。
いずれの場合も、この例では、コンポーネント1500はエージェント1502、1511及び1512、1521を介してコンポーネント1520に結合される。ビルドインが進行中となり各コンポーネント1500、1510、1520に対応するコンポーネントサーバが構築されると、コンポーネント1500は、コンポーネント1520に対する直接接続が必要であると確定することができる。
この場合、コンポーネント1500は、対応するアドレスを有する新たなエージェント1502を生成する。コンポーネント1500は、エージェントメッセージを生成し、これはコンポーネント1510に転送され、コンポーネント1510はこれをコンポーネント1520に転送する。コンポーネント1520は、要求を受け取り、エージェント1521をエージェント1503に接続すべきであると確定する。したがって、コンポーネント1520は、エージェントを、多点接続が実行され得るように変更し、エージェント1503のアドレスの詳細を提供する。これにより、点線によって示すようにエージェントが相互接続することができる。
順序付け
一例では、エージェントは、異なるエージェントと順に通信することによって動作することができる。したがって、エージェントが他の多くのエージェントと接続する場合、通信は適当な順序で実行されることが確実である必要がある。
たとえば、複数のエージェントが各々、後に単一エージェントに送信されて適当なコンポーネントによって結合され得るようになるコードフラグメントを生成する場合、それらコードフラグメントは特定の順序で受け取られることが必要である可能性がある。
順序付けは、仕様の構築内で暗黙的であってもよい。この一例を図20Cに示す。この例では、図示するように、それぞれの入力エージェント及び出力エージェント1551、1552;1561、1562;1571、1572;1581、1582を有する4つのコンポーネント1550、1560、1570、1580が接続される。
いずれの場合も、この例では、コンポーネント1550は出力をコンポーネント1560及び1570の各々に提供する。この結果、1550がそのタスクを完了し、コンポーネント1560、1570のいずれかが実装される前に出力をコンポーネント1580に提供しているという点で、コンポーネント間の通信に暗黙的な順序付けがある。したがって、この場合、エージェント1581は、エージェント1562及び1572より前にエージェント1552からメッセージを受け取るようになっている。このため、コンポーネント1560、1570に関するコンポーネント1550のこの連続構成は、暗黙的な順序付けを提供する。
対照的に、コンポーネント1560、1570の各々は、それぞれのデータ処理サービスを並列に実装し、それによりエージェント1581に出力を同時に提供する可能性がある。これが起こるのを防止するためには、何らかの形式の順序付けを、たとえばビルド中のネゴシエーションプロセスの一部として実装してもよい。
多点ネゴシエーション
多点エージェントが複数の異なるエージェントとネゴシエートしている場合、これを、複数の方法のうちの任意の1つで行うことができる。
たとえば、これを、エージェントの各々と順にネゴシエートすることによって行うことができる。そのため、図20Bにおいて上述した例では、エージェントAはまずエージェントS1とネゴシエートしてネゴシエーションポジションを確立することができる。この場合、エージェントS2、S3に対し、強制的にこのネゴシエーションポジションを採用させてもよい。別の方法として、エージェントAは、エージェントS1との複数の残りのネゴシエーションポジションを確定することができ、それによりエージェントS2とのネゴシエーションを残りのネゴシエーションポジションに基づかせることができる。
いずれの場合も、先のネゴシエーションの結果により、後続するネゴシエーションポジションが合意されないようにすることができる。これが起こるのを回避するためには、場合によっては、複数のエージェントとのネゴシエーションを同時に行うことが望ましく、それによりエージェントのすべてに対して共通である共通ネゴシエーションポジションに達することができる。それを、上述したアルゴリズムの変形形式を使用して実現することができるということが理解されよう。
ネゴシエーションプロセスを使用して、ネゴシエーションポジションとして好ましい通信順序指示を含めることにより順序付けを制御してもよい、ということが理解されよう。
さらに、ネゴシエーションプロセスが順序付けによって影響を受けてもよい。図20Cの例では、たとえば、何らかのコンテキスト依存性が提供されるのを可能にするために、コンポーネント1550、1560間のポジションを確立する前に、コンポーネント1550、1570間のネゴシエーションポジションを確立することに対して理由のある場合がある。
たとえば、コンポーネント1550、1570間の方がコンテキスト依存性の度合いが高い場合、コンポーネント1550、1560間より前にこれらのコンポーネント間の通信を実行することが有利であり得る。
これを実現するために、ネゴシエーションプロセスは、多点接続における互いのコンポーネントと実現することができるコンテキスト依存性の度合いを反映することができ、それによりこの結果に基づいてネゴシエーションを実行することが可能になる。たとえば或るエージェントが第1のグループのすべてのエージェントに同時にメッセージを転送し、次いで第2のグループのすべてのエージェントに同時に第2のメッセージを転送することができるように、調和されたグループを定義することも可能である。これを、取得命令におけるエージェントアドレスをグループ化することにより、又は適当なネゴシエーションを実行することにより実装することができる、ということが理解されよう。
本実施形態における順序は上位コンポーネントによって確定される。これは、上位コンポーネントが、下位コンポーネントのエージェント間のリンクを確立するためである。各エージェントは、取得時に順序が確立されて上位コンポーネントからリストを受け取る。リンク情報及び故に順序を提供するのは上位コンポーネントの責任である。
<コンポーネントサーバの構築>
概して、各コンポーネントは、上述したように、適当な処理システムによってホストされる実行可能ソフトウェアから形成されるコンポーネントサーバを利用して実装される。コンポーネントサーバの目的は、コンポーネントインスタンスが、通常コードフラグメントの生成を含むことができる所望のデータ処理サービスを実行するのを可能にすることである。
各コンポーネントサーバ自体が実行可能コードから少なくとも部分的に形成されるため、それを、適当な仕様を利用して生成することができ、それは、構築される時、コンポーネントに対し必要なデータ処理動作のうちのいくつか又はすべてを実装するために必要なコードを作成する。コンポーネントサーバの構築により、コンポーネントが、自動で、又はオペレータに対して適当なGUIを提示することによって手動で実装されるようにすることができ、この構築には、必要な機能のうちの少なくともいくつかを実行するために1つ又は複数の下位コンポーネントを使用することが含まれてもよい。
概して、サーバの構築には、ここで説明するように2つの異なるタイプの実施態様が含まれてもよいが、実際には、説明から明らかとなるように、概して2つの技法が関連して提供される。
第1の実装では、コンポーネントサーバは、コンポーネントインスタンスが実行される度に、適当な仕様を構築することによって動作することができる。したがって、この場合、コンポーネントサーバは、適当な仕様がロードされ構築されるようにする実行可能プログラムの形式となる。これにより、コンポーネントサーバは使用単位で下位コンポーネントを選択し実装することが可能になり、そのため上位コンポーネントが実装される度に上位コンポーネントのコンテキストに適した下位コンポーネントの適当な選択が実装される。
これは、コンポーネントに対してかなりの程度の柔軟性を提供する。それは、これにより、コンテキスト及び他の要素に応じて異なる仕様及びコンポーネントを使用することが可能になるためである。この柔軟性を、上述したように適当なセレクタエージェント及び非コード生成処理コンポーネントを使用することによって仕様に組み込むことができる。このため、サーバは、単に仕様を解釈して各上位コンポーネントを実装する。しかしながら、この技術の欠点は、多くの処理が下請けに出され、それによりコンポーネントを実装するコストが増大するだけでなく、同様に時間もかかることになる。
これに対する代替形態として、コンポーネントサーバを、所望の処理をネイティブに提供することができる実行可能プログラムから形成することができ、それにより必要な柔軟性が実現される。したがって、こうしたコンポーネントサーバは、必要な機能を具体化する実行可能コードを作成することができる仕様を構築することによって作成される。これにより、仕様を1回構築し、その後コンポーネントがビルドプロセスで使用される度に結果としてのコードを実行することにより、コンポーネントサーバを作成することができる。これにより、非コード生成下位コンポーネントを複数回繰り返して取得する必要が低減する。
しかしながら、所望の範囲の機能を提供するために、通常、サーバは、種々の実装選択肢を実行可能コード内に組み込む必要がある。これを、たとえば、上述したようにコンポーネントがコンテキスト依存コードフラグメント等を送ることができるようにするために使用することができる。
後により詳細に説明するように、実際には、2つの手法の組み合わせが使用され、サーバの大部分は実行可能コードとして実装され、下位コンポーネントは必要に応じて実装される。しかしながら、明確にするために、図21A〜図21Cに関して示す以下の例では、サーバが、仕様を実装される度に構築することにより、又は後に必要に応じて多数回実行することができるコードを、1回の構築プロセスで構築することにより形成される、限られた場合に焦点を合わせる。
この例では、目的は、実装される時に2つの数字を加算する命令を生成するコンポーネントを提供するコンポーネントサーバを構築することである。したがって、サーバによって実装される最終的なコンポーネントの表現を図21Aに示す。図示するように、仕様は、ネゴシエーション入力1301及びコードエージェント1302を有する加算コンポーネント1300を含む。
加算コンポーネントは、ビルドで使用される時、1つ又は複数の他のエージェントによって実行されたネゴシエーションの結果に応じてコードエージェント1302を介して異なる加算命令を提供するようになっている。
これが、コンポーネントが実装される度に実装される下位コンポーネントによって実装される場合、コンポーネントサーバを図21Bに示す仕様によって表すことができる。
加算コンポーネント1300は、ネゴシエーションエージェント1301に結合されるネゴシエーションエージェント1311と、結果エージェント1313とを有するネゴシエーション下位コンポーネント1310を含む複数の下位コンポーネントを含む。結果エージェント1313は、セレクタエージェント1303に結合され、セレクタエージェント1303は、必要に応じて構築される3つの加算命令下位コンポーネント1330、1340、1350のうちの1つに選択的に結合される。
使用の際、加算コンポーネントが取得される時、図21Bに示す仕様が実装され、negotiationコンポーネント1310が、ネゴシエーションを実行し、そのネゴシエーションの結果に基づいて加算命令コンポーネント1330、1340、1350のうちの対応する1つを選択することが可能になる。この例では、セレクタエージェントは加算命令コンポーネント1330を選択し、加算命令コンポーネント1330は、エージェント1331を介して受け取られるネゴシエーションの結果に基づいて加算命令を生成し、エージェント1332を介してコードエージェント1302にコードフラグメントを転送する。
このことから、コードが生成されることになる度に、negotiationコンポーネント1310を使用して適当なネゴシエーションポジションが選択され出力が提供されることが明らかとなろう。したがって、これは、結果を生成する処理コンポーネントであり、結果は、その後、適当な加算命令を生成する3つの加算命令コンポーネント1330、1340、1350のうちの選択された1つを取得するために使用される。このため、この例では、下位コンポーネント1330、1340、1350は、コード生成コンポーネントである。
これとは対照的に、加算コンポーネントサーバが完全に実行可能コードとして実装される場合、使用される仕様の一例は図21Cに示すものと同様であり得る。
この例では、加算コンポーネントを表す仕様1400は、内部リストエージェント1401に結合するリスト入力1411を有するアルゴリズムコンポーネント1410を含む。アルゴリズムコンポーネントは、入力エージェント1451を介してコンポーネント1450に結合されるコード出力1412を含む。3つの加算命令コンポーネント1420、1430、1440は、入力エージェント1451に結合される出力エージェント1422、1432、1442を有する。コンポーネント1450は、ビルドコンポーネント1460の入力エージェント1461に結合される出力エージェント1452を含み、ビルドコンポーネント1460は、内部出力エージェント1402に結合される出力1462を含む。2つのエージェントコンポーネント1470、1480及びサーバコードコンポーネント1490は、図示するようにビルドコンポーネント1460の入力エージェント1463に結合されるそれぞれの出力エージェント1472、1482、1492を有する。
使用の際、仕様が構築されると、一連の取得命令又はメッセージが生成され、それぞれのコンポーネント1400、1410、1420、1430、1440、1450、1460、1470、1480及び1490を実装するエンティティステーションに転送される。取得命令は、各コンポーネントが接続すべきエージェントのアドレスを含む。したがって、エンティティステーション5の各々は、適当なコードを実行し、必要な機能を提供するように動作するコンポーネントサーバを生成する。
コンポーネントサーバは、他のコンポーネントサーバによって生成された対応するエージェントとの通信を確立するためにメッセージを生成する、適当なエージェントを含む。上述したものと同様であり、明確にするために説明しないネゴシエーションのプロセスが、コンポーネント1410、…1490の間で実行され、それによりコンポーネント1410、…1490はコンテキストを確定することができる。
アルゴリズムコンポーネント1410は、内部リストエージェント1401からリストエージェント1411を介してネゴシエーションポジションを表すリストを受け取るように動作する。ネゴシエーションリストは、加算終了コンポーネント1400によって提供されるネゴシエーションポジションを表す。そして、negotiateコンポーネント1410は、コードエージェント1412を介してコンポーネント1450に提供されるコードフラグメントを生成する。コードフラグメントは、実行される時、上述したネゴシエートアルゴリズムを実装し、それによりネゴシエーションはリスト単位で実行されることが可能になる。
加算命令コンポーネント1420、1430、1440は、加算命令を生成し、これらをコンポーネント1450に転送するように動作する。コンポーネント1450は、コードフラグメントを生成し、これは、他のコンポーネントの各々によって出力されるバイナリコードと結合され実行される時、加算コンポーネント1300がネゴシエーションの結果に基づいて加算命令のうちの適当な1つを選択することができるようにする。したがって、これを、ifタイプステートメントを実装するバイナリ命令と類似するものとみなしてもよいが、命令として実装してもよい。
さらに、エージェントコンポーネント1470、1480は、実行される時、エージェント機能を実装するコードを生成するように動作する。この場合、各エージェントコンポーネント1470は、エージェントが有するべき特性に応じて各エージェントに対して一意のコードを生成する。これは、ネゴシエーションプロセス中にエージェントコンポーネントに対しそれらのコンテキストを確定させることによって実現されることが理解されよう。このため、たとえば、エージェントコンポーネント1470は、ビルドコンポーネントとネゴシエートすることによりネゴシエーションエージェントに対するエージェント機能を提供することを確定し、その単位でカスタムコードフラグメントを生成してもよい。
同様に、サーバコードコンポーネント1490は、コンポーネントサーバを構築するために必要なコードを完了するために必要な他の任意のコードフラグメントを生成する。
エージェント及びサーバコードフラグメントがビルドコンポーネント1460に提供され、ビルドコンポーネント1460は、コードフラグメントを結合するように動作し、結果としてのコードを内部エージェント1402に提供する。完全な実行可能サーバを形成する、結果としてのコードが購入者に入手可能となり、それにより、それらは、実行されたネゴシエーションの結果に基づいて加算命令を生成するように動作する加算コンポーネントサーバを実行することができる。
上記例は、通常さらに多くのコンポーネントが使用されるという点でサーバ構築のプロセスを非常に簡略化したものを表す。このため、たとえば、サーバコードコンポーネント1490は、例示の目的としては有用であるが、実際は通常、加算コンポーネント1300に対してコンポーネントサーバを実装するために使用されるコードを構築する目的で特に選択されたコンポーネントのうちの多くから構成される。このため、コンポーネント1490は、理論的には基本サーバコードフラグメントを生成する単一コンポーネントであり得るが、選択されたコンポーネントの適当な組み合わせを使用することによってカスタムコードフラグメントが生成される場合、通常は生成されるコードのはるかに優れた効率及び最適化がもたらされる。
同様に、コンポーネント1410、…1490の各々はまた、通常、適当な配置の複数のコンポーネントとなり、したがって、仕様は、通常、何百ものコンポーネントを含む可能性がある。それは図21Bの上記例にも当てはまる可能性があり、それは、例に示すコンポーネントの各々は複数のコンポーネントを表してもよく、又は下位コンポーネントを実装することによって形成されてもよいためである、ということが留意されよう。
いずれの場合も、図21Cに示す第2の例では、コンポーネントの各々は1回取得され、結果は、ネゴシエーションポジションのリストを受け取り、ネゴシエーションを完了するための応答を提供し、その後適当な加算命令を出力することができる、実行可能コードである。したがって、これは、図21Aにおいて実行可能コードとして完全に示す加算コンポーネント1300によって必要とされる機能を実装する。
上記例において留意すべき点は、第2の例はコード生成コンポーネントしか使用しないが、これは、単に明確にするため、且つコンポーネントを提供するために使用することができる手法の相違を強調するためのものである、ということである。実際には、仕様は、或る範囲の処理コンポーネントとコード生成コンポーネントとを両方含むことができる。このため、たとえば、図21Cの第2の例におけるネゴシエーションを、仕様にnegotiateコンポーネントを設けることによって実装することができ、それによりコードを生成するために使用されるコンポーネント間のネゴシエーションが可能になる。これらnegotiationコンポーネントは、処理コンポーネントであってもよいが、サーバビルド中に1度実装されるだけであり、サーバが実行される度に実装されるものではない。
いずれの場合も、上記例は極度に単純化したものであり、通常は、エンドコンポーネントサーバによって提供される必要のある、異なる加算命令の範囲は、はるかに広い必要のある可能性があり、したがって、コンポーネントサーバを作成するために必要な仕様に対し著しく高い複雑性が必要となる。
上記例では、結果としてのコンポーネントサーバは、決定プロセスを使用して或る範囲の加算命令を生成する。実際には、仕様内で実装される必要のある決定の数ははるかに多くなり、通常の場合のように決定が互いに依存する場合、これは、内部仕様内でディシジョンツリー構造を形成することができる。
この場合、ディシジョンツリーの各ブランチは、仕様で具体化されるコンポーネントサーバによって生成される結果としてのコードフラグメントにおける変化を表す。各ブランチは、それぞれのコンポーネントのシーケンスから形成され、それらは、実装される時にコードフラグメントを生成し、コードフラグメントは、結果としてのサーバ実行可能コードの一部として実行される時に、サーバが一定の機能を提供することができるようにする。
したがって、これにより、サーバが、或る範囲の異なるコードフラグメントを生成すること等、或る範囲の異なる機能を実装することを可能にするメカニズムが提供され、これにより、サーバは、コンテキスト依存性、選択肢(後により詳細に説明する)等を提供することができる。
これのさらなる効果は、仕様内に追加のコンポーネントシーケンスの形態でさらなるブランチを追加することにより、サーバの複雑性を増大させることができる、ということである。これにより、コンポーネント供給者は、サーバを構築するために最初は比較的単純な仕様を使用することができるが、結果としてのコンポーネントは、限られた機能か又はほんのわずかなコンテキストを操作する能力しか具体化しない。
しかしながら、エンティティは、サーバ仕様の複雑性を追加するに従い、たとえば、コンポーネントが提供している機能に関する追加の知識を取得するに従い、コンポーネントのさらなるシーケンスを追加し、ディシジョンツリーにブランチを有効に追加することにより、最初の仕様を変更することができる。これにより、コンポーネントサーバを増分的に展開することができ、それにより、実現することができる専門化の程度が促進され、そのためそれは、使用される時にコンポーネントによって生成されるコードフラグメントのさらなる最適化に役立つ。
また上述したように、サーバ実装は、通常、サーバが実行される度にサーバ仕様の一部が構築されるようにすることにより、且つ図21Cに関して説明したように生成された実行可能コードから他の部分が形成されるようにすることにより、図21B、図21Cに示す手法の組み合わせを使用する。これを使用して、サーバが実装される度に、又は必要な環境にある時にのみ、内部仕様を構築し、又はさらには下位コンポーネントを個々に実装することにより、サーバ機能の一部を実現され得るようにすることができる。
これにより、エンドサーバが実装することができず、且つカスタム仕様が構築される必要のある選択肢、ネゴシエーションポジション又は他のコンテキストが定義される場合、カスタム機能を提供し得るようにすることができる。また、これを使用して、下位コンポーネントがいかに実装されるかを知る必要なく、下位コンポーネントの機能をサーバに組み込むことが可能になる。
このため、上記加算コンポーネントの場合、加算コンポーネントサーバを生成する加算コンポーネント供給者は、加算フラグメントを生成することができる実行可能コードを限られたコンテキストでしか作成することができないことに気付く場合がある。この場合、第3者の専門家である1人又は複数の供給者に対し、適当な下位コンポーネントを使用することによって1つ又は複数の専門化した下位コンポーネントを送るように依頼してもよく、それら下位コンポーネントは、適当に結合されると、専門化したコンテキストでの加算命令ソリューションを提供するのに役立つ。
これを実現するために、加算コンポーネント供給者は、結果としてのサーバコードが実行される時に、コードが、コンテキストが専門化したコンテキストであるか判断するように動作するように、サーバの仕様を設計する。この場合、サーバコードは、取得命令又は他の適当なメッセージを生成し、これを使用して専門化した下位コンポーネントのうちの1つ又は複数の実装を要求する。これは下位コンポーネントをシステムに結合することにより、それらもまたそれらのより低いコンテキストを発見することができるようにする。これにより、加算コンポーネントサーバは、下位コンポーネントを請け負うことによって直接、且つ1つの専門化した下位コンポーネントを別のコンポーネントに対して選択することにより間接的に、下位コンポーネントによって提供される柔軟性を利用することによってその柔軟性を向上させることができるようになる。
したがって、コンポーネントサーバを具体化する実行可能コードは、下位コンポーネントが必要であるか判断する処理を実行し、必要である場合、取得命令取得命令を生成し、必要に応じて、生成された下位コンポーネントと対話するように動作する。
この例では、専門化した加算コンポーネントが取得されるか否かは、コンポーネントサーバによってなされる決定であり、したがって、通常、ディシジョンツリーのそれぞれのブランチに対応する。したがって、異なるブランチは異なる下位コンポーネントを含むことができ、それにより、下位コンポーネントは、必要な場合にのみ、たとえばコンテキストに応じて取得されることが確実になる。
下位コンポーネントを実装することに加えて、同様の技術により、下位コンポーネントの組み合わせが実装されるのを可能にするように内部仕様を使用することも可能になる。この場合、使用される内部仕様を、この場合もまたサーバコードによって実装されるディシジョンツリーに基づいて選択することができる。したがって、これは、サーバコード内の内部ネイティブ処理として上述したセレクタエージェント機能を組み込むことに対応する。
これを特にコード生成に適用することにより、低レベルのコンポーネントが、コンテキストに応じて、特定のタスクを実行するために極めて効率的な命令を生成するように動作することができ、それにより命令の効率が最適化されることが理解されよう。より高レベルのコンポーネントがこれらの非常に柔軟な専門化した命令を使用し、それらを変更するか又は他の命令と結合することにより、依然として非常に最適化されたコードを送りながら、より広い範囲のコンテキストでより複雑なソリューションを形成する。
サーバ階層の高い方では、このため、深く統合された効率的なソリューションを可能にするコンポーネントのサプライチェーンの柔軟性及び専門化能力を利用することにより、任意のサイズのサーバを配備することが可能である。
<選択肢>
コンポーネントの柔軟性を向上させるために、コンポーネント供給者は、複数の選択肢がコンポーネントの一部として実装されるのを可能にすることができ、それにより、コンポーネントによって提供される機能の範囲が大幅に増大する。
選択肢は、複数の形態のうちの任意の1つであってもよく、コンポーネント供給者によって事前定義されてもよく又は未定義であってもよい。選択肢により、コンポーネントの購入者は、コンポーネントの動作に関するいくつかの詳細を指定することができるようになる。
このため、たとえばコンポーネントが入力を含む場合、コンポーネント供給者は、入力が固定長文字列又は不確定長文字列を受け取ることができるようにする等、入力を介して受け取ることができる種々のタイプのデータに関する複数の選択肢を指定することができる。
これを実現するためには、コンポーネント供給者は、エンドユーザにとって利用可能となる選択肢を提供するために適した方法でそれらのコンポーネントサーバを実装しなければならない。このため、コンポーネントサーバ構築のセクションで上述したように、コンポーネントサーバは、通常、適当なディシジョンツリー構造を使用して実現することができる或る範囲の種々の実装を具体化する必要のある場合がある、ということが理解されよう。
いずれの場合も、利用可能な選択肢の詳細を、仕様の一部として定義することができる。その結果、ユーザが、選択されたコンポーネントを仕様にロードし、選択されたコンポーネントに関連する利用可能な選択肢を構成しようと試みる場合、これは、選択されたコンポーネントを供給するエンティティに対し、選択肢が定義されるということを通知する。これにより、エンティティは、利用可能な選択肢の詳細を提供し、これらを実装するために適当な構成を行うことができるようになる。
これは、通常、選択されたコンポーネントに対応するコンポーネントサーバを実行することによって実現される。ユーザが、選択肢が定義されることを示すと、これは、コンポーネントサーバに通知され、それによりユーザに対し利用可能な選択肢を詳述するダイアログボックスが提示される。選択肢が選択されると、コンポーネントサーバは、これらの選択肢に基づいて有効に新たなコンポーネントを作成し、ユーザに対して新たなコンポーネントの仕様を返し、新たなコンポーネントが仕様に提供され得るようにする。コンポーネントに対する変更には、サイズ変更、又はカラーフォーマット、エージェントの増減、名前の変更等があり得る。
当業者には、ユーザが選択した選択肢が、コンポーネントが実装される方法に影響を与え、したがってそれぞれのコンポーネントによって生成される結果としての実行可能コードフラグメントに影響を与える、ということが理解されよう。
このことから、コンポーネント選択肢の提供が、追加のネゴシエーションポジションを定義することと或る程度類似することが分かる。しかしながら、この場合、ネゴシエーションをコンポーネント自体によって制御されるようにする代りに、ユーザによって選択肢が設定される。したがって、これにより、ユーザのシステムに対する要件を考慮することができる。
コンポーネントの購入者によってコンポーネント選択肢が選択される際、階層構成において、コンポーネントは、任意の下位コンポーネントに関連する選択肢を設定することに関与する、ということが理解されよう。
当業者によって理解されるさらなる特徴は、選択肢がコンポーネント供給者によって定義されないままであり得るということである。この例では、これにより、オペレータが、コンポーネントによって要求される機能を定義することができる。
そして、この指示を、コンポーネント供給者に転送することができ、それによりコンポーネント供給者は適当な提案された実装に対して構成することができる。これは、通常、購入者に適当な構成を提案する前にコンテキストを確定する部分的発見を実行することにより、構築前の段階で実現される。これは通常、手動の介入を必要とするが、所定のコンテキストに基づいて用意された提案のテーブルにアクセスすることにより、プロセスの一部又はすべてを自動化することができる。
<プロトコル更新>
コンポーネント提供者に対し追加のセキュリティを提供するために、プロトコル更新システムを提供することが可能である。この場合、これによって、コンポーネントによって使用される通信プロトコルが、更新されるべきエージェントメッセージのフォーマット及び取得命令、並びに任意の暗号化等を通信することができるようになる。これを使用して、コンポーネントサーバにおける攻撃、及び個人の提供されたコンポーネントの機能をリバースエンジニアリングしようとする不正な取得命令の利用を防止することにより、セキュリティを提供することができる。
これを実現するために、コンポーネントサーバを作成するために使用されるコンポーネント仕様は、使用される通信プロトコルを定義するコードフラグメントを生成するプロトコルコンポーネントを含む。
プロトコル更新を実装する場合、プロトコル及び故にプロトコルコンポーネントが更新される。プロトコルコンポーネントは、システムの許可されたユーザにのみ分配され、それにより許可されたユーザに対し通信が制限される。
コンポーネント供給者は、更新されたプロトコルコンポーネントを受け取ると、新たなプロトコルコンポーネントを組み込み、且つコンポーネントサーバを再構築することにより、コンポーネントサーバを表す仕様を更新することができる。
プロトコルが更新される度に仕様を変更することの代替形態として、仕様に使用されるプロトコルコンポーネントは、サーバが構築される度に最新のプロトコルの詳細を取得するためにセキュアサーバに自動的にアクセスすることができる。その結果、コンポーネントサーバが構築されると、セキュリティが、サーバのセキュリティを大幅に低減する実行可能ファイルの一部として埋め込まれ、攻撃及びフォーラムにわたる不正トランザクションへの試みの低減に役立つ。
別の代替形態は、コンポーネント供給者が2段階仕様を構築するというものであり、その段階のうちの一方の段階はプロトコル解釈のためのコードを提供し、他方の段階は残りのサーバ機能を提供する。この場合、仕様のプロトコル部分のみ再構築される必要があり、結果としての実行可能コードは、単に、サーバプログラムの先のプロトコル解釈コードに上書きされることが理解されよう。このように、動的プロトコルを提供することができる。これにより、プロトコルを、毎日又は毎週等、定期的な間隔で更新することが可能になるとともに、プロトコルに対する更新及び改善が可能になる。
更新が受け取られなかった場合にコンポーネントが正確に機能するのを可能にするために、2つのプロトコルが同時に実行しているオーバラップした期間を提供してもよく、これにより、プロトコル更新がビルドの途中で発生した場合にいかなる係属中のジョブも完了することが可能となる。
<コンテキスト>
上述したように、コンポーネントのコンテキストは、コンポーネントを使用してその特定の機能を実行することができる方法を制御するために使用される。したがって、これは、コンテキストが異なる毎に異なる命令を表す異なるバイナリコードを生成することに対応することができる。別の方法として、それは、コンポーネントを実装している時に異なる内部仕様をロードすることを構成してもよい。
いずれの場合も、コンポーネントは適当なエージェントを介してその対の片方と通信し、これにより、コンポーネントは、その実装をサポートするために必要な情報を発見することができるようになる。このコンテキストは、たとえば以下を含む或る範囲の異なる要素及び態様を含むことができる。
・仕様における供給者自身のコンポーネントの2つ以上の存在、それは、このタイプのいくつかの又はすべてのコンポーネントの結果としてのコードフラグメントに影響を与える可能性がある
・仕様における他のコンポーネントの存在又は不在
・特定のコンテキストに対する特定の要求
・他のコンポーネントとの合意
・コンポーネントに対して定義された選択肢
・資源の場所及び可用性
・実行ファイルが実行されることになるターゲット環境
当業者は、多数の変形及び変更が明らかとなることを理解するであろう。当業者に明らかとなるこうした変形及び変更のすべてを説明していないが、それらは本発明の特許請求の範囲内にあるようにみなされるべきである。
付録A
ここで、上述した概念を利用する2つの特定の実施例についてより詳細に説明する。
<第1の特定の実施例>
ここで、図14A、図14B及び図14Cを参照して、カウントダウンカウンタを実装することができるようにする多段階トランザクションの使用の一例について説明する。
図14Aは、図示するように4つのエージェント1201、1202、1203、1204を有する多段階コンポーネント1200を示す。この場合、エージェント1202は多段階セレクタエージェントである。
実装される時、コンポーネント1200は、5つの下位コンポーネント1210、1220、1230、1240、1245を有する内部仕様を含み、それらは各々、図示するように相互接続するそれぞれのエージェント1211、1212、1213、1214;1221、1222、1223、1224;1231、1232、1233、1234;1241、1242、1243、1244;1246を含む。最初、内部仕様は未確定であり、したがって、これを点線で示す。
これに加えて、2つの外部コンポーネント1250及び1260が設けられる。コンポーネント1250、1260はメモリコンポーネントであり、それらの例については上述した。コンポーネント1250、1260は、それぞれのエージェント1251、1252、1253;1261、1262、1263を有する。他のコンポーネント又はルートサーバに設けられてもよい外部エージェント1254、1264に結合されたエージェント1253、1263は、単に、それぞれのメモリコンポーネントを或る値で初期化するための値を供給するために必要とされる。
エージェント1212を介して値、この場合は「1」をコンポーネント1210に提供するために、コンポーネント1200の内部エージェント1205も設けられる。
エージェント1232を介して値、この場合は「1」をコンポーネント1230に提供するために、コンポーネント1200の内部エージェント1206も設けられる。
この例では、操作は文字列に対して実行され、コンポーネントの機能は以下の通りである。
・コンポーネント1210−文字列から値を減算する
・コンポーネント1220−受け取った文字列を複製する
・コンポーネント1230−文字列を値と比較する
・コンポーネント1240−論理AND
・コンポーネント1245−終了コンポーネント
・コンポーネント1250−メモリコンポーネント
・コンポーネント1260−メモリコンポーネント
詳細には、図14Aに示すように、コンポーネント1200は、メモリコンポーネント1250を介してエージェント1254から文字列$を受け取る。同様に、エージェント1202は、メモリコンポーネント1260を介してエージェント1264からtrue値を受け取る。
セレクタエージェント1202は、受け取ったtrue値に従って図14Bに示す内部仕様の生成をトリガする。エージェント1201、1203、1204は、図示するように一時的な単一段階トランザクションエージェント1201B、1202B、1203B、1204Bを生成するように動作する。特に、これらのエージェントは、エージェント1211、1223、1234にそれぞれ結合され、1202Bはこの例では未接続のままである。
値$は、エージェント1205によって提供される値を減算するように作用するコンポーネント1210に提供され、それによりエージェント1214において値$−1が提示される。送信が完了したことが確認されると(これは、コンポーネント1220から確認応答メッセージを受け取り、値$−1の受け取りを確認することによって確定される)、コンポーネント1210は、論理ANDコンポーネント1240に転送される通知を生成する。コンポーネント1220は、コンポーネント1210から出力を受け取り、これを複製して、エージェント1223及び1224において文字列$−1を提供するように動作する。これらの値が、それぞれの肯定応答メッセージで示されるようにエージェント1203B(を介して1252)、(1220)、1231によって正しく受け取られると、複製コンポーネント1220はANDコンポーネント1240に対して通知メッセージを転送する。
コンポーネント1230は、受け取った入力$−1の値を所定の閾値と比較するように動作する。所定の閾値は、この場合、内部エージェント1206からエージェント1232を介して受け取られた値「1」である。
したがって、この場合、コンポーネント1230は、「以上(greater than equal to)」コンポーネントであり、そのため値$−1が、この場合は値「1」であるエージェント1232から受け取られた値以上である場合、コンポーネント1230はエージェント1234において「TRUE」出力を生成する。そうでない場合、「FALSE」値が生成される。
この場合、比較がうまくいったとすると、図示するようにエージェント1234を介してTRUE値が出力される。そして、このTRUE値はエージェント1204B、1204を介してエージェント1262に提供され、TRUE値がエージェント1262によって受け取られたことが確認されると、比較コンポーネント1230はANDコンポーネント1240に通知を転送する。
ANDコンポーネント1240は、コンポーネント1210、1220、1230の各々から通知を受け取ると、終了コンポーネント1245に転送されるメッセージを生成する。これは、通知メッセージ又は他の任意のメッセージの形態であってもよい。いずれの場合も、メッセージにより終了コンポーネント1245は内部仕様を終了し、それによりコンポーネント1210、1220、1230、1240、1245及びエージェント1201B、1202B、1203B、1204Bを終了させる。これは、それぞれのコンポーネントインスタンスを実装するコンポーネントサーバに対して終了注文を転送することによって実現される。
メモリコンポーネント1250、1260は、値$−1及びTRUEを格納し、内部仕様が完全に終了しエージェント1201、1202がブロック解除されると、これらをエージェント1201、1202に転送する。このプロセスは、コンポーネント1230に提供される入力が閾値より低くなるまで繰り返される。この時点で、コンポーネント1230は、エージェント1234を介してFALSE出力を生成するようになされる。FALSE出力は、メモリコンポーネント1260を介して、エージェント1204を介して入力セレクタエージェント1202に返される。
一例では、セレクタエージェント1202は、構築する代替内部仕様を選択するためにFALSE値に応答するようになっている。したがって、これは、通常、ループが正しく終了したという出力指示を提供するために使用される。したがって、これを使用して、当業者には理解されるように、コンポーネント1200又は他のコンポーネントによる後続する動作をトリガすることができる。
いずれの場合も、上述したことから、コンポーネント1200が基本的なカウントダウン機能を提供することが理解されよう。
<第2の特定の実施例>
ここで、上述した機能を組み込んだ仕様の特定の一例についてより詳細に説明する。
特に、図15Aは、talkエージェント、listエージェント、typeエージェント、valueエージェント及びIDエージェントを有するnumber sourceコンポーネントを示す。使用の際、number sourceは、同様にそれぞれのtalkエージェント、listエージェント、typeエージェント、valueエージェント及びIDエージェントを含む、図15Cに示すnumber sinkと通信するようになっている。
使用の際、number sinkコンポーネント及びnumber sourceコンポーネントは、2つのコンポーネント間の唯一の通信手段を表すtalkエージェントを介して通信するようになっている。talkエージェントは、複数のバンドルされたエージェントを表すトークバンドルを転送し、それによりsinkコンポーネント及びsourceコンポーネントは共通の数字移送フォーマットを確定するように動作し、それによってsourceコンポーネント及びsinkコンポーネントは、それらの間で情報が転送される時に互換性を確実にするコードをそれぞれ設計することができる。たとえば、両者がレジスタの数字を移送するように同意する場合、number sourceは、確実にそれが合意されたレジスタに配置されるようにし、number sinkは、合意されたレジスタから値を取り出すことを承知する。
この場合、sinkコンポーネント及びsourceコンポーネントは、確定されたコンテキストに従ってネゴシエーションを実行するようになっており、このコンテキストは、この場合、sinkコンポーネント及びsourceコンポーネントにそれぞれのIDエージェントを介して供給されるそれぞれのID値に基づく。ビルドプロセスの開始中に割り当てられるID値によって場所が示されるため、これを使用して、階層において互いに隣接するsinkコンポーネント及びsourceコンポーネントがコードを送るか否かを判断することができる。
ここで、これが実現される方法を、それぞれ図15B及び図15Dにより詳細に示すsourceコンポーネント及びsinkコンポーネントの内部仕様を参照して説明する。
特に、コンポーネントの内部仕様は以下の下位コンポーネントを利用する。
・Negotiateコンポーネント−上述したように、これはネゴシエーションサービスを提供する
・LUT−これは、入力エージェントI、テーブルエージェントT及び出力エージェントO並びに任意にエラーを示すエラーエージェントEを含む4つのエージェントを利用する。使用の際、エージェントIを介して受け取られた入力は、テーブルエージェントTを介してルックアップテーブルにアクセスするために使用され、出力の指示は出力エージェントOを介して提供される
・Watch−上述したwatchコンポーネントは、診断の目的で監視機能を提供するためにトラフィックをスヌープすることができる
・Bun3−Bun3は、PCT/AU03/01474号で示す同時係属出願に記載されているbundleコンポーネントであり、エージェントBを介してエージェントメッセージのバンドルを受け取り、エージェント1、2、及び3を介してバンドルの一部から形成される別個のメッセージを提供するように動作する
・ADD−数学的加算
・RND−数学的四捨五入
・EQ−数学的等号
・DUP−複製
ここで、number sourceコンポーネント及びnumber sinkコンポーネントの動作について説明する。
使用の際、sinkコンポーネント及びsourceコンポーネントは、talkエージェントを介してトークバンドルを交換することにより通信を確立する。bundleコンポーネントBun3は、以下のようにして受け渡しを実行することができることを確定する。
・sinkコンポーネントのIDエージェントがsourceコンポーネントのEQコンポーネントのエージェント1に接続されるようにエージェント1受け渡し
・sourceコンポーネントのDUPコンポーネントの出力がsinkコンポーネントのwatchコンポーネントのエージェントIに接続されるようにエージェント2受け渡し
・各negotiationコンポーネントのInエージェントが相互接続されるようにエージェント3受け渡し
その結果、それぞれのIDエージェントを介してID値が受け取られると、source ID値は、ADDコンポーネントを使用して1だけ値が増大され、RNDコンポーネントによって丸められ、その後EQコンポーネントにおいてsink ID値と比較される。この場合、割り当てられたID値が1だけしか違わない場合、これは、sinkエージェント及びsourceエージェントが階層構造において互いに隣接していることを示す。
この比較の結果は、DUPコンポーネントによって複製され、図示するようにsinkコンポーネント及びsourceコンポーネントの各々の第1のLUTに転送され、それにより、各LUTコンポーネントは、仕様における相対位置を示す値を提供するLUTにテーブルエージェントを介してアクセスする。そして、これは、第2のLUTに転送され、第2のLUTは、この値に従って外部リストエージェントからネゴシエーションリストを取得する。したがって、選択されたリストは、sinkコンポーネント及びsourceコンポーネントが隣接しているか否かによって決まる。
そして、negotiateコンポーネントはリストを交換し、共通ネゴシエーション選択肢を確定するために上述したようにネゴシエートする。ネゴシエーションの結果はtypeエージェントを介して提供され、後に受け渡しが実行されることにより、sinkコンポーネント及びsourceコンポーネントのvalueエージェントを相互接続することができる。そして、sourceコンポーネントのvalueエージェントによって受け取られる値を、sinkコンポーネントのvalueeエージェントを介して別のコンポーネントに供給することができる。
ここで、図16A〜図16Eを参照して、number sinkコンポーネント及びnumber sourceコンポーネントの使用例について説明する。この例は、以下の追加のコンポーネントを使用する。
・Build ASM−これは、Codeエージェントを介してコードを送りState Inエージェント及びState Outエージェントを介してプロセッサ及び状態情報を送るための容易なアクセスを可能にすることにより、ビルドシステムとの通信を支援するコンポーネントである。build ASMはまた、IDエージェントを介してビルドシステム内の位置の指示も提供する。
・Header−このコンポーネントは、buildエージェントを介して受け取られるコードにヘッダを添付し、それにより機能コードがCode Outエージェントを介して出力され得るようにする。
・Bcat−このコンポーネントは、多くのコード生成コンポーネントからの出力をビルドシステム内で連結することができるように、複雑なbuildエージェントを分割する。
図16Aは、それぞれのinitialisationエージェント、talkエージェント及びbuildエージェントを有するelementコンポーネントを示す。使用の際、elementコンポーネントは、幾分かのメモリを確保し、initialisationエージェントを介してその確保したロケーションのために初期化値を受け取るようになっている。これを実現するために、elementコンポーネントは、talkエージェントを介してポジションをネゴシエートすることにより、メモリ値が後続するコンポーネントによって使用され得るようにし、ネゴシエーションの結果に基づいてコード部分を生成する。elementコンポーネントの内部仕様を図16Bに示す。
図16Cは、それぞれのexitcodeエージェント及びbuildエージェントを有するsysexitコンポーネントを示す。使用の際、sysexitコンポーネントは、exitcodeエージェントを介してネゴシエートし、オペレーティングシステムに、指定された出口コードでアプリケーションを終了させるコードを生成するようになっている。sysexitコンポーネントの内部仕様を図16Dに示す。
elementコンポーネント及びsysexitコンポーネントが、図16Eの仕様に示すように結合されることにより、仕様が、図示するerror codeエージェントによるエラーコード値の指示に応じて実行可能コードを生成することができるようになる。この実行可能コードにより、オペレーティングシステムは、initialisationエージェントを介して受け取られたエラーコード値に基づいてエラーによりプログラムを終了する。
使用の際、仕様は、コンポーネントインスタンスがコンポーネントelement、sysexit、Bcat及びheaderに対応するように、且つ関連する下位コンポーネントがそれぞれのサーバによって実装されるように構築される。そして、コンポーネントのエージェントは、通信を確立し、その手続きは以下の通りである。
1)headerコンポーネントによってビルドバンドルが作成され、そこから、内部エージェントコードを介して送られるコードが抽出される
2)ビルドバンドルは、Bcatバンドルを介してelementコンポーネント及びsysexitコンポーネントのbuildエージェントに伝播される
3)ビルドバンドルは、それぞれのbuild ASMコンポーネントによって使用され、buld ASMコンポーネントは、ID値を抽出し、これをsourceコンポーネント及びsinkコンポーネントの各々に転送する
4)sinkコンポーネント及びsourceコンポーネントは、上述したように動作することにより、それらが仕様において隣接するか否かを判断する
5)elementコンポーネントにおいて
(a)確定されたネゴシエーション選択肢がDUPコンポーネントによって2回複製され3つのLUTコンポーネントに転送される
(b)LUTコンポーネントは、それぞれのtailコードテーブル、valueコードテーブル及びheadコードテーブルにアクセスし、headコード及びtailコードをCATコンポーネントに出力し、valueコードをnumber sourceに出力する
(c)number sourceは、任意に、valueコードをsysexitコンポーネントのnumber sinkに提供する。
(d)CATコンポーネントは、headコードを先頭に追加しtailコードを添付することによって、幾分かのメモリを確保し、それを初期化し、ネゴシエーション中の合意としてコピーを送るコードソリューションを形成し、このソリューションをbuild ASMコンポーネントのcodeエージェントに提供する
(e)build ASMコンポーネントは、結果としてのコードを、Bcatコンポーネントに転送されるビルドバンドルに組み込む
6)sysexitコンポーネントにおいて
(a)確定されたネゴシエーション選択肢は、DUPコンポーネントによって複製され2つのLUTコンポーネントに転送される
(b)LUTコンポーネントは、それぞれのtailコードテーブル及びheadコードテーブルにアクセスし、CATコンポーネントに転送される対応する出力を生成する
(c)CATコンポーネントは、elementコンポーネントのnumber sourceから受け取られた合意にheadコードを先頭に追加しtailコードを添付することによってコードソリューションを構築し、そのソリューションをbuild ASMコンポーネントのcodeエージェントに提供する
(d)build ASMコンポーネントは、結果としてのコードを、Bcatコンポーネントに転送されるビルドバンドルに組み込む
7)Bcatコンポーネントは、elementコンポーネント及びsysexitコンポーネントからのコードを連結し、結果をheaderコンポーネントに転送する
8)headerコンポーネントはヘッダを生成し、出力コードを提供する。
このように、一例では、図16Eに示す仕様は、主にオペレーティングシステムに対しプログラムを終了させるためにトラップコールを行う実行可能コードを作成する。こうしたプログラムは、実際にはほとんど使用されないが、この例の目的で、コード設計におけるネゴシエーションの役割を強調する役割を果たす。
Sysexitコンポーネントは、実行時に2つのパラメータをプロセッサレジスタeax及びebxそれぞれに置くコードを設計し、さらにオペレーティングシステムにトラップするコードを設計しなけれならない。このコードを設計することは概ね簡単であるが、ebxに向けられる第2のパラメータは、別の当事者、この場合はコンポーネントElementとのネゴシエーションの対象となる。
Elementコンポーネントは、エージェントtalkを介し、SystexitコンポーネントはエージェントexitCodeを介して、Elementコンポーネント及びSysexitコンポーネントが適当なコードを設計することができるようにこの第2のパラメータをいかに移送すべきかをネゴシエートしなければならない。Elementコンポーネントは、メモリを確保し、このメモリを初期化し、パラメータを送るようにコードを設計しなければならない。一方、Sysexitコンポーネントは、パラメータを受け取り、オペレーティングシステムに対するトラップコールがうまくいくようにそれを適当なレジスタに配置するようにコードを設計しなければならない。
Elementコンポーネント及びSysexitコンポーネントが仕様において互いに隣接して配置されている場合、プロセッサレジスタが移送手段として使用されることが許可される、ということが理解されよう。Sysexitの観点からの最良な選択肢は、移送の目的でebxを利用することであり、それは、これにより、オペレーティングシステムへのトラップコールの要件であるebxにパラメータを移動させるコードを設計する必要がなくなるためである。このため、Sysexitは、Elementコンポーネントとの任意のネゴシエーションの結果としてebxでのレジスタ移送を安全にするよう試みることを優先する。
このため、sysexit仕様は、通常、好ましいネゴシエーション選択肢が第2のメモリロケーションに対するものであるということを反映する。
しかしながら、コンポーネントが互いに隣接していない場合、中間コンポーネントが第2のメモリレジスタを使用する必要がある場合がある。この場合、したがって、これは、他のコンポーネントによって生成されたコードによって変更される可能性があるため、値を単に第2のレジスタに置くことはネゴシエーションの適当な結果を表さない。
ここで、生成されたコードの一例について説明する。
説明を容易にするために、これをアセンブラコードの生成に関して説明するが、マシンコードを含む任意のコードを使用することができるということが理解されよう。さらに、この例では、コードは、Linux(登録商標)ベースシステムで使用されるようになっており、したがって、システム終了をもたらすためにメモリレジスタeaxの値「1」及び割込み値0x80を配置する必要がある。この例では、コードは、プロセスをエラーコード「42」で終了させるように設計される。したがって、この場合、ビルドプロセスの開始時にerror codeエージェントを介して値「42」が提供される。elementコンポーネント及びsysexitコンポーネントが隣接しており、ネゴシエーションが移送レジスタとしてecxを確定した場合、elementコンポーネントはecxに値「42」を書き込む。この場合、elementコンポーネントは、以下のコード部分を生成する。
SECTION .data
Datum dd 42
SECTION .text
Mov ecx,[datum]
sysexitコンポーネントは、ネゴシエーションプロセス中に値ecxを確定し、したがって以下のコード部分を生成し、これは、必要なexitコマンドを生成する前にレジスタecxの値をebxに転送する。
mov ebx,ecx
mov eax,1
Int 0x80
; end of sys_exit
これらのコード部分がヘッダとともに連結されることにより以下のコードが提供される。
BITS 32
GLOBAL _start
SECTION .text
_start:

SECTION .data
datum dd 42

SECTION .text
mov ecx,[datum]
mov ebx,ecx
mov eax,1
int 0x80
; end of sys_exit
elementコンポーネント及びsysexitコンポーネントが隣接している場合、よりよいソリューションは、値datumがelementコンポーネントによって生成されたコードによってメモリロケーションebxに直接書き込まれるように、sysexitがebxを優先することである。このため、elementコンポーネントによって生成されるコード化部分は以下の通りである。
SECTION .data
Datum dd 42

SECTION .text
mov ebx,[datum]
そして、sysexitコンポーネントは、以下のように簡略化するコード部分を生成する。
mov eax,1
int 0x80
; end of sys_exit
これらのコード部分がヘッダとともに連結されることにより以下のコードが提供される。
BITS 32
GLOBAL _start
SECTION .text
_start:

SECTION .data
Datum dd 42

SECTION .text
mov ebx,[datum]
mov eax,1
int 0x80
; end of sys_exit
これを実現するために、sysexitコンポーネントによって使用されるネゴシエーションリストの一例を以下に示す。この例では、ネゴシエーションリストはXMLファイルの形式で提供されるが、これは、実装に対して必須ではなく、したがって詳細には説明しない。さらに、これらの例では、符号なし32ビット値としてのエラーコードの転送に対応し、レジスタの値の提供に限定される、限られた数のネゴシエーション選択肢のみを示す。
詳細には、sysexitコンポーネントが、それがelementコンポーネントに隣接していると判断した場合、選択されるネゴシエーションリストは以下のようになる。
<option> <value>unsigned_32_actual_eax</value> <weight>4</w eight> <type>compound</type> </option>
<option> <value>unsigned_32_actual_ebx</value> <weight>9</w eight> <type>compound</type> </option>
<option> <value>unsigned_32_actual_ecx</value> <weight>4</w eight> <type>compound</type> </option>
<option> <value>unsigned_32_actual_edx</value> <weight>4</w eight> <type>compound</type> </option>
<option> <value>unsigned_32_actual_edi</value> <weight>4</w eight> <type>compound</type> </option>
<option> <value>unsigned_32_actual_esi</value> <weight>4</w eight> <type>compound</type> </option>
<option> <value>unsigned_32_actual_ebp</value> <weight>4</w eight> <type>compound</type> </option>
<option> <value>unsigned_32_actual_mem</value> <weight>3</w eight> <type>compound</type> </option>
<option> <value>unsigned_32_actual_stack</value> <weight> 3</weight> <type>compound</type> </option>
したがって、これは、レジスタebxに最高重み付け「9」を割り当てることによりレジスタebxに値「42」を提供することを優先する。しかしながら、重み付け「9」は重み付け「4」に置き換えられ、その後、使用されるレジスタに対して選好はなく、したがって、レジスタは、elementコンポーネントの好ましいネゴシエーションポジションに基づいて選択されるか、または上述したように任意の規則を使用して確定される。
当業者には理解されるように、コンポーネントが隣接していない場合に、事前に合意されたメモリロケーションに値を書き込むこと等、レジスタの使用に依存しない代替移送メカニズムを提供することが一般的であることが理解されよう。
いずれの場合も、上記リストの例において、レジスタebxは他のレジスタより選択される可能性が高く、これは、必要な機能を実装するために必要なコードが少なくなるため、sysexitコンポーネントに対して好ましい選択肢である、ということが理解されよう。上記例は、生成される結果としてのコードがいかにネゴシエーションプロセスの結果によって決まるか、またさらに、ネゴシエーションプロセスが仕様によって提供されるコンテキストに依存するということを強調する。したがって、結果としてのコードはコンテキスト依存である。
上記例では、ebxに値「42」を提供するプロセスにより、実際に、他の選択肢よりコードが短くなり、したがってコンテキスト最適化コードが表される。
さらなる選択肢として、elementコンポーネント及びsysexitコンポーネントが隣接していない場合、すべてが等しく使用可能である複数のネゴシエーション選択肢が利用可能である。この場合、プロセスが実行される度に選択される選択肢を変更することにより(これは、たとえば擬似乱数、エージェントIDのハッシング等に従って実現することができる)、生成されるコードを、ビルドが実行される度に変更することも可能である。同時係属出願に記載されているようにコンポーネントの機能のリバースエンジニアリングがより困難となるため、これは、それぞれのコンポーネントを提供するエンティティに対してさらなる保護を提供する。

Claims (40)

  1. 計算機で実行することにより該計算機が所望の機能を実行できる計算機が実行可能なコードを生成する方法であって、
    a)第1の処理システムにおいて、前記所望の機能に基づいて、
    i)1つ又は複数のコンポーネントサーバにより実装される複数のコンポーネントであって、各コンポーネントサーバは、前記第1の処理システムに通信ネットワークを介して結合されたそれぞれのコンポーネント処理システムによって実行可能なソフトウェアであり、前記コンポーネントの少なくとも一つはコード生成コンポーネントである、前記複数のコンポーネント
    ii)該コンポーネント間の接続
    を示すコンポーネントの組み合わせを定義すること、
    b)前記第1の処理システムが前記コンポーネントの組み合わせの各コンポーネントをコンポーネントサーバにより実装することであって、各コンポーネント処理システムは前記接続を使用して1つ又は複数の他のコンポーネント処理システムと直接的に通信し、少なくともコード生成コンポーネントは実行可能なコードフラグメントを生成し、前記コンポーネント処理システムのうちの少なくとも2つは条件を確定するために前記接続を介して直接的に通信し、前記実行可能なコードフラグメントのうちの1つ又は複数は、少なくとも部分的に、前記確定された条件に基づいて生成されるようにすること、
    c)前記第1の処理システムが前記生成された実行可能なコードフラグメントを受け取り、該実行可能なコードフラグメントは前記コンポーネントの組み合わせに従って結合されて、前記計算機が実行可能なコードを形成すること、
    d)前記計算機が実行可能なコードを計算機に提供することよって該計算機が実行可能なコードの該計算機による実行により、該計算機が前記所望の機能を実行するようにすること
    を含む方法。
  2. 前記計算機が実行可能なコードは、コンポーネントを実装するために使用される請求項1に記載の方法。
  3. 前記実行可能なコードフラグメントは、計算機が実行可能なコードの断片である請求項1に記載の方法。
  4. 前記計算機が実行可能なコードは、
    a)前記条件、
    b)前記コンポーネントの組み合わせ、
    c)コンポーネント間の1つ又は複数の合意、及び
    d)1つ又は複数のネゴシエーションによる設定
    のうちの少なくとも1つによって定義される方法で前記実行可能なコードフラグメントを連結することによって形成される請求項1に記載の方法。
  5. 前記実行可能なコードフラグメントは、
    a)前記コンポーネントのうちの1つ又は複数、及び
    b)処理システム
    のうちの少なくとも1つによって結合されることを特徴とする請求項1に記載の方法。
  6. 前記コンポーネントに対しデータシーケンスで提供されるデータ部分を処理させることを含み、該データ部分は、計算機が実行可能なコードの断片であり、該処理は、
    a)データ部分を前記シーケンスの所定の場所に追加すること、
    b)前記シーケンス内の第1の場所から第2の場所にデータ部分を移動させること、
    c)前記シーケンスから前記データ部分を除去すること、及び
    d)前記シーケンスの前記データ部分を変更すること
    を含む請求項1に記載の方法。
  7. 前記コンポーネントに対し、それらのそれぞれの条件を確定するようにネゴシエートさせることを含む請求項1に記載の方法。
  8. 前記第1の処理システムは、少なくともメモリ、スタック及びレジスタを含み、前記条件は、該レジスタ、該スタック及び該メモリのうちの少なくとも1つの状態を含む、請求項1に記載の方法。
  9. 前記条件は、
    a)前記定義されたコンポーネントの組み合わせにおける他のコンポーネント、
    b)前記定義されたコンポーネントの組み合わせにおける他のコンポーネントとの合意、
    c)前記定義されたコンポーネントの組み合わせにおける他のコンポーネントとのネゴシエーションの結果、及び
    d)偶発的要因
    のうちの少なくとも1つを含む請求項1に記載の方法。
  10. 前記データ処理が
    a)ディザリング、
    b)メッシング、及び
    c)遮蔽
    のうちの少なくとも1つによって条件に依存することを含む請求項1に記載の方法。
  11. 少なくとも1つのコンポーネントに対し、他のコンポーネントの1つ又は複数のエージェントと通信する1つ又は複数のエージェントを生成することを含む請求項1に記載の方法。
  12. 前記エージェントは、所定の順序で前記2つ以上の他のエージェントと通信する請求項11に記載の方法。
  13. 前記順序は、
    a)前記コンポーネントの組み合わせ、及び
    b)1つ又は複数のネゴシエーションによる設定
    のうちの少なくとも1つによって定義される請求項12に記載の方法。
  14. 前記第1の処理システムは通信ネットワークを介して複数のコンポーネント処理システムに接続され、各コンポーネント処理システムは、1つ又は複数のそれぞれのコンポーネントを実装するようになっている請求項1〜13のいずれかに記載の方法。
  15. 各コンポーネント処理システムは、計算機が実行可能なコードから形成され、且つ前記コンポーネント処理システムに対し、
    a)所定のデータ処理サービス、及び
    b)それぞれの実行可能なコードフラグメントの生成
    のうちの少なくとも1つを実行させる、コンポーネントサーバを実装する請求項14に記載の方法。
  16. 前記コンポーネントサーバは、請求項1の方法を使用して生成される計算機が実行可能なコードから形成される請求項15に記載の方法。
  17. 前記第1の処理システムにおいて、且つ前記コンポーネントの組み合わせの各コンポーネントに対し
    a)コンポーネントの仕様を受け取ること、及び
    b)該コンポーネントの仕様を使用してコンポーネント要求を生成し、該コンポーネント要求はコンポーネント処理システムに転送されることによって、前記コンポーネントに対応するコンポーネントサーバの実装がもたらされること
    を含む請求項14に記載の方法。
  18. 各コンポーネント処理システムに対し、
    a)少なくとも1つのエージェントを実装させること、及び
    b)前記少なくとも1つのエージェントに対し、1つ又は複数の他のコンポーネント処理システムによって実装される1つ又は複数のエージェントと通信させるようにさせること
    を含む、請求項17に記載の方法。
  19. 前記コンポーネント処理システムへのエージェント接続を表す接続データを提供することによって、前記少なくとも1つのエージェントが前記1つ又は複数の他のエージェントと通信することができるようにする請求項18に記載の方法。
  20. 前記接続データは、前記1つ又は複数の他のエージェントに対するアドレスを含み、該アドレスは、該エージェントを通信できるようにするためのエージェントメッセージが転送されるアドレスを示す請求項18に記載の方法。
  21. 前記コンポーネント要求は前記接続データを含む請求項18に記載の方法。
  22. 前記コンポーネントの組み合わせを確定する方法は、前記第1の処理システムにおいて、
    a)利用可能なコンポーネントのリストからコンポーネントを選択すること、及び
    b)前記コンポーネントのそれぞれのエージェント間の接続を定義すること
    を含む請求項14に記載の方法。
  23. 前記第1の処理システムに対し、
    a)前記1つ又は複数の選択されたコンポーネントのグラフィカル表現を生成させること、及び
    b)前記第1の処理システムの入力装置を介してユーザから受け取られた入力コマンドに応じて前記グラフィカル表現を処理することによって前記コンポーネントの組み合わせを定義させること
    を含む、請求項22に記載の方法。
  24. a)選択されたコンポーネントが1つ又は複数の選択肢を有するか否かを判断すること、及び
    b)肯定的な判断に応じて、
    i)前記選択肢のうちの1つ又は複数を設定すること、及び
    ii)各設定された選択肢の指示を、前記対応するコンポーネントを実装するために使用される前記コンポーネント処理システムに転送すること
    を含む、請求項22に記載の方法。
  25. a)コンポーネントの仕様から1つ又は複数の選択肢を確定すること、
    b)前記選択肢のうちの1つ又は複数を設定すること、及び
    c)前記設定された選択肢に基づいて更新されたコンポーネントの仕様を確定すること
    を含む、請求項24に記載の方法。
  26. 第2の処理システムに対し、
    a)いくつかのコンポーネントの詳細を確定させること、及び
    b)該詳細を使用して前記第1の処理システムを介して前記利用可能なコンポーネントのリストを前記ユーザに提供させること
    を含む、請求項22に記載の方法。
  27. 前記コンポーネントの仕様を含む詳細は、
    a)それぞれのデータ処理サービスの指示、
    b)前記コンポーネントのグラフィカル表現、及び
    c)他のコンポーネントに必要な任意の接続の指示
    のうちの少なくとも1つを含む請求項26に記載の方法。
  28. 前記第2の処理システムに対し、
    a)前記コンポーネントの前記実装に関連する1つ又は複数の基準を表すパフォーマンス情報を確定させること、及び
    b)前記パフォーマンス情報をユーザに提供し、該ユーザは該パフォーマンス情報に従って前記コンポーネントを選択する請求項26に記載の方法。
  29. 前記パフォーマンス情報は、
    a)前記コンポーネントを実装する前記エンティティの指示、
    b)前記エンティティが格納される位置の指示、
    c)前記コンポーネントを実装するための時間の指示、
    d)前記それぞれのコンポーネントを実装することに関するコストの指示、及び
    e)前記コンポーネントの出来を示す格付け
    のうちの少なくとも1つを含む請求項28に記載の方法。
  30. 各コンポーネントの使用に対して費用を課すことにより利益を生じさせることを含む、請求項26〜29のいずれか1項に記載の方法。
  31. a)前記コンポーネントを実装するそれぞれのエンティティに対し前記利益の少なくとも一部を提供すること、及び
    b)前記第2の処理システムの運営者に対し、前記利益の少なくとも一部を保持させること
    を含む請求項30に記載の方法。
  32. 計算機が所望の機能に基づいたコンポーネントの組み合わせを実装することにより該所望の機能を実行することができるように該計算機で実行できる計算機が実行可能なコードを生成する方法であって、第1の処理システムにおいて、
    a)前記コンポーネントの組み合わせから
    i)1つ又は複数のコンポーネントサーバにより実装される複数のコンポーネントであって、各コンポーネントサーバは、前記第1の処理システムに通信ネットワークを介して結合されたそれぞれのコンポーネント処理システムによって実行可能なソフトウェアであり、前記コンポーネントの少なくとも一つはコード生成コンポーネントである、前記複数のコンポーネント
    ii)該コンポーネントのそれぞれの間の接続
    を確定すること、
    b)各コンポーネントに対し、任意の必要な接続を表す接続データを含み、該コンポーネントの実装を要求するコンポーネント要求を生成すること、
    c)前記コンポーネント要求をコンポーネント処理システムに転送することにより各該コンポーネント処理システムが前記接続を使用して1つ又は複数の他のコンポーネント処理システムと直接的に通信させ、少なくとも前記コード生成コンポーネントに実行可能なコードフラグメントを生成させ、前記コンポーネント処理システムのうちの少なくとも2つは、条件を確定するために前記接続を使用して直接的に通信し、前記実行可能なコードフラグメントのうちの1つ又は複数は、少なくとも部分的に、前記確定された条件に基づいて生成されていること、
    d)前記コンポーネント処理システムから前記生成された実行可能なコードフラグメントを受け取り、該実行可能なコードフラグメントは、結合されると、前記計算機が実行可能なコードを形成すること
    を含む、計算機が実行可能なコードを生成する方法。
  33. a)前記計算機が実行可能なコードを形成するため前記コンポーネントの組み合わせに従って前記実行可能なコードフラグメントを結合すること、及び
    b)所定の順序で前記実行可能なフラグメントを受け取ること
    のうちの少なくとも1つを含む、請求項32に記載の方法。
  34. 前記コンポーネントの組み合わせを確定する前記方法は、
    a)利用可能なコンポーネントのリストからコンポーネントを選択すること、及び
    b)前記コンポーネントのそれぞれのエージェントの間の接続を定義すること
    を含む請求項32に記載の方法。
  35. 前記第1の処理システムにおいて、前記コンポーネントの組み合わせにおける各コンポーネントに対し
    a)コンポーネントの仕様を受け取ること、及び
    b)該コンポーネントの仕様を使用してコンポーネント要求を生成し、該コンポーネント要求はコンポーネント処理システムに転送されることによって、前記コンポーネントに対応するコンポーネントサーバの実装がもたらされる
    を含む、請求項34に記載の方法。
  36. 請求項1〜31のいずれか1項に記載の方法を使用して実行される請求項32に記載の方法。
  37. 計算機が所望の機能を実行できるように該計算機が実行できる、計算機が実行可能なコードを生成するために使用されるコンポーネントを提供する方法であって、前記方法は、実装されるコンポーネントと該コンポーネントの間の接続とを示すコンポーネントの組み合わせを使用する方法であり、前記コンポーネントは1つ又は複数のコンポーネントサーバにより実装され、各コンポーネントサーバは、第1の処理システムに通信ネットワークを介して結合されたそれぞれのコンポーネント処理システムによって実行可能なソフトウェアであり、前記コンポーネントの少なくとも一つはコード生成コンポーネントであるところ、
    コンポーネント処理システムにおいて、
    a)任意の必要な接続を表す接続データを含むコンポーネント要求を前記第1の処理システムから受け取ること、
    b)前記接続を使用して1つ又は複数の他のコンポーネント処理システムと直接的に通信することによって、条件を確定すること、
    c)前記確定された条件に基づいて実行可能なコードフラグメントを生成すること、及び
    d)前記生成された実行可能なコードフラグメントを別の処理システムに転送し、該実行可能なコードフラグメントは、他の実行可能なコードフラグメントと結合されると前記計算機が実行可能なコードを形成し、該計算機が実行可能なコードは、計算機によって実行されると、該計算機に対し前記所望の機能を実行させること、
    を含む方法。
  38. 請求項1〜31のいずれか1項に記載の方法を使用して実行される請求項37に記載の方法。
  39. コンポーネントサーバを実装するため、計算機が実行可能なコードを生成するために使用されるコンポーネントを提供することによって、前記コンポーネントサーバがデータ処理サービスを提供することができるようにする方法であって、前記実装されるコンポーネントと該コンポーネント間の接続とを示すコンポーネントの組み合わせを使用し、前記コンポーネントは1つ又は複数のコンポーネントサーバにより実装され、各コンポーネントサーバは、第1の処理システムに通信ネットワークを介して結合されたそれぞれのコンポーネント処理システムによって実行可能なソフトウェアであり、前記コンポーネントの少なくとも一つはコード生成コンポーネントであり、該コンポーネントの組み合わせは少なくとも2つのコンポーネントシーケンスを含み、各コンポーネントシーケンスは前記データ処理サービスを提供するそれぞれの方法を表しているところ、コンポーネント処理システムにおいて、
    a)任意の必要な接続を表す接続データを含むコンポーネント要求を前記第1の処理システムから受け取ること、
    b)条件を確定するために、前記接続を使用して1つ又は複数の他のコンポーネント処理システムと直接的に通信すること、
    c)確定された条件に基づいて実行可能なコードフラグメントを生成すること、及び
    d)前記生成された実行可能なコードフラグメントを別の処理システムに転送し、該実行可能なコードフラグメントは、他の実行可能なコードフラグメントと結合されると前記計算機が実行可能なコードを形成し、該計算機が実行可能なコードは、計算機によって実行されると、該計算機に対しコンポーネントサーバを実装させ、該コンポーネントサーバは前記生成された実行可能なコードフラグメントのうちの少なくとも1つを実行することにより前記データ処理サービスを提供すること
    を含む方法。
  40. 請求項1〜31のいずれか1項に記載の方法を使用して実行される請求項39に記載の方法。
JP2012162763A 2004-05-20 2012-07-23 計算機が実行可能なコードを生成する方法及び計算機が実行可能なコードを生成するために使用されるコンポーネントを提供する方法 Pending JP2012230710A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
AU2004902675A AU2004902675A0 (en) 2004-05-20 Code generation techniques
AU2004902675 2004-05-20

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2007516885A Division JP2007538321A (ja) 2004-05-20 2005-05-20 コード生成方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2013254272A Division JP5705297B2 (ja) 2004-05-20 2013-12-09 第1のコンポーネントと第2のコンポーネントとの間のネゴシエーションを実行する方法及びネゴシエーションを実行するコンポーネント

Publications (1)

Publication Number Publication Date
JP2012230710A true JP2012230710A (ja) 2012-11-22

Family

ID=35428539

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2007516885A Pending JP2007538321A (ja) 2004-05-20 2005-05-20 コード生成方法
JP2012162763A Pending JP2012230710A (ja) 2004-05-20 2012-07-23 計算機が実行可能なコードを生成する方法及び計算機が実行可能なコードを生成するために使用されるコンポーネントを提供する方法
JP2013254272A Active JP5705297B2 (ja) 2004-05-20 2013-12-09 第1のコンポーネントと第2のコンポーネントとの間のネゴシエーションを実行する方法及びネゴシエーションを実行するコンポーネント

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2007516885A Pending JP2007538321A (ja) 2004-05-20 2005-05-20 コード生成方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2013254272A Active JP5705297B2 (ja) 2004-05-20 2013-12-09 第1のコンポーネントと第2のコンポーネントとの間のネゴシエーションを実行する方法及びネゴシエーションを実行するコンポーネント

Country Status (5)

Country Link
US (1) US8856733B2 (ja)
EP (2) EP2386946B1 (ja)
JP (3) JP2007538321A (ja)
CA (1) CA2566000C (ja)
WO (1) WO2005114387A1 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8527943B1 (en) * 2004-02-12 2013-09-03 Raju V. Chiluvuri System and method of application development
US20070180069A1 (en) * 2006-01-31 2007-08-02 Staples The Office Superstore, Llc Management of component configurations in a computer system
WO2008022470A1 (de) * 2006-08-21 2008-02-28 Odz Organisation Datenverarbeitung Zweidler Programm-generator zur generierung eines programms auf dem gebiet der warenwirtschaft und verfahren hierzu
US8745557B1 (en) 2006-09-11 2014-06-03 The Mathworks, Inc. Hardware definition language generation for data serialization from executable graphical models
US8307329B2 (en) * 2008-02-07 2012-11-06 Microsoft Corporation Implicit composition of component bindings
US8108831B2 (en) * 2008-02-07 2012-01-31 Microsoft Corporation Iterative component binding
TW201006175A (en) * 2008-07-31 2010-02-01 Ibm Method, apparatus, and computer program product for testing a network system
US8898628B2 (en) * 2011-09-23 2014-11-25 Ahmad RAZA Method and an apparatus for developing software
GB2507273A (en) * 2012-10-23 2014-04-30 Ibm Maintaining integrity of output of code generators
US9665828B2 (en) 2014-01-16 2017-05-30 International Business Machines Corporation Using physicochemical correlates of perceptual flavor similarity to enhance, balance and substitute flavors
KR102190813B1 (ko) * 2014-03-25 2020-12-14 한국전자통신연구원 코드 추천 및 공유 시스템 및 방법
CN105446711B (zh) * 2014-08-08 2018-10-02 国际商业机器公司 获取用于软件开发任务的上下文信息的方法及装置
US10423733B1 (en) * 2015-12-03 2019-09-24 The Mathworks, Inc. Systems and methods for sharing resources having different data types
US10938665B2 (en) 2015-12-15 2021-03-02 At&T Intellectual Property I, L.P. Method and apparatus for creating a custom service

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030158915A1 (en) * 2001-12-10 2003-08-21 Alexander Gebhart Dynamic component transfer
JP2004507009A (ja) * 2000-08-24 2004-03-04 ゼンプレックス プロプライエタリー リミテッド 式をグラフィカルに定義する方法
JP2006506757A (ja) * 2002-11-06 2006-02-23 コード バリー ピーティーワイ リィミティッド コード生成

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5517584A (en) * 1994-08-09 1996-05-14 Unisys Corporation Method and apparatus for high-speed implementation of scaling, dithering, and data remapping operations with a single processor
EP0937285B1 (en) * 1995-12-15 2003-07-09 Z-Force Corporation Method for constructing software components and systems as assemblies of independent parts
US5920868A (en) 1996-07-03 1999-07-06 Sun Microsystems, Inc. Cataloging apparatus for facilitating the re-use of distributed objects in a distributed object system
US5991535A (en) 1996-07-03 1999-11-23 Sun Microsystems, Inc. Visual composition tool for constructing application programs using distributed objects on a distributed object network
JP2000505225A (ja) 1996-11-27 2000-04-25 ソニー オイローパ ビーブイ ソフトウェアコードの生成方法及び装置
US6212672B1 (en) 1997-03-07 2001-04-03 Dynamics Research Corporation Software development system with an executable working model in an interpretable intermediate modeling language
US6401114B1 (en) * 1997-05-01 2002-06-04 Stratum Technologies Corporation Method and apparatus for dynamic programming across a computer network
US6256771B1 (en) 1997-10-16 2001-07-03 At&T Corp. Method and apparatus for providing a dynamic service composition software architecture
US6484214B1 (en) 1998-03-05 2002-11-19 Mcdonnell Douglas Helicopter Company Method for distributed object communications based on dynamically acquired and assembled software components
WO1999046689A1 (en) * 1998-03-12 1999-09-16 Crossworlds Software, Inc. Execution of extended activity diagrams by code generation
DE19837871C2 (de) * 1998-08-20 2000-06-08 Manfred Broy Verfahren zum automatischen Erzeugen eines Programms
US6434738B1 (en) * 1999-04-22 2002-08-13 David Arnow System and method for testing computer software
BR0012706A (pt) 1999-07-23 2002-04-09 Codagen Technologies Corp Editor de informações de controle hierarquicamente estruturado
US7139728B2 (en) * 1999-12-30 2006-11-21 Rod Rigole Systems and methods for online selection of service providers and management of service accounts
US6681383B1 (en) 2000-04-04 2004-01-20 Sosy, Inc. Automatic software production system
WO2001086372A2 (en) * 2000-05-12 2001-11-15 Xtreamlok Pty. Ltd. Information security method and system
DE10041072A1 (de) 2000-08-22 2002-03-14 Siemens Ag Verfahren zur automatischen Erzeugung von Programmcode
AU2001295016A1 (en) * 2000-09-01 2002-03-13 Sri International, Inc. Probabilistic alert correlation
US20020055956A1 (en) 2000-09-08 2002-05-09 Krasnoiarov Boris Andreyevich Method and system for assembling concurrently-generated content
US7020868B2 (en) 2000-11-22 2006-03-28 General Electric Company Graphic application development system for a medical imaging system
CA2440031C (en) 2001-02-22 2013-07-02 Accenture Global Services Gmbh Distributed development environment for building internet applications by developers at remote locations
EP1246054A1 (en) * 2001-03-30 2002-10-02 BRITISH TELECOMMUNICATIONS public limited company Creating software programs from software components
US7206846B1 (en) * 2003-04-29 2007-04-17 Cisco Technology, Inc. Method and apparatus for adaptively coupling processing components in a distributed system
US7559050B2 (en) * 2003-06-30 2009-07-07 Microsoft Corporation Generating software development tools via target architecture specification

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004507009A (ja) * 2000-08-24 2004-03-04 ゼンプレックス プロプライエタリー リミテッド 式をグラフィカルに定義する方法
US20030158915A1 (en) * 2001-12-10 2003-08-21 Alexander Gebhart Dynamic component transfer
JP2006506757A (ja) * 2002-11-06 2006-02-23 コード バリー ピーティーワイ リィミティッド コード生成

Also Published As

Publication number Publication date
CA2566000A1 (en) 2005-12-01
EP2386946A3 (en) 2012-05-02
EP1756706A1 (en) 2007-02-28
CA2566000C (en) 2016-11-08
US8856733B2 (en) 2014-10-07
EP1756706B1 (en) 2019-09-25
EP2386946B1 (en) 2020-06-10
US20080201690A1 (en) 2008-08-21
JP2014044748A (ja) 2014-03-13
JP2007538321A (ja) 2007-12-27
EP2386946A2 (en) 2011-11-16
WO2005114387A1 (en) 2005-12-01
EP1756706A4 (en) 2009-06-24
JP5705297B2 (ja) 2015-04-22

Similar Documents

Publication Publication Date Title
JP5705297B2 (ja) 第1のコンポーネントと第2のコンポーネントとの間のネゴシエーションを実行する方法及びネゴシエーションを実行するコンポーネント
JP7220678B2 (ja) ブロックチェーン上で高レベル演算を提供する方法及びシステム
AU2010213618B9 (en) Managing task execution
KR101076910B1 (ko) 객체 지향 언어로의 병행 프로그램 구현
JP2004501548A (ja) プロトコール・スタック
US20040172637A1 (en) Code morphing manager
EP3912074B1 (en) Generating a synchronous digital circuit from a source code construct defining a function call
EP3384380B1 (en) Method and apparatus for declarative action orchestration
CN104615489A (zh) 一种多节点数据交互的实现方法
Männistö et al. Product configuration view to software product families
CN105703941B (zh) 配置事务的处理方法及装置
US6728948B1 (en) Object oriented framework mechanism and method for providing a generic order entry processing interface for one or more order fulfillment systems
Gomaa et al. Reusable component interconnection patterns for distributed software architectures
Flores et al. A formal model of object-oriented design and GoF design patterns
EP1565813B1 (en) Code generation
AU2005245983B2 (en) Code generation techniques
CN111208991B (zh) 基于工作流的程序开发方法、电子设备及存储介质
US10678515B1 (en) Simplifying and reusing visual programming graphs
Lienhardt et al. An object group-based component model
Giese et al. The OCoN approach for object-oriented distributed software systems modeling
Canal et al. Model-based adaptation of software communicating via FIFO buffers
Taher et al. A model-driven approach for web service adaptation using complex event processing
Arbab et al. Different glasses to look into the three cs: component, connector, coordination
CN114398043A (zh) 应用部署方法和装置、电子设备及存储介质
Canal-Velasco et al. Model-Based Adaptation of Software Communicating via FIFO Buffers

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120808

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121016

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130611

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130903

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130906

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20131007

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20131010

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140225