ソフトウェアをコンポーズする方法及び装置
ソフトウェアをコンポーズする方法及び装置について説明する。一実施形態において、この方法は、要求された機能に関連した多数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、ランタイムにおけるアプリケーションコンポーネントの呼び出しをソフトウェアロジックデータに基づいて整合するステップと、を備えている。
【発明の詳細な説明】
【関連出願】
【0001】
[0001]本出願は、参考としてここにその開示を援用する2003年11月12日に出願の米国プロビジョナル特許出願第60/519756号及び2004年3月26日に出願の米国プロビジョナル特許出願第60/556537号に関連しており、その利益を請求するものである。
【発明の分野】
【0002】
[0002]本発明は、データ通信に係り、より詳細には、本発明は、ソフトウェアをコンポーズすることに係る。
【発明の背景】
【0003】
[0003]移動電話の機能は、最近数年間にわたって飛躍的に進歩している。最初は、単なる音声送信であった。次いで、短いメッセージ及びウェブブラウジングが追加された。その後、自動販売機及びマルチメディアメッセージングとの対話が利用できるようになった。最近では、ビデオ会議、インターネットアクセス、及び周囲の物理的環境との対話が可能になった。移動電話及びワイヤレスイネーブル型ハンドヘルド装置の進歩、並びにワイヤレスネットワークの益々の増加は、コンピュータについてのユーザの因習的な理解を変えつつある。デスクトップコンピューティングの観念は、より動的なモデルへとゆっくり進化している。移動電話は、ワイヤレスネットワークに接続することができ、従来サーバーやワークステーションに指定されていたタスクを遂行するに充分な処理能力を有する。従って、移動電話は、個々のユーザの状況において動作して、毎日のタスクで彼等の助けとなるユーザのデジタル友人となっている。更に、ワイヤレス送信の速度が高くなるにつれて、移動電話が分散型サービス(例えば、ウェブサービス)と対話したり、リッチマルチメディアコンテンツにアクセスしてそれを共有したりするのを許すアプリケーションの開発が可能になった。
【0004】
[0004]ソフトウェアサービスの関連性が高まることで、移動電話装置のためのより精巧なオペレーティングシステムが要求される。これらのオペレーションシステムは、Java(MIDLET2.0、DoJa、パーソナルJava)、C#、C及びC++のような言語に基づくアプリケーション開発のためのサポートを与える。更に、これらのオペレーションシステムは、分散型アプリケーションの開発を助けるミドルウェアサービスのためのサポートも与える。移動電話の精巧さが高まることは、装置コンフィギュレーションの複雑さが増加し、ソフトウェアエラーの確率が高くなり、且つ既存のソフトウェアをランタイムに向上させる必要があることを意味する。例えば、移動電話は、デジタルカメラを装備でき、画像の送信をサポートでき(MMSとして知られている)、且つインターネット接続をサポートでき、これは、ウェブ及びWAPページをブラウズし、ダウンロードを行い、eメールを送信し、又、インターネットで実行中のサービスにアクセスするのを許す。しかしながら、これらのサービスを利用する前に、ユーザは、自分のターミナルをコンフィギュレーションしなければならない。このコンフィギュレーションタスクは、通常、顧客サポートセンターにコールし、そしてホストネーム、IPアドレス、ユーザネーム及びパスワードのようなパラメータの入力を含む多数の命令に従うことを伴う厄介で且つエラーの生じがちなプロセスである。
【0005】
[0005]更に、ソフトウェアプラットホームが大きくなるにつれて、ソフトウェアエラーの確率も大きくなる。最近の調査では、移動電話の10%が、ソフトウェアの問題で返却されている。12億人以上の加入者が世界中にいるとすれば、1億2千万個以上の電話が毎年返却されることを意味する。即ち、1億2千万人のユーザが、それらの電話を更新するためにそれらの装置を顧客サポートセンターに持ち込まねばならない。これは、運搬に非常にコストがかかると共に、移動電話ユーザにとってフラストレーションが溜まる。
【0006】
[0006]更に、ソフトウェアの売主は、既存の移動ソフトウェアのための新規な機能を定期的に提供する。例えば、既存のメールクライアントが、付加的なアタッチメントのためのサポートを与えることもできる、或いはウェブブラウザが、スクリプトを操作するための付加的な機能を与えることもできる。この場合も、移動電話ユーザがソフトウェア更新のために顧客サポートセンターにそれらの電話を持ち込むことを要求するのは、ユーザにとって不便なことである。
【0007】
[0007]これら問題の幾つかに対処する解決策がある。例えば、ある既存の製品は、移動電話のファームウェアをランタイムに更新する機能を備えている。それら製品は、既存のファームウェアのイメージを新規なファームウェアのイメージと比較し、2つのイメージ間のバイナリー差を計算し、そしてその計算された差で既存のイメージを更新することにより、これを行う。しかしながら、この解決策は、更新を行うためにユーザの介在を必要とし、ソフトウェアイメージ全体を交換することしかできず(ある論理的特性又は構造的特性ではなく)、且つシステムを停止したときに更新を行うことしかできない。
【0008】
[0008]ランタイムにプロセスを交換するための例示的技術が、米国特許第4,954,941号に説明されている。この技術は、プロセスをシグナリングメカニズムに登録することを伴う。シグナリングメカニズムが信号を発生すると、その関連プロセスが、それ自体で、更新されたバイナリーイメージに交換することができる。しかしながら、米国特許第4,954,941号に説明された技術は、プロセスの個々の断片の交換を許すものではなく、処理されているデータの破壊を生じることがあり、且つ動的なソフトウェアコンポーズをサポートすることができない。それに加えて、上述した技術は、状態をマネージするためのメカニズム、ソフトウェアアプリケーションの構造及びロジックに欠ける。
【0009】
[0009]米国特許第5,155,847号は、クライアント装置の集合体に存在するソフトウェアを交換するための例示的技術を説明している。このソフトウェアは、異なるクライアント装置に対して更新を記憶し且つパッチを発生する中央ホストを使用して、更新される。クライアントエージェントは、ホストに接続し、最新のパッチを検索し、そしてこれらパッチを関連クライアント装置にインストールする。しかしながら、米国特許第5,155,847号に説明されたこの技術は、更新プロセス中に、影響を受けるアプリケーションを停止することを必要とする。更に、この技術は、リモート状態のコンフィギュレーション、動的なソフトウェアコンポーズ、並びにシステムの構造及びロジックの検査及び変更をサポートすることができない。
【0010】
[0010]米国特許第5,359,730号は、オペレーティングシステム(OS)のコンポーネントをランタイムに交換するための技術を説明している。これらOSコンポーネントは、OSコンポーネントの呼び出しをそれに対応するモジュールへ向け直すハードウェアトラップを使用して交換される。しかしながら、米国特許第5,359,730号に説明された技術は、プラットホームに従属したもので、ランタイムにシステムを検査し且つ動的なソフトウェアコンポーズをサポートする能力に欠ける。
【0011】
[0011]米国特許第5,732,275号は、クライアント装置に常駐するソフトウェアを更新するための技術を説明している。この技術は、アプリケーションを実行する前に最新のアプリケーションバージョンをダウンロードしてインストールさせるようにアプリケーションランチャーを変更することに依存する。米国特許第5,732,275号に説明された技術は、ソフトウェアを更新できるのは、ランチのときだけで、ソフトウェアが実行される間ではないという重大な制約がある。
【発明の概要】
【0012】
[0012]ソフトウェアをコンポーズする方法及び装置について説明する。1つの態様によれば、この方法は、要求された機能に関連した多数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、ランタイムにおけるアプリケーションコンポーネントの呼び出しをソフトウェアロジックデータに基づいて整合するステップと、を備えている。
【0013】
[0013]本発明の他の特徴は、添付図面及び以下の詳細な説明から明らかとなろう。
【0014】
[0014]本発明は、以下の詳細な説明及び本発明の種々の実施形態の添付図面から充分に理解されるであろうが、これらは、本発明を特定の実施形態に限定するものではなく、本発明を例示し且つそれを理解するためのものに過ぎない。
【本発明の詳細説明】
【0015】
[0036]ソフトウェアをコンポーズする方法及び装置。以下の説明において、多数の詳細について述べる。しかしながら、当業者であれば、本発明は、これら特定の細部を伴わずに実施できることが明らかであろう。他の点について、本発明を不明瞭にしないために、良く知られた構造及び装置は、ブロック図形態で示し、詳細には示さない。
【0016】
[0037]以下の詳細な説明のある部分は、コンピュータメモリ内のデータビットに対するオペレーションをアルゴリズム及び記号表示の形態で示す。これらアルゴリズム記述及び表示は、データ処理技術の当業者により、それらの仕事の実体をこの技術の他の当業者へ最も有効に伝えるために使用される手段である。アルゴリズムとは、ここでは、一般に、希望の結果を導くステップの自己矛盾のないシーケンスであると考えられる。これらステップは、物理的な量の物理的操作を要求する。通常、必ずしもそうでないが、これらの量は、記憶、転送、合成、比較、及びその他、操作することのできる電気的又は磁気的信号の形態をとる。時には、主として、共通の使用という理由で、これらの信号を、ビット、値、エレメント、記号、キャラクタ、項、数字等として参照するのが便利であると分かっている。
【0017】
[0038]しかしながら、これら及び同様の用語は、全て、適当な物理的量に関連されるべきで、且つこれらの量に適用される便利なラベルに過ぎないことを銘記されたい。特に指示のない限り、以下の説明から明らかなように、この説明全体にわたり、「処理」又は「コンピューティング」又は「計算」又は「決定」又は「表示」等の用語を使用する検討は、コンピュータシステムのアクション及び処理、或いは同様の電子的コンピューティング装置であって、コンピュータシステムのレジスタ及びメモリ内の物理的(電子的)量として表わされたデータを、コンピュータシステムのメモリ又はレジスタ、或いは他のこのような情報記憶、送信又は表示装置内の物理的量として同様に表わされる他のデータへと操作及び変換するものを指すことが明らかであろう。
【0018】
[0039]又、本発明は、ここに述べるオペレーションを実行するための装置にも係る。この装置は、要求される目的に対して特別に構成されてもよいし、或いはコンピュータに記憶されるコンピュータプログラムにより選択的にアクチベートされ又はコンフィギュレーションされる汎用コンピュータを備えてもよい。このようなコンピュータプログラムは、コンピュータ読み取り可能な記憶媒体、例えば、これに限定されないが、フロッピーディスク、光学ディスク、CD−ROM、及び磁気−光学ディスクを含む任意の形式のディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気又は光学カード、或いは電子的インストラクションを記憶するのに適していて、コンピュータシステムバスに各々結合される任意の形式の媒体に記憶されてもよい。
【0019】
[0040]ここに述べるアルゴリズム及びディスプレイは、特定のコンピュータ又は他の装置に固有に関連したものではない。種々の汎用システムが、ここに述べる教示に基づくプログラムと共に使用されてもよいし、又は必要な方法ステップを実行するために更に特殊な装置を構成するのが便利であると分かった。種々のこれらシステムに必要な構造は、以下の説明から明らかであろう。更に、本発明は、特定のプログラミング言語を参照して説明しない。ここに述べる本発明の教示を実施するのに種々のプログラミング言語を使用できることが明らかであろう。
【0020】
[0041]マシン読み取り可能な媒体は、マシン(例えば、コンピュータ)で読み取り可能な形態で情報を記憶し又は送信するためのメカニズムを含む。例えば、マシン読み取り可能な媒体は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリ装置、電気的、光学的、音響的又は他の形態の伝播信号(例えば、搬送波、赤外線信号、デジタル信号等)、等々を含む。
【0021】
概略
[0042]本発明の実施形態は、ランタイムに、ソフトウェアをアッセンブルし、再コンフィギュレーションし、移動させ、そして適応させるのを許すメカニズムを提供する。図1は、再コンフィギュレーション可能なソフトウェアの動的構造を容易にするためのシステム100の一実施形態のブロック図である。
【0022】
[0043]図1を参照すれば、システム100は、ネットワークサーバー106と、ネットワーク102と、該ネットワーク102を経てネットワークサーバー106に結合されたクライアント装置104とを備えている。これらクライアント装置104は、対話式の通信装置である。一実施形態において、ネットワーク102は、ワイヤレスネットワークであり、そしてクライアント装置104は、ワイヤレス電話、手のひらサイズのコンピューティング装置、PDA、又はインターネット可能な機器リモートコントローラのような移動装置である。このような通信装置は、ワイヤレスネットワーク102を経てネットワークサーバー106とワイヤレス通信すると共に、互いに通信することができる。別の実施形態では、ネットワーク102が非ワイヤレスネットワーク(例えば、インターネット)であり、そしてクライアント装置104が、PCシステム、PDA、消費者向け電子装置等の非ワイヤレス装置である。この技術で良く知られた種々様々な通信技術を使用して、クライアント装置104とネットワークサーバー106との間で通信を行うことができる。
【0023】
[0044]ソフトウェア構造システム108は、いかなるクライアント装置104に存在してもよい。更に、ソフトウェア構造システムは、ネットワークサーバー106に存在してもよい。ソフトウェア構造システム108は、クライアント装置104のユーザ又はネットワークサーバー106、或いは他のシステム又は装置により要求される機能に対してソフトウェア(例えば、アプリケーション又はサービス)をコンポーズする役割を果たす。ソフトウェア構造システム108は、必要な機能を実施するアプリケーションコンポーネントの集合体を識別するソフトウェア構造データを得、アプリケーションコンポーネントの中で対話ルールを指示するソフトウェアロジックデータを得、ソフトウェア構造データ及びソフトウェアロジックデータを記憶エリアに記憶し、次いで、ソフトウェアロジックデータを使用して、ソフトウェア構造データにより指定されたアプリケーションコンポーネントの呼び出しを整合することにより、ソフトウェアをコンポーズする。
【0024】
[0045]一実施形態において、アプリケーションコンポーネント(ここでは、マイクロビルディングブロック又はMBBとも称される)は、システムにおいて最も小さなアドレス可能な機能ユニットである。各MMBは、入力パラメータの集合体を受け取り、その状態に影響し得るアクションを実行し、そして出力パラメータの集合体を発生する。MBBは、他のMBBへの参照を記憶しない。従って、MBBが新たなMBBと交換される場合に、他のMBBは、交換について通知される必要がない。
【0025】
[0046]ソフトウェア構造の全てのコンポーネントに関する情報と、これらコンポーネント間の対話ルールに関する情報とを、指定の記憶エリアに維持することにより、ソフトウェア構造システム108は、コンポーズされたソフトウェアの構造及びロジックを明確に客観化(externalize)する。更に、一実施形態では、ソフトウェア構造システム108は、個々のコンポーネントの内部状態属性、内部ソフトウェア実行状態(現在実行中のコンポーネントの状態)、及びソフトウェアを実行するのに必要なコンフィギュレーションパラメータ(例えば、ユーザの好み及び実行ディレクトリー)を記憶エリアに維持することにより、コンポーズされたソフトウェアの状態を明確に客観化する。
【0026】
[0047]ソフトウェア状態の明確な客観化は、ソフトウェアのコンフィギュレーション性をサポートする(即ち、ソフトウェア内部状態を変更する能力を与える)。例えば、顧客サポートの代表者がユーザの移動電話に接続して、ユーザの介在を必要とせずに、移動電話をリモート位置でコンフィギュレーションするようにソフトウェアパラメータを変更することができる。コンフィギュレーション性の他の例は、リモートオブジェクト、バッファサイズ、及びネットワークパラメータに対する参照を変更することを含んでもよい。ソフトウェア状態の明確な客観化は、ランタイムにおいてソフトウェア状態の検査を許す。次いで、この情報を使用して、ユーザがアプリケーションにアクセスする間にソフトウェアをコンフィギュレーションすることができる。
【0027】
[0048]一実施形態において、ソフトウェア構造システム108は、指定の個人がソフトウェア状態をブラウズして希望の変更を指定するのを許すユーザインターフェイスを提供する。
【0028】
[0049]更に、ソフトウェア状態、ロジック及び構造の客観化は、ソフトウェアの更新性もサポートする(即ち、特定のコンポーネントを交換するか、又はソフトウェアの実行ロジックを変更することにより、ソフトウェアの振舞いを修正し又は改善するのを許す)。特に、状態の客観化は、間違った振舞いを修正するためにシステムの幾つかのパラメータの値(例えば、バッファのサイズ)を変更するのを許す。構造の客観化は、ランタイムにソフトウェアコンポーネントを交換するのを許し、又、ロジックの客観化は、ソフトウェアのコンポーネント間で対話ルールを変更するための機能を与える。従って、ソフトウェアは、システムを再始動する必要なく更新することができる。これは、いかなる形式のメモリ(例えば、電気的メモリ、磁気メモリ、光学的メモリ等)を使用するシステムにも適用される。
【0029】
[0050]一実施形態において、ソフトウェア構造システム108により与えられるユーザインターフェイスは、ユーザが、アプリケーションコンポーネントのリスト、アプリケーションコンポーネント間の対話ルール、及びソフトウェア状態を見て、このデータの任意の断片へ希望の変化を指定するのを許す。
【0030】
[0051]更に、ソフトウェアのロジック、構造及び状態の明確な客観化は、自動的なソフトウェアアップグレードをサポートする。即ち、明確に客観化されたロジックにアクセスし、そして変化を導入する(例えば、ユーザインターフェイスを経て)ことにより、アプリケーションロジックが変更されてもよい。次いで、ランタイムのインフラストラクチャーは、新規なロジックルールを更新し、それに応じて、ソフトウェアの振舞いを変更してもよい。更に、明確に客観化されたソフトウェア構造を更新し、ソフトウェアのロジックを変更して、新たなコンポーネントに対する新たな対話ルールを追加し、又は既存の対話ルールを編集して、削除されたコンポーネントをもはや使用しないようにすることにより、ソフトウェアコンポーネントが変更又は除去されてもよい。
【0031】
ソフトウェアの動的構造
[0052]図2Aは、ソフトウェアを動的に構造化するプロセス200の一実施形態を示すフローチャートである。このプロセスは、ハードウェア(例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等)、ソフトウェア(汎用コンピュータシステム又は専用マシンにおいて実行されるような)、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス200は、図1のソフトウェア構造システム108により実行される。
【0032】
[0053]図2Aを参照すれば、処理ロジックは、要求される機能に関連した1組のアプリケーションコンポーネントを識別するソフトウェア構造の定義を受け取ることで開始される(処理ブロック202)。一実施形態では、ソフトウェア構造の定義は、XMLで与えられる。或いは又、ソフトウェア構造の定義は、種々の他のコンピュータ言語(例えば、Java、HTML、C++等)で与えられてもよい。一実施形態において、アプリケーションコンポーネントは、ユーザにより選択される。或いは又、アプリケーションコンポーネントは、処理ロジック又は他の何らかのシステムにより希望の機能に基づいて選択される。一実施形態において、アプリケーションコンポーネント(又はMBB)は、システムにおける最小のアドレス可能な機能ユニットである。MBBの例示的構造を、図3A及び3Bに関連して以下に詳細に説明する。
【0033】
[0054]処理ブロック204において、処理ロジックは、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取る。一実施形態において、ソフトウェアロジックの定義は、XMLで与えられる。或いは又、ソフトウェア構造の定義は、種々の他のコンピュータ言語(例えば、Java、HTML、C++等)で与えられてもよい。一実施形態において、ソフトウェアロジックは、MBBの実行順序を指定するアクションにより定義される。一実施形態において、MBB実行順序は、解釈アクション(interpretedaction)により指定される。或いは又、MBB実行順序は、コンパイルアクション(compiled action)により指定される。解釈アクションとは、ノードが実行状態を表わすMBBであり、且つエッジが遷移順序を定義するような決定論的ディレクテッドグラフ(directedgraph)(各ノードからの唯一の考えられる遷移)である。コンパイルアクションとは、MBBの呼び出し順序を指定するコードフラグメントである。アクションについては、図4A−4Cを参照して以下に詳細に説明する。
【0034】
[0055]次いで、処理ロジックは、各々のリストされたMBBを識別する情報をソフトウェア構造の定義から抽出し(処理ブロック206)、そして一実施形態では、この情報を使用して、各ローカルMBBをインスタンス生成する(処理ブロック208)。ローカルMBBは、ソフトウェア構造システム108と同じ装置に存在するMBBである。
【0035】
[0056]処理ブロック210では、処理ロジックがMBBデータを記憶エリアに記憶する。一実施形態において、MBBデータは、各MBBに対するMBB識別子(例えば、MBBネーム)及びMBB参照(ローカル又はリモート)を含む。一実施形態において、「ドメイン」の観念を使用して、記憶エリアにおいて関連MBBの集合体を参照し、そしてMBBデータにおいて識別される各MBBは、ドメインにおいて登録される(即ち、独特のネームが指定される)。この実施形態では、ローカルオブジェクトは、現在ドメインに存在するオブジェクトである。ドメインは、図5A−5Dを参照して以下に詳細に説明する。
【0036】
[0057]次いで、処理ロジックは、各々のリストされたアクションを識別する情報をソフトウェアロジックの定義から抽出し(処理ブロック212)、そして一実施形態では、この情報を使用して、各ローカルアクションに対するアクションオブジェクトの集合体をインスタンス生成する(処理ブロック214)。一実施形態では、アクションオブジェクトは、ノードがMBBを表わしそしてエッジが遷移順序を定義するディレクテッドグラフを記憶する。一実施形態では、各アクションは、ランタイムにおいてアクション状態オブジェクトに関連付けされる。アクションは、以下に詳細に述べるように、このオブジェクトを使用して入力及び出力パラメータを記憶する。
【0037】
[0058]処理ブロック216において、処理ロジックは、アクションデータを記憶エリアに記憶する。一実施形態では、記憶データは、各MBBに対するアクションオブジェクト識別子(例えば、ネーム)及びアクションオブジェクト参照(ローカル又はリモート)を含む。一実施形態では、アクションデータにおいて識別される各アクションは、ドメインに登録される。
【0038】
[0059]一実施形態において、処理ロジックは、各MBBの内部属性を識別する情報も抽出し(処理ブロック218)、そしてこの情報を記憶エリアに記憶する(処理ブロック220)。一実施形態では、MBB属性情報は、各MBBに対して処理ロジックにより受け取られる関連MBBの定義から抽出される。或いは又、この情報は、処理ブロック202において受け取られたソフトウェア構造の定義から抽出される。一実施形態において、MBB属性情報は、全てのMBBに対して各MBB属性の識別子及び値を含む。加えて、MBB属性情報は、各MBBの入力及び出力パラメータを識別する。一実施形態では、MBB属性情報において識別される各属性は、ドメインに登録される。
【0039】
[0060]処理ブロック222において、処理ロジックは、図6を参照して以下に詳細に述べるように、ソフトウェアロジックに基づいて、リストされたMBBの呼び出しを整合する。
【0040】
[0061]図2Bは、ソフトウェア構造システム250の一実施形態を示すブロック図である。一実施形態において、このソフトウェア構造システムは、ローダー252と、スケジューラー254と、データ記憶装置260とを備えている。
【0041】
[0062]ローダー252は、要求された機能を実施するMBBの集合体を識別するデータ(MBBデータ)と、これらMBBの中で対話ルールを識別するデータ(ロジックデータ)と、各MBBの状態属性を識別するデータ(状態データ)とを得るという役割を果たす。一実施形態において、ローダー252は、ソフトウェア構造の定義、ソフトウェアロジックの定義、及び各当該MBBの定義をパーズすることによりこのデータセットを得る。これら定義は、同じ装置(例えば、同じ移動装置)で実行される異なるアプリケーションから、或いはサーバー又は他の何らかの装置(例えば、他の何らかの移動装置)から、ソフトウェア構造システム250へダウンロードされてもよい。別の実施形態では、ソフトウェア構造の定義は、各MBBに対する状態情報を含み、MBBの定義は使用されない。
【0042】
[0063]一実施形態では、ローダー252は、得られたデータセットに基づいてローカルMBB及びアクションオブジェクトをインスタンス生成し、そしてMBBデータ、ロジックデータ及び状態データをデータ記憶装置260に記憶するという役割も果たす。一実施形態において、データ記憶装置260は、図5Aを参照して以下に詳細に述べるように、構造メモリ、ロジックメモリ及び状態メモリを有するドメインを表わす。一実施形態において、データは、ネーム及び値タプルの形態でデータ記憶装置260に記憶される。特に、MBBデータは、MBBネーム/MBB参照タプルを含み、ロジックデータは、アクションネーム/アクション参照タプルを含み、更に、状態データは、属性ネーム/属性値タプルを含む。
【0043】
[0064]スケジューラー254は、ロジックデータに基づいてMBBの呼び出しを整合するという役割を果たす。一実施形態において、スケジューラー254は、コンポーズされたソフトウェアの実行状態に関する情報を維持し且つエクスポートするという役割も果たす。この情報は、例えば、現在実行されるアクションと、現在実行されるアクションのMBBと、アクションに関連したパラメータ(例えば、アクションの入力パラメータ、及びアクションのMBBにより発生されるパラメータ)とを指定する。
【0044】
[0065]一実施形態において、スケジューラー254は、MBBとして実施される。従って、スケジューラー254の状態をアクセスすることができると共に、ランタイムに、他のMBBとして変更することができる。スケジューラー254を交換するための能力は、デベロッパーが異なる実行セマンティックスを与えるのを許す。例えば、それらは、透過的なローカル又はリモートMBB呼び出しをサポートするスケジューラーを選択し、それ故、ランタイムソフトウェアパーティショニングを簡単化することができる。更に、それらは、各MBB呼び出しの後にパラメータ及び状態のチェックポイントとなるスケジューラーを選択して、欠陥許容セマンティックスを与えることもできる。更に、それらは、アクション実行境界を定義し、アクション実行回数に関する保証を与えるリアルタイムスケジューラを選択することができる。特定のスケジューラーを選択する能力と、動的ソフトウェア交換能力とを結合したことで、実行条件及び外部要求に基づいてその実行モデルを変更できる適応ソフトウェアの構造が簡単化される。
【0045】
[0066]一実施形態において、ソフトウェア構造システム250は、ユーザインターフェイスマネージャー256及び変更コーディネーター258も備えている。ユーザインターフェイスマネージャー256は、関連ユーザインターフェイスを与えると共に、該ユーザインターフェイスを経てユーザ入力を受け取るという役割を果たす。ユーザインターフェイスは、ユーザに使用可能なアプリケーションのリスト、及び各アプリケーションに対するコンポーネントのリストを指定することができる。ユーザは、このユーザインターフェイスを使用して、アプリケーションコンポーネントを選択し、そしてそれらを異なる装置へ移動するように要求してもよい。又、ユーザインターフェイスは、アプリケーションパーティショニング機構のリストを指定し、ユーザが1つを選択してアプリケーションを素早くカスタマイズするのを許してもよい。又、ユーザインターフェイスは、ユーザがソフトウェア状態をブラウズして、ソフトウェアを再コンフィギュレーションするための望ましい変化を指定するのを許してもよい。更に、ユーザインターフェイスは、ユーザが、アプリケーションコンポーネントのリスト、アプリケーションコンポーネント間の対話ルール、及びソフトウェア状態を見て、ソフトウェアを更新するためのこのデータの断片への望ましい変化を指定するのを許してもよい。更に、ユーザインターフェイスは、ユーザが、ソフトウェアをアップグレードするためのソフトウェアロジック又はアプリケーションコンポーネントへの変化を要求するのを許してもよい。
【0046】
[0067]変更コーディネーター258は、ソフトウェアの再コンフィギュレーション、ソフトウェアの更新、又はソフトウェアのアップグレードに対する要求を処理し、そしてこのような要求に応答して、データ記憶装置260の関連情報を変更するという役割を果たす。一実施形態において、変更コーディネーター258は、スケジューラー254と協働して、変化を実施する。例えば、変更コーディネーター258は、変更が要求されたコンポーネントに対して安全コンポーネントスワップ状態を決定し、次いで、データ記憶装置260においてコンポーネントを変更するように、スケジューラー254に要求してもよい。
【0047】
[0068]従って、ソフトウェア構造システム250は、ランタイムにソフトウェアをアッセンブルし、そのロジック、構造及び状態のオンザフライ変更のサポートを与える。特に、明確な実行状態客観化は、デベロッパーからのサポートなしに、安全コンポーネントスワップ状態を計算するようにレバレッジできるようにする詳細情報をソフトウェア構造システム250に与える。ソフトウェア構造システム250は、コンポーネントの呼び出しを制御し、それ故、いつ安全に変化を導入できるか分かる。更に、明確なソフトウェア状態客観化は、状態移行の要求を排除する。新たなコンポーネントが挿入されると、それが以前のコンポーネントの状態に自動的に接続される。更に、コンポーネントは、他のコンポーネントへの参照を記憶しないので、コンポーネントの参照を更新する必要はない。同様に、アプリケーションコンポーネントは、ネームでアドレスされ、参照でアドレスされるのではないので、コンポーネントは、ソフトウェアへの変化により影響されない。
【0048】
[0069]アプリケーションコンポーネント又はMBBは、図3A−3Cを参照して以下に詳細に説明する。
【0049】
[0070]図3Aは、入力パラメータ302を受け取り、内部状態パラメータ304に影響し得るアクションを実行し、そして出力パラメータ306を発生するMBB300のオペレーションを例示する。
【0050】
[0071]図3Bは、MBB320の構造の一実施形態のブロック図である。図3Bを参照すれば、MBB320は、1組の1つ以上のメソッド324、1組のゼロ以上の属性322、及びデマルチプレクサ326より成るエンティティである。メソッド324は、タスクを実施するアルゴリズムである。メソッド324は、1組のゼロ以上の入力値を要求し、1組のゼロ以上の出力値を発生する。一実施形態において、デマルチプレクサ326は、MBBのエントリーポイントで、入力パラメータ328を受け取り、それに対応するMBBメソッド324を抽出する。一実施形態において、各属性322は、ネーム及び値タプルである。値は、アルゴリズムを実施するためにメソッドにより要求される情報を記憶する変数である。属性322は、外部記憶エリアに記憶され、ネームによりアクセスすることができる。
【0051】
[0072]一実施形態において、各MBBは、アプリケーションコンポーネント定義について説明する。この定義は、当該MBBに対して、入力パラメータのリストと、出力パラメータのリストと、状態属性のリストと、MBBを実施するエンティティを指定するプラットホーム従属フィールド(例えば、Javaクラスファイル、NETオブジェクト、DLL等)とを指定する。図3Cは、MBB「RegisterObject」に対するXML記述ファイルを例示するもので、クラスタグは、各プラットホームに対する実施を表わし、状態タグは、各状態属性に対するネーム及びタイプタプルを指定し、入力タグは、ネーム及びタイプタプルに関して入力パラメータを記述し、そして出力タグは、MBBがネーム及びタイプタプルに関して発生するパラメータを表わす。
【0052】
[0073]図4A−4Cを参照して、アクションについて以下に詳細に説明する。
【0053】
[0074]上述したように、アクションは、MBB実行順序を指定し、それ故、ソフトウェアのロジックを定義する。アクションは、解釈アクション又はコンパイルアクションでよい。解釈アクションは、ノードが実行状態を示すMBBを表わし且つエッジが遷移順序を定義するような決定論的ディレクテッドグラフである。各エッジは、次の遷移を決定するようにランタイムに評価される関連する条件付きステートメントを有する。条件付きステートメントは、MBBにより発生されたパラメータ(出力パラメータ)を参照することができる。多数の出力エッジを伴うノードでは、1つのエッジのみがランタイムにおいて真を評価できる(決定論的グラフ)。デフォールトにより、この条件付きステートメントの値は、真である。アクショングラフは、通常、1つの開始ノードと、中間ノードと、1つの終了ノードとを有する。開始ノード及び終了ノード(終了ノードは、アクショングラフが終わることを示す)は、各グラフ横断の一部分である。中間ノードは、エッジに指定された条件付きステートメントに基づくグラフの横断に依存する。アクショングラフは、エラーの場合に遷移を指定する付加的なノード及びエッジを含む。即ち、エラーが検出されない場合には、システムは、デフォールトアクショングラフを使用する。しかしながら、実行エラーが検出された場合には、システムは、エラーノード及びエッジを使用する。例えば、各ノードは、エラーが検出された場合に終了状態に達してアクションを終了させる付加的なエッジを有してもよい。アクショングラフは、より精巧な振舞い(例えば、「while」、「for」及び「repeat」のようなループステートメントをサポートする)を定義してもよい。解釈アクションを実行することは、グラフを横断することに対応する。
【0054】
[0075]図4Aは、MBB1が開始ノードであるような解釈アクションを例示する。このアクションは、MBB1の呼び出しで開始し、MBB2の呼び出しに続き、次いで、「X」の値に基づいて、MBB3又はMBB4を呼び出し、最終的に、MBB5を呼び出す。変数「X」の値は、アクションを呼び出すクライアントにより与えられるか、或いはMBB1又はMBB2により発生される出力パラメータである。この値は、以下に詳細に述べるアクション実行状態の一部分として記憶される。
【0055】
[0076]解釈アクションは、現在実行状態に関する情報をエクスポートし、そしてランタイムにアクショングラフを変更するためのサポートを与えることにより、実行レベルにおけるレフレクション(reflection)を与える。更に、明確な表示は、システムのロジックに関する推論を簡単化し、静的な分析をサポートし、且つ第三者が状態を追加又は除去しそしてグラフをコンフィギュレーションすることでシステムの振舞いを変更するのを許す。
【0056】
[0077]コンパイルアクションは、MBB呼び出し順序を指定するコードフラグメントである。図4Bは、図4Aに示す解釈アクションに対応するコンパイルアクションを例示するものである。
【0057】
[0078]コンパイルアクションは、指定のライブラリーを使用してMBBを呼び出す。一実施形態において、指定のライブラリーは、MBBのネームと、入力タプルの集合体とを受け取り、そして与えられたパラメータで指定のMBBを呼び出す。このメカニズムは、ソフトウェア構造システムがMBBの呼び出しに対して制御権を得るのを許し、MBBの安全な交換を許す。一実施形態において、ソフトウェア構造システムに登録されたMBBとしてコンパイルアクションコードが与えられる。それ故、アクションを呼び出すことは、MBBを呼び出すことに対応し、従って、ソフトウェア構造システムがランタイムにアクションの定義を交換するのを許す。
【0058】
[0079]図4Cは、解釈(左)及びコンパイル(右)アクション「exampleAction」の定義を与えるXML記述ファイルを例示する。
【0059】
[0080]図4Cを参照すれば、解釈アクションの場合、各状態は、ネーム、即ちその状態において呼び出されるMBBのネームと、例外が生じない場合の次の状態と、例外が生じたときの次の状態とを有する。条件付き遷移(例えば、状態2)については、条件付きステートメントが各状態ネームに指定される。又、エラー状態遷移については、条件付き遷移を使用することもできる。一実施形態において、アクション状態に関連した情報、即ち状態ネーム、その状態で呼び出されるMBBのネーム、例外が生じない場合の次の状態、及び例外が生じたときの次の状態を記憶するために、各アクションに対してActionStateオブジェクトが生成される。
【0060】
[0081]コンパイルアクションの記述は、アクションのネームと、それを実施するMBBとを含む。
【0061】
[0082]解釈及びコンパイルアクションは、両方とも、MBB交換をサポートする。特に、自動的ランタイムMBB交換のための1つの重要な要件は、システムが安全なコンポーネントスワップ状態(即ち、ターゲットコンポーネントが他のコンポーネントにより参照されない実行状態)に達するのを検出し、そしてスワップされたコンポーネントに残りのコンポーネントがアクセスするのを回避することである。解釈及びコンパイルの両方のアクションでは、安全なコンポーネントスワップ状態を自動的に決定することができる。解釈アクションでは、インタープリターがMBBを明確に呼び出す。コンパイルアクションは、指定のライブラリーを使用して、MBBを呼び出すことができる。両方の場合に、システムは、呼び出しの制御権を得、それ故、MBBを安全に交換することができる。
【0062】
[0083]更に、解釈及びコンパイルの両アクションは、ソフトウェアの更新性及びアップグレード性に貢献する。アクションを更新することは、既存のアクションを交換することに対応し、又は解釈アクションの場合には、実行グラフを変更することに対応する。システムをアップグレードすることは、新たなアクションを追加することを意味し、又は解釈アクションの場合には、アクショングラフを変更して、状態を合体又は変更することを意味する。
【0063】
[0084]解釈アクションとコンパイルアクションとの間の1つの差は、ランタイム操作粒度である。コンパイルアクションは、ランタイムには、変更することができず、即ち遷移状態を追加、除去又は変更することができない。コンパイルアクションの振舞いを変化させるには、それに関連したMBBを交換し、即ちアクションコードを交換することが必要である。更に、ランタイムにコンパイルアクションを検査することはできず、それ故、現在実行状態について学習することも、アクションの振舞いについて学習することもできない。解釈アクションでは、グラフが、アクションの振舞いについて学習するに充分な情報を与える。しかしながら、コンパイルアクションは、解釈アクションより迅速に実行する。というのは、それらは、それらの実行を推進するためのインタープリターを必要としないからである。コンポーズされたソフトウェアの必要な機能に基づき、ソフトウェア構造システムは、解釈アクション又はコンパイルアクションのいずれを使用してもよい。
【0064】
[0085]図5A−5Cを参照してドメインについて詳細に説明する。ドメインとは、関連するMBBの集合体を総計するアブストラクションである。ドメインは、ドメインの構造(MBBのリスト)、ドメインのロジック(アクションのリスト)、及びドメインの状態(MBBの状態属性及び実行状態値)を記憶するための記憶エリアを与える。ドメインは、単一ユニットとしてのMBBの集合体の操作(例えば、移動、保留及び再開)を容易にするために、ハイアラーキー式にコンポーズすることができる。
【0065】
[0086]図5Aは、ドメイン500の構造を例示する。
【0066】
[0087]図5Aを参照すれば、ドメイン500は、構造メモリ502と、ロジックメモリ504と、状態メモリ506とを備えている。各メモリは、ネーム及び値タプルを記憶する。構造メモリ502は、ドメインに登録されたMBBに対応するタプルの集合体を維持する。タプルネームは、MBBのネームを指し(各MBBには登録時にネームが指定される)、そして値は、MBBへの参照を記憶する。参照とは、ローカルポインタであるか、又はリモートMBBに対するポインタである。一実施形態において、ソフトウェア構造システムは、ローカル又はリモート呼び出しをデベロッパーに対して透過的にする。
【0067】
[0088]ロジックメモリ504は、ドメインによりエクスポートされるアクションのリストを記憶する。構造メモリと同様に、ロジックメモリ504は、ネームによりアクションを参照し、そして値は、ローカルポインタであるか又はリモート参照である。
【0068】
[0089]状態メモリ506は、ドメインに登録されたMBBに対する状態属性を記憶する。状態メモリ506は、ネームで属性を参照し、そして値は、属性の値である。MBB登録中に、システムは、状態メモリ506に対するポインタをMBBに指定する。同じドメインに属するMBBが同じ状態メモリ506を共有する。
【0069】
[0090]ドメインは、MBBの大きな集合体の編成を簡単化するためにハイアラーキー式にコンポーズすることができる。ドメインメモリは、登録されたサブドメインのドメインメモリに対する参照(ネーム及び値タプル)を記憶すると共に、ルート(root)ドメインメモリに対する参照も記憶する。図5Bは、ドメインのハイアラーキー式コンポーズを例示する。
【0070】
[0091]図5Bを参照すれば、ルートドメイン520は、2つのサブドメイン(ドメイン522及び5242)を有し、そしてドメイン522は、3つのサブドメイン(ドメイン526、528及び530)を有する。
【0071】
[0092]一実施形態において、デフォールト可視性(visibility)ポリシーは、ドメインがサブドメインのメモリにアクセスできることを指令する。例えば、ルートドメイン520は、システムの全てのドメインメモリ(即ち、ドメイン522乃至530)にアクセスすることができ、一方、ドメイン530は、それ自身のドメインメモリにしかアクセスできない。可視性ポリシーを変更する(例えば、サブドメインがそれらの親又は兄弟ドメインのメモリにアクセスするのを許す)ことができる。
【0072】
[0093]一実施形態では、ソフトウェアアーキテクチャーの定義を使用して、ソフトウェア構造システムにより維持されるドメインハイアラーキーを説明する。図5Cは、ソフトウェアアーキテクチャーの定義を与えるXML記述子ファイルを例示する。
【0073】
[0094]図5Cを参照すれば、アーキテクチャー記述子における各ドメインエントリーは、2つの付加的なファイル、即ちドメインに登録されるMBB及びアクションを指定する構造及びロジック記述子を指す。ロジック記述子は、図4Cを参照して上述した。構造記述子は、単一ドメインに対するソフトウェア構造の定義を与える。図5Dは、ドメインに対するソフトウェア構造の定義を与えるXML記述子ファイルを例示する。
【0074】
[0095]図5Dを参照すれば、構造記述子は、ドメインに属するMBBのリストを与える。この記述子は、ネーム及びMBB記述子のリストを含む。MBB記述子は、関連MBBの定義を与えるドキュメントである(例えば、図3Cに示すMBB記述子)。一実施形態において、MBB記述子は、関連ローカルMBBをインスタンス生成するのに使用される。全てのMBBは、ドメイン構造メモリに<name、MBB、reference>タプルとして登録される。MBBネームは、MBBにアクセスするためのキーとして使用される。
【0075】
[0096]アクションの実行について以下に詳細に述べる。解釈アクションの実行は、インタープリターに依存する。コンパイルアクションを実行することは、MBBを呼び出すことに対応し、それ故、インタープリターを必要としない。
【0076】
[0097]解釈アクションは、システムのロジックを客観化すると共に、ソフトウェアの機能的見地を実行するのに必要なMBB呼び出しシーケンスに関する情報を与える。一実施形態において、解釈アクションの実行は、図2Bのスケジューラー254により遂行され、これは、アクションのデータをMBB呼び出しスケジューラーとして使用して、コンポーズされたソフトウェアの実行を推進する。一実施形態では、アクションのデータは、MBBの呼び出し順序を指定するアクション定義(例えば、決定論的限定状態オートマトン(DFSA))である。スケジューラーは、ソフトウェアの実行状態に関する情報を維持し、エクスポートする。この情報は、例えば、現在実行されるアクション、現在実行されるアクションのMBB、及びアクションに関連したパラメータ(例えば、入力パラメータ、及びアクションのMBBにより発生されるパラメータ)を指定する。
【0077】
[0098]一実施形態において、各アクションは、アクション状態オブジェクトに関連付けされる。アクションは、このオブジェクトを使用して、アクション実行に関連した入力及び出力パラメータを記憶する。パラメータは、アクションを呼び出すクライアントにより与えられ、又、それら呼び出しの結果としてMBBにより発生される。MBBは、アクション状態オブジェクトに記憶されたパラメータを消費して、それらのアルゴリズムを実施する。アクション呼び出し中に発生したパラメータをセーブし、そして状態属性へのMBBアクセスを同期させることで、クライアントがアクションを同時に呼び出すのを許す。
【0078】
[0099]図6は、解釈アクションを実行するプロセスの一実施形態を示すフローチャートである。このプロセスは、ハードウェア(例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等)、ソフトウェア(汎用コンピュータシステム又は専用マシンにおいて実行されるような)、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス6200は、図2Bのスケジューラー254により遂行される。
【0079】
[00100]図6を参照すれば、処理ロジックは、アクションを実行する要求を受け取ることで始まる(処理ブロック602)。この要求は、入力パラメータを伴うアクション状態オブジェクトを含む。
【0080】
[00102]処理ブロック604において、処理ロジックは、アクションネームをキーとして使用して、ロジックメモリにおける要求されたアクションのオブジェクトにアクセスする。
【0081】
[00102]処理ブロック606において、処理ロジックは、アクションオブジェクトから第1のMBBのネームを得る。
【0082】
[00103]次いで、処理ロジックは、MBBネームをキーとして使用して構造メモリから第1のMBBへの参照を得(処理ブロック608)、そしてこのMBBを呼び出して、これを入力パラメータとしてアクション状態オブジェクトに通す(処理ブロック610)。
【0083】
[00104]更に、処理ロジックは、アクションオブジェクトにまだMBBがあるかどうか決定する(処理ボックス614)。もしそうであれば、処理ロジックは、アクションオブジェクトから次のMBBのネームを得(処理ブロック616)、そして処理ブロック608へ戻る。もしそうでなければ、処理ロジックは、アクション状態オブジェクトを出力パラメータと共に要求者へ戻す(処理ブロック618)。
【0084】
[00105]図7は、解釈アクションの実行を例示する。アクションのネームは、「exampleAction」であり、これは、2つのMBBより成る。説明を簡単にするために、アクションは、条件付き遷移もループももたないと仮定する。
【0085】
[00106]図7を参照すれば、スケジューラーは、「exampleAction」と称されるアクションを実行するための要求を受け取る。この要求は、2つのパラメータa及びcを含むアクション状態オブジェクトを備えている(ステップ1)。スケジューラーは、アクションネームを使用して、ロジックメモリにアクセスすると共に、アクショングラフの第1ノードに対するポインタを得る。スケジューラーは、アクショングラフのノードからMBBのネームを得、次いで、そのネーム(MBB1)を使用して、構造メモリからMBBを分析する。
【0086】
[00107]MBB1を分析した後、スケジューラーは、MBBを呼び出して、アクション状態オブジェクトに通す。MBB1は、アクション状態オブジェクトから得られるaというネームの入力パラメータを要求する。MBB1は、そのアルゴリズムを実行して、出力パラメータbを発生し、これをアクション状態オブジェクトに記憶する(ステップ2)。
【0087】
[00108]次いで、スケジューラーは、現在アクショングラフのノードから次の状態のネームを得、MBBのネーム(MBB2)を得、そして構造メモリからMBB2を分析する。スケジューラーは、アクション状態オブジェクトをパラメータとしてMBB2を呼び出す。MBB2は、アクション状態オブジェクトから得られる2つのパラメータb及びcを要求する。MBB2は、そのアルゴリズムを実行して、dと称される出力パラメータを発生し、そしてそのパラメータをアクション状態オブジェクトに記憶する(ステップ3)。
【0088】
[00109]最終的に、スケジューラーは、アクション状態オブジェクトを要求者へ返送し、要求者は、アクションの実行中に発生された出力パラメータを検索することができる。
【0089】
[00110]上述したアクション実行プロセスは、安全なソフトウェア再コンフィギュレーションポイントを自動的に検出するのに使用できる。より詳細には、ソフトウェアを再コンフィギュレーションできるのは、MBB呼び出しと呼び出しの間だけである。MBBは、客観化された構造、ロジック及び状態にアクセスしてそれを変更することが許される。それ故、これらパラメータを変更すると、MBBの実行に影響し、一貫性のないソフトウェア状態を招くことがある。ソフトウェア構造システムは、望ましからぬ結果を回避するために、MBBがその実行を完了するまで待機する。この振舞いは、解釈アクション及びコンパイルアクションの両方に適用される。コンパイルアクションは、指定のライブラリーを使用して、MBBを呼び出し、それ故、再コンフィギュレーションを実施するための制御件をシステムに与える。
【0090】
プロトコル
[00111]上述したように、本発明の幾つかの実施形態は、ドメインを使用して、ランタイムにソフトウェアの構造をサポートする。図8Aは、ドメイン800の一実施形態を示すブロック図である。
【0091】
[00112]図8Aを参照すれば、ドメイン800は、3つのサブコンポーネント、即ちドメインメモリ802、ドメインローダー804、及びドメインスケジューラー806を備えている。ドメインメモリ802は、エンティティによりホストされるMBBのネーム及び参照、MBBの属性、並びに1組の1つ以上のアクションを記憶するタプルコンテナである。
【0092】
[00113]ドメインローダー804は、MBBを生成し、MBBを削除し、MBBのリストを設け、アクションをロードし、アクションを削除し、アクションのリストを設け、アクションを変更し、そしてソフトウェア構造記述、MBB記述及びソフトウェアロジック記述をパーズするという役割を果たす。
【0093】
[00114]ドメインスケジューラー806は、アクション定義(例えば、アクションのDFSA)をパーズし、そしてアクション定義により指定された順序でMBBアクションを呼び出すという役割を果たす。
【0094】
[00115]図8Bは、タプルコンテナを例示する。タプルコンテナは、情報がネーム及び値の対として記憶される記憶エリアである。タプルコンテナは、情報タプルを記憶すると共に、ネームをサーチキーとして使用して情報タプルを検索する機能を備えている。
【0095】
[00116]一実施形態において、ソフトウェアの動的コンポーズは、プロトコルのセットを使用して達成される。プロトコルのセットは、ドメイン初期化プロトコル、MBB生成プロトコル、MBB削除プロトコル、MBBリスティングプロトコル、ソフトウェア構造パージングプロトコル、アクションローディングプロトコル、アクション削除プロトコル、アクションリスティングプロトコル、アクション変更プロトコル、ソフトウェアロジックパージングプロトコル、MBB呼び出しプロトコル、リモートMBB呼び出しプロトコル、及びアクション呼び出しプロトコルを含む。
【0096】
[00117]図9は、ドメイン初期化プロトコルを示す。図9を参照すれば、ドメインオブジェクトが生成されるときに、ドメインオブジェクトは、ドメインスケジューラー、ドメインメモリオブジェクト(タプルコンテナ)、及びドメインローダーオブジェクトをインスタンス生成する。次いで、ドメインオブジェクトは、ドメインスケジューラーをリモートオブジェクトとしてエクスポートし、ドメインにおいてアクションをリモートから呼び出すのを許す。
【0097】
[00118]図10は、MBB生成プロトコルを示す。図10を参照すれば、ドメインローダーは、マイクロビルディングブロックを生成して初期化する機能を実施する。一実施形態において、ドメインローダーは、MBBネーム及びMBBクラスネームを受け取るCreateMBBと称されるメソッドを実施する。このメソッドは、指定クラスのオブジェクトをインスタンス生成し、MBBを初期化し、そしてMBBのネーム及びオブジェクトへの参照と共にタプルをドメインメモリに記憶する。更に、CreateMBBメソッドは、タプルの参照カウンタ値を0にセットして、MBBがいずれのアクションでも使用されないことを指示する。
【0098】
[00119]図11は、MBB削除プロトコルを示す。図11を参照すれば、ドメインローダーは、マイクロビルディングブロックを削除する機能を実施する。一実施形態において、ドメインローダーは、MBBのネームを受け取り、MBB参照カウンタをチェックし、そして参照カウンタが0に等しい場合にMBBを削除するDeleteMBBと称するメソッドを実施する。さもなければ、ドメインローダーは、エラーメッセージを返送する。
【0099】
[00120]図12は、MBB削除プロトコルを示す。図12を参照すれば、ドメインローダーは、マイクロビルディングブロックをリストする機能を実施する。一実施形態において、ドメインローダーは、ドメインメモリに記憶されたMBBのリストを返送するListMBBと称されるメソッドを実施する。
【0100】
[00121]図13は、ソフトウェア構造ロードプロトコルを示す。図13を参照すれば、ソフトウェア構造をロードすることは、特定のソフトウェアに必要とされる全てのマイクロビルディングブロックを生成して初期化することを意味する。一実施形態において、ドメインローダーが、ソフトウェア構造記述と、それをロードするための要求とを受け取ったときに、プロトコルがスタートする。ドメインローダーは、記述をパーズし、記述の各エントリーに対して1つのMBBを生成する。MBBを生成するために、ドメインローダーは、MBB生成プロトコルをレバレッジする。
【0101】
[00122]図14は、ソフトウェアアクションロードプロトコルを示す。図14を参照すれば、ドメインローダーは、ソフトウェアアクションをロードするためのプロトコルを実施する。一実施形態において、ドメインローダーは、ソフトウェアロジック記述をパーズし、その記述に含まれた各状態に対して、アクション状態情報オブジェクトを生成し、そしてその状態のネームと、アクション状態オブジェクトへの参照とを含むタプルをドメインメモリに記憶する。更に、ドメインローダーは、状態において参照されるMBBごとに、MBB参照カウンタを増加する。
【0102】
[00123]図15は、アクション削除プロトコルを示す。図15を参照すれば、ドメインローダーは、アクションを削除するための機能を実施する。一実施形態において、ドメインローダーは、アクションのネームを受け取り、ドメインメモリからアクションを検索し、そして含まれる各MBBに対して、参照カウンタを減少し、MBBを削除するDeleteActionと称されるメソッドを実施する。
【0103】
[00124]図16は、アクションリスティングプロトコルを示す。図16を参照すれば、ドメインローダーは、アクションをリストするための機能を実施する。一実施形態において、ドメインローダーは、ドメインメモリに記憶された全てのアクションのリストを返送するListActionsと称されるメソッドを実施する。
【0104】
[00125]図17は、アクション変更プロトコルを示す。図17を参照すれば、ドメインローダーは、アクションを変更する機能を実施する。一実施形態において、ドメインローダーは、アクション状態のネームと、新たな状態を含むオブジェクトとを受け取るModifyActionと称するメソッドを実施する。このメソッドは、ドメインメモリからアクション状態を検索し、既存の状態と新たな状態のMBBのネームを比較し、それらが異なる場合に、MBB参照カウンタを減少する。又、このメソッドは、状態情報を新たなものと交換する。
【0105】
[00126]図18は、ローカルMBB呼び出しプロトコルを示す。図18を参照すれば、このプロトコルは、ローカルMBB、即ちドメインスケジューラーと同じドメインとして含まれたMBBをいかに呼び出すか指定する。一実施形態において、プロトコルは、invokeMBBメソッドでスタートし、これは、2つのパラメータ、即ちMBBのネーム、及びアクション状態オブジェクトを必要とする。ドメインローダーは、MBBのネームを使用して、MBBへの参照を含むタプルをドメインメモリから検索する。次いで、ドメインローダーは、MBBを呼び出し、そしてアクション状態オブジェクトから必要なパラメータを抽出すると共に、ドメインメモリから状態に対応する属性を抽出する。次いで、アクションを実行した後に、MBBは、それが変更した全ての属性でドメインメモリを更新し、出力パラメータをアクション状態オブジェクトに記憶し、そしてそのアクション状態オブジェクトをドメインローダーへ返送する。
【0106】
[00127]図19は、リモートMBB呼び出しプロトコルを示す。図19を参照すれば、このプロトコルは、リモートドメインに存在するMBBを呼び出すためのサポートを与える。この機能は、アクションの実行に影響せずに、MBBの移動を簡単にする。一実施形態において、ドメインスケジューラーは、MBBがローカルであるかリモートであるかを自動的に検出して、適切なプロトコルを使用する。一実施形態において、プロトコルは、MBBにおけるアクションを呼び出すための要求をドメインローダーが受け取ることで始まる。この要求は、2つのパラメータ、即ちMBBのネームと、アクション状態オブジェクトとを含む。ドメインローダーは、ドメインメモリからMBBネームを分析する。その結果が、リモートMBBへの参照である。ドメインローダーは、リモート手順コールを発生するためのアクションを呼び出す。RPC要求を送信及び受信するためのアクションの集合が与えられる。これらのアクション及びそれに関連したMBBがデフォールトによりロードされる。このアクションは、SendRemoteRequestと称され、MBBの参照、ネーム、リモート呼び出しのメソッド、及びアクション状態オブジェクトを必要とする。このアクションは、リモート要求を発生し、更新されたアクション状態オブジェクトを受け取る。
【0107】
[00128]図20は、MBB交換プロトコルを示す。図20を参照すれば、このプロトコルは、実行中のシステムを停止せずに、既存のMBBと新たなMBBとの交換を許す。一実施形態において、このプロトコルは、MBBを交換するためのコマンドでスタートし、安全な再コンフィギュレーション状態を待機し、そしてタプルネームは同じであるが実施クラスが異なる新たなMBBを生成する。
【0108】
[00129]図21は、アクション呼び出しプロトコルを示す。図21を参照すれば、アクション呼び出しプロトコルは、DFSAをパーズしたり影響のあるMBBを呼び出したりすることを含むアクションを実行するのに必要な全てのステップを定義する。一実施形態において、ドメインオブジェクトは、アクション呼び出しプロトコルを実施するメソッド(invokeAction)をエクスポートする。このメソッドは、アクションネーム及びパラメータを、ネーム及び値タプルの集合として受け取る。ドメインオブジェクトは、アクション状態オブジェクトを生成すると共に、パラメータタプルと、actionNameと称されるタプルを、アクションのネームと共に記憶する。次いで、invokeActionメソッドは、ドメインスケジューラーにおいてプロセスメソッドを呼び出し、アクション状態オブジェクトを通す。ドメインスケジューラーは、sctionNameタプルをアクション状態オブジェクトから分析し、その値を使用して、第1のDFSA状態情報オブジェクトを分析する。ドメインスケジューラーは、DFSA状態に関連したMBBのネームと、MBBにおいて呼び出すためのアクションのネームとを検索する。次いで、ドメインスケジューラーは、MBBアクションネームをアクション状態オブジェクトに記憶し、そしてドメインローダーのinvokeMBBプロトコルを呼び出す。MBB呼び出しプロトコルが終了すると、ドメインスケジューラーは、アクション状態情報オブジェクトから次のアクション状態ネームを検索し(エラー状態の場合には、次のエラー状態を検索し)、そのネームを使用して、それに関連したアクション情報状態オブジェクトを分析し、次いで、ブロックAに含まれた全てのステップを繰り返す。このプロトコルは、最終的なアクション状態に達するまでMBBの呼び出しを保持する。この点において、ドメインスケジューラーは、更新されたアクション状態オブジェクトをドメインオブジェクトへ返送し、該ドメインオブジェクトがそれを要求者へ返送する。
【0109】
再コンフィギュレーション可能なソフトウェアへのプログラムの変換
[00130]ある実施形態では、従来のメソッドを使用して生成された既存のプログラムは、上述したように、その後、再コンフィギュレーション、更新、又はアップグレードされてもよいソフトウェアへと変換することができる。一実施形態において、この変換は、1組の1つ以上のタスクとして定義できるプログラムに適用でき、タスクは、オブジェクト(例えば、Javaオブジェクト)の集合より成り、そして呼び出し順序を定義するオブジェクト間の1組の対話ルールと、全てのオブジェクトのパブリック属性の合体であるタスク状態とを有する。
【0110】
[00131]図22−24は、プログラムを再コンフィギュレーション可能なソフトウェアへと変換するプロセス2200の一実施形態を示すフローチャートである。このプロセスは、ハードウェア(例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等)、ソフトウェア(汎用コンピュータシステム又は専用マシンにおいて実行されるような)、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス2200は、図1のソフトウェア構造システム108により実行される。
【0111】
[00132]図22を参照すれば、処理ロジックは、タスクの構造を客観化することで始まる(処理ブロック2202)。一実施形態において、処理ロジックは、(a)各タスク、及びタスクに属する各オブジェクトに対して、オブジェクトのネーム及びオブジェクトへの参照でタプルを生成し、(b)各々の生成されたタプルをドメインメモリに記憶し、(c)プログラムPに属する全てのオブジェクトのネームと共に、値がリストであるsoftwareArchitectureと称されるタプルを生成し、更に、(d)このタプルsoftwareArchitectureをドメインメモリに記憶することにより、タスクの構造を客観化する。
【0112】
[00133]処理ブロック2204において、処理ロジックは、タスクの状態を客観化する。一実施形態において、処理ロジックは、(a)タスクにおける各オブジェクト、及びオブジェクトにおける各パブリック属性に対して、タプルのネームが属性のネームで、且つ値が変数の値への参照であるようなタプルを生成し、更に、(b)各生成されたタプルをドメインメモリに記憶することにより、状態を客観化する。
【0113】
[00134]処理ブロック2206において、処理ロジックは、タスクの各オブジェクトをMBBへ変換する。タスクのオブジェクトをMBBへ変換するプロセスの一実施形態を、図23を参照して以下に詳細に説明する。
【0114】
[00135]処理ブロック2208において、処理ロジックは、タスクのロジックを客観化する。タスクのロジックを客観化するプロセスの一実施形態を、図24を参照して以下に詳細に説明する。
【0115】
[00136]図23Aは、タスクのオブジェクトをMBBへ変換するプロセスの一実施形態を示すフローチャートである。
【0116】
[00137]図23Aを参照すれば、処理ロジックは、オブジェクトに関連した全パブリックメソッドのネームでリストを生成することで始まる(処理ブロック2302)。パブリックメソッドは、オブジェクトの外部から呼び出すことのできる(例えば、クライアントにより)機能である。
【0117】
[00138]処理ブロック2304において、処理ロジックは、全てのパブリックメソッドをプライベートメソッドに変換する。プライベートメソッドは、内部で呼び出すことのできる(例えば、オブジェクトの別のメソッドにより)機能である。
【0118】
[00139]処理ブロック2306において、処理ロジックは、属性をネーム及び値タプルとしてドメインメモリに記憶させ且つそこからアクセスさせるようにオブジェクトコードを変更する。
【0119】
[00140]処理ブロック2307において、処理ロジックは、ネーム及びタプルリストを受け取り、そしてプライベートメソッドのリストからプライベートメソッドの1つを呼び出すメソッドをオブジェクトコードに追加する。
【0120】
[00141]図23Bは、MBBを呼び出すためのプロセスの一実施形態を示すフローチャートである。
【0121】
[00142]図23Bを参照すれば、処理ロジックは、アクション状態オブジェクトからactionName値を抽出して、どのアクションがクライアントにより要求されたか決定する(処理ブロック2307)。アクション状態オブジェクトは、アクションの実行中に要求され及び発生される入力及び出力パラメータの集合を記憶する。一実施形態において、入力及び出力パラメータは、タプルとして記憶される。
【0122】
[00143]処理ブロック2310において、処理ロジックは、要求されたアクションのネームがパブリックメソッドのリストに記憶されたメソッドの1つに対応することを照合する。さもなければ、処理ロジックは、例外を生じさせる。
【0123】
[00144]処理ブロック2312において、処理ロジックは、アクション状態オブジェクトからアクションにより要求される入力パラメータを抽出する。
【0124】
[00145]処理ブロック2314において、処理ロジックは、抽出されたパラメータを使用してactionName値により指定されるメソッドを呼び出す。
【0125】
[00146]次いで、処理ロジックは、呼び出しからの結果をアクション状態オブジェクトに記憶し(処理ブロック2316)、次いで、アクション状態オブジェクトを返送する(処理ブロック2318)。
【0126】
[00147]図24は、タスクのロジックを客観化するためのプロセスの一実施形態を示すフローチャートである。
【0127】
[00148]図24を参照すれば、処理ロジックは、タスクの呼び出しの流れを分析して、ディレクテッドグラフを発生することで始まり、ここでは、ノードのネームが呼出し番号に対応する(処理ブロック2402)。
【0128】
[00149]処理ブロック2404において、処理ロジックは、ネームがグラフノードのネームであり且つ値がノードに関する情報を記憶するオブジェクトであるようなタプルを、グラフノードごとに生成することにより、ディレクテッドグラフからDFSAを発生する。
【0129】
[00150]処理ブロック2406において、処理ロジックは、前記タプルをドメインメモリに記憶する。
【0130】
[00151]処理ブロック2408において、処理ロジックは、ネームがアクションのネームであり且つ値が第1グラフノードを伴うストリングであるような付加的なタプルを記憶する。
【0131】
通信ミドルウェアサービスの実施例
[00152]MBBを使用して構築される多プロトコルオブジェクト要求ブローカー(ORB)通信ミドルウェアサービスについて以下に説明する。このサービスは、ワイヤプロトコルとは独立したクライアント及びサーバー機能を提供する。即ち、サーバーオブジェクトのメソッドは、IIOP、SOAP又はXML−RPCのような異なるプロトコルにわたって呼び出すことができる。同様に、クライアント要求は、基礎となるプロトコルに関わらず、同じインターフェイス及びセマンティックスを使用する。その実施は、IIOP及びXML−RPCに対するサポートを与える。しかしながら、ランタイムに付加的なMBBを開発して配備することにより付加的なプロトコルを追加することができる。ExORBアーキテクチャー(状態、構造及びロジック)が客観化されるので、ランタイムにExORBアーキテクチャーを検査し及び操作することができる。
【0132】
[00153]ExORBは、11個のドメインにグループ編成された28個のマイクロビルディングブロックで構成される。図25は、ExORBの構造を示す。
【0133】
[00154]図25を参照すれば、CDRパラメータマネージメントドメインは、共通データ表示(CDR)フォーマット(CORBAデフォールト表示)に基づいてパラメータをマーシャル及びデマーシャルする機能を与える。CDRマーシャルパラメータマイクロビルディングブロックは、パラメータ及びCDRバッファエンコードオブジェクトを受け取り、そしてパラメータのCDR表示を含むバイトアレーを返送する。CDRデマーシャルパラメータマイクロビルディングブロックは、バイトバッファ、該バッファから抽出すべきパラメータタイプのリストを伴うアレー、及びCDRバッファデコードオブジェクトを受け取り、そしてオブジェクトの値を伴うアレーウィ返送する。
【0134】
[00155]XMLRPCパラメータマネージメントドメインは、CDRパラメータマネージメントドメインと同様であるが、XMLRPCプロトコルに基づいてエンコードされたパラメータをマーシャル及びデマーシャルする機能を与える。
【0135】
[00156]IIOPプロトコル処理ドメインは、IIOPプロトコルに合致するメッセージをエンコード及びデコードするための機能をエクスポートするマイクロビルディングブロックを総計する。IIOPエンコード要求マイクロビルディングブロックは、マーシャル化パラメータのリスト及び要求フィールドの集合(例えば、リモートオペレーションネーム、予想される応答、及び要求id)を受け取り、そしてIIOPに基づいてフォーマットされたバイトバッファを発生する。IIOPデコード要求マイクロビルディングブロックは、IIOPフォーマットの到来要求を伴うバイトバッファと、要求メッセージを記述するフィールド(例えば、長さ)の集合とを受け取り、その要求をパーズし、そして要求のidやターゲットオブジェクトやターゲットメソッドを含む要求に関する情報を伴う属性の集合と、パラメータを伴うバイトバッファとを発生する。IIOPエンコード応答及びIIOPデコード応答は、IIOP応答メッセージを発生すると共に、到来するIIOP応答メッセージをデコードするための機能を与える。最終的に、IIOPデコードヘッダは、ネットワークからオリジナルの到来要求を受け取り(バイトバッファ)、そして12個の初期バイトをパーズし、これがGIOPヘッダを構成する。このヘッダは、残りのメッセージの長さ及びメッセージのタイプに関する情報を含む。
【0136】
[00157]XMLRPCプロトコル処理ドメインは、IIOPプロトコル処理ドメインと同等であり、XMLRPC要求及び応答を取り扱う機能を与える。
【0137】
[00158]ネットワークデータマネージメントドメインは、到来及び出発ネットワークトラフィックを取り扱うという役割を果たす。これは、3つのマイクロビルディングブロック、即ちデータ送信、データ受信及びデータ垣間見(Peek)で構成される。データ送信マイクロビルディングブロックは、バッファ、その長さ及び通信ポイントオブジェクト(例えば、TCPソケット)を受け取り、そしてその通信ポイントを使用してネットワークを経てデータを送信する。データ受信マイクロビルディングブロックは、バッファ、受信すべきデータの長さ、及び通信ポイントオブジェクトを受け取り、そしてその通信ポイントオブジェクトを使用してデータをバッファに記憶し、データを得る。データ垣間見マイクロビルディングブロックは、データ受信マイクロビルディングブロックと同様であるが、ネットワークバッファから読み取ったデータを除去するものではない。
【0138】
[00159]オブジェクト呼び出しドメインは、Java言語レフレクション能力を使用してサーバーメソッド呼び出しを自動化するために2つのマイクロビルディングブロックを含んでいる。この機能の結果として、デベロッパーは、それらのサーバーオブジェクトに対するスケルトンを構築する必要がなく、それらを登録するだけでよく、そしてシステムは、それが要求する全ての情報を自動的に得る。準備メソッド呼び出しマイクロビルディングブロックは、オブジェクトへのポインタと、呼び出すべきメソッドのネームとを受け取る。このマイクロビルディングブロックは、Javaレフレクションを使用して、メソッドシグネチャーを検査し、メソッドを呼び出すのに必要なパラメータのタイプと共にアレーを生成し、そのアレーを出力パラメータとして返送する。呼び出しメソッドマイクロビルディングブロックは、パラメータ値と共にアレーを受け取り、オブジェクトメソッドを呼び出し、メソッドにより発生されたパラメータと共にアレーを返送する。
【0139】
[00160]TCP到来接続マネージメントドメインは、到来するTCPネットワークの接続を取り扱う機能を与える。初期化マイクロビルディングブロックは、ExORBが要求を聴取するために使用するポートを指定する整数を受け取る。受け容れマイクロビルディングブロックは、到来するTCP要求を聴取し、それが入力パラメータを受け取らない場合に、ネットワーク接続をカプセル化するTCP通信ポイントオブジェクトを返送する。
【0140】
[00161]TCP出発接続マネージメントドメインは、リモートピアとのTCP接続確立を取り扱う。このドメインは、2つのマイクロビルディングブロックを含む。接続マイクロビルディングブロックは、ホストネーム及びポートを受け取り、ホストへ接続し、更に、ネットワーク接続をカプセル化するTCP通信ポイントを返送する。返送通信ポイントマイクロビルディングブロックは、TCP通信ポイントオブジェクトを受け取り、そしてそれを閉じるか、又はそのキャッシングアルゴリズムに基づいてそれをキャッシュ記憶する。
【0141】
[00162]オブジェクト登録ドメインは、サーバーオブジェクトを管理するという役割を果たす。登録オブジェクトマイクロビルディングブロックは、オブジェクトid及びオブジェクト参照を受け取り、オブジェクトをテーブルに記憶する。このテーブルは、ドメインの状態メモリに記憶される状態属性である。除去オブジェクトマイクロビルディングブロックは、オブジェクトidを受け取り、それに関連したオブジェクトをテーブルから除去する。ゲットオブジェクトマイクロビルディングブロックは、オブジェクトidを受け取り、その関連オブジェクトへの参照を返送する。
【0142】
[00163]プロトコル検出ドメインは、到来する要求の通信ミドルウェアプロトコルを識別するための機能をエクスポートする。この機能は、ExORBの多プロトコル振舞いをサポートするために要求される。検出プロトコルマイクロビルディングブロックは、バイトバッファを受け取り、このバッファをパーズし、そしてミドルウェアプロトコルのネームと共にストリングを返送する。MBBの現在実施は、2つのタイプのプロトコル、即ちXMLPRC及びIIOPを検出する。
【0143】
[00164]URIオブジェクト参照マネージメントドメインは、リモートオブジェクトURI参照をパーズして、リモートオブジェクトに要求を送信するに必要な全ての情報を抽出するための機能を与える。このドメインは、オブジェクトへの参照と称される単一のマイクロビルディングブロックを含み、これは、URI及びプロトコルタイプを受け取り、そしてホストネーム、ポート番号及びオブジェクトidを返送する。
【0144】
[00165]テーブル1は、各ExORBドメイン(Javaバージョン)のサイズをリストしたものである。全サイズは、デバッグ情報なしで、70KBである。
【表1】
【0145】
[00166]ExORBは、4つのアクション、即ち要求送信、要求受信、初期化、及びオブジェクト登録、をエクスポートする。第1のものは、クライアント側の機能として意図され、一方、残りの3つ(要求受信、初期化、及びオブジェクト登録)は、サーバー側の機能として意図される。オブジェクト初期化及びオブジェクト登録は、MBB初期化を呼び出すと共に、オブジェクトMBBを登録する単一ノードアクションである。
【0146】
[00167]図26は、要求送信アクションのためのアクショングラフを示す。簡単化のために、エラー状態は除去されている。クライアントオブジェクトは、それがアクションを呼び出すと、アクションのネーム、リモートオブジェクトの参照、呼び出しメソッド、要求されたパラメータ、及び使用すべきプロトコル(即ち、XMLRPC又はIIOP)を含むアクション状態オブジェクト(アクションの実行中に発生されるパラメータを記憶するもの)を与える。このアクションは、オブジェクトMBBへの参照の呼び出しを開始し、これは、リモートオブジェクトの参照をパーズすると共に、ホストネーム、オブジェクトid及びポートを抽出する。これらのパラメータは、アクション状態オブジェクトに記憶される。
【0147】
[00168]次いで、このアクションは、接続を呼び出し、これは、アクション状態オブジェクトからホストネーム及びポートを得、リモートホストとの接続を確立し(又は既存の接続を再使用し)、そしてTCPソケット(TCP通信ポイント)をカプセル化するオブジェクトをアクション状態オブジェクトに記憶する。次の状態への遷移は、条件付きであり、アクション状態オブジェクトに記憶された「プロトコル」変数の値に依存する。変数の値が「iiop」である場合には、このアクションは、CDRマーシャルパラメータを呼び出して、パラメータをマーシャルし、次いで、IIOPエンコード要求MBBを呼び出して、要求メッセージを生成する。変数の値が「xmlrpc」である場合には、このアクションは、XMLRPCマーシャルパラメータを呼び出し、次いで、XMLRPCエンコード要求を呼び出す。IIOPエンコード要求及びXMLRPCエンコード要求MBBは、両方とも、適切なプロトコルに基づいてフォーマットされた要求と共にバイトバッファを発生する。アクショングラフにおける次の状態は、データ送信であり、これは、アクション状態オブジェクトからバッファを検索して、それを、アクション状態オブジェクトに記憶されたTCP通信ポイントを使用してリモートオブジェクトへ送信する。データ送信を呼び出した後に、このアクションは、「一方向」と称されるタプルをアクション状態オブジェクトから検索する。値が「真」である場合に、このアクションは、通信ポイント返送を呼び出し、これは、TCP通信ポイントオブジェクトをアクション状態オブジェクトから処分し、アクション状態オブジェクトをアクション呼び出し者へ返送して終了となる。
【0148】
[00169]「一方向」の値が「偽」である場合には、このアクションは、応答のデコードへ続く。先ず、「プロトコル」タプルの値に基づいて、このアクションは、IIOPヘッダ又はXMLRPCヘッダをデコードする。両MBBは、メッセージヘッダをパーズし、要求に関する情報をアクション状態オブジェクトに記憶する。両MBBに対する1つの必須のフィールドは、応答の残部の長さである。このアクションは、データ受信を呼び出し、これは、ネットワークから読み出さねばならないデータの量を決定するために長さタプルを要求する。次いで、アクションは、応答をデコードし、パラメータをデマーシャルするように進む。この場合も、アクションインタープリターは、「プロトコル」の値を使用して、グラフにおいてどんな経路をたどるか判断する。その後、このアクションは、通信ポイント返送MBB(TCP通信ポイントを処分する)を呼び出し、アクション状態オブジェクトをアクション呼び出し者へ返送して終了となる。アクション状態オブジェクトは、結果パラメータを含む。
【0149】
[00170]図27は、要求受信のためのアクショングラフである。このアクションは、受け容れを呼び出すことでスタートし、これは、到来するネットワーク要求を検出し、ネットワーク接続をカプセル化するTCP通信ポイントを発生するまで阻止する。次いで、このアクションは、データ垣間見(peekdata)を呼び出し、これは、到来データバッファを垣間見て、初期バイトをパーズし、プロトコルのタイプを検出する。プロトコルのタイプがIIOPである場合には、データ垣間見MBBは、ネーム「プロトコル」で登録された値「iiop」と共にタプルを記憶する。プロトコルタイプがXMLRPCである場合には、MBBは、同じネームのもとで値「xmlrpc」を記憶する。次いで、このアクションは、「プロトコル」値を使用して、IIOPデコードヘッダへジャンプすべきかXMLRPCデコードヘッダへジャンプすべきかを決定する。これら2つのMBBは、ヘッダをパーズし、次いで、それらがアクション状態オブジェクトに記憶する情報を抽出する。両MBBは、残りのデータの長さを指定する「長さ」というネームの必須タプルを記憶しなければならない。この値は、データ受信MBBにより使用され、残りの要求データをネットワークバッファから得る。
【0150】
[00171]このアクションは、アクション状態オブジェクトに記憶された「プロトコル」タプルの値に基づいて、IIOPデコード要求又はXMLRPCデコード要求を呼び出す。両MBBは、ターゲットオブジェクトのid及びメソッドのネームを含む多数のフィールドを発生する。次いで、このアクションは、ゲットオブジェクトを呼び出し、これは、オブジェクトidを使用して、ターゲットオブジェクトを探索すると共に、その参照をアクション状態オブジェクトに記憶する。メソッド準備呼び出しは、ターゲットメソッドのネームを使用して、Javaレフレクションを使用するメソッドを呼び出すのに必要なパラメータを検査する。このMBBは、パラメータタイプのアレーを発生する。次いで、「プロトコル」の値に基づいて、このアクションは、CDRデマーシャルパラメータ又はXMLRPCデマーシャルパラメータを呼び出し、これは、以前に発生されたタイプのアレーを使用して、到来する要求から値をデマーシャルする。これら2つのMBBは、パラメータ値のアレーを発生する。メソッド呼び出しMBBは、この値アレーを使用して、アクション状態オブジェクトに記憶されたターゲットオブジェクトのメソッドを呼び出す。メソッド呼び出しMBBは、出力パラメータの値を伴うアレーを発生する。次いで、このアクションは、「プロトコル値」を使用して、出力パラメータをマーシャルすると共に、応答メッセージをIIOP又はXMLRPCのいずれかで発生する。IIOPエンコード応答及びXMLRPCエンコード応答MBBは、応答と共にバイトバッファを発生する。データ送信マイクロビルディングブロックは、アクション状態オブジェクトに記憶されたTCP通信オブジェクト(受け容れマイクロビルディングブロックで発生された)を使用してクライアントホストへ応答を送信する。その後、データを送信した後に、このアクションは、通信ポイント返送を呼び出し、これは、TCP通信ポイントを処分するか、又はキャッシングアルゴリズムに基づいてキャッシュに記憶する。
【0151】
[00172]上述したように、コンフィギュレーション可能なソフトウェアの重要な特徴は、ソフトウェア状態を第1クラスオブジェクトとして操作するためのサポートにある。各MBBは、ネーム及び値の対に関して定義されたその状態依存性を明確に指定する。これらのタプルは、MBBドメインにより与えられる記憶エリアに記憶される。ソフトウェアの状態は、全てのMBB状態属性を合体したものである。それ故、ExORBの状態は、28個のマイクロビルディングブロックにより定義された全ての状態属性より成る。
【0152】
[00173]テーブル2は、ExORBに関連した状態属性をリストする。このテーブルは、属性のネーム、その目的、及びそれを記憶するドメインのネームを含む。
【表2】
【0153】
コンピュータシステムの実施例
[00174]図28は、上述したオペレーションの1つ以上を遂行するのに使用できるコンピュータシステム2800を例示するブロック図である。別の実施形態において、このマシンは、ネットワークルータ、ネットワークスイッチ、ネットワークブリッジ、パーソナルデジタルアシスタント(PDA)、セルラー電話、ウェブアプライアンス、或いはマシンにより行われるべきアクションを特定する一連のインストラクションを実行できる何らかのマシンを備えてもよい。
【0154】
[00175]コンピュータシステム2800は、プロセッサ2802と、メインメモリ2804と、静的メモリ2806とを備え、これらは、バス2808を経て互いに通信する。コンピュータシステム2800は、更に、ビデオディスプレイユニット2810(例えば、液晶ディスプレイ(LCD)又は陰極線管(CRT))を備えてもよい。又、コンピュータシステム2800は、アルファニューメリック入力装置2812(例えば、キーボード)と、カーソルコントロール装置2814(例えば、マウス)と、ディスクドライブユニット2816と、信号発生装置2820(例えば、スピーカ)と、ネットワークインターフェイス装置2822も備えている。
【0155】
[00176]ディスクドライブユニット2816は、上述したメソッドの1つ又は全てを実施する1組のインストラクション(即ち、ソフトウェア)2826が記憶されたコンピュータ読み取り可能な媒体2824を備えている。又、ソフトウェア2826は、メインメモリ2804及び/又はプロセッサ2802内に完全に又は少なくとも部分的に存在するように示されている。更に、ソフトウェア2826は、ネットワークインターフェイス装置2822を経て送信又は受信されてもよい。説明上、「コンピュータ読み取り可能な媒体」という語は、コンピュータにより実行するための一連のインストラクションを記憶又はエンコードできる媒体であって、コンピュータが本発明のメソッドのいずれの1つも実行するようにさせる媒体を包含するものとする。従って、「コンピュータ読み取り可能な媒体」という語は、ソリッドステートメモリ、光学的及び磁気的ディスク、並びに搬送波信号を包含するが、これらに限定されない。
【0156】
[00177]ランタイムに小さな実行ユニット(マイクロビルディングブロック)を動的にアッセンブルし且つコンフィギュレーションするためのソフトウェア構造方法及び装置について説明した。本発明の実施形態は、状態、構造及びロジックのような実行エレメントの客観化を使用できる。本発明の実施形態は、言語及びプラットホームに独立したもので、ソフトウェアコンポーネントのランタイムコンフィギュレーション性、更新性及びアップグレード性と、ソフトウェアコンポーネントのシームレス移動性と、構造化ソフトウェアの高い信頼性とを与えるものである。
【0157】
[00178]当業者であれば、以上の説明を読んだ後に、本発明の多数の変更や修正が疑いなく明らかとなろうが、図示して説明した特定の実施形態は、本発明を何らそれに限定するものではないことを理解されたい。それ故、種々の実施形態の細部にわたる言及は、本発明の本質と考えられる特徴のみを記載した特許請求の範囲を限定するものではない。
【図面の簡単な説明】
【0158】
【図1】再コンフィギュレーション可能なソフトウェアの動的な構造化を容易にするためのシステムの一実施形態を示すブロック図である。
【図2A】ソフトウェアを動的に構造化するプロセスの一実施形態を示すフローチャートである。
【図2B】ソフトウェア構造システムの一実施形態を示すブロック図である。
【図3A】マイクロビルディングブロック(MBB)の動作を例示する図である。
【図3B】MBBの構造の一実施形態を示すブロック図である。
【図3C】MBBのXML記述ファイルを例示する図である。
【図4A】解釈アクションを例示する図である。
【図4B】コンパイルアクションを例示する図である。
【図4C】解釈アクション及びコンパイルアクションの定義を与えるXML記述ファイルを例示する図である。
【図5A】ドメインの構造を例示する図である。
【図5B】ドメインのハイアラーキーコンポーズを例示する図である。
【図5C】ソフトウェアアーキテクチャーの定義を与えるXML記述ファイルを例示する図である。
【図5D】ドメインに対するソフトウェア構造の定義を与えるXML記述ファイルを例示する図である。
【図6】解釈アクションを実行するためのプロセスの一実施例を示すフローチャートである。
【図7】解釈アクションの実行を例示する図である。
【図8A】ドメインの一実施形態を示すブロック図である。
【図8B】タプルコンテナを例示する図である。
【図9】ドメインに使用される1組のプロトコルを示す図である。
【図10】ドメインに使用される1組のプロトコルを示す図である。
【図11】ドメインに使用される1組のプロトコルを示す図である。
【図12】ドメインに使用される1組のプロトコルを示す図である。
【図13】ドメインに使用される1組のプロトコルを示す図である。
【図14】ドメインに使用される1組のプロトコルを示す図である。
【図15】ドメインに使用される1組のプロトコルを示す図である。
【図16】ドメインに使用される1組のプロトコルを示す図である。
【図17】ドメインに使用される1組のプロトコルを示す図である。
【図18】ドメインに使用される1組のプロトコルを示す図である。
【図19】ドメインに使用される1組のプロトコルを示す図である。
【図20】ドメインに使用される1組のプロトコルを示す図である。
【図21】ドメインに使用される1組のプロトコルを示す図である。
【図22】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図23A】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図23B】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図24】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図25】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図26】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図27】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図28】コンピュータシステムを例示するブロック図である。
【符号の説明】
【0159】
100・・・システム、102・・・ネットワーク、104・・・クライアント装置、106:ネットワークサーバー、108・・・ソフトウェア構造システム、250・・・ソフトウェア構造システム、252・・・ローダー、254・・・スケジューラー、256・・・ユーザインターフェイスマネージャー、258・・・変更コーディネーター、260・・・データ記憶装置、300・・・マイクロビルディングブロック、302・・・入力パラメータ、304・・・内部状態パラメータ、306・・・出力パラメータ、320・・・MBB、322・・・属性、324・・・メソッド、326・・・デマルチプレクサ、502・・・構造メモリ、504・・・ロジックメモリ、506・・・状態メモリ、520・・・ルートドメイン、522、524、526、528、530・・・ドメイン、802・・・ドメインメモリ、804・・・ドメインローダー、806・・・ドメインスケジューラー
【関連出願】
【0001】
[0001]本出願は、参考としてここにその開示を援用する2003年11月12日に出願の米国プロビジョナル特許出願第60/519756号及び2004年3月26日に出願の米国プロビジョナル特許出願第60/556537号に関連しており、その利益を請求するものである。
【発明の分野】
【0002】
[0002]本発明は、データ通信に係り、より詳細には、本発明は、ソフトウェアをコンポーズすることに係る。
【発明の背景】
【0003】
[0003]移動電話の機能は、最近数年間にわたって飛躍的に進歩している。最初は、単なる音声送信であった。次いで、短いメッセージ及びウェブブラウジングが追加された。その後、自動販売機及びマルチメディアメッセージングとの対話が利用できるようになった。最近では、ビデオ会議、インターネットアクセス、及び周囲の物理的環境との対話が可能になった。移動電話及びワイヤレスイネーブル型ハンドヘルド装置の進歩、並びにワイヤレスネットワークの益々の増加は、コンピュータについてのユーザの因習的な理解を変えつつある。デスクトップコンピューティングの観念は、より動的なモデルへとゆっくり進化している。移動電話は、ワイヤレスネットワークに接続することができ、従来サーバーやワークステーションに指定されていたタスクを遂行するに充分な処理能力を有する。従って、移動電話は、個々のユーザの状況において動作して、毎日のタスクで彼等の助けとなるユーザのデジタル友人となっている。更に、ワイヤレス送信の速度が高くなるにつれて、移動電話が分散型サービス(例えば、ウェブサービス)と対話したり、リッチマルチメディアコンテンツにアクセスしてそれを共有したりするのを許すアプリケーションの開発が可能になった。
【0004】
[0004]ソフトウェアサービスの関連性が高まることで、移動電話装置のためのより精巧なオペレーティングシステムが要求される。これらのオペレーションシステムは、Java(MIDLET2.0、DoJa、パーソナルJava)、C#、C及びC++のような言語に基づくアプリケーション開発のためのサポートを与える。更に、これらのオペレーションシステムは、分散型アプリケーションの開発を助けるミドルウェアサービスのためのサポートも与える。移動電話の精巧さが高まることは、装置コンフィギュレーションの複雑さが増加し、ソフトウェアエラーの確率が高くなり、且つ既存のソフトウェアをランタイムに向上させる必要があることを意味する。例えば、移動電話は、デジタルカメラを装備でき、画像の送信をサポートでき(MMSとして知られている)、且つインターネット接続をサポートでき、これは、ウェブ及びWAPページをブラウズし、ダウンロードを行い、eメールを送信し、又、インターネットで実行中のサービスにアクセスするのを許す。しかしながら、これらのサービスを利用する前に、ユーザは、自分のターミナルをコンフィギュレーションしなければならない。このコンフィギュレーションタスクは、通常、顧客サポートセンターにコールし、そしてホストネーム、IPアドレス、ユーザネーム及びパスワードのようなパラメータの入力を含む多数の命令に従うことを伴う厄介で且つエラーの生じがちなプロセスである。
【0005】
[0005]更に、ソフトウェアプラットホームが大きくなるにつれて、ソフトウェアエラーの確率も大きくなる。最近の調査では、移動電話の10%が、ソフトウェアの問題で返却されている。12億人以上の加入者が世界中にいるとすれば、1億2千万個以上の電話が毎年返却されることを意味する。即ち、1億2千万人のユーザが、それらの電話を更新するためにそれらの装置を顧客サポートセンターに持ち込まねばならない。これは、運搬に非常にコストがかかると共に、移動電話ユーザにとってフラストレーションが溜まる。
【0006】
[0006]更に、ソフトウェアの売主は、既存の移動ソフトウェアのための新規な機能を定期的に提供する。例えば、既存のメールクライアントが、付加的なアタッチメントのためのサポートを与えることもできる、或いはウェブブラウザが、スクリプトを操作するための付加的な機能を与えることもできる。この場合も、移動電話ユーザがソフトウェア更新のために顧客サポートセンターにそれらの電話を持ち込むことを要求するのは、ユーザにとって不便なことである。
【0007】
[0007]これら問題の幾つかに対処する解決策がある。例えば、ある既存の製品は、移動電話のファームウェアをランタイムに更新する機能を備えている。それら製品は、既存のファームウェアのイメージを新規なファームウェアのイメージと比較し、2つのイメージ間のバイナリー差を計算し、そしてその計算された差で既存のイメージを更新することにより、これを行う。しかしながら、この解決策は、更新を行うためにユーザの介在を必要とし、ソフトウェアイメージ全体を交換することしかできず(ある論理的特性又は構造的特性ではなく)、且つシステムを停止したときに更新を行うことしかできない。
【0008】
[0008]ランタイムにプロセスを交換するための例示的技術が、米国特許第4,954,941号に説明されている。この技術は、プロセスをシグナリングメカニズムに登録することを伴う。シグナリングメカニズムが信号を発生すると、その関連プロセスが、それ自体で、更新されたバイナリーイメージに交換することができる。しかしながら、米国特許第4,954,941号に説明された技術は、プロセスの個々の断片の交換を許すものではなく、処理されているデータの破壊を生じることがあり、且つ動的なソフトウェアコンポーズをサポートすることができない。それに加えて、上述した技術は、状態をマネージするためのメカニズム、ソフトウェアアプリケーションの構造及びロジックに欠ける。
【0009】
[0009]米国特許第5,155,847号は、クライアント装置の集合体に存在するソフトウェアを交換するための例示的技術を説明している。このソフトウェアは、異なるクライアント装置に対して更新を記憶し且つパッチを発生する中央ホストを使用して、更新される。クライアントエージェントは、ホストに接続し、最新のパッチを検索し、そしてこれらパッチを関連クライアント装置にインストールする。しかしながら、米国特許第5,155,847号に説明されたこの技術は、更新プロセス中に、影響を受けるアプリケーションを停止することを必要とする。更に、この技術は、リモート状態のコンフィギュレーション、動的なソフトウェアコンポーズ、並びにシステムの構造及びロジックの検査及び変更をサポートすることができない。
【0010】
[0010]米国特許第5,359,730号は、オペレーティングシステム(OS)のコンポーネントをランタイムに交換するための技術を説明している。これらOSコンポーネントは、OSコンポーネントの呼び出しをそれに対応するモジュールへ向け直すハードウェアトラップを使用して交換される。しかしながら、米国特許第5,359,730号に説明された技術は、プラットホームに従属したもので、ランタイムにシステムを検査し且つ動的なソフトウェアコンポーズをサポートする能力に欠ける。
【0011】
[0011]米国特許第5,732,275号は、クライアント装置に常駐するソフトウェアを更新するための技術を説明している。この技術は、アプリケーションを実行する前に最新のアプリケーションバージョンをダウンロードしてインストールさせるようにアプリケーションランチャーを変更することに依存する。米国特許第5,732,275号に説明された技術は、ソフトウェアを更新できるのは、ランチのときだけで、ソフトウェアが実行される間ではないという重大な制約がある。
【発明の概要】
【0012】
[0012]ソフトウェアをコンポーズする方法及び装置について説明する。1つの態様によれば、この方法は、要求された機能に関連した多数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、ランタイムにおけるアプリケーションコンポーネントの呼び出しをソフトウェアロジックデータに基づいて整合するステップと、を備えている。
【0013】
[0013]本発明の他の特徴は、添付図面及び以下の詳細な説明から明らかとなろう。
【0014】
[0014]本発明は、以下の詳細な説明及び本発明の種々の実施形態の添付図面から充分に理解されるであろうが、これらは、本発明を特定の実施形態に限定するものではなく、本発明を例示し且つそれを理解するためのものに過ぎない。
【本発明の詳細説明】
【0015】
[0036]ソフトウェアをコンポーズする方法及び装置。以下の説明において、多数の詳細について述べる。しかしながら、当業者であれば、本発明は、これら特定の細部を伴わずに実施できることが明らかであろう。他の点について、本発明を不明瞭にしないために、良く知られた構造及び装置は、ブロック図形態で示し、詳細には示さない。
【0016】
[0037]以下の詳細な説明のある部分は、コンピュータメモリ内のデータビットに対するオペレーションをアルゴリズム及び記号表示の形態で示す。これらアルゴリズム記述及び表示は、データ処理技術の当業者により、それらの仕事の実体をこの技術の他の当業者へ最も有効に伝えるために使用される手段である。アルゴリズムとは、ここでは、一般に、希望の結果を導くステップの自己矛盾のないシーケンスであると考えられる。これらステップは、物理的な量の物理的操作を要求する。通常、必ずしもそうでないが、これらの量は、記憶、転送、合成、比較、及びその他、操作することのできる電気的又は磁気的信号の形態をとる。時には、主として、共通の使用という理由で、これらの信号を、ビット、値、エレメント、記号、キャラクタ、項、数字等として参照するのが便利であると分かっている。
【0017】
[0038]しかしながら、これら及び同様の用語は、全て、適当な物理的量に関連されるべきで、且つこれらの量に適用される便利なラベルに過ぎないことを銘記されたい。特に指示のない限り、以下の説明から明らかなように、この説明全体にわたり、「処理」又は「コンピューティング」又は「計算」又は「決定」又は「表示」等の用語を使用する検討は、コンピュータシステムのアクション及び処理、或いは同様の電子的コンピューティング装置であって、コンピュータシステムのレジスタ及びメモリ内の物理的(電子的)量として表わされたデータを、コンピュータシステムのメモリ又はレジスタ、或いは他のこのような情報記憶、送信又は表示装置内の物理的量として同様に表わされる他のデータへと操作及び変換するものを指すことが明らかであろう。
【0018】
[0039]又、本発明は、ここに述べるオペレーションを実行するための装置にも係る。この装置は、要求される目的に対して特別に構成されてもよいし、或いはコンピュータに記憶されるコンピュータプログラムにより選択的にアクチベートされ又はコンフィギュレーションされる汎用コンピュータを備えてもよい。このようなコンピュータプログラムは、コンピュータ読み取り可能な記憶媒体、例えば、これに限定されないが、フロッピーディスク、光学ディスク、CD−ROM、及び磁気−光学ディスクを含む任意の形式のディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気又は光学カード、或いは電子的インストラクションを記憶するのに適していて、コンピュータシステムバスに各々結合される任意の形式の媒体に記憶されてもよい。
【0019】
[0040]ここに述べるアルゴリズム及びディスプレイは、特定のコンピュータ又は他の装置に固有に関連したものではない。種々の汎用システムが、ここに述べる教示に基づくプログラムと共に使用されてもよいし、又は必要な方法ステップを実行するために更に特殊な装置を構成するのが便利であると分かった。種々のこれらシステムに必要な構造は、以下の説明から明らかであろう。更に、本発明は、特定のプログラミング言語を参照して説明しない。ここに述べる本発明の教示を実施するのに種々のプログラミング言語を使用できることが明らかであろう。
【0020】
[0041]マシン読み取り可能な媒体は、マシン(例えば、コンピュータ)で読み取り可能な形態で情報を記憶し又は送信するためのメカニズムを含む。例えば、マシン読み取り可能な媒体は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリ装置、電気的、光学的、音響的又は他の形態の伝播信号(例えば、搬送波、赤外線信号、デジタル信号等)、等々を含む。
【0021】
概略
[0042]本発明の実施形態は、ランタイムに、ソフトウェアをアッセンブルし、再コンフィギュレーションし、移動させ、そして適応させるのを許すメカニズムを提供する。図1は、再コンフィギュレーション可能なソフトウェアの動的構造を容易にするためのシステム100の一実施形態のブロック図である。
【0022】
[0043]図1を参照すれば、システム100は、ネットワークサーバー106と、ネットワーク102と、該ネットワーク102を経てネットワークサーバー106に結合されたクライアント装置104とを備えている。これらクライアント装置104は、対話式の通信装置である。一実施形態において、ネットワーク102は、ワイヤレスネットワークであり、そしてクライアント装置104は、ワイヤレス電話、手のひらサイズのコンピューティング装置、PDA、又はインターネット可能な機器リモートコントローラのような移動装置である。このような通信装置は、ワイヤレスネットワーク102を経てネットワークサーバー106とワイヤレス通信すると共に、互いに通信することができる。別の実施形態では、ネットワーク102が非ワイヤレスネットワーク(例えば、インターネット)であり、そしてクライアント装置104が、PCシステム、PDA、消費者向け電子装置等の非ワイヤレス装置である。この技術で良く知られた種々様々な通信技術を使用して、クライアント装置104とネットワークサーバー106との間で通信を行うことができる。
【0023】
[0044]ソフトウェア構造システム108は、いかなるクライアント装置104に存在してもよい。更に、ソフトウェア構造システムは、ネットワークサーバー106に存在してもよい。ソフトウェア構造システム108は、クライアント装置104のユーザ又はネットワークサーバー106、或いは他のシステム又は装置により要求される機能に対してソフトウェア(例えば、アプリケーション又はサービス)をコンポーズする役割を果たす。ソフトウェア構造システム108は、必要な機能を実施するアプリケーションコンポーネントの集合体を識別するソフトウェア構造データを得、アプリケーションコンポーネントの中で対話ルールを指示するソフトウェアロジックデータを得、ソフトウェア構造データ及びソフトウェアロジックデータを記憶エリアに記憶し、次いで、ソフトウェアロジックデータを使用して、ソフトウェア構造データにより指定されたアプリケーションコンポーネントの呼び出しを整合することにより、ソフトウェアをコンポーズする。
【0024】
[0045]一実施形態において、アプリケーションコンポーネント(ここでは、マイクロビルディングブロック又はMBBとも称される)は、システムにおいて最も小さなアドレス可能な機能ユニットである。各MMBは、入力パラメータの集合体を受け取り、その状態に影響し得るアクションを実行し、そして出力パラメータの集合体を発生する。MBBは、他のMBBへの参照を記憶しない。従って、MBBが新たなMBBと交換される場合に、他のMBBは、交換について通知される必要がない。
【0025】
[0046]ソフトウェア構造の全てのコンポーネントに関する情報と、これらコンポーネント間の対話ルールに関する情報とを、指定の記憶エリアに維持することにより、ソフトウェア構造システム108は、コンポーズされたソフトウェアの構造及びロジックを明確に客観化(externalize)する。更に、一実施形態では、ソフトウェア構造システム108は、個々のコンポーネントの内部状態属性、内部ソフトウェア実行状態(現在実行中のコンポーネントの状態)、及びソフトウェアを実行するのに必要なコンフィギュレーションパラメータ(例えば、ユーザの好み及び実行ディレクトリー)を記憶エリアに維持することにより、コンポーズされたソフトウェアの状態を明確に客観化する。
【0026】
[0047]ソフトウェア状態の明確な客観化は、ソフトウェアのコンフィギュレーション性をサポートする(即ち、ソフトウェア内部状態を変更する能力を与える)。例えば、顧客サポートの代表者がユーザの移動電話に接続して、ユーザの介在を必要とせずに、移動電話をリモート位置でコンフィギュレーションするようにソフトウェアパラメータを変更することができる。コンフィギュレーション性の他の例は、リモートオブジェクト、バッファサイズ、及びネットワークパラメータに対する参照を変更することを含んでもよい。ソフトウェア状態の明確な客観化は、ランタイムにおいてソフトウェア状態の検査を許す。次いで、この情報を使用して、ユーザがアプリケーションにアクセスする間にソフトウェアをコンフィギュレーションすることができる。
【0027】
[0048]一実施形態において、ソフトウェア構造システム108は、指定の個人がソフトウェア状態をブラウズして希望の変更を指定するのを許すユーザインターフェイスを提供する。
【0028】
[0049]更に、ソフトウェア状態、ロジック及び構造の客観化は、ソフトウェアの更新性もサポートする(即ち、特定のコンポーネントを交換するか、又はソフトウェアの実行ロジックを変更することにより、ソフトウェアの振舞いを修正し又は改善するのを許す)。特に、状態の客観化は、間違った振舞いを修正するためにシステムの幾つかのパラメータの値(例えば、バッファのサイズ)を変更するのを許す。構造の客観化は、ランタイムにソフトウェアコンポーネントを交換するのを許し、又、ロジックの客観化は、ソフトウェアのコンポーネント間で対話ルールを変更するための機能を与える。従って、ソフトウェアは、システムを再始動する必要なく更新することができる。これは、いかなる形式のメモリ(例えば、電気的メモリ、磁気メモリ、光学的メモリ等)を使用するシステムにも適用される。
【0029】
[0050]一実施形態において、ソフトウェア構造システム108により与えられるユーザインターフェイスは、ユーザが、アプリケーションコンポーネントのリスト、アプリケーションコンポーネント間の対話ルール、及びソフトウェア状態を見て、このデータの任意の断片へ希望の変化を指定するのを許す。
【0030】
[0051]更に、ソフトウェアのロジック、構造及び状態の明確な客観化は、自動的なソフトウェアアップグレードをサポートする。即ち、明確に客観化されたロジックにアクセスし、そして変化を導入する(例えば、ユーザインターフェイスを経て)ことにより、アプリケーションロジックが変更されてもよい。次いで、ランタイムのインフラストラクチャーは、新規なロジックルールを更新し、それに応じて、ソフトウェアの振舞いを変更してもよい。更に、明確に客観化されたソフトウェア構造を更新し、ソフトウェアのロジックを変更して、新たなコンポーネントに対する新たな対話ルールを追加し、又は既存の対話ルールを編集して、削除されたコンポーネントをもはや使用しないようにすることにより、ソフトウェアコンポーネントが変更又は除去されてもよい。
【0031】
ソフトウェアの動的構造
[0052]図2Aは、ソフトウェアを動的に構造化するプロセス200の一実施形態を示すフローチャートである。このプロセスは、ハードウェア(例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等)、ソフトウェア(汎用コンピュータシステム又は専用マシンにおいて実行されるような)、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス200は、図1のソフトウェア構造システム108により実行される。
【0032】
[0053]図2Aを参照すれば、処理ロジックは、要求される機能に関連した1組のアプリケーションコンポーネントを識別するソフトウェア構造の定義を受け取ることで開始される(処理ブロック202)。一実施形態では、ソフトウェア構造の定義は、XMLで与えられる。或いは又、ソフトウェア構造の定義は、種々の他のコンピュータ言語(例えば、Java、HTML、C++等)で与えられてもよい。一実施形態において、アプリケーションコンポーネントは、ユーザにより選択される。或いは又、アプリケーションコンポーネントは、処理ロジック又は他の何らかのシステムにより希望の機能に基づいて選択される。一実施形態において、アプリケーションコンポーネント(又はMBB)は、システムにおける最小のアドレス可能な機能ユニットである。MBBの例示的構造を、図3A及び3Bに関連して以下に詳細に説明する。
【0033】
[0054]処理ブロック204において、処理ロジックは、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取る。一実施形態において、ソフトウェアロジックの定義は、XMLで与えられる。或いは又、ソフトウェア構造の定義は、種々の他のコンピュータ言語(例えば、Java、HTML、C++等)で与えられてもよい。一実施形態において、ソフトウェアロジックは、MBBの実行順序を指定するアクションにより定義される。一実施形態において、MBB実行順序は、解釈アクション(interpretedaction)により指定される。或いは又、MBB実行順序は、コンパイルアクション(compiled action)により指定される。解釈アクションとは、ノードが実行状態を表わすMBBであり、且つエッジが遷移順序を定義するような決定論的ディレクテッドグラフ(directedgraph)(各ノードからの唯一の考えられる遷移)である。コンパイルアクションとは、MBBの呼び出し順序を指定するコードフラグメントである。アクションについては、図4A−4Cを参照して以下に詳細に説明する。
【0034】
[0055]次いで、処理ロジックは、各々のリストされたMBBを識別する情報をソフトウェア構造の定義から抽出し(処理ブロック206)、そして一実施形態では、この情報を使用して、各ローカルMBBをインスタンス生成する(処理ブロック208)。ローカルMBBは、ソフトウェア構造システム108と同じ装置に存在するMBBである。
【0035】
[0056]処理ブロック210では、処理ロジックがMBBデータを記憶エリアに記憶する。一実施形態において、MBBデータは、各MBBに対するMBB識別子(例えば、MBBネーム)及びMBB参照(ローカル又はリモート)を含む。一実施形態において、「ドメイン」の観念を使用して、記憶エリアにおいて関連MBBの集合体を参照し、そしてMBBデータにおいて識別される各MBBは、ドメインにおいて登録される(即ち、独特のネームが指定される)。この実施形態では、ローカルオブジェクトは、現在ドメインに存在するオブジェクトである。ドメインは、図5A−5Dを参照して以下に詳細に説明する。
【0036】
[0057]次いで、処理ロジックは、各々のリストされたアクションを識別する情報をソフトウェアロジックの定義から抽出し(処理ブロック212)、そして一実施形態では、この情報を使用して、各ローカルアクションに対するアクションオブジェクトの集合体をインスタンス生成する(処理ブロック214)。一実施形態では、アクションオブジェクトは、ノードがMBBを表わしそしてエッジが遷移順序を定義するディレクテッドグラフを記憶する。一実施形態では、各アクションは、ランタイムにおいてアクション状態オブジェクトに関連付けされる。アクションは、以下に詳細に述べるように、このオブジェクトを使用して入力及び出力パラメータを記憶する。
【0037】
[0058]処理ブロック216において、処理ロジックは、アクションデータを記憶エリアに記憶する。一実施形態では、記憶データは、各MBBに対するアクションオブジェクト識別子(例えば、ネーム)及びアクションオブジェクト参照(ローカル又はリモート)を含む。一実施形態では、アクションデータにおいて識別される各アクションは、ドメインに登録される。
【0038】
[0059]一実施形態において、処理ロジックは、各MBBの内部属性を識別する情報も抽出し(処理ブロック218)、そしてこの情報を記憶エリアに記憶する(処理ブロック220)。一実施形態では、MBB属性情報は、各MBBに対して処理ロジックにより受け取られる関連MBBの定義から抽出される。或いは又、この情報は、処理ブロック202において受け取られたソフトウェア構造の定義から抽出される。一実施形態において、MBB属性情報は、全てのMBBに対して各MBB属性の識別子及び値を含む。加えて、MBB属性情報は、各MBBの入力及び出力パラメータを識別する。一実施形態では、MBB属性情報において識別される各属性は、ドメインに登録される。
【0039】
[0060]処理ブロック222において、処理ロジックは、図6を参照して以下に詳細に述べるように、ソフトウェアロジックに基づいて、リストされたMBBの呼び出しを整合する。
【0040】
[0061]図2Bは、ソフトウェア構造システム250の一実施形態を示すブロック図である。一実施形態において、このソフトウェア構造システムは、ローダー252と、スケジューラー254と、データ記憶装置260とを備えている。
【0041】
[0062]ローダー252は、要求された機能を実施するMBBの集合体を識別するデータ(MBBデータ)と、これらMBBの中で対話ルールを識別するデータ(ロジックデータ)と、各MBBの状態属性を識別するデータ(状態データ)とを得るという役割を果たす。一実施形態において、ローダー252は、ソフトウェア構造の定義、ソフトウェアロジックの定義、及び各当該MBBの定義をパーズすることによりこのデータセットを得る。これら定義は、同じ装置(例えば、同じ移動装置)で実行される異なるアプリケーションから、或いはサーバー又は他の何らかの装置(例えば、他の何らかの移動装置)から、ソフトウェア構造システム250へダウンロードされてもよい。別の実施形態では、ソフトウェア構造の定義は、各MBBに対する状態情報を含み、MBBの定義は使用されない。
【0042】
[0063]一実施形態では、ローダー252は、得られたデータセットに基づいてローカルMBB及びアクションオブジェクトをインスタンス生成し、そしてMBBデータ、ロジックデータ及び状態データをデータ記憶装置260に記憶するという役割も果たす。一実施形態において、データ記憶装置260は、図5Aを参照して以下に詳細に述べるように、構造メモリ、ロジックメモリ及び状態メモリを有するドメインを表わす。一実施形態において、データは、ネーム及び値タプルの形態でデータ記憶装置260に記憶される。特に、MBBデータは、MBBネーム/MBB参照タプルを含み、ロジックデータは、アクションネーム/アクション参照タプルを含み、更に、状態データは、属性ネーム/属性値タプルを含む。
【0043】
[0064]スケジューラー254は、ロジックデータに基づいてMBBの呼び出しを整合するという役割を果たす。一実施形態において、スケジューラー254は、コンポーズされたソフトウェアの実行状態に関する情報を維持し且つエクスポートするという役割も果たす。この情報は、例えば、現在実行されるアクションと、現在実行されるアクションのMBBと、アクションに関連したパラメータ(例えば、アクションの入力パラメータ、及びアクションのMBBにより発生されるパラメータ)とを指定する。
【0044】
[0065]一実施形態において、スケジューラー254は、MBBとして実施される。従って、スケジューラー254の状態をアクセスすることができると共に、ランタイムに、他のMBBとして変更することができる。スケジューラー254を交換するための能力は、デベロッパーが異なる実行セマンティックスを与えるのを許す。例えば、それらは、透過的なローカル又はリモートMBB呼び出しをサポートするスケジューラーを選択し、それ故、ランタイムソフトウェアパーティショニングを簡単化することができる。更に、それらは、各MBB呼び出しの後にパラメータ及び状態のチェックポイントとなるスケジューラーを選択して、欠陥許容セマンティックスを与えることもできる。更に、それらは、アクション実行境界を定義し、アクション実行回数に関する保証を与えるリアルタイムスケジューラを選択することができる。特定のスケジューラーを選択する能力と、動的ソフトウェア交換能力とを結合したことで、実行条件及び外部要求に基づいてその実行モデルを変更できる適応ソフトウェアの構造が簡単化される。
【0045】
[0066]一実施形態において、ソフトウェア構造システム250は、ユーザインターフェイスマネージャー256及び変更コーディネーター258も備えている。ユーザインターフェイスマネージャー256は、関連ユーザインターフェイスを与えると共に、該ユーザインターフェイスを経てユーザ入力を受け取るという役割を果たす。ユーザインターフェイスは、ユーザに使用可能なアプリケーションのリスト、及び各アプリケーションに対するコンポーネントのリストを指定することができる。ユーザは、このユーザインターフェイスを使用して、アプリケーションコンポーネントを選択し、そしてそれらを異なる装置へ移動するように要求してもよい。又、ユーザインターフェイスは、アプリケーションパーティショニング機構のリストを指定し、ユーザが1つを選択してアプリケーションを素早くカスタマイズするのを許してもよい。又、ユーザインターフェイスは、ユーザがソフトウェア状態をブラウズして、ソフトウェアを再コンフィギュレーションするための望ましい変化を指定するのを許してもよい。更に、ユーザインターフェイスは、ユーザが、アプリケーションコンポーネントのリスト、アプリケーションコンポーネント間の対話ルール、及びソフトウェア状態を見て、ソフトウェアを更新するためのこのデータの断片への望ましい変化を指定するのを許してもよい。更に、ユーザインターフェイスは、ユーザが、ソフトウェアをアップグレードするためのソフトウェアロジック又はアプリケーションコンポーネントへの変化を要求するのを許してもよい。
【0046】
[0067]変更コーディネーター258は、ソフトウェアの再コンフィギュレーション、ソフトウェアの更新、又はソフトウェアのアップグレードに対する要求を処理し、そしてこのような要求に応答して、データ記憶装置260の関連情報を変更するという役割を果たす。一実施形態において、変更コーディネーター258は、スケジューラー254と協働して、変化を実施する。例えば、変更コーディネーター258は、変更が要求されたコンポーネントに対して安全コンポーネントスワップ状態を決定し、次いで、データ記憶装置260においてコンポーネントを変更するように、スケジューラー254に要求してもよい。
【0047】
[0068]従って、ソフトウェア構造システム250は、ランタイムにソフトウェアをアッセンブルし、そのロジック、構造及び状態のオンザフライ変更のサポートを与える。特に、明確な実行状態客観化は、デベロッパーからのサポートなしに、安全コンポーネントスワップ状態を計算するようにレバレッジできるようにする詳細情報をソフトウェア構造システム250に与える。ソフトウェア構造システム250は、コンポーネントの呼び出しを制御し、それ故、いつ安全に変化を導入できるか分かる。更に、明確なソフトウェア状態客観化は、状態移行の要求を排除する。新たなコンポーネントが挿入されると、それが以前のコンポーネントの状態に自動的に接続される。更に、コンポーネントは、他のコンポーネントへの参照を記憶しないので、コンポーネントの参照を更新する必要はない。同様に、アプリケーションコンポーネントは、ネームでアドレスされ、参照でアドレスされるのではないので、コンポーネントは、ソフトウェアへの変化により影響されない。
【0048】
[0069]アプリケーションコンポーネント又はMBBは、図3A−3Cを参照して以下に詳細に説明する。
【0049】
[0070]図3Aは、入力パラメータ302を受け取り、内部状態パラメータ304に影響し得るアクションを実行し、そして出力パラメータ306を発生するMBB300のオペレーションを例示する。
【0050】
[0071]図3Bは、MBB320の構造の一実施形態のブロック図である。図3Bを参照すれば、MBB320は、1組の1つ以上のメソッド324、1組のゼロ以上の属性322、及びデマルチプレクサ326より成るエンティティである。メソッド324は、タスクを実施するアルゴリズムである。メソッド324は、1組のゼロ以上の入力値を要求し、1組のゼロ以上の出力値を発生する。一実施形態において、デマルチプレクサ326は、MBBのエントリーポイントで、入力パラメータ328を受け取り、それに対応するMBBメソッド324を抽出する。一実施形態において、各属性322は、ネーム及び値タプルである。値は、アルゴリズムを実施するためにメソッドにより要求される情報を記憶する変数である。属性322は、外部記憶エリアに記憶され、ネームによりアクセスすることができる。
【0051】
[0072]一実施形態において、各MBBは、アプリケーションコンポーネント定義について説明する。この定義は、当該MBBに対して、入力パラメータのリストと、出力パラメータのリストと、状態属性のリストと、MBBを実施するエンティティを指定するプラットホーム従属フィールド(例えば、Javaクラスファイル、NETオブジェクト、DLL等)とを指定する。図3Cは、MBB「RegisterObject」に対するXML記述ファイルを例示するもので、クラスタグは、各プラットホームに対する実施を表わし、状態タグは、各状態属性に対するネーム及びタイプタプルを指定し、入力タグは、ネーム及びタイプタプルに関して入力パラメータを記述し、そして出力タグは、MBBがネーム及びタイプタプルに関して発生するパラメータを表わす。
【0052】
[0073]図4A−4Cを参照して、アクションについて以下に詳細に説明する。
【0053】
[0074]上述したように、アクションは、MBB実行順序を指定し、それ故、ソフトウェアのロジックを定義する。アクションは、解釈アクション又はコンパイルアクションでよい。解釈アクションは、ノードが実行状態を示すMBBを表わし且つエッジが遷移順序を定義するような決定論的ディレクテッドグラフである。各エッジは、次の遷移を決定するようにランタイムに評価される関連する条件付きステートメントを有する。条件付きステートメントは、MBBにより発生されたパラメータ(出力パラメータ)を参照することができる。多数の出力エッジを伴うノードでは、1つのエッジのみがランタイムにおいて真を評価できる(決定論的グラフ)。デフォールトにより、この条件付きステートメントの値は、真である。アクショングラフは、通常、1つの開始ノードと、中間ノードと、1つの終了ノードとを有する。開始ノード及び終了ノード(終了ノードは、アクショングラフが終わることを示す)は、各グラフ横断の一部分である。中間ノードは、エッジに指定された条件付きステートメントに基づくグラフの横断に依存する。アクショングラフは、エラーの場合に遷移を指定する付加的なノード及びエッジを含む。即ち、エラーが検出されない場合には、システムは、デフォールトアクショングラフを使用する。しかしながら、実行エラーが検出された場合には、システムは、エラーノード及びエッジを使用する。例えば、各ノードは、エラーが検出された場合に終了状態に達してアクションを終了させる付加的なエッジを有してもよい。アクショングラフは、より精巧な振舞い(例えば、「while」、「for」及び「repeat」のようなループステートメントをサポートする)を定義してもよい。解釈アクションを実行することは、グラフを横断することに対応する。
【0054】
[0075]図4Aは、MBB1が開始ノードであるような解釈アクションを例示する。このアクションは、MBB1の呼び出しで開始し、MBB2の呼び出しに続き、次いで、「X」の値に基づいて、MBB3又はMBB4を呼び出し、最終的に、MBB5を呼び出す。変数「X」の値は、アクションを呼び出すクライアントにより与えられるか、或いはMBB1又はMBB2により発生される出力パラメータである。この値は、以下に詳細に述べるアクション実行状態の一部分として記憶される。
【0055】
[0076]解釈アクションは、現在実行状態に関する情報をエクスポートし、そしてランタイムにアクショングラフを変更するためのサポートを与えることにより、実行レベルにおけるレフレクション(reflection)を与える。更に、明確な表示は、システムのロジックに関する推論を簡単化し、静的な分析をサポートし、且つ第三者が状態を追加又は除去しそしてグラフをコンフィギュレーションすることでシステムの振舞いを変更するのを許す。
【0056】
[0077]コンパイルアクションは、MBB呼び出し順序を指定するコードフラグメントである。図4Bは、図4Aに示す解釈アクションに対応するコンパイルアクションを例示するものである。
【0057】
[0078]コンパイルアクションは、指定のライブラリーを使用してMBBを呼び出す。一実施形態において、指定のライブラリーは、MBBのネームと、入力タプルの集合体とを受け取り、そして与えられたパラメータで指定のMBBを呼び出す。このメカニズムは、ソフトウェア構造システムがMBBの呼び出しに対して制御権を得るのを許し、MBBの安全な交換を許す。一実施形態において、ソフトウェア構造システムに登録されたMBBとしてコンパイルアクションコードが与えられる。それ故、アクションを呼び出すことは、MBBを呼び出すことに対応し、従って、ソフトウェア構造システムがランタイムにアクションの定義を交換するのを許す。
【0058】
[0079]図4Cは、解釈(左)及びコンパイル(右)アクション「exampleAction」の定義を与えるXML記述ファイルを例示する。
【0059】
[0080]図4Cを参照すれば、解釈アクションの場合、各状態は、ネーム、即ちその状態において呼び出されるMBBのネームと、例外が生じない場合の次の状態と、例外が生じたときの次の状態とを有する。条件付き遷移(例えば、状態2)については、条件付きステートメントが各状態ネームに指定される。又、エラー状態遷移については、条件付き遷移を使用することもできる。一実施形態において、アクション状態に関連した情報、即ち状態ネーム、その状態で呼び出されるMBBのネーム、例外が生じない場合の次の状態、及び例外が生じたときの次の状態を記憶するために、各アクションに対してActionStateオブジェクトが生成される。
【0060】
[0081]コンパイルアクションの記述は、アクションのネームと、それを実施するMBBとを含む。
【0061】
[0082]解釈及びコンパイルアクションは、両方とも、MBB交換をサポートする。特に、自動的ランタイムMBB交換のための1つの重要な要件は、システムが安全なコンポーネントスワップ状態(即ち、ターゲットコンポーネントが他のコンポーネントにより参照されない実行状態)に達するのを検出し、そしてスワップされたコンポーネントに残りのコンポーネントがアクセスするのを回避することである。解釈及びコンパイルの両方のアクションでは、安全なコンポーネントスワップ状態を自動的に決定することができる。解釈アクションでは、インタープリターがMBBを明確に呼び出す。コンパイルアクションは、指定のライブラリーを使用して、MBBを呼び出すことができる。両方の場合に、システムは、呼び出しの制御権を得、それ故、MBBを安全に交換することができる。
【0062】
[0083]更に、解釈及びコンパイルの両アクションは、ソフトウェアの更新性及びアップグレード性に貢献する。アクションを更新することは、既存のアクションを交換することに対応し、又は解釈アクションの場合には、実行グラフを変更することに対応する。システムをアップグレードすることは、新たなアクションを追加することを意味し、又は解釈アクションの場合には、アクショングラフを変更して、状態を合体又は変更することを意味する。
【0063】
[0084]解釈アクションとコンパイルアクションとの間の1つの差は、ランタイム操作粒度である。コンパイルアクションは、ランタイムには、変更することができず、即ち遷移状態を追加、除去又は変更することができない。コンパイルアクションの振舞いを変化させるには、それに関連したMBBを交換し、即ちアクションコードを交換することが必要である。更に、ランタイムにコンパイルアクションを検査することはできず、それ故、現在実行状態について学習することも、アクションの振舞いについて学習することもできない。解釈アクションでは、グラフが、アクションの振舞いについて学習するに充分な情報を与える。しかしながら、コンパイルアクションは、解釈アクションより迅速に実行する。というのは、それらは、それらの実行を推進するためのインタープリターを必要としないからである。コンポーズされたソフトウェアの必要な機能に基づき、ソフトウェア構造システムは、解釈アクション又はコンパイルアクションのいずれを使用してもよい。
【0064】
[0085]図5A−5Cを参照してドメインについて詳細に説明する。ドメインとは、関連するMBBの集合体を総計するアブストラクションである。ドメインは、ドメインの構造(MBBのリスト)、ドメインのロジック(アクションのリスト)、及びドメインの状態(MBBの状態属性及び実行状態値)を記憶するための記憶エリアを与える。ドメインは、単一ユニットとしてのMBBの集合体の操作(例えば、移動、保留及び再開)を容易にするために、ハイアラーキー式にコンポーズすることができる。
【0065】
[0086]図5Aは、ドメイン500の構造を例示する。
【0066】
[0087]図5Aを参照すれば、ドメイン500は、構造メモリ502と、ロジックメモリ504と、状態メモリ506とを備えている。各メモリは、ネーム及び値タプルを記憶する。構造メモリ502は、ドメインに登録されたMBBに対応するタプルの集合体を維持する。タプルネームは、MBBのネームを指し(各MBBには登録時にネームが指定される)、そして値は、MBBへの参照を記憶する。参照とは、ローカルポインタであるか、又はリモートMBBに対するポインタである。一実施形態において、ソフトウェア構造システムは、ローカル又はリモート呼び出しをデベロッパーに対して透過的にする。
【0067】
[0088]ロジックメモリ504は、ドメインによりエクスポートされるアクションのリストを記憶する。構造メモリと同様に、ロジックメモリ504は、ネームによりアクションを参照し、そして値は、ローカルポインタであるか又はリモート参照である。
【0068】
[0089]状態メモリ506は、ドメインに登録されたMBBに対する状態属性を記憶する。状態メモリ506は、ネームで属性を参照し、そして値は、属性の値である。MBB登録中に、システムは、状態メモリ506に対するポインタをMBBに指定する。同じドメインに属するMBBが同じ状態メモリ506を共有する。
【0069】
[0090]ドメインは、MBBの大きな集合体の編成を簡単化するためにハイアラーキー式にコンポーズすることができる。ドメインメモリは、登録されたサブドメインのドメインメモリに対する参照(ネーム及び値タプル)を記憶すると共に、ルート(root)ドメインメモリに対する参照も記憶する。図5Bは、ドメインのハイアラーキー式コンポーズを例示する。
【0070】
[0091]図5Bを参照すれば、ルートドメイン520は、2つのサブドメイン(ドメイン522及び5242)を有し、そしてドメイン522は、3つのサブドメイン(ドメイン526、528及び530)を有する。
【0071】
[0092]一実施形態において、デフォールト可視性(visibility)ポリシーは、ドメインがサブドメインのメモリにアクセスできることを指令する。例えば、ルートドメイン520は、システムの全てのドメインメモリ(即ち、ドメイン522乃至530)にアクセスすることができ、一方、ドメイン530は、それ自身のドメインメモリにしかアクセスできない。可視性ポリシーを変更する(例えば、サブドメインがそれらの親又は兄弟ドメインのメモリにアクセスするのを許す)ことができる。
【0072】
[0093]一実施形態では、ソフトウェアアーキテクチャーの定義を使用して、ソフトウェア構造システムにより維持されるドメインハイアラーキーを説明する。図5Cは、ソフトウェアアーキテクチャーの定義を与えるXML記述子ファイルを例示する。
【0073】
[0094]図5Cを参照すれば、アーキテクチャー記述子における各ドメインエントリーは、2つの付加的なファイル、即ちドメインに登録されるMBB及びアクションを指定する構造及びロジック記述子を指す。ロジック記述子は、図4Cを参照して上述した。構造記述子は、単一ドメインに対するソフトウェア構造の定義を与える。図5Dは、ドメインに対するソフトウェア構造の定義を与えるXML記述子ファイルを例示する。
【0074】
[0095]図5Dを参照すれば、構造記述子は、ドメインに属するMBBのリストを与える。この記述子は、ネーム及びMBB記述子のリストを含む。MBB記述子は、関連MBBの定義を与えるドキュメントである(例えば、図3Cに示すMBB記述子)。一実施形態において、MBB記述子は、関連ローカルMBBをインスタンス生成するのに使用される。全てのMBBは、ドメイン構造メモリに<name、MBB、reference>タプルとして登録される。MBBネームは、MBBにアクセスするためのキーとして使用される。
【0075】
[0096]アクションの実行について以下に詳細に述べる。解釈アクションの実行は、インタープリターに依存する。コンパイルアクションを実行することは、MBBを呼び出すことに対応し、それ故、インタープリターを必要としない。
【0076】
[0097]解釈アクションは、システムのロジックを客観化すると共に、ソフトウェアの機能的見地を実行するのに必要なMBB呼び出しシーケンスに関する情報を与える。一実施形態において、解釈アクションの実行は、図2Bのスケジューラー254により遂行され、これは、アクションのデータをMBB呼び出しスケジューラーとして使用して、コンポーズされたソフトウェアの実行を推進する。一実施形態では、アクションのデータは、MBBの呼び出し順序を指定するアクション定義(例えば、決定論的限定状態オートマトン(DFSA))である。スケジューラーは、ソフトウェアの実行状態に関する情報を維持し、エクスポートする。この情報は、例えば、現在実行されるアクション、現在実行されるアクションのMBB、及びアクションに関連したパラメータ(例えば、入力パラメータ、及びアクションのMBBにより発生されるパラメータ)を指定する。
【0077】
[0098]一実施形態において、各アクションは、アクション状態オブジェクトに関連付けされる。アクションは、このオブジェクトを使用して、アクション実行に関連した入力及び出力パラメータを記憶する。パラメータは、アクションを呼び出すクライアントにより与えられ、又、それら呼び出しの結果としてMBBにより発生される。MBBは、アクション状態オブジェクトに記憶されたパラメータを消費して、それらのアルゴリズムを実施する。アクション呼び出し中に発生したパラメータをセーブし、そして状態属性へのMBBアクセスを同期させることで、クライアントがアクションを同時に呼び出すのを許す。
【0078】
[0099]図6は、解釈アクションを実行するプロセスの一実施形態を示すフローチャートである。このプロセスは、ハードウェア(例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等)、ソフトウェア(汎用コンピュータシステム又は専用マシンにおいて実行されるような)、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス6200は、図2Bのスケジューラー254により遂行される。
【0079】
[00100]図6を参照すれば、処理ロジックは、アクションを実行する要求を受け取ることで始まる(処理ブロック602)。この要求は、入力パラメータを伴うアクション状態オブジェクトを含む。
【0080】
[00102]処理ブロック604において、処理ロジックは、アクションネームをキーとして使用して、ロジックメモリにおける要求されたアクションのオブジェクトにアクセスする。
【0081】
[00102]処理ブロック606において、処理ロジックは、アクションオブジェクトから第1のMBBのネームを得る。
【0082】
[00103]次いで、処理ロジックは、MBBネームをキーとして使用して構造メモリから第1のMBBへの参照を得(処理ブロック608)、そしてこのMBBを呼び出して、これを入力パラメータとしてアクション状態オブジェクトに通す(処理ブロック610)。
【0083】
[00104]更に、処理ロジックは、アクションオブジェクトにまだMBBがあるかどうか決定する(処理ボックス614)。もしそうであれば、処理ロジックは、アクションオブジェクトから次のMBBのネームを得(処理ブロック616)、そして処理ブロック608へ戻る。もしそうでなければ、処理ロジックは、アクション状態オブジェクトを出力パラメータと共に要求者へ戻す(処理ブロック618)。
【0084】
[00105]図7は、解釈アクションの実行を例示する。アクションのネームは、「exampleAction」であり、これは、2つのMBBより成る。説明を簡単にするために、アクションは、条件付き遷移もループももたないと仮定する。
【0085】
[00106]図7を参照すれば、スケジューラーは、「exampleAction」と称されるアクションを実行するための要求を受け取る。この要求は、2つのパラメータa及びcを含むアクション状態オブジェクトを備えている(ステップ1)。スケジューラーは、アクションネームを使用して、ロジックメモリにアクセスすると共に、アクショングラフの第1ノードに対するポインタを得る。スケジューラーは、アクショングラフのノードからMBBのネームを得、次いで、そのネーム(MBB1)を使用して、構造メモリからMBBを分析する。
【0086】
[00107]MBB1を分析した後、スケジューラーは、MBBを呼び出して、アクション状態オブジェクトに通す。MBB1は、アクション状態オブジェクトから得られるaというネームの入力パラメータを要求する。MBB1は、そのアルゴリズムを実行して、出力パラメータbを発生し、これをアクション状態オブジェクトに記憶する(ステップ2)。
【0087】
[00108]次いで、スケジューラーは、現在アクショングラフのノードから次の状態のネームを得、MBBのネーム(MBB2)を得、そして構造メモリからMBB2を分析する。スケジューラーは、アクション状態オブジェクトをパラメータとしてMBB2を呼び出す。MBB2は、アクション状態オブジェクトから得られる2つのパラメータb及びcを要求する。MBB2は、そのアルゴリズムを実行して、dと称される出力パラメータを発生し、そしてそのパラメータをアクション状態オブジェクトに記憶する(ステップ3)。
【0088】
[00109]最終的に、スケジューラーは、アクション状態オブジェクトを要求者へ返送し、要求者は、アクションの実行中に発生された出力パラメータを検索することができる。
【0089】
[00110]上述したアクション実行プロセスは、安全なソフトウェア再コンフィギュレーションポイントを自動的に検出するのに使用できる。より詳細には、ソフトウェアを再コンフィギュレーションできるのは、MBB呼び出しと呼び出しの間だけである。MBBは、客観化された構造、ロジック及び状態にアクセスしてそれを変更することが許される。それ故、これらパラメータを変更すると、MBBの実行に影響し、一貫性のないソフトウェア状態を招くことがある。ソフトウェア構造システムは、望ましからぬ結果を回避するために、MBBがその実行を完了するまで待機する。この振舞いは、解釈アクション及びコンパイルアクションの両方に適用される。コンパイルアクションは、指定のライブラリーを使用して、MBBを呼び出し、それ故、再コンフィギュレーションを実施するための制御件をシステムに与える。
【0090】
プロトコル
[00111]上述したように、本発明の幾つかの実施形態は、ドメインを使用して、ランタイムにソフトウェアの構造をサポートする。図8Aは、ドメイン800の一実施形態を示すブロック図である。
【0091】
[00112]図8Aを参照すれば、ドメイン800は、3つのサブコンポーネント、即ちドメインメモリ802、ドメインローダー804、及びドメインスケジューラー806を備えている。ドメインメモリ802は、エンティティによりホストされるMBBのネーム及び参照、MBBの属性、並びに1組の1つ以上のアクションを記憶するタプルコンテナである。
【0092】
[00113]ドメインローダー804は、MBBを生成し、MBBを削除し、MBBのリストを設け、アクションをロードし、アクションを削除し、アクションのリストを設け、アクションを変更し、そしてソフトウェア構造記述、MBB記述及びソフトウェアロジック記述をパーズするという役割を果たす。
【0093】
[00114]ドメインスケジューラー806は、アクション定義(例えば、アクションのDFSA)をパーズし、そしてアクション定義により指定された順序でMBBアクションを呼び出すという役割を果たす。
【0094】
[00115]図8Bは、タプルコンテナを例示する。タプルコンテナは、情報がネーム及び値の対として記憶される記憶エリアである。タプルコンテナは、情報タプルを記憶すると共に、ネームをサーチキーとして使用して情報タプルを検索する機能を備えている。
【0095】
[00116]一実施形態において、ソフトウェアの動的コンポーズは、プロトコルのセットを使用して達成される。プロトコルのセットは、ドメイン初期化プロトコル、MBB生成プロトコル、MBB削除プロトコル、MBBリスティングプロトコル、ソフトウェア構造パージングプロトコル、アクションローディングプロトコル、アクション削除プロトコル、アクションリスティングプロトコル、アクション変更プロトコル、ソフトウェアロジックパージングプロトコル、MBB呼び出しプロトコル、リモートMBB呼び出しプロトコル、及びアクション呼び出しプロトコルを含む。
【0096】
[00117]図9は、ドメイン初期化プロトコルを示す。図9を参照すれば、ドメインオブジェクトが生成されるときに、ドメインオブジェクトは、ドメインスケジューラー、ドメインメモリオブジェクト(タプルコンテナ)、及びドメインローダーオブジェクトをインスタンス生成する。次いで、ドメインオブジェクトは、ドメインスケジューラーをリモートオブジェクトとしてエクスポートし、ドメインにおいてアクションをリモートから呼び出すのを許す。
【0097】
[00118]図10は、MBB生成プロトコルを示す。図10を参照すれば、ドメインローダーは、マイクロビルディングブロックを生成して初期化する機能を実施する。一実施形態において、ドメインローダーは、MBBネーム及びMBBクラスネームを受け取るCreateMBBと称されるメソッドを実施する。このメソッドは、指定クラスのオブジェクトをインスタンス生成し、MBBを初期化し、そしてMBBのネーム及びオブジェクトへの参照と共にタプルをドメインメモリに記憶する。更に、CreateMBBメソッドは、タプルの参照カウンタ値を0にセットして、MBBがいずれのアクションでも使用されないことを指示する。
【0098】
[00119]図11は、MBB削除プロトコルを示す。図11を参照すれば、ドメインローダーは、マイクロビルディングブロックを削除する機能を実施する。一実施形態において、ドメインローダーは、MBBのネームを受け取り、MBB参照カウンタをチェックし、そして参照カウンタが0に等しい場合にMBBを削除するDeleteMBBと称するメソッドを実施する。さもなければ、ドメインローダーは、エラーメッセージを返送する。
【0099】
[00120]図12は、MBB削除プロトコルを示す。図12を参照すれば、ドメインローダーは、マイクロビルディングブロックをリストする機能を実施する。一実施形態において、ドメインローダーは、ドメインメモリに記憶されたMBBのリストを返送するListMBBと称されるメソッドを実施する。
【0100】
[00121]図13は、ソフトウェア構造ロードプロトコルを示す。図13を参照すれば、ソフトウェア構造をロードすることは、特定のソフトウェアに必要とされる全てのマイクロビルディングブロックを生成して初期化することを意味する。一実施形態において、ドメインローダーが、ソフトウェア構造記述と、それをロードするための要求とを受け取ったときに、プロトコルがスタートする。ドメインローダーは、記述をパーズし、記述の各エントリーに対して1つのMBBを生成する。MBBを生成するために、ドメインローダーは、MBB生成プロトコルをレバレッジする。
【0101】
[00122]図14は、ソフトウェアアクションロードプロトコルを示す。図14を参照すれば、ドメインローダーは、ソフトウェアアクションをロードするためのプロトコルを実施する。一実施形態において、ドメインローダーは、ソフトウェアロジック記述をパーズし、その記述に含まれた各状態に対して、アクション状態情報オブジェクトを生成し、そしてその状態のネームと、アクション状態オブジェクトへの参照とを含むタプルをドメインメモリに記憶する。更に、ドメインローダーは、状態において参照されるMBBごとに、MBB参照カウンタを増加する。
【0102】
[00123]図15は、アクション削除プロトコルを示す。図15を参照すれば、ドメインローダーは、アクションを削除するための機能を実施する。一実施形態において、ドメインローダーは、アクションのネームを受け取り、ドメインメモリからアクションを検索し、そして含まれる各MBBに対して、参照カウンタを減少し、MBBを削除するDeleteActionと称されるメソッドを実施する。
【0103】
[00124]図16は、アクションリスティングプロトコルを示す。図16を参照すれば、ドメインローダーは、アクションをリストするための機能を実施する。一実施形態において、ドメインローダーは、ドメインメモリに記憶された全てのアクションのリストを返送するListActionsと称されるメソッドを実施する。
【0104】
[00125]図17は、アクション変更プロトコルを示す。図17を参照すれば、ドメインローダーは、アクションを変更する機能を実施する。一実施形態において、ドメインローダーは、アクション状態のネームと、新たな状態を含むオブジェクトとを受け取るModifyActionと称するメソッドを実施する。このメソッドは、ドメインメモリからアクション状態を検索し、既存の状態と新たな状態のMBBのネームを比較し、それらが異なる場合に、MBB参照カウンタを減少する。又、このメソッドは、状態情報を新たなものと交換する。
【0105】
[00126]図18は、ローカルMBB呼び出しプロトコルを示す。図18を参照すれば、このプロトコルは、ローカルMBB、即ちドメインスケジューラーと同じドメインとして含まれたMBBをいかに呼び出すか指定する。一実施形態において、プロトコルは、invokeMBBメソッドでスタートし、これは、2つのパラメータ、即ちMBBのネーム、及びアクション状態オブジェクトを必要とする。ドメインローダーは、MBBのネームを使用して、MBBへの参照を含むタプルをドメインメモリから検索する。次いで、ドメインローダーは、MBBを呼び出し、そしてアクション状態オブジェクトから必要なパラメータを抽出すると共に、ドメインメモリから状態に対応する属性を抽出する。次いで、アクションを実行した後に、MBBは、それが変更した全ての属性でドメインメモリを更新し、出力パラメータをアクション状態オブジェクトに記憶し、そしてそのアクション状態オブジェクトをドメインローダーへ返送する。
【0106】
[00127]図19は、リモートMBB呼び出しプロトコルを示す。図19を参照すれば、このプロトコルは、リモートドメインに存在するMBBを呼び出すためのサポートを与える。この機能は、アクションの実行に影響せずに、MBBの移動を簡単にする。一実施形態において、ドメインスケジューラーは、MBBがローカルであるかリモートであるかを自動的に検出して、適切なプロトコルを使用する。一実施形態において、プロトコルは、MBBにおけるアクションを呼び出すための要求をドメインローダーが受け取ることで始まる。この要求は、2つのパラメータ、即ちMBBのネームと、アクション状態オブジェクトとを含む。ドメインローダーは、ドメインメモリからMBBネームを分析する。その結果が、リモートMBBへの参照である。ドメインローダーは、リモート手順コールを発生するためのアクションを呼び出す。RPC要求を送信及び受信するためのアクションの集合が与えられる。これらのアクション及びそれに関連したMBBがデフォールトによりロードされる。このアクションは、SendRemoteRequestと称され、MBBの参照、ネーム、リモート呼び出しのメソッド、及びアクション状態オブジェクトを必要とする。このアクションは、リモート要求を発生し、更新されたアクション状態オブジェクトを受け取る。
【0107】
[00128]図20は、MBB交換プロトコルを示す。図20を参照すれば、このプロトコルは、実行中のシステムを停止せずに、既存のMBBと新たなMBBとの交換を許す。一実施形態において、このプロトコルは、MBBを交換するためのコマンドでスタートし、安全な再コンフィギュレーション状態を待機し、そしてタプルネームは同じであるが実施クラスが異なる新たなMBBを生成する。
【0108】
[00129]図21は、アクション呼び出しプロトコルを示す。図21を参照すれば、アクション呼び出しプロトコルは、DFSAをパーズしたり影響のあるMBBを呼び出したりすることを含むアクションを実行するのに必要な全てのステップを定義する。一実施形態において、ドメインオブジェクトは、アクション呼び出しプロトコルを実施するメソッド(invokeAction)をエクスポートする。このメソッドは、アクションネーム及びパラメータを、ネーム及び値タプルの集合として受け取る。ドメインオブジェクトは、アクション状態オブジェクトを生成すると共に、パラメータタプルと、actionNameと称されるタプルを、アクションのネームと共に記憶する。次いで、invokeActionメソッドは、ドメインスケジューラーにおいてプロセスメソッドを呼び出し、アクション状態オブジェクトを通す。ドメインスケジューラーは、sctionNameタプルをアクション状態オブジェクトから分析し、その値を使用して、第1のDFSA状態情報オブジェクトを分析する。ドメインスケジューラーは、DFSA状態に関連したMBBのネームと、MBBにおいて呼び出すためのアクションのネームとを検索する。次いで、ドメインスケジューラーは、MBBアクションネームをアクション状態オブジェクトに記憶し、そしてドメインローダーのinvokeMBBプロトコルを呼び出す。MBB呼び出しプロトコルが終了すると、ドメインスケジューラーは、アクション状態情報オブジェクトから次のアクション状態ネームを検索し(エラー状態の場合には、次のエラー状態を検索し)、そのネームを使用して、それに関連したアクション情報状態オブジェクトを分析し、次いで、ブロックAに含まれた全てのステップを繰り返す。このプロトコルは、最終的なアクション状態に達するまでMBBの呼び出しを保持する。この点において、ドメインスケジューラーは、更新されたアクション状態オブジェクトをドメインオブジェクトへ返送し、該ドメインオブジェクトがそれを要求者へ返送する。
【0109】
再コンフィギュレーション可能なソフトウェアへのプログラムの変換
[00130]ある実施形態では、従来のメソッドを使用して生成された既存のプログラムは、上述したように、その後、再コンフィギュレーション、更新、又はアップグレードされてもよいソフトウェアへと変換することができる。一実施形態において、この変換は、1組の1つ以上のタスクとして定義できるプログラムに適用でき、タスクは、オブジェクト(例えば、Javaオブジェクト)の集合より成り、そして呼び出し順序を定義するオブジェクト間の1組の対話ルールと、全てのオブジェクトのパブリック属性の合体であるタスク状態とを有する。
【0110】
[00131]図22−24は、プログラムを再コンフィギュレーション可能なソフトウェアへと変換するプロセス2200の一実施形態を示すフローチャートである。このプロセスは、ハードウェア(例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等)、ソフトウェア(汎用コンピュータシステム又は専用マシンにおいて実行されるような)、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス2200は、図1のソフトウェア構造システム108により実行される。
【0111】
[00132]図22を参照すれば、処理ロジックは、タスクの構造を客観化することで始まる(処理ブロック2202)。一実施形態において、処理ロジックは、(a)各タスク、及びタスクに属する各オブジェクトに対して、オブジェクトのネーム及びオブジェクトへの参照でタプルを生成し、(b)各々の生成されたタプルをドメインメモリに記憶し、(c)プログラムPに属する全てのオブジェクトのネームと共に、値がリストであるsoftwareArchitectureと称されるタプルを生成し、更に、(d)このタプルsoftwareArchitectureをドメインメモリに記憶することにより、タスクの構造を客観化する。
【0112】
[00133]処理ブロック2204において、処理ロジックは、タスクの状態を客観化する。一実施形態において、処理ロジックは、(a)タスクにおける各オブジェクト、及びオブジェクトにおける各パブリック属性に対して、タプルのネームが属性のネームで、且つ値が変数の値への参照であるようなタプルを生成し、更に、(b)各生成されたタプルをドメインメモリに記憶することにより、状態を客観化する。
【0113】
[00134]処理ブロック2206において、処理ロジックは、タスクの各オブジェクトをMBBへ変換する。タスクのオブジェクトをMBBへ変換するプロセスの一実施形態を、図23を参照して以下に詳細に説明する。
【0114】
[00135]処理ブロック2208において、処理ロジックは、タスクのロジックを客観化する。タスクのロジックを客観化するプロセスの一実施形態を、図24を参照して以下に詳細に説明する。
【0115】
[00136]図23Aは、タスクのオブジェクトをMBBへ変換するプロセスの一実施形態を示すフローチャートである。
【0116】
[00137]図23Aを参照すれば、処理ロジックは、オブジェクトに関連した全パブリックメソッドのネームでリストを生成することで始まる(処理ブロック2302)。パブリックメソッドは、オブジェクトの外部から呼び出すことのできる(例えば、クライアントにより)機能である。
【0117】
[00138]処理ブロック2304において、処理ロジックは、全てのパブリックメソッドをプライベートメソッドに変換する。プライベートメソッドは、内部で呼び出すことのできる(例えば、オブジェクトの別のメソッドにより)機能である。
【0118】
[00139]処理ブロック2306において、処理ロジックは、属性をネーム及び値タプルとしてドメインメモリに記憶させ且つそこからアクセスさせるようにオブジェクトコードを変更する。
【0119】
[00140]処理ブロック2307において、処理ロジックは、ネーム及びタプルリストを受け取り、そしてプライベートメソッドのリストからプライベートメソッドの1つを呼び出すメソッドをオブジェクトコードに追加する。
【0120】
[00141]図23Bは、MBBを呼び出すためのプロセスの一実施形態を示すフローチャートである。
【0121】
[00142]図23Bを参照すれば、処理ロジックは、アクション状態オブジェクトからactionName値を抽出して、どのアクションがクライアントにより要求されたか決定する(処理ブロック2307)。アクション状態オブジェクトは、アクションの実行中に要求され及び発生される入力及び出力パラメータの集合を記憶する。一実施形態において、入力及び出力パラメータは、タプルとして記憶される。
【0122】
[00143]処理ブロック2310において、処理ロジックは、要求されたアクションのネームがパブリックメソッドのリストに記憶されたメソッドの1つに対応することを照合する。さもなければ、処理ロジックは、例外を生じさせる。
【0123】
[00144]処理ブロック2312において、処理ロジックは、アクション状態オブジェクトからアクションにより要求される入力パラメータを抽出する。
【0124】
[00145]処理ブロック2314において、処理ロジックは、抽出されたパラメータを使用してactionName値により指定されるメソッドを呼び出す。
【0125】
[00146]次いで、処理ロジックは、呼び出しからの結果をアクション状態オブジェクトに記憶し(処理ブロック2316)、次いで、アクション状態オブジェクトを返送する(処理ブロック2318)。
【0126】
[00147]図24は、タスクのロジックを客観化するためのプロセスの一実施形態を示すフローチャートである。
【0127】
[00148]図24を参照すれば、処理ロジックは、タスクの呼び出しの流れを分析して、ディレクテッドグラフを発生することで始まり、ここでは、ノードのネームが呼出し番号に対応する(処理ブロック2402)。
【0128】
[00149]処理ブロック2404において、処理ロジックは、ネームがグラフノードのネームであり且つ値がノードに関する情報を記憶するオブジェクトであるようなタプルを、グラフノードごとに生成することにより、ディレクテッドグラフからDFSAを発生する。
【0129】
[00150]処理ブロック2406において、処理ロジックは、前記タプルをドメインメモリに記憶する。
【0130】
[00151]処理ブロック2408において、処理ロジックは、ネームがアクションのネームであり且つ値が第1グラフノードを伴うストリングであるような付加的なタプルを記憶する。
【0131】
通信ミドルウェアサービスの実施例
[00152]MBBを使用して構築される多プロトコルオブジェクト要求ブローカー(ORB)通信ミドルウェアサービスについて以下に説明する。このサービスは、ワイヤプロトコルとは独立したクライアント及びサーバー機能を提供する。即ち、サーバーオブジェクトのメソッドは、IIOP、SOAP又はXML−RPCのような異なるプロトコルにわたって呼び出すことができる。同様に、クライアント要求は、基礎となるプロトコルに関わらず、同じインターフェイス及びセマンティックスを使用する。その実施は、IIOP及びXML−RPCに対するサポートを与える。しかしながら、ランタイムに付加的なMBBを開発して配備することにより付加的なプロトコルを追加することができる。ExORBアーキテクチャー(状態、構造及びロジック)が客観化されるので、ランタイムにExORBアーキテクチャーを検査し及び操作することができる。
【0132】
[00153]ExORBは、11個のドメインにグループ編成された28個のマイクロビルディングブロックで構成される。図25は、ExORBの構造を示す。
【0133】
[00154]図25を参照すれば、CDRパラメータマネージメントドメインは、共通データ表示(CDR)フォーマット(CORBAデフォールト表示)に基づいてパラメータをマーシャル及びデマーシャルする機能を与える。CDRマーシャルパラメータマイクロビルディングブロックは、パラメータ及びCDRバッファエンコードオブジェクトを受け取り、そしてパラメータのCDR表示を含むバイトアレーを返送する。CDRデマーシャルパラメータマイクロビルディングブロックは、バイトバッファ、該バッファから抽出すべきパラメータタイプのリストを伴うアレー、及びCDRバッファデコードオブジェクトを受け取り、そしてオブジェクトの値を伴うアレーウィ返送する。
【0134】
[00155]XMLRPCパラメータマネージメントドメインは、CDRパラメータマネージメントドメインと同様であるが、XMLRPCプロトコルに基づいてエンコードされたパラメータをマーシャル及びデマーシャルする機能を与える。
【0135】
[00156]IIOPプロトコル処理ドメインは、IIOPプロトコルに合致するメッセージをエンコード及びデコードするための機能をエクスポートするマイクロビルディングブロックを総計する。IIOPエンコード要求マイクロビルディングブロックは、マーシャル化パラメータのリスト及び要求フィールドの集合(例えば、リモートオペレーションネーム、予想される応答、及び要求id)を受け取り、そしてIIOPに基づいてフォーマットされたバイトバッファを発生する。IIOPデコード要求マイクロビルディングブロックは、IIOPフォーマットの到来要求を伴うバイトバッファと、要求メッセージを記述するフィールド(例えば、長さ)の集合とを受け取り、その要求をパーズし、そして要求のidやターゲットオブジェクトやターゲットメソッドを含む要求に関する情報を伴う属性の集合と、パラメータを伴うバイトバッファとを発生する。IIOPエンコード応答及びIIOPデコード応答は、IIOP応答メッセージを発生すると共に、到来するIIOP応答メッセージをデコードするための機能を与える。最終的に、IIOPデコードヘッダは、ネットワークからオリジナルの到来要求を受け取り(バイトバッファ)、そして12個の初期バイトをパーズし、これがGIOPヘッダを構成する。このヘッダは、残りのメッセージの長さ及びメッセージのタイプに関する情報を含む。
【0136】
[00157]XMLRPCプロトコル処理ドメインは、IIOPプロトコル処理ドメインと同等であり、XMLRPC要求及び応答を取り扱う機能を与える。
【0137】
[00158]ネットワークデータマネージメントドメインは、到来及び出発ネットワークトラフィックを取り扱うという役割を果たす。これは、3つのマイクロビルディングブロック、即ちデータ送信、データ受信及びデータ垣間見(Peek)で構成される。データ送信マイクロビルディングブロックは、バッファ、その長さ及び通信ポイントオブジェクト(例えば、TCPソケット)を受け取り、そしてその通信ポイントを使用してネットワークを経てデータを送信する。データ受信マイクロビルディングブロックは、バッファ、受信すべきデータの長さ、及び通信ポイントオブジェクトを受け取り、そしてその通信ポイントオブジェクトを使用してデータをバッファに記憶し、データを得る。データ垣間見マイクロビルディングブロックは、データ受信マイクロビルディングブロックと同様であるが、ネットワークバッファから読み取ったデータを除去するものではない。
【0138】
[00159]オブジェクト呼び出しドメインは、Java言語レフレクション能力を使用してサーバーメソッド呼び出しを自動化するために2つのマイクロビルディングブロックを含んでいる。この機能の結果として、デベロッパーは、それらのサーバーオブジェクトに対するスケルトンを構築する必要がなく、それらを登録するだけでよく、そしてシステムは、それが要求する全ての情報を自動的に得る。準備メソッド呼び出しマイクロビルディングブロックは、オブジェクトへのポインタと、呼び出すべきメソッドのネームとを受け取る。このマイクロビルディングブロックは、Javaレフレクションを使用して、メソッドシグネチャーを検査し、メソッドを呼び出すのに必要なパラメータのタイプと共にアレーを生成し、そのアレーを出力パラメータとして返送する。呼び出しメソッドマイクロビルディングブロックは、パラメータ値と共にアレーを受け取り、オブジェクトメソッドを呼び出し、メソッドにより発生されたパラメータと共にアレーを返送する。
【0139】
[00160]TCP到来接続マネージメントドメインは、到来するTCPネットワークの接続を取り扱う機能を与える。初期化マイクロビルディングブロックは、ExORBが要求を聴取するために使用するポートを指定する整数を受け取る。受け容れマイクロビルディングブロックは、到来するTCP要求を聴取し、それが入力パラメータを受け取らない場合に、ネットワーク接続をカプセル化するTCP通信ポイントオブジェクトを返送する。
【0140】
[00161]TCP出発接続マネージメントドメインは、リモートピアとのTCP接続確立を取り扱う。このドメインは、2つのマイクロビルディングブロックを含む。接続マイクロビルディングブロックは、ホストネーム及びポートを受け取り、ホストへ接続し、更に、ネットワーク接続をカプセル化するTCP通信ポイントを返送する。返送通信ポイントマイクロビルディングブロックは、TCP通信ポイントオブジェクトを受け取り、そしてそれを閉じるか、又はそのキャッシングアルゴリズムに基づいてそれをキャッシュ記憶する。
【0141】
[00162]オブジェクト登録ドメインは、サーバーオブジェクトを管理するという役割を果たす。登録オブジェクトマイクロビルディングブロックは、オブジェクトid及びオブジェクト参照を受け取り、オブジェクトをテーブルに記憶する。このテーブルは、ドメインの状態メモリに記憶される状態属性である。除去オブジェクトマイクロビルディングブロックは、オブジェクトidを受け取り、それに関連したオブジェクトをテーブルから除去する。ゲットオブジェクトマイクロビルディングブロックは、オブジェクトidを受け取り、その関連オブジェクトへの参照を返送する。
【0142】
[00163]プロトコル検出ドメインは、到来する要求の通信ミドルウェアプロトコルを識別するための機能をエクスポートする。この機能は、ExORBの多プロトコル振舞いをサポートするために要求される。検出プロトコルマイクロビルディングブロックは、バイトバッファを受け取り、このバッファをパーズし、そしてミドルウェアプロトコルのネームと共にストリングを返送する。MBBの現在実施は、2つのタイプのプロトコル、即ちXMLPRC及びIIOPを検出する。
【0143】
[00164]URIオブジェクト参照マネージメントドメインは、リモートオブジェクトURI参照をパーズして、リモートオブジェクトに要求を送信するに必要な全ての情報を抽出するための機能を与える。このドメインは、オブジェクトへの参照と称される単一のマイクロビルディングブロックを含み、これは、URI及びプロトコルタイプを受け取り、そしてホストネーム、ポート番号及びオブジェクトidを返送する。
【0144】
[00165]テーブル1は、各ExORBドメイン(Javaバージョン)のサイズをリストしたものである。全サイズは、デバッグ情報なしで、70KBである。
【表1】
【0145】
[00166]ExORBは、4つのアクション、即ち要求送信、要求受信、初期化、及びオブジェクト登録、をエクスポートする。第1のものは、クライアント側の機能として意図され、一方、残りの3つ(要求受信、初期化、及びオブジェクト登録)は、サーバー側の機能として意図される。オブジェクト初期化及びオブジェクト登録は、MBB初期化を呼び出すと共に、オブジェクトMBBを登録する単一ノードアクションである。
【0146】
[00167]図26は、要求送信アクションのためのアクショングラフを示す。簡単化のために、エラー状態は除去されている。クライアントオブジェクトは、それがアクションを呼び出すと、アクションのネーム、リモートオブジェクトの参照、呼び出しメソッド、要求されたパラメータ、及び使用すべきプロトコル(即ち、XMLRPC又はIIOP)を含むアクション状態オブジェクト(アクションの実行中に発生されるパラメータを記憶するもの)を与える。このアクションは、オブジェクトMBBへの参照の呼び出しを開始し、これは、リモートオブジェクトの参照をパーズすると共に、ホストネーム、オブジェクトid及びポートを抽出する。これらのパラメータは、アクション状態オブジェクトに記憶される。
【0147】
[00168]次いで、このアクションは、接続を呼び出し、これは、アクション状態オブジェクトからホストネーム及びポートを得、リモートホストとの接続を確立し(又は既存の接続を再使用し)、そしてTCPソケット(TCP通信ポイント)をカプセル化するオブジェクトをアクション状態オブジェクトに記憶する。次の状態への遷移は、条件付きであり、アクション状態オブジェクトに記憶された「プロトコル」変数の値に依存する。変数の値が「iiop」である場合には、このアクションは、CDRマーシャルパラメータを呼び出して、パラメータをマーシャルし、次いで、IIOPエンコード要求MBBを呼び出して、要求メッセージを生成する。変数の値が「xmlrpc」である場合には、このアクションは、XMLRPCマーシャルパラメータを呼び出し、次いで、XMLRPCエンコード要求を呼び出す。IIOPエンコード要求及びXMLRPCエンコード要求MBBは、両方とも、適切なプロトコルに基づいてフォーマットされた要求と共にバイトバッファを発生する。アクショングラフにおける次の状態は、データ送信であり、これは、アクション状態オブジェクトからバッファを検索して、それを、アクション状態オブジェクトに記憶されたTCP通信ポイントを使用してリモートオブジェクトへ送信する。データ送信を呼び出した後に、このアクションは、「一方向」と称されるタプルをアクション状態オブジェクトから検索する。値が「真」である場合に、このアクションは、通信ポイント返送を呼び出し、これは、TCP通信ポイントオブジェクトをアクション状態オブジェクトから処分し、アクション状態オブジェクトをアクション呼び出し者へ返送して終了となる。
【0148】
[00169]「一方向」の値が「偽」である場合には、このアクションは、応答のデコードへ続く。先ず、「プロトコル」タプルの値に基づいて、このアクションは、IIOPヘッダ又はXMLRPCヘッダをデコードする。両MBBは、メッセージヘッダをパーズし、要求に関する情報をアクション状態オブジェクトに記憶する。両MBBに対する1つの必須のフィールドは、応答の残部の長さである。このアクションは、データ受信を呼び出し、これは、ネットワークから読み出さねばならないデータの量を決定するために長さタプルを要求する。次いで、アクションは、応答をデコードし、パラメータをデマーシャルするように進む。この場合も、アクションインタープリターは、「プロトコル」の値を使用して、グラフにおいてどんな経路をたどるか判断する。その後、このアクションは、通信ポイント返送MBB(TCP通信ポイントを処分する)を呼び出し、アクション状態オブジェクトをアクション呼び出し者へ返送して終了となる。アクション状態オブジェクトは、結果パラメータを含む。
【0149】
[00170]図27は、要求受信のためのアクショングラフである。このアクションは、受け容れを呼び出すことでスタートし、これは、到来するネットワーク要求を検出し、ネットワーク接続をカプセル化するTCP通信ポイントを発生するまで阻止する。次いで、このアクションは、データ垣間見(peekdata)を呼び出し、これは、到来データバッファを垣間見て、初期バイトをパーズし、プロトコルのタイプを検出する。プロトコルのタイプがIIOPである場合には、データ垣間見MBBは、ネーム「プロトコル」で登録された値「iiop」と共にタプルを記憶する。プロトコルタイプがXMLRPCである場合には、MBBは、同じネームのもとで値「xmlrpc」を記憶する。次いで、このアクションは、「プロトコル」値を使用して、IIOPデコードヘッダへジャンプすべきかXMLRPCデコードヘッダへジャンプすべきかを決定する。これら2つのMBBは、ヘッダをパーズし、次いで、それらがアクション状態オブジェクトに記憶する情報を抽出する。両MBBは、残りのデータの長さを指定する「長さ」というネームの必須タプルを記憶しなければならない。この値は、データ受信MBBにより使用され、残りの要求データをネットワークバッファから得る。
【0150】
[00171]このアクションは、アクション状態オブジェクトに記憶された「プロトコル」タプルの値に基づいて、IIOPデコード要求又はXMLRPCデコード要求を呼び出す。両MBBは、ターゲットオブジェクトのid及びメソッドのネームを含む多数のフィールドを発生する。次いで、このアクションは、ゲットオブジェクトを呼び出し、これは、オブジェクトidを使用して、ターゲットオブジェクトを探索すると共に、その参照をアクション状態オブジェクトに記憶する。メソッド準備呼び出しは、ターゲットメソッドのネームを使用して、Javaレフレクションを使用するメソッドを呼び出すのに必要なパラメータを検査する。このMBBは、パラメータタイプのアレーを発生する。次いで、「プロトコル」の値に基づいて、このアクションは、CDRデマーシャルパラメータ又はXMLRPCデマーシャルパラメータを呼び出し、これは、以前に発生されたタイプのアレーを使用して、到来する要求から値をデマーシャルする。これら2つのMBBは、パラメータ値のアレーを発生する。メソッド呼び出しMBBは、この値アレーを使用して、アクション状態オブジェクトに記憶されたターゲットオブジェクトのメソッドを呼び出す。メソッド呼び出しMBBは、出力パラメータの値を伴うアレーを発生する。次いで、このアクションは、「プロトコル値」を使用して、出力パラメータをマーシャルすると共に、応答メッセージをIIOP又はXMLRPCのいずれかで発生する。IIOPエンコード応答及びXMLRPCエンコード応答MBBは、応答と共にバイトバッファを発生する。データ送信マイクロビルディングブロックは、アクション状態オブジェクトに記憶されたTCP通信オブジェクト(受け容れマイクロビルディングブロックで発生された)を使用してクライアントホストへ応答を送信する。その後、データを送信した後に、このアクションは、通信ポイント返送を呼び出し、これは、TCP通信ポイントを処分するか、又はキャッシングアルゴリズムに基づいてキャッシュに記憶する。
【0151】
[00172]上述したように、コンフィギュレーション可能なソフトウェアの重要な特徴は、ソフトウェア状態を第1クラスオブジェクトとして操作するためのサポートにある。各MBBは、ネーム及び値の対に関して定義されたその状態依存性を明確に指定する。これらのタプルは、MBBドメインにより与えられる記憶エリアに記憶される。ソフトウェアの状態は、全てのMBB状態属性を合体したものである。それ故、ExORBの状態は、28個のマイクロビルディングブロックにより定義された全ての状態属性より成る。
【0152】
[00173]テーブル2は、ExORBに関連した状態属性をリストする。このテーブルは、属性のネーム、その目的、及びそれを記憶するドメインのネームを含む。
【表2】
【0153】
コンピュータシステムの実施例
[00174]図28は、上述したオペレーションの1つ以上を遂行するのに使用できるコンピュータシステム2800を例示するブロック図である。別の実施形態において、このマシンは、ネットワークルータ、ネットワークスイッチ、ネットワークブリッジ、パーソナルデジタルアシスタント(PDA)、セルラー電話、ウェブアプライアンス、或いはマシンにより行われるべきアクションを特定する一連のインストラクションを実行できる何らかのマシンを備えてもよい。
【0154】
[00175]コンピュータシステム2800は、プロセッサ2802と、メインメモリ2804と、静的メモリ2806とを備え、これらは、バス2808を経て互いに通信する。コンピュータシステム2800は、更に、ビデオディスプレイユニット2810(例えば、液晶ディスプレイ(LCD)又は陰極線管(CRT))を備えてもよい。又、コンピュータシステム2800は、アルファニューメリック入力装置2812(例えば、キーボード)と、カーソルコントロール装置2814(例えば、マウス)と、ディスクドライブユニット2816と、信号発生装置2820(例えば、スピーカ)と、ネットワークインターフェイス装置2822も備えている。
【0155】
[00176]ディスクドライブユニット2816は、上述したメソッドの1つ又は全てを実施する1組のインストラクション(即ち、ソフトウェア)2826が記憶されたコンピュータ読み取り可能な媒体2824を備えている。又、ソフトウェア2826は、メインメモリ2804及び/又はプロセッサ2802内に完全に又は少なくとも部分的に存在するように示されている。更に、ソフトウェア2826は、ネットワークインターフェイス装置2822を経て送信又は受信されてもよい。説明上、「コンピュータ読み取り可能な媒体」という語は、コンピュータにより実行するための一連のインストラクションを記憶又はエンコードできる媒体であって、コンピュータが本発明のメソッドのいずれの1つも実行するようにさせる媒体を包含するものとする。従って、「コンピュータ読み取り可能な媒体」という語は、ソリッドステートメモリ、光学的及び磁気的ディスク、並びに搬送波信号を包含するが、これらに限定されない。
【0156】
[00177]ランタイムに小さな実行ユニット(マイクロビルディングブロック)を動的にアッセンブルし且つコンフィギュレーションするためのソフトウェア構造方法及び装置について説明した。本発明の実施形態は、状態、構造及びロジックのような実行エレメントの客観化を使用できる。本発明の実施形態は、言語及びプラットホームに独立したもので、ソフトウェアコンポーネントのランタイムコンフィギュレーション性、更新性及びアップグレード性と、ソフトウェアコンポーネントのシームレス移動性と、構造化ソフトウェアの高い信頼性とを与えるものである。
【0157】
[00178]当業者であれば、以上の説明を読んだ後に、本発明の多数の変更や修正が疑いなく明らかとなろうが、図示して説明した特定の実施形態は、本発明を何らそれに限定するものではないことを理解されたい。それ故、種々の実施形態の細部にわたる言及は、本発明の本質と考えられる特徴のみを記載した特許請求の範囲を限定するものではない。
【図面の簡単な説明】
【0158】
【図1】再コンフィギュレーション可能なソフトウェアの動的な構造化を容易にするためのシステムの一実施形態を示すブロック図である。
【図2A】ソフトウェアを動的に構造化するプロセスの一実施形態を示すフローチャートである。
【図2B】ソフトウェア構造システムの一実施形態を示すブロック図である。
【図3A】マイクロビルディングブロック(MBB)の動作を例示する図である。
【図3B】MBBの構造の一実施形態を示すブロック図である。
【図3C】MBBのXML記述ファイルを例示する図である。
【図4A】解釈アクションを例示する図である。
【図4B】コンパイルアクションを例示する図である。
【図4C】解釈アクション及びコンパイルアクションの定義を与えるXML記述ファイルを例示する図である。
【図5A】ドメインの構造を例示する図である。
【図5B】ドメインのハイアラーキーコンポーズを例示する図である。
【図5C】ソフトウェアアーキテクチャーの定義を与えるXML記述ファイルを例示する図である。
【図5D】ドメインに対するソフトウェア構造の定義を与えるXML記述ファイルを例示する図である。
【図6】解釈アクションを実行するためのプロセスの一実施例を示すフローチャートである。
【図7】解釈アクションの実行を例示する図である。
【図8A】ドメインの一実施形態を示すブロック図である。
【図8B】タプルコンテナを例示する図である。
【図9】ドメインに使用される1組のプロトコルを示す図である。
【図10】ドメインに使用される1組のプロトコルを示す図である。
【図11】ドメインに使用される1組のプロトコルを示す図である。
【図12】ドメインに使用される1組のプロトコルを示す図である。
【図13】ドメインに使用される1組のプロトコルを示す図である。
【図14】ドメインに使用される1組のプロトコルを示す図である。
【図15】ドメインに使用される1組のプロトコルを示す図である。
【図16】ドメインに使用される1組のプロトコルを示す図である。
【図17】ドメインに使用される1組のプロトコルを示す図である。
【図18】ドメインに使用される1組のプロトコルを示す図である。
【図19】ドメインに使用される1組のプロトコルを示す図である。
【図20】ドメインに使用される1組のプロトコルを示す図である。
【図21】ドメインに使用される1組のプロトコルを示す図である。
【図22】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図23A】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図23B】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図24】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図25】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図26】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図27】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図28】コンピュータシステムを例示するブロック図である。
【符号の説明】
【0159】
100・・・システム、102・・・ネットワーク、104・・・クライアント装置、106:ネットワークサーバー、108・・・ソフトウェア構造システム、250・・・ソフトウェア構造システム、252・・・ローダー、254・・・スケジューラー、256・・・ユーザインターフェイスマネージャー、258・・・変更コーディネーター、260・・・データ記憶装置、300・・・マイクロビルディングブロック、302・・・入力パラメータ、304・・・内部状態パラメータ、306・・・出力パラメータ、320・・・MBB、322・・・属性、324・・・メソッド、326・・・デマルチプレクサ、502・・・構造メモリ、504・・・ロジックメモリ、506・・・状態メモリ、520・・・ルートドメイン、522、524、526、528、530・・・ドメイン、802・・・ドメインメモリ、804・・・ドメインローダー、806・・・ドメインスケジューラー
【特許請求の範囲】
【請求項1】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するステップと、
を備える方法。
【請求項2】
前記要求された機能は、要求されたワイヤレス機能を含む、請求項1に記載の方法。
【請求項3】
前記ソフトウェア構造データを得るステップは、
ソフトウェア構造の定義を受け取る段階であって、該ソフトウェア構造の定義は、前記要求された機能に関連した前記複数のアプリケーションコンポーネントを識別するものである段階と、
前記ソフトウェア構造の定義をパーズする段階と、
を含む請求項1に記載の方法。
【請求項4】
前記ソフトウェアロジックデータを得るステップは、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取る段階と、
前記ソフトウェアロジックの定義をパーズする段階と、
を含む請求項1に記載の方法。
【請求項5】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、前記ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへの参照とを含む、請求項4に記載の方法。
【請求項6】
ランタイムに前記複数のアプリケーションコンポーネントの1つを交換する要求を受け取るステップと、
安全なコンポーネントスワップ状態を決定するステップと、
前記安全なコンポーネントスワップ状態の間に前記複数のアプリケーションコンポーネントの前記1つを交換するステップと、
を更に備える請求項1に記載の方法。
【請求項7】
複数のアプリケーションコンポーネントの前記1つは、システムを再スタートせずに交換される、請求項6に記載の方法。
【請求項8】
ランタイムに前記複数のアプリケーションコンポーネントの1つ以上をコンフィギュレーションする要求を受け取るステップと、
ランタイムに前記複数のアプリケーションコンポーネントの前記1つ以上をコンフィギュレーションするステップと、
を更に備える請求項1に記載の方法。
【請求項9】
各アクションは、アクションの実行に関連した入力及び出力パラメータを記憶するために指定されたアクション状態オブジェクトに関連付けられる、請求項5に記載の方法。
【請求項10】
前記複数のアプリケーションコンポーネントの呼び出しを整合する前記ステップは、
アクションを実行する要求であって、該アクションに関連したアクション状態オブジェクトを含むような要求を受け取る段階と、
前記アクションにより指定される第1アプリケーションコンポーネントのネームを得る段階と、
前記メモリに記憶された前記ソフトウェア構造データを使用して前記第1アプリケーションコンポーネントへの参照を得る段階と、
前記アクション状態オブジェクトを入力パラメータとして使用して前記第1アプリケーションコンポーネントを呼び出す段階と、
を含む請求項9に記載の方法。
【請求項11】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得ると共に、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリ記憶するためのメモリと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するためのスケジューラーと、
を備えるクライアントデバイスのための装置。
【請求項12】
前記ローダーは、前記要求された機能に関連した前記複数のアプリケーションコンポーネントを識別するソフトウェア構造の定義を受け取り、そしてそのソフトウェア構造の定義をパーズすることにより、ソフトウェア構造データを得る、請求項11に記載の装置。
【請求項13】
前記ソフトウェア構造データは、前記複数のアプリケーションコンポーネント各々の識別子と、前記複数のアプリケーションコンポーネント各々への参照とを含む、請求項11に記載の装置。
【請求項14】
前記ローダーは、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取り、そして前記ソフトウェアロジックの定義をパーズすることにより、前記ソフトウェアロジックデータを得る、請求項11に記載の装置。
【請求項15】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、前記ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへの参照とを含む、請求項14に記載の装置。
【請求項16】
前記ローダーは、更に、システムを再スタートせずに、前記複数のアプリケーションコンポーネントの1つを交換する、請求項11に記載の装置。
【請求項17】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得る手段と、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得る手段と、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶する手段と、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合する手段と、
を備えるシステム。
【請求項18】
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成するステップと、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成するステップと、
前記複数のオブジェクト各々の1つ以上の属性を識別するソフトウェア状態データを生成するステップと、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するステップと、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更するステップと、
を備える方法。
【請求項19】
前記ソフトウェア構造データは、前記複数のオブジェクト各々の識別子と、前記複数のオブジェクト各々への参照とを含む、請求項18に記載の方法。
【請求項20】
前記複数のオブジェクトの各々を、1つ以上の入力パラメータ、1つ以上の出力パラメータ、及びそれに関連したアクションを有するアプリケーションコンポーネントへと変換するステップを更に備える、請求項18に記載の方法。
【請求項21】
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更する前記ステップは、
ランタイムにアプリケーションコンポーネントを交換する要求を受け取る段階と、
安全なコンポーネントスワップ状態を決定する段階と、
前記安全なコンポーネントスワップ状態の間に前記コンポーネントを交換する段階と、
を含む請求項20に記載の方法。
【請求項22】
前記コンポーネントは、システムを再スタートせずに交換される、請求項21に記載の方法。
【請求項23】
ランタイムに前記複数のアプリケーションコンポーネントの1つ以上をコンフィギュレーションする要求を受け取るステップと、
ランタイムに前記複数のアプリケーションコンポーネントの前記1つ以上をコンフィギュレーションするステップと、
を備える請求項20に記載の方法。
【請求項24】
プログラムのアプリケーションコンポーネントのリストをユーザに表示するステップと、
ユーザ要求の際に、前記リストから異なるデバイスへアプリケーションコンポーネントを移動するステップと、
を更に備える請求項20に記載の方法。
【請求項25】
処理システムにおいて実行されたときに、前記処理システムが、
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成するステップと、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成するステップと、
前記複数のオブジェクト各々の1つ以上の属性を識別するソフトウェア状態データを生成するステップと、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するステップと、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更するステップと、
を備える方法を遂行するようにさせる実行可能なインストラクションを含むコンピュータ読み取り可能な媒体。
【請求項1】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するステップと、
を備える方法。
【請求項2】
前記要求された機能は、要求されたワイヤレス機能を含む、請求項1に記載の方法。
【請求項3】
前記ソフトウェア構造データを得るステップは、
ソフトウェア構造の定義を受け取る段階であって、該ソフトウェア構造の定義は、前記要求された機能に関連した前記複数のアプリケーションコンポーネントを識別するものである段階と、
前記ソフトウェア構造の定義をパーズする段階と、
を含む請求項1に記載の方法。
【請求項4】
前記ソフトウェアロジックデータを得るステップは、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取る段階と、
前記ソフトウェアロジックの定義をパーズする段階と、
を含む請求項1に記載の方法。
【請求項5】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、前記ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへの参照とを含む、請求項4に記載の方法。
【請求項6】
ランタイムに前記複数のアプリケーションコンポーネントの1つを交換する要求を受け取るステップと、
安全なコンポーネントスワップ状態を決定するステップと、
前記安全なコンポーネントスワップ状態の間に前記複数のアプリケーションコンポーネントの前記1つを交換するステップと、
を更に備える請求項1に記載の方法。
【請求項7】
複数のアプリケーションコンポーネントの前記1つは、システムを再スタートせずに交換される、請求項6に記載の方法。
【請求項8】
ランタイムに前記複数のアプリケーションコンポーネントの1つ以上をコンフィギュレーションする要求を受け取るステップと、
ランタイムに前記複数のアプリケーションコンポーネントの前記1つ以上をコンフィギュレーションするステップと、
を更に備える請求項1に記載の方法。
【請求項9】
各アクションは、アクションの実行に関連した入力及び出力パラメータを記憶するために指定されたアクション状態オブジェクトに関連付けられる、請求項5に記載の方法。
【請求項10】
前記複数のアプリケーションコンポーネントの呼び出しを整合する前記ステップは、
アクションを実行する要求であって、該アクションに関連したアクション状態オブジェクトを含むような要求を受け取る段階と、
前記アクションにより指定される第1アプリケーションコンポーネントのネームを得る段階と、
前記メモリに記憶された前記ソフトウェア構造データを使用して前記第1アプリケーションコンポーネントへの参照を得る段階と、
前記アクション状態オブジェクトを入力パラメータとして使用して前記第1アプリケーションコンポーネントを呼び出す段階と、
を含む請求項9に記載の方法。
【請求項11】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得ると共に、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリ記憶するためのメモリと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するためのスケジューラーと、
を備えるクライアントデバイスのための装置。
【請求項12】
前記ローダーは、前記要求された機能に関連した前記複数のアプリケーションコンポーネントを識別するソフトウェア構造の定義を受け取り、そしてそのソフトウェア構造の定義をパーズすることにより、ソフトウェア構造データを得る、請求項11に記載の装置。
【請求項13】
前記ソフトウェア構造データは、前記複数のアプリケーションコンポーネント各々の識別子と、前記複数のアプリケーションコンポーネント各々への参照とを含む、請求項11に記載の装置。
【請求項14】
前記ローダーは、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取り、そして前記ソフトウェアロジックの定義をパーズすることにより、前記ソフトウェアロジックデータを得る、請求項11に記載の装置。
【請求項15】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、前記ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへの参照とを含む、請求項14に記載の装置。
【請求項16】
前記ローダーは、更に、システムを再スタートせずに、前記複数のアプリケーションコンポーネントの1つを交換する、請求項11に記載の装置。
【請求項17】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得る手段と、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得る手段と、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶する手段と、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合する手段と、
を備えるシステム。
【請求項18】
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成するステップと、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成するステップと、
前記複数のオブジェクト各々の1つ以上の属性を識別するソフトウェア状態データを生成するステップと、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するステップと、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更するステップと、
を備える方法。
【請求項19】
前記ソフトウェア構造データは、前記複数のオブジェクト各々の識別子と、前記複数のオブジェクト各々への参照とを含む、請求項18に記載の方法。
【請求項20】
前記複数のオブジェクトの各々を、1つ以上の入力パラメータ、1つ以上の出力パラメータ、及びそれに関連したアクションを有するアプリケーションコンポーネントへと変換するステップを更に備える、請求項18に記載の方法。
【請求項21】
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更する前記ステップは、
ランタイムにアプリケーションコンポーネントを交換する要求を受け取る段階と、
安全なコンポーネントスワップ状態を決定する段階と、
前記安全なコンポーネントスワップ状態の間に前記コンポーネントを交換する段階と、
を含む請求項20に記載の方法。
【請求項22】
前記コンポーネントは、システムを再スタートせずに交換される、請求項21に記載の方法。
【請求項23】
ランタイムに前記複数のアプリケーションコンポーネントの1つ以上をコンフィギュレーションする要求を受け取るステップと、
ランタイムに前記複数のアプリケーションコンポーネントの前記1つ以上をコンフィギュレーションするステップと、
を備える請求項20に記載の方法。
【請求項24】
プログラムのアプリケーションコンポーネントのリストをユーザに表示するステップと、
ユーザ要求の際に、前記リストから異なるデバイスへアプリケーションコンポーネントを移動するステップと、
を更に備える請求項20に記載の方法。
【請求項25】
処理システムにおいて実行されたときに、前記処理システムが、
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成するステップと、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成するステップと、
前記複数のオブジェクト各々の1つ以上の属性を識別するソフトウェア状態データを生成するステップと、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するステップと、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更するステップと、
を備える方法を遂行するようにさせる実行可能なインストラクションを含むコンピュータ読み取り可能な媒体。
【図1】
【図2A】
【図2B】
【図3A】
【図3B】
【図3C】
【図4A】
【図4B】
【図4C】
【図5A】
【図5B】
【図5C】
【図5D】
【図6】
【図7】
【図8A】
【図8B】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23A】
【図23B】
【図24】
【図25】
【図26】
【図27】
【図28】
【図2A】
【図2B】
【図3A】
【図3B】
【図3C】
【図4A】
【図4B】
【図4C】
【図5A】
【図5B】
【図5C】
【図5D】
【図6】
【図7】
【図8A】
【図8B】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23A】
【図23B】
【図24】
【図25】
【図26】
【図27】
【図28】
【公表番号】特表2007−511018(P2007−511018A)
【公表日】平成19年4月26日(2007.4.26)
【国際特許分類】
【出願番号】特願2006−539952(P2006−539952)
【出願日】平成16年11月11日(2004.11.11)
【国際出願番号】PCT/US2004/038007
【国際公開番号】WO2005/048098
【国際公開日】平成17年5月26日(2005.5.26)
【出願人】(392026693)株式会社エヌ・ティ・ティ・ドコモ (5,876)
【公表日】平成19年4月26日(2007.4.26)
【国際特許分類】
【出願日】平成16年11月11日(2004.11.11)
【国際出願番号】PCT/US2004/038007
【国際公開番号】WO2005/048098
【国際公開日】平成17年5月26日(2005.5.26)
【出願人】(392026693)株式会社エヌ・ティ・ティ・ドコモ (5,876)
[ Back to top ]