(57)【要約】  ソフトウェアをコンポーズする方法及び装置について説明する。一実施形態において、この方法は、要求された機能に関連した多数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、ランタイムにおけるアプリケーションコンポーネントの呼び出しをソフトウェアロジックデータに基づいて整合するステップと、を備えている。【選択図】図２Ａ【特許請求の範囲】
【請求項１】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するステップと、
を備える方法。
【請求項２】
前記要求された機能は、要求されたワイヤレス機能を含む、請求項１に記載の方法。
【請求項３】
前記ソフトウェア構造データを得るステップは、
ソフトウェア構造の定義を受け取る段階であって、該ソフトウェア構造の定義は、前記要求された機能に関連した前記複数のアプリケーションコンポーネントを識別するものである段階と、
前記ソフトウェア構造の定義をパーズする段階と、
を含む請求項１に記載の方法。
【請求項４】
前記ソフトウェアロジックデータを得るステップは、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取る段階と、
前記ソフトウェアロジックの定義をパーズする段階と、
を含む請求項１に記載の方法。
【請求項５】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、前記ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへの参照とを含む、請求項４に記載の方法。
【請求項６】
ランタイムに前記複数のアプリケーションコンポーネントの１つを交換する要求を受け取るステップと、
安全なコンポーネントスワップ状態を決定するステップと、
前記安全なコンポーネントスワップ状態の間に前記複数のアプリケーションコンポーネントの前記１つを交換するステップと、
を更に備える請求項１に記載の方法。
【請求項７】
複数のアプリケーションコンポーネントの前記１つは、システムを再スタートせずに交換される、請求項６に記載の方法。
【請求項８】
ランタイムに前記複数のアプリケーションコンポーネントの１つ以上をコンフィギュレーションする要求を受け取るステップと、
ランタイムに前記複数のアプリケーションコンポーネントの前記１つ以上をコンフィギュレーションするステップと、
を更に備える請求項１に記載の方法。
【請求項９】
各アクションは、アクションの実行に関連した入力及び出力パラメータを記憶するために指定されたアクション状態オブジェクトに関連付けられる、請求項５に記載の方法。
【請求項１０】
前記複数のアプリケーションコンポーネントの呼び出しを整合する前記ステップは、
アクションを実行する要求であって、該アクションに関連したアクション状態オブジェクトを含むような要求を受け取る段階と、
前記アクションにより指定される第１アプリケーションコンポーネントのネームを得る段階と、
前記メモリに記憶された前記ソフトウェア構造データを使用して前記第１アプリケーションコンポーネントへの参照を得る段階と、
前記アクション状態オブジェクトを入力パラメータとして使用して前記第１アプリケーションコンポーネントを呼び出す段階と、
を含む請求項９に記載の方法。
【請求項１１】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得ると共に、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリ記憶するためのメモリと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するためのスケジューラーと、
を備えるクライアントデバイスのための装置。
【請求項１２】
前記ローダーは、前記要求された機能に関連した前記複数のアプリケーションコンポーネントを識別するソフトウェア構造の定義を受け取り、そしてそのソフトウェア構造の定義をパーズすることにより、ソフトウェア構造データを得る、請求項１１に記載の装置。
【請求項１３】
前記ソフトウェア構造データは、前記複数のアプリケーションコンポーネント各々の識別子と、前記複数のアプリケーションコンポーネント各々への参照とを含む、請求項１１に記載の装置。
【請求項１４】
前記ローダーは、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取り、そして前記ソフトウェアロジックの定義をパーズすることにより、前記ソフトウェアロジックデータを得る、請求項１１に記載の装置。
【請求項１５】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、前記ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへの参照とを含む、請求項１４に記載の装置。
【請求項１６】
前記ローダーは、更に、システムを再スタートせずに、前記複数のアプリケーションコンポーネントの１つを交換する、請求項１１に記載の装置。
【請求項１７】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得る手段と、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得る手段と、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶する手段と、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合する手段と、
を備えるシステム。
【請求項１８】
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成するステップと、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成するステップと、
前記複数のオブジェクト各々の１つ以上の属性を識別するソフトウェア状態データを生成するステップと、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するステップと、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更するステップと、
を備える方法。
【請求項１９】
前記ソフトウェア構造データは、前記複数のオブジェクト各々の識別子と、前記複数のオブジェクト各々への参照とを含む、請求項１８に記載の方法。
【請求項２０】
前記複数のオブジェクトの各々を、１つ以上の入力パラメータ、１つ以上の出力パラメータ、及びそれに関連したアクションを有するアプリケーションコンポーネントへと変換するステップを更に備える、請求項１８に記載の方法。
【請求項２１】
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更する前記ステップは、
ランタイムにアプリケーションコンポーネントを交換する要求を受け取る段階と、
安全なコンポーネントスワップ状態を決定する段階と、
前記安全なコンポーネントスワップ状態の間に前記コンポーネントを交換する段階と、
を含む請求項２０に記載の方法。
【請求項２２】
前記コンポーネントは、システムを再スタートせずに交換される、請求項２１に記載の方法。
【請求項２３】
ランタイムに前記複数のアプリケーションコンポーネントの１つ以上をコンフィギュレーションする要求を受け取るステップと、
ランタイムに前記複数のアプリケーションコンポーネントの前記１つ以上をコンフィギュレーションするステップと、
を備える請求項２０に記載の方法。
【請求項２４】
プログラムのアプリケーションコンポーネントのリストをユーザに表示するステップと、
ユーザ要求の際に、前記リストから異なるデバイスへアプリケーションコンポーネントを移動するステップと、
を更に備える請求項２０に記載の方法。
【請求項２５】
処理システムにおいて実行されたときに、前記処理システムが、
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成するステップと、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成するステップと、
前記複数のオブジェクト各々の１つ以上の属性を識別するソフトウェア状態データを生成するステップと、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するステップと、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更するステップと、
を備える方法を遂行するようにさせる実行可能なインストラクションを含むコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【関連出願】
【０００１】
[0001]本出願は、参考としてここにその開示を援用する２００３年１１月１２日に出願の米国プロビジョナル特許出願第６０／５１９７５６号及び２００４年３月２６日に出願の米国プロビジョナル特許出願第６０／５５６５３７号に関連しており、その利益を請求するものである。
【発明の分野】
【０００２】
[0002]本発明は、データ通信に係り、より詳細には、本発明は、ソフトウェアをコンポーズすることに係る。
【発明の背景】
【０００３】
[0003]移動電話の機能は、最近数年間にわたって飛躍的に進歩している。最初は、単なる音声送信であった。次いで、短いメッセージ及びウェブブラウジングが追加された。その後、自動販売機及びマルチメディアメッセージングとの対話が利用できるようになった。最近では、ビデオ会議、インターネットアクセス、及び周囲の物理的環境との対話が可能になった。移動電話及びワイヤレスイネーブル型ハンドヘルド装置の進歩、並びにワイヤレスネットワークの益々の増加は、コンピュータについてのユーザの因習的な理解を変えつつある。デスクトップコンピューティングの観念は、より動的なモデルへとゆっくり進化している。移動電話は、ワイヤレスネットワークに接続することができ、従来サーバーやワークステーションに指定されていたタスクを遂行するに充分な処理能力を有する。従って、移動電話は、個々のユーザの状況において動作して、毎日のタスクで彼等の助けとなるユーザのデジタル友人となっている。更に、ワイヤレス送信の速度が高くなるにつれて、移動電話が分散型サービス（例えば、ウェブサービス）と対話したり、リッチマルチメディアコンテンツにアクセスしてそれを共有したりするのを許すアプリケーションの開発が可能になった。
【０００４】
[0004]ソフトウェアサービスの関連性が高まることで、移動電話装置のためのより精巧なオペレーティングシステムが要求される。これらのオペレーションシステムは、Ｊａｖａ（ＭＩＤＬＥＴ２．０、ＤｏＪａ、パーソナルＪａｖａ）、Ｃ＃、Ｃ及びＣ＋＋のような言語に基づくアプリケーション開発のためのサポートを与える。更に、これらのオペレーションシステムは、分散型アプリケーションの開発を助けるミドルウェアサービスのためのサポートも与える。移動電話の精巧さが高まることは、装置コンフィギュレーションの複雑さが増加し、ソフトウェアエラーの確率が高くなり、且つ既存のソフトウェアをランタイムに向上させる必要があることを意味する。例えば、移動電話は、デジタルカメラを装備でき、画像の送信をサポートでき（ＭＭＳとして知られている）、且つインターネット接続をサポートでき、これは、ウェブ及びＷＡＰページをブラウズし、ダウンロードを行い、ｅメールを送信し、又、インターネットで実行中のサービスにアクセスするのを許す。しかしながら、これらのサービスを利用する前に、ユーザは、自分のターミナルをコンフィギュレーションしなければならない。このコンフィギュレーションタスクは、通常、顧客サポートセンターにコールし、そしてホストネーム、ＩＰアドレス、ユーザネーム及びパスワードのようなパラメータの入力を含む多数の命令に従うことを伴う厄介で且つエラーの生じがちなプロセスである。
【０００５】
[0005]更に、ソフトウェアプラットホームが大きくなるにつれて、ソフトウェアエラーの確率も大きくなる。最近の調査では、移動電話の１０%が、ソフトウェアの問題で返却されている。１２億人以上の加入者が世界中にいるとすれば、１億２千万個以上の電話が毎年返却されることを意味する。即ち、１億２千万人のユーザが、それらの電話を更新するためにそれらの装置を顧客サポートセンターに持ち込まねばならない。これは、運搬に非常にコストがかかると共に、移動電話ユーザにとってフラストレーションが溜まる。
【０００６】
[0006]更に、ソフトウェアの売主は、既存の移動ソフトウェアのための新規な機能を定期的に提供する。例えば、既存のメールクライアントが、付加的なアタッチメントのためのサポートを与えることもできる、或いはウェブブラウザが、スクリプトを操作するための付加的な機能を与えることもできる。この場合も、移動電話ユーザがソフトウェア更新のために顧客サポートセンターにそれらの電話を持ち込むことを要求するのは、ユーザにとって不便なことである。
【０００７】
[0007]これら問題の幾つかに対処する解決策がある。例えば、ある既存の製品は、移動電話のファームウェアをランタイムに更新する機能を備えている。それら製品は、既存のファームウェアのイメージを新規なファームウェアのイメージと比較し、２つのイメージ間のバイナリー差を計算し、そしてその計算された差で既存のイメージを更新することにより、これを行う。しかしながら、この解決策は、更新を行うためにユーザの介在を必要とし、ソフトウェアイメージ全体を交換することしかできず（ある論理的特性又は構造的特性ではなく）、且つシステムを停止したときに更新を行うことしかできない。
【０００８】
[0008]ランタイムにプロセスを交換するための例示的技術が、米国特許第４，９５４，９４１号に説明されている。この技術は、プロセスをシグナリングメカニズムに登録することを伴う。シグナリングメカニズムが信号を発生すると、その関連プロセスが、それ自体で、更新されたバイナリーイメージに交換することができる。しかしながら、米国特許第４，９５４，９４１号に説明された技術は、プロセスの個々の断片の交換を許すものではなく、処理されているデータの破壊を生じることがあり、且つ動的なソフトウェアコンポーズをサポートすることができない。それに加えて、上述した技術は、状態をマネージするためのメカニズム、ソフトウェアアプリケーションの構造及びロジックに欠ける。
【０００９】
[0009]米国特許第５，１５５，８４７号は、クライアント装置の集合体に存在するソフトウェアを交換するための例示的技術を説明している。このソフトウェアは、異なるクライアント装置に対して更新を記憶し且つパッチを発生する中央ホストを使用して、更新される。クライアントエージェントは、ホストに接続し、最新のパッチを検索し、そしてこれらパッチを関連クライアント装置にインストールする。しかしながら、米国特許第５，１５５，８４７号に説明されたこの技術は、更新プロセス中に、影響を受けるアプリケーションを停止することを必要とする。更に、この技術は、リモート状態のコンフィギュレーション、動的なソフトウェアコンポーズ、並びにシステムの構造及びロジックの検査及び変更をサポートすることができない。
【００１０】
[0010]米国特許第５，３５９，７３０号は、オペレーティングシステム（ＯＳ）のコンポーネントをランタイムに交換するための技術を説明している。これらＯＳコンポーネントは、ＯＳコンポーネントの呼び出しをそれに対応するモジュールへ向け直すハードウェアトラップを使用して交換される。しかしながら、米国特許第５，３５９，７３０号に説明された技術は、プラットホームに従属したもので、ランタイムにシステムを検査し且つ動的なソフトウェアコンポーズをサポートする能力に欠ける。
【００１１】
[0011]米国特許第５，７３２，２７５号は、クライアント装置に常駐するソフトウェアを更新するための技術を説明している。この技術は、アプリケーションを実行する前に最新のアプリケーションバージョンをダウンロードしてインストールさせるようにアプリケーションランチャーを変更することに依存する。米国特許第５，７３２，２７５号に説明された技術は、ソフトウェアを更新できるのは、ランチのときだけで、ソフトウェアが実行される間ではないという重大な制約がある。
【発明の概要】
【００１２】
[0012]ソフトウェアをコンポーズする方法及び装置について説明する。１つの態様によれば、この方法は、要求された機能に関連した多数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、ランタイムにおけるアプリケーションコンポーネントの呼び出しをソフトウェアロジックデータに基づいて整合するステップと、を備えている。
【００１３】
[0013]本発明の他の特徴は、添付図面及び以下の詳細な説明から明らかとなろう。
【００１４】
[0014]本発明は、以下の詳細な説明及び本発明の種々の実施形態の添付図面から充分に理解されるであろうが、これらは、本発明を特定の実施形態に限定するものではなく、本発明を例示し且つそれを理解するためのものに過ぎない。
【本発明の詳細説明】
【００１５】
[0036]ソフトウェアをコンポーズする方法及び装置。以下の説明において、多数の詳細について述べる。しかしながら、当業者であれば、本発明は、これら特定の細部を伴わずに実施できることが明らかであろう。他の点について、本発明を不明瞭にしないために、良く知られた構造及び装置は、ブロック図形態で示し、詳細には示さない。
【００１６】
[0037]以下の詳細な説明のある部分は、コンピュータメモリ内のデータビットに対するオペレーションをアルゴリズム及び記号表示の形態で示す。これらアルゴリズム記述及び表示は、データ処理技術の当業者により、それらの仕事の実体をこの技術の他の当業者へ最も有効に伝えるために使用される手段である。アルゴリズムとは、ここでは、一般に、希望の結果を導くステップの自己矛盾のないシーケンスであると考えられる。これらステップは、物理的な量の物理的操作を要求する。通常、必ずしもそうでないが、これらの量は、記憶、転送、合成、比較、及びその他、操作することのできる電気的又は磁気的信号の形態をとる。時には、主として、共通の使用という理由で、これらの信号を、ビット、値、エレメント、記号、キャラクタ、項、数字等として参照するのが便利であると分かっている。
【００１７】
[0038]しかしながら、これら及び同様の用語は、全て、適当な物理的量に関連されるべきで、且つこれらの量に適用される便利なラベルに過ぎないことを銘記されたい。特に指示のない限り、以下の説明から明らかなように、この説明全体にわたり、「処理」又は「コンピューティング」又は「計算」又は「決定」又は「表示」等の用語を使用する検討は、コンピュータシステムのアクション及び処理、或いは同様の電子的コンピューティング装置であって、コンピュータシステムのレジスタ及びメモリ内の物理的（電子的）量として表わされたデータを、コンピュータシステムのメモリ又はレジスタ、或いは他のこのような情報記憶、送信又は表示装置内の物理的量として同様に表わされる他のデータへと操作及び変換するものを指すことが明らかであろう。
【００１８】
[0039]又、本発明は、ここに述べるオペレーションを実行するための装置にも係る。この装置は、要求される目的に対して特別に構成されてもよいし、或いはコンピュータに記憶されるコンピュータプログラムにより選択的にアクチベートされ又はコンフィギュレーションされる汎用コンピュータを備えてもよい。このようなコンピュータプログラムは、コンピュータ読み取り可能な記憶媒体、例えば、これに限定されないが、フロッピーディスク、光学ディスク、ＣＤ−ＲＯＭ、及び磁気−光学ディスクを含む任意の形式のディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気又は光学カード、或いは電子的インストラクションを記憶するのに適していて、コンピュータシステムバスに各々結合される任意の形式の媒体に記憶されてもよい。
【００１９】
[0040]ここに述べるアルゴリズム及びディスプレイは、特定のコンピュータ又は他の装置に固有に関連したものではない。種々の汎用システムが、ここに述べる教示に基づくプログラムと共に使用されてもよいし、又は必要な方法ステップを実行するために更に特殊な装置を構成するのが便利であると分かった。種々のこれらシステムに必要な構造は、以下の説明から明らかであろう。更に、本発明は、特定のプログラミング言語を参照して説明しない。ここに述べる本発明の教示を実施するのに種々のプログラミング言語を使用できることが明らかであろう。
【００２０】
[0041]マシン読み取り可能な媒体は、マシン（例えば、コンピュータ）で読み取り可能な形態で情報を記憶し又は送信するためのメカニズムを含む。例えば、マシン読み取り可能な媒体は、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリ装置、電気的、光学的、音響的又は他の形態の伝播信号（例えば、搬送波、赤外線信号、デジタル信号等）、等々を含む。
【００２１】
概略
[0042]本発明の実施形態は、ランタイムに、ソフトウェアをアッセンブルし、再コンフィギュレーションし、移動させ、そして適応させるのを許すメカニズムを提供する。図１は、再コンフィギュレーション可能なソフトウェアの動的構造を容易にするためのシステム１００の一実施形態のブロック図である。
【００２２】
[0043]図１を参照すれば、システム１００は、ネットワークサーバー１０６と、ネットワーク１０２と、該ネットワーク１０２を経てネットワークサーバー１０６に結合されたクライアント装置１０４とを備えている。これらクライアント装置１０４は、対話式の通信装置である。一実施形態において、ネットワーク１０２は、ワイヤレスネットワークであり、そしてクライアント装置１０４は、ワイヤレス電話、手のひらサイズのコンピューティング装置、ＰＤＡ、又はインターネット可能な機器リモートコントローラのような移動装置である。このような通信装置は、ワイヤレスネットワーク１０２を経てネットワークサーバー１０６とワイヤレス通信すると共に、互いに通信することができる。別の実施形態では、ネットワーク１０２が非ワイヤレスネットワーク（例えば、インターネット）であり、そしてクライアント装置１０４が、ＰＣシステム、ＰＤＡ、消費者向け電子装置等の非ワイヤレス装置である。この技術で良く知られた種々様々な通信技術を使用して、クライアント装置１０４とネットワークサーバー１０６との間で通信を行うことができる。
【００２３】
[0044]ソフトウェア構造システム１０８は、いかなるクライアント装置１０４に存在してもよい。更に、ソフトウェア構造システムは、ネットワークサーバー１０６に存在してもよい。ソフトウェア構造システム１０８は、クライアント装置１０４のユーザ又はネットワークサーバー１０６、或いは他のシステム又は装置により要求される機能に対してソフトウェア（例えば、アプリケーション又はサービス）をコンポーズする役割を果たす。ソフトウェア構造システム１０８は、必要な機能を実施するアプリケーションコンポーネントの集合体を識別するソフトウェア構造データを得、アプリケーションコンポーネントの中で対話ルールを指示するソフトウェアロジックデータを得、ソフトウェア構造データ及びソフトウェアロジックデータを記憶エリアに記憶し、次いで、ソフトウェアロジックデータを使用して、ソフトウェア構造データにより指定されたアプリケーションコンポーネントの呼び出しを整合することにより、ソフトウェアをコンポーズする。
【００２４】
[0045]一実施形態において、アプリケーションコンポーネント（ここでは、マイクロビルディングブロック又はＭＢＢとも称される）は、システムにおいて最も小さなアドレス可能な機能ユニットである。各ＭＭＢは、入力パラメータの集合体を受け取り、その状態に影響し得るアクションを実行し、そして出力パラメータの集合体を発生する。ＭＢＢは、他のＭＢＢへの参照を記憶しない。従って、ＭＢＢが新たなＭＢＢと交換される場合に、他のＭＢＢは、交換について通知される必要がない。
【００２５】
[0046]ソフトウェア構造の全てのコンポーネントに関する情報と、これらコンポーネント間の対話ルールに関する情報とを、指定の記憶エリアに維持することにより、ソフトウェア構造システム１０８は、コンポーズされたソフトウェアの構造及びロジックを明確に客観化(externalize)する。更に、一実施形態では、ソフトウェア構造システム１０８は、個々のコンポーネントの内部状態属性、内部ソフトウェア実行状態（現在実行中のコンポーネントの状態）、及びソフトウェアを実行するのに必要なコンフィギュレーションパラメータ（例えば、ユーザの好み及び実行ディレクトリー）を記憶エリアに維持することにより、コンポーズされたソフトウェアの状態を明確に客観化する。
【００２６】
[0047]ソフトウェア状態の明確な客観化は、ソフトウェアのコンフィギュレーション性をサポートする（即ち、ソフトウェア内部状態を変更する能力を与える）。例えば、顧客サポートの代表者がユーザの移動電話に接続して、ユーザの介在を必要とせずに、移動電話をリモート位置でコンフィギュレーションするようにソフトウェアパラメータを変更することができる。コンフィギュレーション性の他の例は、リモートオブジェクト、バッファサイズ、及びネットワークパラメータに対する参照を変更することを含んでもよい。ソフトウェア状態の明確な客観化は、ランタイムにおいてソフトウェア状態の検査を許す。次いで、この情報を使用して、ユーザがアプリケーションにアクセスする間にソフトウェアをコンフィギュレーションすることができる。
【００２７】
[0048]一実施形態において、ソフトウェア構造システム１０８は、指定の個人がソフトウェア状態をブラウズして希望の変更を指定するのを許すユーザインターフェイスを提供する。
【００２８】
[0049]更に、ソフトウェア状態、ロジック及び構造の客観化は、ソフトウェアの更新性もサポートする（即ち、特定のコンポーネントを交換するか、又はソフトウェアの実行ロジックを変更することにより、ソフトウェアの振舞いを修正し又は改善するのを許す）。特に、状態の客観化は、間違った振舞いを修正するためにシステムの幾つかのパラメータの値（例えば、バッファのサイズ）を変更するのを許す。構造の客観化は、ランタイムにソフトウェアコンポーネントを交換するのを許し、又、ロジックの客観化は、ソフトウェアのコンポーネント間で対話ルールを変更するための機能を与える。従って、ソフトウェアは、システムを再始動する必要なく更新することができる。これは、いかなる形式のメモリ（例えば、電気的メモリ、磁気メモリ、光学的メモリ等）を使用するシステムにも適用される。
【００２９】
[0050]一実施形態において、ソフトウェア構造システム１０８により与えられるユーザインターフェイスは、ユーザが、アプリケーションコンポーネントのリスト、アプリケーションコンポーネント間の対話ルール、及びソフトウェア状態を見て、このデータの任意の断片へ希望の変化を指定するのを許す。
【００３０】
[0051]更に、ソフトウェアのロジック、構造及び状態の明確な客観化は、自動的なソフトウェアアップグレードをサポートする。即ち、明確に客観化されたロジックにアクセスし、そして変化を導入する（例えば、ユーザインターフェイスを経て）ことにより、アプリケーションロジックが変更されてもよい。次いで、ランタイムのインフラストラクチャーは、新規なロジックルールを更新し、それに応じて、ソフトウェアの振舞いを変更してもよい。更に、明確に客観化されたソフトウェア構造を更新し、ソフトウェアのロジックを変更して、新たなコンポーネントに対する新たな対話ルールを追加し、又は既存の対話ルールを編集して、削除されたコンポーネントをもはや使用しないようにすることにより、ソフトウェアコンポーネントが変更又は除去されてもよい。
【００３１】
ソフトウェアの動的構造
[0052]図２Ａは、ソフトウェアを動的に構造化するプロセス２００の一実施形態を示すフローチャートである。このプロセスは、ハードウェア（例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等）、ソフトウェア（汎用コンピュータシステム又は専用マシンにおいて実行されるような）、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス２００は、図１のソフトウェア構造システム１０８により実行される。
【００３２】
[0053]図２Ａを参照すれば、処理ロジックは、要求される機能に関連した１組のアプリケーションコンポーネントを識別するソフトウェア構造の定義を受け取ることで開始される（処理ブロック２０２）。一実施形態では、ソフトウェア構造の定義は、ＸＭＬで与えられる。或いは又、ソフトウェア構造の定義は、種々の他のコンピュータ言語（例えば、Ｊａｖａ、ＨＴＭＬ、Ｃ＋＋等）で与えられてもよい。一実施形態において、アプリケーションコンポーネントは、ユーザにより選択される。或いは又、アプリケーションコンポーネントは、処理ロジック又は他の何らかのシステムにより希望の機能に基づいて選択される。一実施形態において、アプリケーションコンポーネント（又はＭＢＢ）は、システムにおける最小のアドレス可能な機能ユニットである。ＭＢＢの例示的構造を、図３Ａ及び３Ｂに関連して以下に詳細に説明する。
【００３３】
[0054]処理ブロック２０４において、処理ロジックは、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取る。一実施形態において、ソフトウェアロジックの定義は、ＸＭＬで与えられる。或いは又、ソフトウェア構造の定義は、種々の他のコンピュータ言語（例えば、Ｊａｖａ、ＨＴＭＬ、Ｃ＋＋等）で与えられてもよい。一実施形態において、ソフトウェアロジックは、ＭＢＢの実行順序を指定するアクションにより定義される。一実施形態において、ＭＢＢ実行順序は、解釈アクション(interpretedaction)により指定される。或いは又、ＭＢＢ実行順序は、コンパイルアクション(compiled action)により指定される。解釈アクションとは、ノードが実行状態を表わすＭＢＢであり、且つエッジが遷移順序を定義するような決定論的ディレクテッドグラフ(directedgraph)（各ノードからの唯一の考えられる遷移）である。コンパイルアクションとは、ＭＢＢの呼び出し順序を指定するコードフラグメントである。アクションについては、図４Ａ−４Ｃを参照して以下に詳細に説明する。
【００３４】
[0055]次いで、処理ロジックは、各々のリストされたＭＢＢを識別する情報をソフトウェア構造の定義から抽出し（処理ブロック２０６）、そして一実施形態では、この情報を使用して、各ローカルＭＢＢをインスタンス生成する（処理ブロック２０８）。ローカルＭＢＢは、ソフトウェア構造システム１０８と同じ装置に存在するＭＢＢである。
【００３５】
[0056]処理ブロック２１０では、処理ロジックがＭＢＢデータを記憶エリアに記憶する。一実施形態において、ＭＢＢデータは、各ＭＢＢに対するＭＢＢ識別子（例えば、ＭＢＢネーム）及びＭＢＢ参照（ローカル又はリモート）を含む。一実施形態において、「ドメイン」の観念を使用して、記憶エリアにおいて関連ＭＢＢの集合体を参照し、そしてＭＢＢデータにおいて識別される各ＭＢＢは、ドメインにおいて登録される（即ち、独特のネームが指定される）。この実施形態では、ローカルオブジェクトは、現在ドメインに存在するオブジェクトである。ドメインは、図５Ａ−５Ｄを参照して以下に詳細に説明する。
【００３６】
[0057]次いで、処理ロジックは、各々のリストされたアクションを識別する情報をソフトウェアロジックの定義から抽出し（処理ブロック２１２）、そして一実施形態では、この情報を使用して、各ローカルアクションに対するアクションオブジェクトの集合体をインスタンス生成する（処理ブロック２１４）。一実施形態では、アクションオブジェクトは、ノードがＭＢＢを表わしそしてエッジが遷移順序を定義するディレクテッドグラフを記憶する。一実施形態では、各アクションは、ランタイムにおいてアクション状態オブジェクトに関連付けされる。アクションは、以下に詳細に述べるように、このオブジェクトを使用して入力及び出力パラメータを記憶する。
【００３７】
[0058]処理ブロック２１６において、処理ロジックは、アクションデータを記憶エリアに記憶する。一実施形態では、記憶データは、各ＭＢＢに対するアクションオブジェクト識別子（例えば、ネーム）及びアクションオブジェクト参照（ローカル又はリモート）を含む。一実施形態では、アクションデータにおいて識別される各アクションは、ドメインに登録される。
【００３８】
[0059]一実施形態において、処理ロジックは、各ＭＢＢの内部属性を識別する情報も抽出し（処理ブロック２１８）、そしてこの情報を記憶エリアに記憶する（処理ブロック２２０）。一実施形態では、ＭＢＢ属性情報は、各ＭＢＢに対して処理ロジックにより受け取られる関連ＭＢＢの定義から抽出される。或いは又、この情報は、処理ブロック２０２において受け取られたソフトウェア構造の定義から抽出される。一実施形態において、ＭＢＢ属性情報は、全てのＭＢＢに対して各ＭＢＢ属性の識別子及び値を含む。加えて、ＭＢＢ属性情報は、各ＭＢＢの入力及び出力パラメータを識別する。一実施形態では、ＭＢＢ属性情報において識別される各属性は、ドメインに登録される。
【００３９】
[0060]処理ブロック２２２において、処理ロジックは、図６を参照して以下に詳細に述べるように、ソフトウェアロジックに基づいて、リストされたＭＢＢの呼び出しを整合する。
【００４０】
[0061]図２Ｂは、ソフトウェア構造システム２５０の一実施形態を示すブロック図である。一実施形態において、このソフトウェア構造システムは、ローダー２５２と、スケジューラー２５４と、データ記憶装置２６０とを備えている。
【００４１】
[0062]ローダー２５２は、要求された機能を実施するＭＢＢの集合体を識別するデータ（ＭＢＢデータ）と、これらＭＢＢの中で対話ルールを識別するデータ（ロジックデータ）と、各ＭＢＢの状態属性を識別するデータ（状態データ）とを得るという役割を果たす。一実施形態において、ローダー２５２は、ソフトウェア構造の定義、ソフトウェアロジックの定義、及び各当該ＭＢＢの定義をパーズすることによりこのデータセットを得る。これら定義は、同じ装置（例えば、同じ移動装置）で実行される異なるアプリケーションから、或いはサーバー又は他の何らかの装置（例えば、他の何らかの移動装置）から、ソフトウェア構造システム２５０へダウンロードされてもよい。別の実施形態では、ソフトウェア構造の定義は、各ＭＢＢに対する状態情報を含み、ＭＢＢの定義は使用されない。
【００４２】
[0063]一実施形態では、ローダー２５２は、得られたデータセットに基づいてローカルＭＢＢ及びアクションオブジェクトをインスタンス生成し、そしてＭＢＢデータ、ロジックデータ及び状態データをデータ記憶装置２６０に記憶するという役割も果たす。一実施形態において、データ記憶装置２６０は、図５Ａを参照して以下に詳細に述べるように、構造メモリ、ロジックメモリ及び状態メモリを有するドメインを表わす。一実施形態において、データは、ネーム及び値タプルの形態でデータ記憶装置２６０に記憶される。特に、ＭＢＢデータは、ＭＢＢネーム／ＭＢＢ参照タプルを含み、ロジックデータは、アクションネーム／アクション参照タプルを含み、更に、状態データは、属性ネーム／属性値タプルを含む。
【００４３】
[0064]スケジューラー２５４は、ロジックデータに基づいてＭＢＢの呼び出しを整合するという役割を果たす。一実施形態において、スケジューラー２５４は、コンポーズされたソフトウェアの実行状態に関する情報を維持し且つエクスポートするという役割も果たす。この情報は、例えば、現在実行されるアクションと、現在実行されるアクションのＭＢＢと、アクションに関連したパラメータ（例えば、アクションの入力パラメータ、及びアクションのＭＢＢにより発生されるパラメータ）とを指定する。
【００４４】
[0065]一実施形態において、スケジューラー２５４は、ＭＢＢとして実施される。従って、スケジューラー２５４の状態をアクセスすることができると共に、ランタイムに、他のＭＢＢとして変更することができる。スケジューラー２５４を交換するための能力は、デベロッパーが異なる実行セマンティックスを与えるのを許す。例えば、それらは、透過的なローカル又はリモートＭＢＢ呼び出しをサポートするスケジューラーを選択し、それ故、ランタイムソフトウェアパーティショニングを簡単化することができる。更に、それらは、各ＭＢＢ呼び出しの後にパラメータ及び状態のチェックポイントとなるスケジューラーを選択して、欠陥許容セマンティックスを与えることもできる。更に、それらは、アクション実行境界を定義し、アクション実行回数に関する保証を与えるリアルタイムスケジューラを選択することができる。特定のスケジューラーを選択する能力と、動的ソフトウェア交換能力とを結合したことで、実行条件及び外部要求に基づいてその実行モデルを変更できる適応ソフトウェアの構造が簡単化される。
【００４５】
[0066]一実施形態において、ソフトウェア構造システム２５０は、ユーザインターフェイスマネージャー２５６及び変更コーディネーター２５８も備えている。ユーザインターフェイスマネージャー２５６は、関連ユーザインターフェイスを与えると共に、該ユーザインターフェイスを経てユーザ入力を受け取るという役割を果たす。ユーザインターフェイスは、ユーザに使用可能なアプリケーションのリスト、及び各アプリケーションに対するコンポーネントのリストを指定することができる。ユーザは、このユーザインターフェイスを使用して、アプリケーションコンポーネントを選択し、そしてそれらを異なる装置へ移動するように要求してもよい。又、ユーザインターフェイスは、アプリケーションパーティショニング機構のリストを指定し、ユーザが１つを選択してアプリケーションを素早くカスタマイズするのを許してもよい。又、ユーザインターフェイスは、ユーザがソフトウェア状態をブラウズして、ソフトウェアを再コンフィギュレーションするための望ましい変化を指定するのを許してもよい。更に、ユーザインターフェイスは、ユーザが、アプリケーションコンポーネントのリスト、アプリケーションコンポーネント間の対話ルール、及びソフトウェア状態を見て、ソフトウェアを更新するためのこのデータの断片への望ましい変化を指定するのを許してもよい。更に、ユーザインターフェイスは、ユーザが、ソフトウェアをアップグレードするためのソフトウェアロジック又はアプリケーションコンポーネントへの変化を要求するのを許してもよい。
【００４６】
[0067]変更コーディネーター２５８は、ソフトウェアの再コンフィギュレーション、ソフトウェアの更新、又はソフトウェアのアップグレードに対する要求を処理し、そしてこのような要求に応答して、データ記憶装置２６０の関連情報を変更するという役割を果たす。一実施形態において、変更コーディネーター２５８は、スケジューラー２５４と協働して、変化を実施する。例えば、変更コーディネーター２５８は、変更が要求されたコンポーネントに対して安全コンポーネントスワップ状態を決定し、次いで、データ記憶装置２６０においてコンポーネントを変更するように、スケジューラー２５４に要求してもよい。
【００４７】
[0068]従って、ソフトウェア構造システム２５０は、ランタイムにソフトウェアをアッセンブルし、そのロジック、構造及び状態のオンザフライ変更のサポートを与える。特に、明確な実行状態客観化は、デベロッパーからのサポートなしに、安全コンポーネントスワップ状態を計算するようにレバレッジできるようにする詳細情報をソフトウェア構造システム２５０に与える。ソフトウェア構造システム２５０は、コンポーネントの呼び出しを制御し、それ故、いつ安全に変化を導入できるか分かる。更に、明確なソフトウェア状態客観化は、状態移行の要求を排除する。新たなコンポーネントが挿入されると、それが以前のコンポーネントの状態に自動的に接続される。更に、コンポーネントは、他のコンポーネントへの参照を記憶しないので、コンポーネントの参照を更新する必要はない。同様に、アプリケーションコンポーネントは、ネームでアドレスされ、参照でアドレスされるのではないので、コンポーネントは、ソフトウェアへの変化により影響されない。
【００４８】
[0069]アプリケーションコンポーネント又はＭＢＢは、図３Ａ−３Ｃを参照して以下に詳細に説明する。
【００４９】
[0070]図３Ａは、入力パラメータ３０２を受け取り、内部状態パラメータ３０４に影響し得るアクションを実行し、そして出力パラメータ３０６を発生するＭＢＢ３００のオペレーションを例示する。
【００５０】
[0071]図３Ｂは、ＭＢＢ３２０の構造の一実施形態のブロック図である。図３Ｂを参照すれば、ＭＢＢ３２０は、１組の１つ以上のメソッド３２４、１組のゼロ以上の属性３２２、及びデマルチプレクサ３２６より成るエンティティである。メソッド３２４は、タスクを実施するアルゴリズムである。メソッド３２４は、１組のゼロ以上の入力値を要求し、１組のゼロ以上の出力値を発生する。一実施形態において、デマルチプレクサ３２６は、ＭＢＢのエントリーポイントで、入力パラメータ３２８を受け取り、それに対応するＭＢＢメソッド３２４を抽出する。一実施形態において、各属性３２２は、ネーム及び値タプルである。値は、アルゴリズムを実施するためにメソッドにより要求される情報を記憶する変数である。属性３２２は、外部記憶エリアに記憶され、ネームによりアクセスすることができる。
【００５１】
[0072]一実施形態において、各ＭＢＢは、アプリケーションコンポーネント定義について説明する。この定義は、当該ＭＢＢに対して、入力パラメータのリストと、出力パラメータのリストと、状態属性のリストと、ＭＢＢを実施するエンティティを指定するプラットホーム従属フィールド（例えば、Ｊａｖａクラスファイル、ＮＥＴオブジェクト、ＤＬＬ等）とを指定する。図３Ｃは、ＭＢＢ「ＲｅｇｉｓｔｅｒＯｂｊｅｃｔ」に対するＸＭＬ記述ファイルを例示するもので、クラスタグは、各プラットホームに対する実施を表わし、状態タグは、各状態属性に対するネーム及びタイプタプルを指定し、入力タグは、ネーム及びタイプタプルに関して入力パラメータを記述し、そして出力タグは、ＭＢＢがネーム及びタイプタプルに関して発生するパラメータを表わす。
【００５２】
[0073]図４Ａ−４Ｃを参照して、アクションについて以下に詳細に説明する。
【００５３】
[0074]上述したように、アクションは、ＭＢＢ実行順序を指定し、それ故、ソフトウェアのロジックを定義する。アクションは、解釈アクション又はコンパイルアクションでよい。解釈アクションは、ノードが実行状態を示すＭＢＢを表わし且つエッジが遷移順序を定義するような決定論的ディレクテッドグラフである。各エッジは、次の遷移を決定するようにランタイムに評価される関連する条件付きステートメントを有する。条件付きステートメントは、ＭＢＢにより発生されたパラメータ（出力パラメータ）を参照することができる。多数の出力エッジを伴うノードでは、１つのエッジのみがランタイムにおいて真を評価できる（決定論的グラフ）。デフォールトにより、この条件付きステートメントの値は、真である。アクショングラフは、通常、１つの開始ノードと、中間ノードと、１つの終了ノードとを有する。開始ノード及び終了ノード（終了ノードは、アクショングラフが終わることを示す）は、各グラフ横断の一部分である。中間ノードは、エッジに指定された条件付きステートメントに基づくグラフの横断に依存する。アクショングラフは、エラーの場合に遷移を指定する付加的なノード及びエッジを含む。即ち、エラーが検出されない場合には、システムは、デフォールトアクショングラフを使用する。しかしながら、実行エラーが検出された場合には、システムは、エラーノード及びエッジを使用する。例えば、各ノードは、エラーが検出された場合に終了状態に達してアクションを終了させる付加的なエッジを有してもよい。アクショングラフは、より精巧な振舞い（例えば、「ｗｈｉｌｅ」、「ｆｏｒ」及び「ｒｅｐｅａｔ」のようなループステートメントをサポートする）を定義してもよい。解釈アクションを実行することは、グラフを横断することに対応する。
【００５４】
[0075]図４Ａは、ＭＢＢ１が開始ノードであるような解釈アクションを例示する。このアクションは、ＭＢＢ１の呼び出しで開始し、ＭＢＢ２の呼び出しに続き、次いで、「Ｘ」の値に基づいて、ＭＢＢ３又はＭＢＢ４を呼び出し、最終的に、ＭＢＢ５を呼び出す。変数「Ｘ」の値は、アクションを呼び出すクライアントにより与えられるか、或いはＭＢＢ１又はＭＢＢ２により発生される出力パラメータである。この値は、以下に詳細に述べるアクション実行状態の一部分として記憶される。
【００５５】
[0076]解釈アクションは、現在実行状態に関する情報をエクスポートし、そしてランタイムにアクショングラフを変更するためのサポートを与えることにより、実行レベルにおけるレフレクション(reflection)を与える。更に、明確な表示は、システムのロジックに関する推論を簡単化し、静的な分析をサポートし、且つ第三者が状態を追加又は除去しそしてグラフをコンフィギュレーションすることでシステムの振舞いを変更するのを許す。
【００５６】
[0077]コンパイルアクションは、ＭＢＢ呼び出し順序を指定するコードフラグメントである。図４Ｂは、図４Ａに示す解釈アクションに対応するコンパイルアクションを例示するものである。
【００５７】
[0078]コンパイルアクションは、指定のライブラリーを使用してＭＢＢを呼び出す。一実施形態において、指定のライブラリーは、ＭＢＢのネームと、入力タプルの集合体とを受け取り、そして与えられたパラメータで指定のＭＢＢを呼び出す。このメカニズムは、ソフトウェア構造システムがＭＢＢの呼び出しに対して制御権を得るのを許し、ＭＢＢの安全な交換を許す。一実施形態において、ソフトウェア構造システムに登録されたＭＢＢとしてコンパイルアクションコードが与えられる。それ故、アクションを呼び出すことは、ＭＢＢを呼び出すことに対応し、従って、ソフトウェア構造システムがランタイムにアクションの定義を交換するのを許す。
【００５８】
[0079]図４Ｃは、解釈（左）及びコンパイル（右）アクション「ｅｘａｍｐｌｅＡｃｔｉｏｎ」の定義を与えるＸＭＬ記述ファイルを例示する。
【００５９】
[0080]図４Ｃを参照すれば、解釈アクションの場合、各状態は、ネーム、即ちその状態において呼び出されるＭＢＢのネームと、例外が生じない場合の次の状態と、例外が生じたときの次の状態とを有する。条件付き遷移（例えば、状態２）については、条件付きステートメントが各状態ネームに指定される。又、エラー状態遷移については、条件付き遷移を使用することもできる。一実施形態において、アクション状態に関連した情報、即ち状態ネーム、その状態で呼び出されるＭＢＢのネーム、例外が生じない場合の次の状態、及び例外が生じたときの次の状態を記憶するために、各アクションに対してＡｃｔｉｏｎＳｔａｔｅオブジェクトが生成される。
【００６０】
[0081]コンパイルアクションの記述は、アクションのネームと、それを実施するＭＢＢとを含む。
【００６１】
[0082]解釈及びコンパイルアクションは、両方とも、ＭＢＢ交換をサポートする。特に、自動的ランタイムＭＢＢ交換のための１つの重要な要件は、システムが安全なコンポーネントスワップ状態（即ち、ターゲットコンポーネントが他のコンポーネントにより参照されない実行状態）に達するのを検出し、そしてスワップされたコンポーネントに残りのコンポーネントがアクセスするのを回避することである。解釈及びコンパイルの両方のアクションでは、安全なコンポーネントスワップ状態を自動的に決定することができる。解釈アクションでは、インタープリターがＭＢＢを明確に呼び出す。コンパイルアクションは、指定のライブラリーを使用して、ＭＢＢを呼び出すことができる。両方の場合に、システムは、呼び出しの制御権を得、それ故、ＭＢＢを安全に交換することができる。
【００６２】
[0083]更に、解釈及びコンパイルの両アクションは、ソフトウェアの更新性及びアップグレード性に貢献する。アクションを更新することは、既存のアクションを交換することに対応し、又は解釈アクションの場合には、実行グラフを変更することに対応する。システムをアップグレードすることは、新たなアクションを追加することを意味し、又は解釈アクションの場合には、アクショングラフを変更して、状態を合体又は変更することを意味する。
【００６３】
[0084]解釈アクションとコンパイルアクションとの間の１つの差は、ランタイム操作粒度である。コンパイルアクションは、ランタイムには、変更することができず、即ち遷移状態を追加、除去又は変更することができない。コンパイルアクションの振舞いを変化させるには、それに関連したＭＢＢを交換し、即ちアクションコードを交換することが必要である。更に、ランタイムにコンパイルアクションを検査することはできず、それ故、現在実行状態について学習することも、アクションの振舞いについて学習することもできない。解釈アクションでは、グラフが、アクションの振舞いについて学習するに充分な情報を与える。しかしながら、コンパイルアクションは、解釈アクションより迅速に実行する。というのは、それらは、それらの実行を推進するためのインタープリターを必要としないからである。コンポーズされたソフトウェアの必要な機能に基づき、ソフトウェア構造システムは、解釈アクション又はコンパイルアクションのいずれを使用してもよい。
【００６４】
[0085]図５Ａ−５Ｃを参照してドメインについて詳細に説明する。ドメインとは、関連するＭＢＢの集合体を総計するアブストラクションである。ドメインは、ドメインの構造（ＭＢＢのリスト）、ドメインのロジック（アクションのリスト）、及びドメインの状態（ＭＢＢの状態属性及び実行状態値）を記憶するための記憶エリアを与える。ドメインは、単一ユニットとしてのＭＢＢの集合体の操作（例えば、移動、保留及び再開）を容易にするために、ハイアラーキー式にコンポーズすることができる。
【００６５】
[0086]図５Ａは、ドメイン５００の構造を例示する。
【００６６】
[0087]図５Ａを参照すれば、ドメイン５００は、構造メモリ５０２と、ロジックメモリ５０４と、状態メモリ５０６とを備えている。各メモリは、ネーム及び値タプルを記憶する。構造メモリ５０２は、ドメインに登録されたＭＢＢに対応するタプルの集合体を維持する。タプルネームは、ＭＢＢのネームを指し（各ＭＢＢには登録時にネームが指定される）、そして値は、ＭＢＢへの参照を記憶する。参照とは、ローカルポインタであるか、又はリモートＭＢＢに対するポインタである。一実施形態において、ソフトウェア構造システムは、ローカル又はリモート呼び出しをデベロッパーに対して透過的にする。
【００６７】
[0088]ロジックメモリ５０４は、ドメインによりエクスポートされるアクションのリストを記憶する。構造メモリと同様に、ロジックメモリ５０４は、ネームによりアクションを参照し、そして値は、ローカルポインタであるか又はリモート参照である。
【００６８】
[0089]状態メモリ５０６は、ドメインに登録されたＭＢＢに対する状態属性を記憶する。状態メモリ５０６は、ネームで属性を参照し、そして値は、属性の値である。ＭＢＢ登録中に、システムは、状態メモリ５０６に対するポインタをＭＢＢに指定する。同じドメインに属するＭＢＢが同じ状態メモリ５０６を共有する。
【００６９】
[0090]ドメインは、ＭＢＢの大きな集合体の編成を簡単化するためにハイアラーキー式にコンポーズすることができる。ドメインメモリは、登録されたサブドメインのドメインメモリに対する参照（ネーム及び値タプル）を記憶すると共に、ルート(root)ドメインメモリに対する参照も記憶する。図５Ｂは、ドメインのハイアラーキー式コンポーズを例示する。
【００７０】
[0091]図５Ｂを参照すれば、ルートドメイン５２０は、２つのサブドメイン（ドメイン５２２及び５２４２）を有し、そしてドメイン５２２は、３つのサブドメイン（ドメイン５２６、５２８及び５３０）を有する。
【００７１】
[0092]一実施形態において、デフォールト可視性(visibility)ポリシーは、ドメインがサブドメインのメモリにアクセスできることを指令する。例えば、ルートドメイン５２０は、システムの全てのドメインメモリ（即ち、ドメイン５２２乃至５３０）にアクセスすることができ、一方、ドメイン５３０は、それ自身のドメインメモリにしかアクセスできない。可視性ポリシーを変更する（例えば、サブドメインがそれらの親又は兄弟ドメインのメモリにアクセスするのを許す）ことができる。
【００７２】
[0093]一実施形態では、ソフトウェアアーキテクチャーの定義を使用して、ソフトウェア構造システムにより維持されるドメインハイアラーキーを説明する。図５Ｃは、ソフトウェアアーキテクチャーの定義を与えるＸＭＬ記述子ファイルを例示する。
【００７３】
[0094]図５Ｃを参照すれば、アーキテクチャー記述子における各ドメインエントリーは、２つの付加的なファイル、即ちドメインに登録されるＭＢＢ及びアクションを指定する構造及びロジック記述子を指す。ロジック記述子は、図４Ｃを参照して上述した。構造記述子は、単一ドメインに対するソフトウェア構造の定義を与える。図５Ｄは、ドメインに対するソフトウェア構造の定義を与えるＸＭＬ記述子ファイルを例示する。
【００７４】
[0095]図５Ｄを参照すれば、構造記述子は、ドメインに属するＭＢＢのリストを与える。この記述子は、ネーム及びＭＢＢ記述子のリストを含む。ＭＢＢ記述子は、関連ＭＢＢの定義を与えるドキュメントである（例えば、図３Ｃに示すＭＢＢ記述子）。一実施形態において、ＭＢＢ記述子は、関連ローカルＭＢＢをインスタンス生成するのに使用される。全てのＭＢＢは、ドメイン構造メモリに＜ｎａｍｅ、ＭＢＢ、ｒｅｆｅｒｅｎｃｅ＞タプルとして登録される。ＭＢＢネームは、ＭＢＢにアクセスするためのキーとして使用される。
【００７５】
[0096]アクションの実行について以下に詳細に述べる。解釈アクションの実行は、インタープリターに依存する。コンパイルアクションを実行することは、ＭＢＢを呼び出すことに対応し、それ故、インタープリターを必要としない。
【００７６】
[0097]解釈アクションは、システムのロジックを客観化すると共に、ソフトウェアの機能的見地を実行するのに必要なＭＢＢ呼び出しシーケンスに関する情報を与える。一実施形態において、解釈アクションの実行は、図２Ｂのスケジューラー２５４により遂行され、これは、アクションのデータをＭＢＢ呼び出しスケジューラーとして使用して、コンポーズされたソフトウェアの実行を推進する。一実施形態では、アクションのデータは、ＭＢＢの呼び出し順序を指定するアクション定義（例えば、決定論的限定状態オートマトン（ＤＦＳＡ））である。スケジューラーは、ソフトウェアの実行状態に関する情報を維持し、エクスポートする。この情報は、例えば、現在実行されるアクション、現在実行されるアクションのＭＢＢ、及びアクションに関連したパラメータ（例えば、入力パラメータ、及びアクションのＭＢＢにより発生されるパラメータ）を指定する。
【００７７】
[0098]一実施形態において、各アクションは、アクション状態オブジェクトに関連付けされる。アクションは、このオブジェクトを使用して、アクション実行に関連した入力及び出力パラメータを記憶する。パラメータは、アクションを呼び出すクライアントにより与えられ、又、それら呼び出しの結果としてＭＢＢにより発生される。ＭＢＢは、アクション状態オブジェクトに記憶されたパラメータを消費して、それらのアルゴリズムを実施する。アクション呼び出し中に発生したパラメータをセーブし、そして状態属性へのＭＢＢアクセスを同期させることで、クライアントがアクションを同時に呼び出すのを許す。
【００７８】
[0099]図６は、解釈アクションを実行するプロセスの一実施形態を示すフローチャートである。このプロセスは、ハードウェア（例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等）、ソフトウェア（汎用コンピュータシステム又は専用マシンにおいて実行されるような）、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス６２００は、図２Ｂのスケジューラー２５４により遂行される。
【００７９】
[00100]図６を参照すれば、処理ロジックは、アクションを実行する要求を受け取ることで始まる（処理ブロック６０２）。この要求は、入力パラメータを伴うアクション状態オブジェクトを含む。
【００８０】
[00102]処理ブロック６０４において、処理ロジックは、アクションネームをキーとして使用して、ロジックメモリにおける要求されたアクションのオブジェクトにアクセスする。
【００８１】
[00102]処理ブロック６０６において、処理ロジックは、アクションオブジェクトから第１のＭＢＢのネームを得る。
【００８２】
[00103]次いで、処理ロジックは、ＭＢＢネームをキーとして使用して構造メモリから第１のＭＢＢへの参照を得（処理ブロック６０８）、そしてこのＭＢＢを呼び出して、これを入力パラメータとしてアクション状態オブジェクトに通す（処理ブロック６１０）。
【００８３】
[00104]更に、処理ロジックは、アクションオブジェクトにまだＭＢＢがあるかどうか決定する（処理ボックス６１４）。もしそうであれば、処理ロジックは、アクションオブジェクトから次のＭＢＢのネームを得（処理ブロック６１６）、そして処理ブロック６０８へ戻る。もしそうでなければ、処理ロジックは、アクション状態オブジェクトを出力パラメータと共に要求者へ戻す（処理ブロック６１８）。
【００８４】
[00105]図７は、解釈アクションの実行を例示する。アクションのネームは、「ｅｘａｍｐｌｅＡｃｔｉｏｎ」であり、これは、２つのＭＢＢより成る。説明を簡単にするために、アクションは、条件付き遷移もループももたないと仮定する。
【００８５】
[00106]図７を参照すれば、スケジューラーは、「ｅｘａｍｐｌｅＡｃｔｉｏｎ」と称されるアクションを実行するための要求を受け取る。この要求は、２つのパラメータａ及びｃを含むアクション状態オブジェクトを備えている（ステップ１）。スケジューラーは、アクションネームを使用して、ロジックメモリにアクセスすると共に、アクショングラフの第１ノードに対するポインタを得る。スケジューラーは、アクショングラフのノードからＭＢＢのネームを得、次いで、そのネーム（ＭＢＢ１）を使用して、構造メモリからＭＢＢを分析する。
【００８６】
[00107]ＭＢＢ１を分析した後、スケジューラーは、ＭＢＢを呼び出して、アクション状態オブジェクトに通す。ＭＢＢ１は、アクション状態オブジェクトから得られるａというネームの入力パラメータを要求する。ＭＢＢ１は、そのアルゴリズムを実行して、出力パラメータｂを発生し、これをアクション状態オブジェクトに記憶する（ステップ２）。
【００８７】
[00108]次いで、スケジューラーは、現在アクショングラフのノードから次の状態のネームを得、ＭＢＢのネーム（ＭＢＢ２）を得、そして構造メモリからＭＢＢ２を分析する。スケジューラーは、アクション状態オブジェクトをパラメータとしてＭＢＢ２を呼び出す。ＭＢＢ２は、アクション状態オブジェクトから得られる２つのパラメータｂ及びｃを要求する。ＭＢＢ２は、そのアルゴリズムを実行して、ｄと称される出力パラメータを発生し、そしてそのパラメータをアクション状態オブジェクトに記憶する（ステップ３）。
【００８８】
[00109]最終的に、スケジューラーは、アクション状態オブジェクトを要求者へ返送し、要求者は、アクションの実行中に発生された出力パラメータを検索することができる。
【００８９】
[00110]上述したアクション実行プロセスは、安全なソフトウェア再コンフィギュレーションポイントを自動的に検出するのに使用できる。より詳細には、ソフトウェアを再コンフィギュレーションできるのは、ＭＢＢ呼び出しと呼び出しの間だけである。ＭＢＢは、客観化された構造、ロジック及び状態にアクセスしてそれを変更することが許される。それ故、これらパラメータを変更すると、ＭＢＢの実行に影響し、一貫性のないソフトウェア状態を招くことがある。ソフトウェア構造システムは、望ましからぬ結果を回避するために、ＭＢＢがその実行を完了するまで待機する。この振舞いは、解釈アクション及びコンパイルアクションの両方に適用される。コンパイルアクションは、指定のライブラリーを使用して、ＭＢＢを呼び出し、それ故、再コンフィギュレーションを実施するための制御件をシステムに与える。
【００９０】
プロトコル
[00111]上述したように、本発明の幾つかの実施形態は、ドメインを使用して、ランタイムにソフトウェアの構造をサポートする。図８Ａは、ドメイン８００の一実施形態を示すブロック図である。
【００９１】
[00112]図８Ａを参照すれば、ドメイン８００は、３つのサブコンポーネント、即ちドメインメモリ８０２、ドメインローダー８０４、及びドメインスケジューラー８０６を備えている。ドメインメモリ８０２は、エンティティによりホストされるＭＢＢのネーム及び参照、ＭＢＢの属性、並びに１組の１つ以上のアクションを記憶するタプルコンテナである。
【００９２】
[00113]ドメインローダー８０４は、ＭＢＢを生成し、ＭＢＢを削除し、ＭＢＢのリストを設け、アクションをロードし、アクションを削除し、アクションのリストを設け、アクションを変更し、そしてソフトウェア構造記述、ＭＢＢ記述及びソフトウェアロジック記述をパーズするという役割を果たす。
【００９３】
[00114]ドメインスケジューラー８０６は、アクション定義（例えば、アクションのＤＦＳＡ）をパーズし、そしてアクション定義により指定された順序でＭＢＢアクションを呼び出すという役割を果たす。
【００９４】
[00115]図８Ｂは、タプルコンテナを例示する。タプルコンテナは、情報がネーム及び値の対として記憶される記憶エリアである。タプルコンテナは、情報タプルを記憶すると共に、ネームをサーチキーとして使用して情報タプルを検索する機能を備えている。
【００９５】
[00116]一実施形態において、ソフトウェアの動的コンポーズは、プロトコルのセットを使用して達成される。プロトコルのセットは、ドメイン初期化プロトコル、ＭＢＢ生成プロトコル、ＭＢＢ削除プロトコル、ＭＢＢリスティングプロトコル、ソフトウェア構造パージングプロトコル、アクションローディングプロトコル、アクション削除プロトコル、アクションリスティングプロトコル、アクション変更プロトコル、ソフトウェアロジックパージングプロトコル、ＭＢＢ呼び出しプロトコル、リモートＭＢＢ呼び出しプロトコル、及びアクション呼び出しプロトコルを含む。
【００９６】
[00117]図９は、ドメイン初期化プロトコルを示す。図９を参照すれば、ドメインオブジェクトが生成されるときに、ドメインオブジェクトは、ドメインスケジューラー、ドメインメモリオブジェクト（タプルコンテナ）、及びドメインローダーオブジェクトをインスタンス生成する。次いで、ドメインオブジェクトは、ドメインスケジューラーをリモートオブジェクトとしてエクスポートし、ドメインにおいてアクションをリモートから呼び出すのを許す。
【００９７】
[00118]図１０は、ＭＢＢ生成プロトコルを示す。図１０を参照すれば、ドメインローダーは、マイクロビルディングブロックを生成して初期化する機能を実施する。一実施形態において、ドメインローダーは、ＭＢＢネーム及びＭＢＢクラスネームを受け取るＣｒｅａｔｅＭＢＢと称されるメソッドを実施する。このメソッドは、指定クラスのオブジェクトをインスタンス生成し、ＭＢＢを初期化し、そしてＭＢＢのネーム及びオブジェクトへの参照と共にタプルをドメインメモリに記憶する。更に、ＣｒｅａｔｅＭＢＢメソッドは、タプルの参照カウンタ値を０にセットして、ＭＢＢがいずれのアクションでも使用されないことを指示する。
【００９８】
[00119]図１１は、ＭＢＢ削除プロトコルを示す。図１１を参照すれば、ドメインローダーは、マイクロビルディングブロックを削除する機能を実施する。一実施形態において、ドメインローダーは、ＭＢＢのネームを受け取り、ＭＢＢ参照カウンタをチェックし、そして参照カウンタが０に等しい場合にＭＢＢを削除するＤｅｌｅｔｅＭＢＢと称するメソッドを実施する。さもなければ、ドメインローダーは、エラーメッセージを返送する。
【００９９】
[00120]図１２は、ＭＢＢ削除プロトコルを示す。図１２を参照すれば、ドメインローダーは、マイクロビルディングブロックをリストする機能を実施する。一実施形態において、ドメインローダーは、ドメインメモリに記憶されたＭＢＢのリストを返送するＬｉｓｔＭＢＢと称されるメソッドを実施する。
【０１００】
[00121]図１３は、ソフトウェア構造ロードプロトコルを示す。図１３を参照すれば、ソフトウェア構造をロードすることは、特定のソフトウェアに必要とされる全てのマイクロビルディングブロックを生成して初期化することを意味する。一実施形態において、ドメインローダーが、ソフトウェア構造記述と、それをロードするための要求とを受け取ったときに、プロトコルがスタートする。ドメインローダーは、記述をパーズし、記述の各エントリーに対して１つのＭＢＢを生成する。ＭＢＢを生成するために、ドメインローダーは、ＭＢＢ生成プロトコルをレバレッジする。
【０１０１】
[00122]図１４は、ソフトウェアアクションロードプロトコルを示す。図１４を参照すれば、ドメインローダーは、ソフトウェアアクションをロードするためのプロトコルを実施する。一実施形態において、ドメインローダーは、ソフトウェアロジック記述をパーズし、その記述に含まれた各状態に対して、アクション状態情報オブジェクトを生成し、そしてその状態のネームと、アクション状態オブジェクトへの参照とを含むタプルをドメインメモリに記憶する。更に、ドメインローダーは、状態において参照されるＭＢＢごとに、ＭＢＢ参照カウンタを増加する。
【０１０２】
[00123]図１５は、アクション削除プロトコルを示す。図１５を参照すれば、ドメインローダーは、アクションを削除するための機能を実施する。一実施形態において、ドメインローダーは、アクションのネームを受け取り、ドメインメモリからアクションを検索し、そして含まれる各ＭＢＢに対して、参照カウンタを減少し、ＭＢＢを削除するＤｅｌｅｔｅＡｃｔｉｏｎと称されるメソッドを実施する。
【０１０３】
[00124]図１６は、アクションリスティングプロトコルを示す。図１６を参照すれば、ドメインローダーは、アクションをリストするための機能を実施する。一実施形態において、ドメインローダーは、ドメインメモリに記憶された全てのアクションのリストを返送するＬｉｓｔＡｃｔｉｏｎｓと称されるメソッドを実施する。
【０１０４】
[00125]図１７は、アクション変更プロトコルを示す。図１７を参照すれば、ドメインローダーは、アクションを変更する機能を実施する。一実施形態において、ドメインローダーは、アクション状態のネームと、新たな状態を含むオブジェクトとを受け取るＭｏｄｉｆｙＡｃｔｉｏｎと称するメソッドを実施する。このメソッドは、ドメインメモリからアクション状態を検索し、既存の状態と新たな状態のＭＢＢのネームを比較し、それらが異なる場合に、ＭＢＢ参照カウンタを減少する。又、このメソッドは、状態情報を新たなものと交換する。
【０１０５】
[00126]図１８は、ローカルＭＢＢ呼び出しプロトコルを示す。図１８を参照すれば、このプロトコルは、ローカルＭＢＢ、即ちドメインスケジューラーと同じドメインとして含まれたＭＢＢをいかに呼び出すか指定する。一実施形態において、プロトコルは、ｉｎｖｏｋｅＭＢＢメソッドでスタートし、これは、２つのパラメータ、即ちＭＢＢのネーム、及びアクション状態オブジェクトを必要とする。ドメインローダーは、ＭＢＢのネームを使用して、ＭＢＢへの参照を含むタプルをドメインメモリから検索する。次いで、ドメインローダーは、ＭＢＢを呼び出し、そしてアクション状態オブジェクトから必要なパラメータを抽出すると共に、ドメインメモリから状態に対応する属性を抽出する。次いで、アクションを実行した後に、ＭＢＢは、それが変更した全ての属性でドメインメモリを更新し、出力パラメータをアクション状態オブジェクトに記憶し、そしてそのアクション状態オブジェクトをドメインローダーへ返送する。
【０１０６】
[00127]図１９は、リモートＭＢＢ呼び出しプロトコルを示す。図１９を参照すれば、このプロトコルは、リモートドメインに存在するＭＢＢを呼び出すためのサポートを与える。この機能は、アクションの実行に影響せずに、ＭＢＢの移動を簡単にする。一実施形態において、ドメインスケジューラーは、ＭＢＢがローカルであるかリモートであるかを自動的に検出して、適切なプロトコルを使用する。一実施形態において、プロトコルは、ＭＢＢにおけるアクションを呼び出すための要求をドメインローダーが受け取ることで始まる。この要求は、２つのパラメータ、即ちＭＢＢのネームと、アクション状態オブジェクトとを含む。ドメインローダーは、ドメインメモリからＭＢＢネームを分析する。その結果が、リモートＭＢＢへの参照である。ドメインローダーは、リモート手順コールを発生するためのアクションを呼び出す。ＲＰＣ要求を送信及び受信するためのアクションの集合が与えられる。これらのアクション及びそれに関連したＭＢＢがデフォールトによりロードされる。このアクションは、ＳｅｎｄＲｅｍｏｔｅＲｅｑｕｅｓｔと称され、ＭＢＢの参照、ネーム、リモート呼び出しのメソッド、及びアクション状態オブジェクトを必要とする。このアクションは、リモート要求を発生し、更新されたアクション状態オブジェクトを受け取る。
【０１０７】
[00128]図２０は、ＭＢＢ交換プロトコルを示す。図２０を参照すれば、このプロトコルは、実行中のシステムを停止せずに、既存のＭＢＢと新たなＭＢＢとの交換を許す。一実施形態において、このプロトコルは、ＭＢＢを交換するためのコマンドでスタートし、安全な再コンフィギュレーション状態を待機し、そしてタプルネームは同じであるが実施クラスが異なる新たなＭＢＢを生成する。
【０１０８】
[00129]図２１は、アクション呼び出しプロトコルを示す。図２１を参照すれば、アクション呼び出しプロトコルは、ＤＦＳＡをパーズしたり影響のあるＭＢＢを呼び出したりすることを含むアクションを実行するのに必要な全てのステップを定義する。一実施形態において、ドメインオブジェクトは、アクション呼び出しプロトコルを実施するメソッド（ｉｎｖｏｋｅＡｃｔｉｏｎ）をエクスポートする。このメソッドは、アクションネーム及びパラメータを、ネーム及び値タプルの集合として受け取る。ドメインオブジェクトは、アクション状態オブジェクトを生成すると共に、パラメータタプルと、ａｃｔｉｏｎＮａｍｅと称されるタプルを、アクションのネームと共に記憶する。次いで、ｉｎｖｏｋｅＡｃｔｉｏｎメソッドは、ドメインスケジューラーにおいてプロセスメソッドを呼び出し、アクション状態オブジェクトを通す。ドメインスケジューラーは、ｓｃｔｉｏｎＮａｍｅタプルをアクション状態オブジェクトから分析し、その値を使用して、第１のＤＦＳＡ状態情報オブジェクトを分析する。ドメインスケジューラーは、ＤＦＳＡ状態に関連したＭＢＢのネームと、ＭＢＢにおいて呼び出すためのアクションのネームとを検索する。次いで、ドメインスケジューラーは、ＭＢＢアクションネームをアクション状態オブジェクトに記憶し、そしてドメインローダーのｉｎｖｏｋｅＭＢＢプロトコルを呼び出す。ＭＢＢ呼び出しプロトコルが終了すると、ドメインスケジューラーは、アクション状態情報オブジェクトから次のアクション状態ネームを検索し（エラー状態の場合には、次のエラー状態を検索し）、そのネームを使用して、それに関連したアクション情報状態オブジェクトを分析し、次いで、ブロックＡに含まれた全てのステップを繰り返す。このプロトコルは、最終的なアクション状態に達するまでＭＢＢの呼び出しを保持する。この点において、ドメインスケジューラーは、更新されたアクション状態オブジェクトをドメインオブジェクトへ返送し、該ドメインオブジェクトがそれを要求者へ返送する。
【０１０９】
再コンフィギュレーション可能なソフトウェアへのプログラムの変換
[00130]ある実施形態では、従来のメソッドを使用して生成された既存のプログラムは、上述したように、その後、再コンフィギュレーション、更新、又はアップグレードされてもよいソフトウェアへと変換することができる。一実施形態において、この変換は、１組の１つ以上のタスクとして定義できるプログラムに適用でき、タスクは、オブジェクト（例えば、Ｊａｖａオブジェクト）の集合より成り、そして呼び出し順序を定義するオブジェクト間の１組の対話ルールと、全てのオブジェクトのパブリック属性の合体であるタスク状態とを有する。
【０１１０】
[00131]図２２−２４は、プログラムを再コンフィギュレーション可能なソフトウェアへと変換するプロセス２２００の一実施形態を示すフローチャートである。このプロセスは、ハードウェア（例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等）、ソフトウェア（汎用コンピュータシステム又は専用マシンにおいて実行されるような）、又はその両方の組合せを含んでもよい処理ロジックにより実行されてもよい。一実施形態では、プロセス２２００は、図１のソフトウェア構造システム１０８により実行される。
【０１１１】
[00132]図２２を参照すれば、処理ロジックは、タスクの構造を客観化することで始まる（処理ブロック２２０２）。一実施形態において、処理ロジックは、（ａ）各タスク、及びタスクに属する各オブジェクトに対して、オブジェクトのネーム及びオブジェクトへの参照でタプルを生成し、（ｂ）各々の生成されたタプルをドメインメモリに記憶し、（ｃ）プログラムＰに属する全てのオブジェクトのネームと共に、値がリストであるｓｏｆｔｗａｒｅＡｒｃｈｉｔｅｃｔｕｒｅと称されるタプルを生成し、更に、（ｄ）このタプルｓｏｆｔｗａｒｅＡｒｃｈｉｔｅｃｔｕｒｅをドメインメモリに記憶することにより、タスクの構造を客観化する。
【０１１２】
[00133]処理ブロック２２０４において、処理ロジックは、タスクの状態を客観化する。一実施形態において、処理ロジックは、（ａ）タスクにおける各オブジェクト、及びオブジェクトにおける各パブリック属性に対して、タプルのネームが属性のネームで、且つ値が変数の値への参照であるようなタプルを生成し、更に、（ｂ）各生成されたタプルをドメインメモリに記憶することにより、状態を客観化する。
【０１１３】
[00134]処理ブロック２２０６において、処理ロジックは、タスクの各オブジェクトをＭＢＢへ変換する。タスクのオブジェクトをＭＢＢへ変換するプロセスの一実施形態を、図２３を参照して以下に詳細に説明する。
【０１１４】
[00135]処理ブロック２２０８において、処理ロジックは、タスクのロジックを客観化する。タスクのロジックを客観化するプロセスの一実施形態を、図２４を参照して以下に詳細に説明する。
【０１１５】
[00136]図２３Ａは、タスクのオブジェクトをＭＢＢへ変換するプロセスの一実施形態を示すフローチャートである。
【０１１６】
[00137]図２３Ａを参照すれば、処理ロジックは、オブジェクトに関連した全パブリックメソッドのネームでリストを生成することで始まる（処理ブロック２３０２）。パブリックメソッドは、オブジェクトの外部から呼び出すことのできる（例えば、クライアントにより）機能である。
【０１１７】
[00138]処理ブロック２３０４において、処理ロジックは、全てのパブリックメソッドをプライベートメソッドに変換する。プライベートメソッドは、内部で呼び出すことのできる（例えば、オブジェクトの別のメソッドにより）機能である。
【０１１８】
[00139]処理ブロック２３０６において、処理ロジックは、属性をネーム及び値タプルとしてドメインメモリに記憶させ且つそこからアクセスさせるようにオブジェクトコードを変更する。
【０１１９】
[00140]処理ブロック２３０７において、処理ロジックは、ネーム及びタプルリストを受け取り、そしてプライベートメソッドのリストからプライベートメソッドの１つを呼び出すメソッドをオブジェクトコードに追加する。
【０１２０】
[00141]図２３Ｂは、ＭＢＢを呼び出すためのプロセスの一実施形態を示すフローチャートである。
【０１２１】
[00142]図２３Ｂを参照すれば、処理ロジックは、アクション状態オブジェクトからａｃｔｉｏｎＮａｍｅ値を抽出して、どのアクションがクライアントにより要求されたか決定する（処理ブロック２３０７）。アクション状態オブジェクトは、アクションの実行中に要求され及び発生される入力及び出力パラメータの集合を記憶する。一実施形態において、入力及び出力パラメータは、タプルとして記憶される。
【０１２２】
[00143]処理ブロック２３１０において、処理ロジックは、要求されたアクションのネームがパブリックメソッドのリストに記憶されたメソッドの１つに対応することを照合する。さもなければ、処理ロジックは、例外を生じさせる。
【０１２３】
[00144]処理ブロック２３１２において、処理ロジックは、アクション状態オブジェクトからアクションにより要求される入力パラメータを抽出する。
【０１２４】
[00145]処理ブロック２３１４において、処理ロジックは、抽出されたパラメータを使用してａｃｔｉｏｎＮａｍｅ値により指定されるメソッドを呼び出す。
【０１２５】
[00146]次いで、処理ロジックは、呼び出しからの結果をアクション状態オブジェクトに記憶し（処理ブロック２３１６）、次いで、アクション状態オブジェクトを返送する（処理ブロック２３１８）。
【０１２６】
[00147]図２４は、タスクのロジックを客観化するためのプロセスの一実施形態を示すフローチャートである。
【０１２７】
[00148]図２４を参照すれば、処理ロジックは、タスクの呼び出しの流れを分析して、ディレクテッドグラフを発生することで始まり、ここでは、ノードのネームが呼出し番号に対応する（処理ブロック２４０２）。
【０１２８】
[00149]処理ブロック２４０４において、処理ロジックは、ネームがグラフノードのネームであり且つ値がノードに関する情報を記憶するオブジェクトであるようなタプルを、グラフノードごとに生成することにより、ディレクテッドグラフからＤＦＳＡを発生する。
【０１２９】
[00150]処理ブロック２４０６において、処理ロジックは、前記タプルをドメインメモリに記憶する。
【０１３０】
[00151]処理ブロック２４０８において、処理ロジックは、ネームがアクションのネームであり且つ値が第１グラフノードを伴うストリングであるような付加的なタプルを記憶する。
【０１３１】
通信ミドルウェアサービスの実施例
[00152]ＭＢＢを使用して構築される多プロトコルオブジェクト要求ブローカー（ＯＲＢ）通信ミドルウェアサービスについて以下に説明する。このサービスは、ワイヤプロトコルとは独立したクライアント及びサーバー機能を提供する。即ち、サーバーオブジェクトのメソッドは、ＩＩＯＰ、ＳＯＡＰ又はＸＭＬ−ＲＰＣのような異なるプロトコルにわたって呼び出すことができる。同様に、クライアント要求は、基礎となるプロトコルに関わらず、同じインターフェイス及びセマンティックスを使用する。その実施は、ＩＩＯＰ及びＸＭＬ−ＲＰＣに対するサポートを与える。しかしながら、ランタイムに付加的なＭＢＢを開発して配備することにより付加的なプロトコルを追加することができる。ＥｘＯＲＢアーキテクチャー（状態、構造及びロジック）が客観化されるので、ランタイムにＥｘＯＲＢアーキテクチャーを検査し及び操作することができる。
【０１３２】
[00153]ＥｘＯＲＢは、１１個のドメインにグループ編成された２８個のマイクロビルディングブロックで構成される。図２５は、ＥｘＯＲＢの構造を示す。
【０１３３】
[00154]図２５を参照すれば、ＣＤＲパラメータマネージメントドメインは、共通データ表示（ＣＤＲ）フォーマット（ＣＯＲＢＡデフォールト表示）に基づいてパラメータをマーシャル及びデマーシャルする機能を与える。ＣＤＲマーシャルパラメータマイクロビルディングブロックは、パラメータ及びＣＤＲバッファエンコードオブジェクトを受け取り、そしてパラメータのＣＤＲ表示を含むバイトアレーを返送する。ＣＤＲデマーシャルパラメータマイクロビルディングブロックは、バイトバッファ、該バッファから抽出すべきパラメータタイプのリストを伴うアレー、及びＣＤＲバッファデコードオブジェクトを受け取り、そしてオブジェクトの値を伴うアレーウィ返送する。
【０１３４】
[00155]ＸＭＬＲＰＣパラメータマネージメントドメインは、ＣＤＲパラメータマネージメントドメインと同様であるが、ＸＭＬＲＰＣプロトコルに基づいてエンコードされたパラメータをマーシャル及びデマーシャルする機能を与える。
【０１３５】
[00156]ＩＩＯＰプロトコル処理ドメインは、ＩＩＯＰプロトコルに合致するメッセージをエンコード及びデコードするための機能をエクスポートするマイクロビルディングブロックを総計する。ＩＩＯＰエンコード要求マイクロビルディングブロックは、マーシャル化パラメータのリスト及び要求フィールドの集合（例えば、リモートオペレーションネーム、予想される応答、及び要求ｉｄ）を受け取り、そしてＩＩＯＰに基づいてフォーマットされたバイトバッファを発生する。ＩＩＯＰデコード要求マイクロビルディングブロックは、ＩＩＯＰフォーマットの到来要求を伴うバイトバッファと、要求メッセージを記述するフィールド（例えば、長さ）の集合とを受け取り、その要求をパーズし、そして要求のｉｄやターゲットオブジェクトやターゲットメソッドを含む要求に関する情報を伴う属性の集合と、パラメータを伴うバイトバッファとを発生する。ＩＩＯＰエンコード応答及びＩＩＯＰデコード応答は、ＩＩＯＰ応答メッセージを発生すると共に、到来するＩＩＯＰ応答メッセージをデコードするための機能を与える。最終的に、ＩＩＯＰデコードヘッダは、ネットワークからオリジナルの到来要求を受け取り（バイトバッファ）、そして１２個の初期バイトをパーズし、これがＧＩＯＰヘッダを構成する。このヘッダは、残りのメッセージの長さ及びメッセージのタイプに関する情報を含む。
【０１３６】
[00157]ＸＭＬＲＰＣプロトコル処理ドメインは、ＩＩＯＰプロトコル処理ドメインと同等であり、ＸＭＬＲＰＣ要求及び応答を取り扱う機能を与える。
【０１３７】
[00158]ネットワークデータマネージメントドメインは、到来及び出発ネットワークトラフィックを取り扱うという役割を果たす。これは、３つのマイクロビルディングブロック、即ちデータ送信、データ受信及びデータ垣間見(Peek)で構成される。データ送信マイクロビルディングブロックは、バッファ、その長さ及び通信ポイントオブジェクト（例えば、ＴＣＰソケット）を受け取り、そしてその通信ポイントを使用してネットワークを経てデータを送信する。データ受信マイクロビルディングブロックは、バッファ、受信すべきデータの長さ、及び通信ポイントオブジェクトを受け取り、そしてその通信ポイントオブジェクトを使用してデータをバッファに記憶し、データを得る。データ垣間見マイクロビルディングブロックは、データ受信マイクロビルディングブロックと同様であるが、ネットワークバッファから読み取ったデータを除去するものではない。
【０１３８】
[00159]オブジェクト呼び出しドメインは、Ｊａｖａ言語レフレクション能力を使用してサーバーメソッド呼び出しを自動化するために２つのマイクロビルディングブロックを含んでいる。この機能の結果として、デベロッパーは、それらのサーバーオブジェクトに対するスケルトンを構築する必要がなく、それらを登録するだけでよく、そしてシステムは、それが要求する全ての情報を自動的に得る。準備メソッド呼び出しマイクロビルディングブロックは、オブジェクトへのポインタと、呼び出すべきメソッドのネームとを受け取る。このマイクロビルディングブロックは、Ｊａｖａレフレクションを使用して、メソッドシグネチャーを検査し、メソッドを呼び出すのに必要なパラメータのタイプと共にアレーを生成し、そのアレーを出力パラメータとして返送する。呼び出しメソッドマイクロビルディングブロックは、パラメータ値と共にアレーを受け取り、オブジェクトメソッドを呼び出し、メソッドにより発生されたパラメータと共にアレーを返送する。
【０１３９】
[00160]ＴＣＰ到来接続マネージメントドメインは、到来するＴＣＰネットワークの接続を取り扱う機能を与える。初期化マイクロビルディングブロックは、ＥｘＯＲＢが要求を聴取するために使用するポートを指定する整数を受け取る。受け容れマイクロビルディングブロックは、到来するＴＣＰ要求を聴取し、それが入力パラメータを受け取らない場合に、ネットワーク接続をカプセル化するＴＣＰ通信ポイントオブジェクトを返送する。
【０１４０】
[00161]ＴＣＰ出発接続マネージメントドメインは、リモートピアとのＴＣＰ接続確立を取り扱う。このドメインは、２つのマイクロビルディングブロックを含む。接続マイクロビルディングブロックは、ホストネーム及びポートを受け取り、ホストへ接続し、更に、ネットワーク接続をカプセル化するＴＣＰ通信ポイントを返送する。返送通信ポイントマイクロビルディングブロックは、ＴＣＰ通信ポイントオブジェクトを受け取り、そしてそれを閉じるか、又はそのキャッシングアルゴリズムに基づいてそれをキャッシュ記憶する。
【０１４１】
[00162]オブジェクト登録ドメインは、サーバーオブジェクトを管理するという役割を果たす。登録オブジェクトマイクロビルディングブロックは、オブジェクトｉｄ及びオブジェクト参照を受け取り、オブジェクトをテーブルに記憶する。このテーブルは、ドメインの状態メモリに記憶される状態属性である。除去オブジェクトマイクロビルディングブロックは、オブジェクトｉｄを受け取り、それに関連したオブジェクトをテーブルから除去する。ゲットオブジェクトマイクロビルディングブロックは、オブジェクトｉｄを受け取り、その関連オブジェクトへの参照を返送する。
【０１４２】
[00163]プロトコル検出ドメインは、到来する要求の通信ミドルウェアプロトコルを識別するための機能をエクスポートする。この機能は、ＥｘＯＲＢの多プロトコル振舞いをサポートするために要求される。検出プロトコルマイクロビルディングブロックは、バイトバッファを受け取り、このバッファをパーズし、そしてミドルウェアプロトコルのネームと共にストリングを返送する。ＭＢＢの現在実施は、２つのタイプのプロトコル、即ちＸＭＬＰＲＣ及びＩＩＯＰを検出する。
【０１４３】
[00164]ＵＲＩオブジェクト参照マネージメントドメインは、リモートオブジェクトＵＲＩ参照をパーズして、リモートオブジェクトに要求を送信するに必要な全ての情報を抽出するための機能を与える。このドメインは、オブジェクトへの参照と称される単一のマイクロビルディングブロックを含み、これは、ＵＲＩ及びプロトコルタイプを受け取り、そしてホストネーム、ポート番号及びオブジェクトｉｄを返送する。
【０１４４】
[00165]テーブル１は、各ＥｘＯＲＢドメイン（Ｊａｖａバージョン）のサイズをリストしたものである。全サイズは、デバッグ情報なしで、７０ＫＢである。
【表１】
2007511018.tif 000002
【０１４５】
[00166]ＥｘＯＲＢは、４つのアクション、即ち要求送信、要求受信、初期化、及びオブジェクト登録、をエクスポートする。第１のものは、クライアント側の機能として意図され、一方、残りの３つ（要求受信、初期化、及びオブジェクト登録）は、サーバー側の機能として意図される。オブジェクト初期化及びオブジェクト登録は、ＭＢＢ初期化を呼び出すと共に、オブジェクトＭＢＢを登録する単一ノードアクションである。
【０１４６】
[00167]図２６は、要求送信アクションのためのアクショングラフを示す。簡単化のために、エラー状態は除去されている。クライアントオブジェクトは、それがアクションを呼び出すと、アクションのネーム、リモートオブジェクトの参照、呼び出しメソッド、要求されたパラメータ、及び使用すべきプロトコル（即ち、ＸＭＬＲＰＣ又はＩＩＯＰ）を含むアクション状態オブジェクト（アクションの実行中に発生されるパラメータを記憶するもの）を与える。このアクションは、オブジェクトＭＢＢへの参照の呼び出しを開始し、これは、リモートオブジェクトの参照をパーズすると共に、ホストネーム、オブジェクトｉｄ及びポートを抽出する。これらのパラメータは、アクション状態オブジェクトに記憶される。
【０１４７】
[00168]次いで、このアクションは、接続を呼び出し、これは、アクション状態オブジェクトからホストネーム及びポートを得、リモートホストとの接続を確立し（又は既存の接続を再使用し）、そしてＴＣＰソケット（ＴＣＰ通信ポイント）をカプセル化するオブジェクトをアクション状態オブジェクトに記憶する。次の状態への遷移は、条件付きであり、アクション状態オブジェクトに記憶された「プロトコル」変数の値に依存する。変数の値が「ｉｉｏｐ」である場合には、このアクションは、ＣＤＲマーシャルパラメータを呼び出して、パラメータをマーシャルし、次いで、ＩＩＯＰエンコード要求ＭＢＢを呼び出して、要求メッセージを生成する。変数の値が「ｘｍｌｒｐｃ」である場合には、このアクションは、ＸＭＬＲＰＣマーシャルパラメータを呼び出し、次いで、ＸＭＬＲＰＣエンコード要求を呼び出す。ＩＩＯＰエンコード要求及びＸＭＬＲＰＣエンコード要求ＭＢＢは、両方とも、適切なプロトコルに基づいてフォーマットされた要求と共にバイトバッファを発生する。アクショングラフにおける次の状態は、データ送信であり、これは、アクション状態オブジェクトからバッファを検索して、それを、アクション状態オブジェクトに記憶されたＴＣＰ通信ポイントを使用してリモートオブジェクトへ送信する。データ送信を呼び出した後に、このアクションは、「一方向」と称されるタプルをアクション状態オブジェクトから検索する。値が「真」である場合に、このアクションは、通信ポイント返送を呼び出し、これは、ＴＣＰ通信ポイントオブジェクトをアクション状態オブジェクトから処分し、アクション状態オブジェクトをアクション呼び出し者へ返送して終了となる。
【０１４８】
[00169]「一方向」の値が「偽」である場合には、このアクションは、応答のデコードへ続く。先ず、「プロトコル」タプルの値に基づいて、このアクションは、ＩＩＯＰヘッダ又はＸＭＬＲＰＣヘッダをデコードする。両ＭＢＢは、メッセージヘッダをパーズし、要求に関する情報をアクション状態オブジェクトに記憶する。両ＭＢＢに対する１つの必須のフィールドは、応答の残部の長さである。このアクションは、データ受信を呼び出し、これは、ネットワークから読み出さねばならないデータの量を決定するために長さタプルを要求する。次いで、アクションは、応答をデコードし、パラメータをデマーシャルするように進む。この場合も、アクションインタープリターは、「プロトコル」の値を使用して、グラフにおいてどんな経路をたどるか判断する。その後、このアクションは、通信ポイント返送ＭＢＢ（ＴＣＰ通信ポイントを処分する）を呼び出し、アクション状態オブジェクトをアクション呼び出し者へ返送して終了となる。アクション状態オブジェクトは、結果パラメータを含む。
【０１４９】
[00170]図２７は、要求受信のためのアクショングラフである。このアクションは、受け容れを呼び出すことでスタートし、これは、到来するネットワーク要求を検出し、ネットワーク接続をカプセル化するＴＣＰ通信ポイントを発生するまで阻止する。次いで、このアクションは、データ垣間見(peekdata)を呼び出し、これは、到来データバッファを垣間見て、初期バイトをパーズし、プロトコルのタイプを検出する。プロトコルのタイプがＩＩＯＰである場合には、データ垣間見ＭＢＢは、ネーム「プロトコル」で登録された値「ｉｉｏｐ」と共にタプルを記憶する。プロトコルタイプがＸＭＬＲＰＣである場合には、ＭＢＢは、同じネームのもとで値「ｘｍｌｒｐｃ」を記憶する。次いで、このアクションは、「プロトコル」値を使用して、ＩＩＯＰデコードヘッダへジャンプすべきかＸＭＬＲＰＣデコードヘッダへジャンプすべきかを決定する。これら２つのＭＢＢは、ヘッダをパーズし、次いで、それらがアクション状態オブジェクトに記憶する情報を抽出する。両ＭＢＢは、残りのデータの長さを指定する「長さ」というネームの必須タプルを記憶しなければならない。この値は、データ受信ＭＢＢにより使用され、残りの要求データをネットワークバッファから得る。
【０１５０】
[00171]このアクションは、アクション状態オブジェクトに記憶された「プロトコル」タプルの値に基づいて、ＩＩＯＰデコード要求又はＸＭＬＲＰＣデコード要求を呼び出す。両ＭＢＢは、ターゲットオブジェクトのｉｄ及びメソッドのネームを含む多数のフィールドを発生する。次いで、このアクションは、ゲットオブジェクトを呼び出し、これは、オブジェクトｉｄを使用して、ターゲットオブジェクトを探索すると共に、その参照をアクション状態オブジェクトに記憶する。メソッド準備呼び出しは、ターゲットメソッドのネームを使用して、Ｊａｖａレフレクションを使用するメソッドを呼び出すのに必要なパラメータを検査する。このＭＢＢは、パラメータタイプのアレーを発生する。次いで、「プロトコル」の値に基づいて、このアクションは、ＣＤＲデマーシャルパラメータ又はＸＭＬＲＰＣデマーシャルパラメータを呼び出し、これは、以前に発生されたタイプのアレーを使用して、到来する要求から値をデマーシャルする。これら２つのＭＢＢは、パラメータ値のアレーを発生する。メソッド呼び出しＭＢＢは、この値アレーを使用して、アクション状態オブジェクトに記憶されたターゲットオブジェクトのメソッドを呼び出す。メソッド呼び出しＭＢＢは、出力パラメータの値を伴うアレーを発生する。次いで、このアクションは、「プロトコル値」を使用して、出力パラメータをマーシャルすると共に、応答メッセージをＩＩＯＰ又はＸＭＬＲＰＣのいずれかで発生する。ＩＩＯＰエンコード応答及びＸＭＬＲＰＣエンコード応答ＭＢＢは、応答と共にバイトバッファを発生する。データ送信マイクロビルディングブロックは、アクション状態オブジェクトに記憶されたＴＣＰ通信オブジェクト（受け容れマイクロビルディングブロックで発生された）を使用してクライアントホストへ応答を送信する。その後、データを送信した後に、このアクションは、通信ポイント返送を呼び出し、これは、ＴＣＰ通信ポイントを処分するか、又はキャッシングアルゴリズムに基づいてキャッシュに記憶する。
【０１５１】
[00172]上述したように、コンフィギュレーション可能なソフトウェアの重要な特徴は、ソフトウェア状態を第１クラスオブジェクトとして操作するためのサポートにある。各ＭＢＢは、ネーム及び値の対に関して定義されたその状態依存性を明確に指定する。これらのタプルは、ＭＢＢドメインにより与えられる記憶エリアに記憶される。ソフトウェアの状態は、全てのＭＢＢ状態属性を合体したものである。それ故、ＥｘＯＲＢの状態は、２８個のマイクロビルディングブロックにより定義された全ての状態属性より成る。
【０１５２】
[00173]テーブル２は、ＥｘＯＲＢに関連した状態属性をリストする。このテーブルは、属性のネーム、その目的、及びそれを記憶するドメインのネームを含む。
【表２】
2007511018.tif 000003
【０１５３】
コンピュータシステムの実施例
[00174]図２８は、上述したオペレーションの１つ以上を遂行するのに使用できるコンピュータシステム２８００を例示するブロック図である。別の実施形態において、このマシンは、ネットワークルータ、ネットワークスイッチ、ネットワークブリッジ、パーソナルデジタルアシスタント（ＰＤＡ）、セルラー電話、ウェブアプライアンス、或いはマシンにより行われるべきアクションを特定する一連のインストラクションを実行できる何らかのマシンを備えてもよい。
【０１５４】
[00175]コンピュータシステム２８００は、プロセッサ２８０２と、メインメモリ２８０４と、静的メモリ２８０６とを備え、これらは、バス２８０８を経て互いに通信する。コンピュータシステム２８００は、更に、ビデオディスプレイユニット２８１０（例えば、液晶ディスプレイ（ＬＣＤ）又は陰極線管（ＣＲＴ））を備えてもよい。又、コンピュータシステム２８００は、アルファニューメリック入力装置２８１２（例えば、キーボード）と、カーソルコントロール装置２８１４（例えば、マウス）と、ディスクドライブユニット２８１６と、信号発生装置２８２０（例えば、スピーカ）と、ネットワークインターフェイス装置２８２２も備えている。
【０１５５】
[00176]ディスクドライブユニット２８１６は、上述したメソッドの１つ又は全てを実施する１組のインストラクション（即ち、ソフトウェア）２８２６が記憶されたコンピュータ読み取り可能な媒体２８２４を備えている。又、ソフトウェア２８２６は、メインメモリ２８０４及び／又はプロセッサ２８０２内に完全に又は少なくとも部分的に存在するように示されている。更に、ソフトウェア２８２６は、ネットワークインターフェイス装置２８２２を経て送信又は受信されてもよい。説明上、「コンピュータ読み取り可能な媒体」という語は、コンピュータにより実行するための一連のインストラクションを記憶又はエンコードできる媒体であって、コンピュータが本発明のメソッドのいずれの１つも実行するようにさせる媒体を包含するものとする。従って、「コンピュータ読み取り可能な媒体」という語は、ソリッドステートメモリ、光学的及び磁気的ディスク、並びに搬送波信号を包含するが、これらに限定されない。
【０１５６】
[00177]ランタイムに小さな実行ユニット（マイクロビルディングブロック）を動的にアッセンブルし且つコンフィギュレーションするためのソフトウェア構造方法及び装置について説明した。本発明の実施形態は、状態、構造及びロジックのような実行エレメントの客観化を使用できる。本発明の実施形態は、言語及びプラットホームに独立したもので、ソフトウェアコンポーネントのランタイムコンフィギュレーション性、更新性及びアップグレード性と、ソフトウェアコンポーネントのシームレス移動性と、構造化ソフトウェアの高い信頼性とを与えるものである。
【０１５７】
[00178]当業者であれば、以上の説明を読んだ後に、本発明の多数の変更や修正が疑いなく明らかとなろうが、図示して説明した特定の実施形態は、本発明を何らそれに限定するものではないことを理解されたい。それ故、種々の実施形態の細部にわたる言及は、本発明の本質と考えられる特徴のみを記載した特許請求の範囲を限定するものではない。
【図面の簡単な説明】
【０１５８】
【図１】再コンフィギュレーション可能なソフトウェアの動的な構造化を容易にするためのシステムの一実施形態を示すブロック図である。
【図２Ａ】ソフトウェアを動的に構造化するプロセスの一実施形態を示すフローチャートである。
【図２Ｂ】ソフトウェア構造システムの一実施形態を示すブロック図である。
【図３Ａ】マイクロビルディングブロック（ＭＢＢ）の動作を例示する図である。
【図３Ｂ】ＭＢＢの構造の一実施形態を示すブロック図である。
【図３Ｃ】ＭＢＢのＸＭＬ記述ファイルを例示する図である。
【図４Ａ】解釈アクションを例示する図である。
【図４Ｂ】コンパイルアクションを例示する図である。
【図４Ｃ】解釈アクション及びコンパイルアクションの定義を与えるＸＭＬ記述ファイルを例示する図である。
【図５Ａ】ドメインの構造を例示する図である。
【図５Ｂ】ドメインのハイアラーキーコンポーズを例示する図である。
【図５Ｃ】ソフトウェアアーキテクチャーの定義を与えるＸＭＬ記述ファイルを例示する図である。
【図５Ｄ】ドメインに対するソフトウェア構造の定義を与えるＸＭＬ記述ファイルを例示する図である。
【図６】解釈アクションを実行するためのプロセスの一実施例を示すフローチャートである。
【図７】解釈アクションの実行を例示する図である。
【図８Ａ】ドメインの一実施形態を示すブロック図である。
【図８Ｂ】タプルコンテナを例示する図である。
【図９】ドメインに使用される１組のプロトコルを示す図である。
【図１０】ドメインに使用される１組のプロトコルを示す図である。
【図１１】ドメインに使用される１組のプロトコルを示す図である。
【図１２】ドメインに使用される１組のプロトコルを示す図である。
【図１３】ドメインに使用される１組のプロトコルを示す図である。
【図１４】ドメインに使用される１組のプロトコルを示す図である。
【図１５】ドメインに使用される１組のプロトコルを示す図である。
【図１６】ドメインに使用される１組のプロトコルを示す図である。
【図１７】ドメインに使用される１組のプロトコルを示す図である。
【図１８】ドメインに使用される１組のプロトコルを示す図である。
【図１９】ドメインに使用される１組のプロトコルを示す図である。
【図２０】ドメインに使用される１組のプロトコルを示す図である。
【図２１】ドメインに使用される１組のプロトコルを示す図である。
【図２２】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図２３Ａ】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図２３Ｂ】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図２４】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施形態を示すフローチャートである。
【図２５】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図２６】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図２７】再コンフィギュレーション可能なミドルウェアサービスの構造を例示する図である。
【図２８】コンピュータシステムを例示するブロック図である。
【符号の説明】
【０１５９】
１００・・・システム、１０２・・・ネットワーク、１０４・・・クライアント装置、１０６：ネットワークサーバー、１０８・・・ソフトウェア構造システム、２５０・・・ソフトウェア構造システム、２５２・・・ローダー、２５４・・・スケジューラー、２５６・・・ユーザインターフェイスマネージャー、２５８・・・変更コーディネーター、２６０・・・データ記憶装置、３００・・・マイクロビルディングブロック、３０２・・・入力パラメータ、３０４・・・内部状態パラメータ、３０６・・・出力パラメータ、３２０・・・ＭＢＢ、３２２・・・属性、３２４・・・メソッド、３２６・・・デマルチプレクサ、５０２・・・構造メモリ、５０４・・・ロジックメモリ、５０６・・・状態メモリ、５２０・・・ルートドメイン、５２２、５２４、５２６、５２８、５３０・・・ドメイン、８０２・・・ドメインメモリ、８０４・・・ドメインローダー、８０６・・・ドメインスケジューラー
【図１】
2007511018.tif 000004
【図２Ａ】
2007511018.tif 000005
【図２Ｂ】
2007511018.tif 000006
【図３Ａ】
2007511018.tif 000007
【図３Ｂ】
2007511018.tif 000008
【図３Ｃ】
2007511018.tif 000009
【図４Ａ】
2007511018.tif 000010
【図４Ｂ】
2007511018.tif 000011
【図４Ｃ】
2007511018.tif 000012
【図５Ａ】
2007511018.tif 000013
【図５Ｂ】
2007511018.tif 000014
【図５Ｃ】
2007511018.tif 000015
【図５Ｄ】
2007511018.tif 000016
【図６】
2007511018.tif 000017
【図７】
2007511018.tif 000018
【図８Ａ】
2007511018.tif 000019
【図８Ｂ】
2007511018.tif 000020
【図９】
2007511018.tif 000021
【図１０】
2007511018.tif 000022
【図１１】
2007511018.tif 000023
【図１２】
2007511018.tif 000024
【図１３】
2007511018.tif 000025
【図１４】
2007511018.tif 000026
【図１５】
2007511018.tif 000027
【図１６】
2007511018.tif 000028
【図１７】
2007511018.tif 000029
【図１８】
2007511018.tif 000030
【図１９】
2007511018.tif 000031
【図２０】
2007511018.tif 000032
【図２１】
2007511018.tif 000033
【図２２】
2007511018.tif 000034
【図２３Ａ】
2007511018.tif 000035
【図２３Ｂ】
2007511018.tif 000036
【図２４】
2007511018.tif 000037
【図２５】
2007511018.tif 000038
【図２６】
2007511018.tif 000039
【図２７】
2007511018.tif 000040
【図２８】
2007511018.tif 000041
【手続補正書】
【提出日】平成18年6月22日(2006.6.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するステップと、
を備える方法。
【請求項２】
前記要求された機能は、要求されたワイヤレス機能を含む、請求項１に記載の方法。
【請求項３】
前記ソフトウェア構造データを得るステップは、
ソフトウェア構造の定義を受け取る段階であって、該ソフトウェア構造の定義は、前記要求された機能に関連した前記複数のアプリケーションコンポーネントを識別するものである段階と、
前記ソフトウェア構造の定義をパーズする段階と、
を含む請求項１に記載の方法。
【請求項４】
前記ソフトウェア構造データは、前記複数のアプリケーションコンポーネントの各々の識別子と、前記複数のアプリケーションコンポーネントの各々への参照とを含む、請求項１に記載の方法。
【請求項５】
前記複数のアプリケーションコンポーネントの前記各々は、ローカルオブジェクト及びリモートオブジェクトのいずれか１つである、請求項４に記載の方法。
【請求項６】
前記ソフトウェア構造の定義に基づいて前記複数のアプリケーションコンポーネントの各々がローカルであるかどうか決定するステップと、
各ローカルアプリケーションコンポーネントに対してコンポーネントオブジェクトをインスタンス生成するステップと、
を更に備える請求項３に記載の方法。
【請求項７】
前記複数のアプリケーションコンポーネントの各々の状態属性を識別するソフトウェア状態データを得るステップと、
前記ソフトウェア状態データをメモリに記憶するステップと、
を更に備えた請求項１に記載の方法。
【請求項８】
前記ソフトウェア状態データを得るステップは、
前記複数のアプリケーションコンポーネントの各々の定義を受け取る段階と、
前記複数のアプリケーションコンポーネントの各々の前記定義をパーズする段階と、
を含む請求項７に記載の方法。
【請求項９】
前記ソフトウェア状態データは、前記複数のアプリケーションコンポーネントの各々の各属性の属性ネーム及び属性値を含む、請求項７に記載の方法。
【請求項１０】
前記ソフトウェアロジックデータを得るステップは、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取る段階と、
前記ソフトウェアロジックの定義をパーズする段階と、
を含む請求項１に記載の方法。
【請求項１１】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、前記ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへの参照とを含む、請求項１０に記載の方法。
【請求項１２】
前記アクションオブジェクトは、ローカルオブジェクト及びリモートオブジェクトのいずれか１つである、請求項１１に記載の方法。
【請求項１３】
前記ソフトウェアロジックの定義において参照された各ローカルアクションに対しアクションオブジェクトをインスタンス生成する段階を更に含む、請求項１０に記載の方法。
【請求項１４】
ランタイムに前記複数のアプリケーションコンポーネントの１つを交換する要求を受け取るステップと、
安全なコンポーネントスワップ状態を決定するステップと、
前記安全なコンポーネントスワップ状態の間に前記複数のアプリケーションコンポーネントの前記１つを交換するステップと、
を更に備える請求項１に記載の方法。
【請求項１５】
前記複数のアプリケーションコンポーネントの前記１つは、システムを再スタートせずに交換される、請求項１４に記載の方法。
【請求項１６】
ランタイムに前記複数のアプリケーションコンポーネントの１つ以上をコンフィギュレーションする要求を受け取るステップと、
ランタイムに前記複数のアプリケーションコンポーネントの前記１つ以上をコンフィギュレーションするステップと、
を更に備える請求項１に記載の方法。
【請求項１７】
アプリケーションのリストをユーザに表示するステップと、
前記リストの各アプリケーションに対してアプリケーションコンポーネントのリストをユーザに表示するステップと、
ユーザ要求の際に、前記リストから異なるデバイスへアプリケーションコンポーネントを移動するステップと、
を更に備える請求項１に記載の方法。
【請求項１８】
各アクションは、アクションの実行に関連した入力及び出力パラメータを記憶するために指定されたアクション状態オブジェクトに関連付けられる、請求項１１に記載の方法。
【請求項１９】
前記複数のアプリケーションコンポーネントの呼び出しを整合する前記ステップは、
アクションを実行する要求であって、該アクションに関連したアクション状態オブジェクトを含むような要求を受け取る段階と、
前記アクションにより指定される第１アプリケーションコンポーネントのネームを得る段階と、
前記メモリに記憶された前記ソフトウェア構造データを使用して前記第１アプリケーションコンポーネントへの参照を得る段階と、
前記アクション状態オブジェクトを入力パラメータとして使用して前記第１アプリケーションコンポーネントを呼び出す段階と、
を含む請求項１８に記載の方法。
【請求項２０】
前記アクションにより指定された第２のアプリケーションコンポーネントのネームを得る段階と、
前記メモリに記憶された前記ソフトウェア構造データを使用して前記第２のアプリケーションコンポーネントへの参照を得る段階と、
前記アクション状態オブジェクトを入力パラメータとして使用して前記第２のアプリケーションコンポーネントを呼び出す段階と、
前記第２のアプリケーションコンポーネントがアクションの最後のアプリケーションコンポーネントである場合に、前記アクション状態オブジェクトをアクション実行の要求者へ返送する段階と、
を更に含む請求項１９に記載の方法。
【請求項２１】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得ると共に、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリ記憶するためのメモリと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するためのスケジューラーと、
を備えるクライアントデバイスのための装置。
【請求項２２】
前記ローダーは、前記要求された機能に関連した前記複数のアプリケーションコンポーネントを識別するソフトウェア構造の定義を受け取り、そしてそのソフトウェア構造の定義をパーズすることにより、ソフトウェア構造データを得る、請求項２１に記載の装置。
【請求項２３】
前記ソフトウェア構造データは、前記複数のアプリケーションコンポーネントの各々の識別子と、前記複数のアプリケーションコンポーネントの各々への参照とを含む、請求項２１に記載の装置。
【請求項２４】
前記ローダーは、更に、前記複数のアプリケーションコンポーネントの各々に対しコンポーネントオブジェクトをインスタンス生成する、請求項２１に記載の装置。
【請求項２５】
前記ローダーは、更に、前記複数のアプリケーションコンポーネントの各々の状態属性を識別するソフトウェア状態データを得ると共に、そのソフトウェア状態データをメモリに記憶する、請求項２１に記載の装置。
【請求項２６】
前記ローダーは、前記複数のアプリケーションコンポーネントの各々の定義を受け取りそして前記複数のアプリケーションコンポーネントの各々の定義をパーズすることによりソフトウェア状態データを得る、請求項２５に記載の装置。
【請求項２７】
前記ソフトウェア状態データは、前記複数のアプリケーションコンポーネントの各々の各属性の属性ネーム及び属性値を含む、請求項２５に記載の装置。
【請求項２８】
前記ローダーは、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取りそしてそのソフトウェアロジックの定義をパーズすることにより前記ソフトウェアロジックデータを得る、請求項２１に記載の装置。
【請求項２９】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、前記ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへの参照とを含む、請求項２８に記載の装置。
【請求項３０】
アプリケーションのリストをユーザに表示し、前記リスト内の各アプリケーションに対してアプリケーションコンポーネントのリストをユーザに表示し、そして前記リストから異なるデバイスへアプリケーションコンポーネントを移動するユーザ要求を受け取るためのユーザインターフェイスを更に備える、請求項２１に記載の装置。
【請求項３１】
前記ローダーは、更に、システムを再スタートせずに、前記複数のアプリケーションコンポーネントの１つを交換する、請求項２１に記載の装置。
【請求項３２】
前記ローダーは、ランタイムに前記複数のアプリケーションコンポーネントの１つ以上をコンフィギュレーションする、請求項２１に記載の装置。
【請求項３３】
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得る手段と、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得る手段と、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶する手段と、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合する手段と、
を備えるシステム。
【請求項３４】
処理システムにおいて実行されたときに、前記処理システムが、
要求された機能に関連した複数のアプリケーションコンポーネントを識別するソフトウェア構造データを得るステップと、
前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、
前記ソフトウェア構造データ及びソフトウェアロジックデータをメモリに記憶するステップと、
前記ソフトウェアロジックデータに基づきランタイムに前記複数のアプリケーションコンポーネントの呼び出しを整合するステップと、
を備える方法を遂行するようにさせる実行可能なインストラクションを含むコンピュータ読み取り可能な媒体。
【請求項３５】
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成するステップと、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成するステップと、
前記複数のオブジェクト各々の１つ以上の属性を識別するソフトウェア状態データを生成するステップと、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するステップと、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更するステップと、
を備える方法。
【請求項３６】
前記ソフトウェア構造データは、前記複数のオブジェクト各々の識別子と、前記複数のオブジェクト各々への参照とを含む、請求項３５に記載の方法。
【請求項３７】
前記ソフトウェア状態データは、前記複数のオブジェクトの各々の各属性の属性ネーム及び属性値への参照を含む、請求項３５に記載の方法。
【請求項３８】
前記ソフトウェアロジックデータは、前記タスクに関連した各アクションに対してアクションの識別子及びアクションへの参照を含む、請求項３５に記載の方法。
【請求項３９】
前記複数のオブジェクトの各々を、１つ以上の入力パラメータ、１つ以上の出力パラメータ、及びそれに関連したアクションを有するアプリケーションコンポーネントへと変換するステップを更に備える、請求項３５に記載の方法。
【請求項４０】
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更する前記ステップは、
ランタイムにアプリケーションコンポーネントを交換する要求を受け取る段階と、
安全なコンポーネントスワップ状態を決定する段階と、
前記安全なコンポーネントスワップ状態の間に前記コンポーネントを交換する段階と、
を含む請求項３９に記載の方法。
【請求項４１】
前記コンポーネントは、システムを再スタートせずに交換される、請求項４０に記載の方法。
【請求項４２】
ランタイムに前記複数のアプリケーションコンポーネントの１つ以上をコンフィギュレーションする要求を受け取るステップと、
ランタイムに前記複数のアプリケーションコンポーネントの前記１つ以上をコンフィギュレーションするステップと、
を備える請求項３９に記載の方法。
【請求項４３】
プログラムのアプリケーションコンポーネントのリストをユーザに表示するステップと、
ユーザ要求の際に、前記リストから異なるデバイスへアプリケーションコンポーネントを移動するステップと、
を更に備える請求項３９に記載の方法。
【請求項４４】
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成する手段と、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成する手段と、
前記複数のオブジェクト各々の１つ以上の属性を識別するソフトウェア状態データを生成する手段と、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するための手段と、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更する手段と、
を備えるシステム。
【請求項４５】
処理システムにおいて実行されたときに、前記処理システムが、
アプリケーションプログラムのタスク内で複数のオブジェクトを識別するソフトウェア構造データを生成するステップと、
前記タスク内で前記複数のオブジェクト間の対話ルールを指示するソフトウェアロジックデータを生成するステップと、
前記複数のオブジェクト各々の１つ以上の属性を識別するソフトウェア状態データを生成するステップと、
前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データを、前記アプリケーションプログラムのタスクに関連した記憶エリアに記憶するステップと、
前記アプリケーションプログラムを再コンフィギュレーションするユーザ要求に応答して、前記ソフトウェア構造データ、ソフトウェアロジックデータ及びソフトウェア状態データのいずれかを変更するステップと、
を備える方法を遂行するようにさせる実行可能なインストラクションを含むコンピュータ読み取り可能な媒体。
【国際調査報告】
2007511018.tif 000042
2007511018.tif 000043
2007511018.tif 000044