(57)【要約】  ソフトウェアを構成する方法及び装置が説明される。一実施の形態において、この装置は、要求された機能に関連した複数のアプリケーションコンポーネントを特定するソフトウェア構造データを得、複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るローダーと、記述ファイルを構文解析し、複数のアプリケーションコンポーネントの各パラメータに対するインデックスを発生するパラメータインデックスジェネレータと、入力、出力及び状態パラメータを、それら入力、出力及び状態パラメータにアクセスするためにアプリケーションコンポーネントにより使用されるインデックスへとマップするパラメータマッピングと、ソフトウェアロジックデータに基づいてランタイムで複数のアプリケーションコンポーネントの呼び出しをコーディネートするスケジューラーと、を備える。【選択図】  図２５【特許請求の範囲】
【請求項１】
要求された機能に関連した複数のアプリケーションコンポーネントを特定するソフトウェア構造データを得、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーと、
記述ファイルを構文解析し、前記複数のアプリケーションコンポーネントの各パラメータに対するインデックスを発生するためのパラメータインデックスジェネレータと、
入力、出力及び状態パラメータを、当該入力、出力及び状態パラメータにアクセスするために前記アプリケーションコンポーネントによって使用されるインデックスへとマップするためのパラメータマッピングと、
前記ソフトウェアロジックデータに基づいてランタイムで前記複数のアプリケーションコンポーネントの呼び出しをコーディネートするためのスケジューラーと、
を備える装置。
【請求項２】
パラメータの名前にマッチングするパラメータ定数のリストを発生し、前記複数のアプリケーションコンポーネントの初期化中に前記定数の値をインデックスで初期化するためのラッパージェネレータを更に備える、請求項１に記載の装置。
【請求項３】
前記ラッパージェネレータは、記述ファイルを構文解析するのに応答して前記パラメータ定数のリストを発生する、請求項２に記載の装置。
【請求項４】
前記記述ファイルは、ＸＭＬ記述ファイルを含む、請求項１に記載の装置。
【請求項５】
前記パラメータマッピングは、ポインタアレーを含む、請求項１に記載の装置。
【請求項６】
前記パラメータインデックスジェネレータは、パラメータを追加又は除去することによって前記パラメータマッピングを更新する、請求項１に記載の装置。
【請求項７】
前記パラメータジェネレータは、パラメータを、該パラメータに対して新たなインデックスを発生することによって、追加する、請求項１に記載の装置。
【請求項８】
前記パラメータジェネレータは、前記記述ファイルを構文解析し、各入力、出力及び状態パラメータに対して、該パラメータジェネレータは、
前記パラメータマッピングを検査して、前記パラメータが存在するか否かを決定し、
パラメータが存在しない場合に、新たなパラメータマッピングアイテムを発生し、新たなインデックスを指定し、更に、新たなインデックス値を発生し、
パラメータが存在する場合に、前記アプリケーションコンポーネントによって存在するパラメータに対するリファレンスの数を指示するリファレンスカウンタを増加する、
請求項７に記載の装置。
【請求項９】
前記パラメータジェネレータは、パラメータを取り去り、それに関連したインデックスを、該パラメータを使用して前記アプリケーションコンポーネントの数に基づいて、更新することによって、パラメータを除去する、請求項７に記載の装置。
【請求項１０】
前記パラメータジェネレータは、
前記パラメータマッピングからパラメータマッピングアイテムを得、
前記アプリケーションコンポーネントにより存在するパラメータに対するリファレンスの数を指示するリファレンスカウンタを減少し、
前記リファレンスカウンタが、前記パラメータを使用するアプリケーションコンポーネントが無いことを指示する場合に、前記パラメータマッピングインデックスを除去する、
ことによって、パラメータを除去する、請求項９に記載の装置。
【請求項１１】
要求された機能に関連した複数のアプリケーションコンポーネントを特定するソフトウェア構造データを得、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーであって、インデックスベースのパラメータアクセスを使用して前記複数のアプリケーションコンポーネントの各々に対してソフトウェアパラメータデータを得る該ローダーと、
インデックス対パラメータ定数の指定を含む前記ソフトウェアロジックデータ及び前記ソフトウェア構造データを記憶するためのメモリと、
前記ソフトウェアロジックデータに基づいてランタイムで前記複数のアプリケーションコンポーネントの呼び出しをコーディネートするためのスケジューラーと、
を備える装置。
【請求項１２】
前記ローダーは、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取り、前記ソフトウェアロジックの定義を構文解析することによって、前記ソフトウェアロジックデータを得る、請求項１１に記載の装置。
【請求項１３】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへのリファレンスとを含む、請求項１１に記載の装置。
【請求項１４】
前記要求された機能は、要求されたワイヤレス機能を含む、請求項１１に記載の装置。
【請求項１５】
前記ソフトウェア構造データは、前記複数のアプリケーションコンポーネントの各々の識別子と、前記複数のアプリケーションコンポーネントの各々へのリファレンスとを含む、請求項１１に記載の装置。
【請求項１６】
前記複数のアプリケーションコンポーネントの各々はオブジェクトである、請求項１１に記載の装置。
【請求項１７】
記述ファイルを構文解析し、前記複数のアプリケーションコンポーネントの各入力、出力及び状態パラメータに対するインデックスを発生するためのパラメータインデックスジェネレータを更に備える、請求項１１に記載の装置。
【請求項１８】
前記パラメータインデックスジェネレータは、前記パラメータマッピングを、パラメータを追加又は除去することによって、更新する、請求項１１に記載の装置。
【請求項１９】
前記パラメータジェネレータは、前記記述ファイルを構文解析し、各入力、出力及び状態パラメータに対して、前記パラメータジェネレータは、
パラメータマッピングを検査して、前記パラメータが存在するか否かを決定し、
パラメータが存在しない場合に、新たなパラメータマッピングアイテムを発生し、新たなインデックスを指定し、更に、新たなインデックス値を発生し、
パラメータが存在する場合に、前記アプリケーションコンポーネントにより存在する前記パラメータに対するリファレンスの数を指示するリファレンスカウンタを増加する、
請求項１８に記載の装置。
【請求項２０】
前記パラメータジェネレータは、パラメータを取り去り、それに関連したインデックスを、該パラメータを使用して前記アプリケーションコンポーネントの数に基づいて更新することによって、パラメータを除去する、請求項１８に記載の装置。
【請求項２１】
前記パラメータジェネレータは、
前記パラメータマッピングからパラメータマッピングアイテムを得、
前記アプリケーションコンポーネントにより存在する前記パラメータに対するリファレンスの数を指示するリファレンスカウンタを減少し、
前記リファレンスカウンタが、前記パラメータを使用するアプリケーションコンポーネントが無いことを指示する場合に、前記パラメータマッピングインデックスを除去する、
ことによって、パラメータを除去する、請求項２０に記載の装置。
【請求項２２】
パラメータの名前にマッチングするパラメータ定数のリストを発生し、前記複数のアプリケーションコンポーネントの初期化中に前記定数の値をインデックスで初期化するためのラッパージェネレータを更に備える、請求項１１に記載の装置。
【請求項２３】
前記ラッパージェネレータは、記述ファイルを構文解析するのに応答して前記パラメータ定数のリストを発生する、請求項２２に記載の装置。
【請求項２４】
前記記述ファイルは、ＸＭＬ記述ファイルを含む、請求項１に記載の装置。
【請求項２５】
要求された機能に関連した複数のアプリケーションコンポーネントを特定するソフトウェア構造データを得、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、
前記複数のアプリケーションコンポーネントの一つ以上によって使用される複数のパラメータに対するインデックスを自動的に発生するステップと、
前記複数のパラメータの名前とそれらに関連したインデックスとの間のマッピングを維持するステップと、
初期化中に少なくとも一つのアプリケーションコンポーネントに前記インデックスを指定するステップと、
インデックスを使用するアレーから前記複数のパラメータの一つ以上の各々をアクセスするステップと、
ランタイムで前記複数のアプリケーションコンポーネントの呼び出しをコーディネートするステップと、
を備える方法。
【発明の詳細な説明】
【関連出願】
【０００１】
[0001]本出願は、２００４年７月２３日に出願された「Method  and  Apparatus  for  Composing  Software」と題する米国ノン・プロビジョナル特許出願第１０／８９８，５２１号の一部継続出願である。
【発明の分野】
【０００２】
[0002]本発明は、ソフトウェアに係るものであり、より詳細には、本発明は、ソフトウェアによって使用するためのインデックスベースのパラメータアクセスに係るものである。
【発明の背景】
【０００３】
[0003]移動電話の機能は、最近数年間で飛躍的に発展した。当初は、単なる音声通信が存在していた。次いで、ショートメッセージ及びウェブブラウジングが追加された。その後に、自動販売機やマルチメディアメッセージングとの対話が利用できるようになった。最近では、ビデオ会議、インターネットアクセス、及び周囲の物理的環境との対話が可能になった。移動電話及びワイヤレス対応のハンドヘルドデバイスの発展や、ワイヤレスネットワークの急増は、コンピュータユーザの慣習的な理解を変化させつつある。デスクトップコンピュータの観念は、よりダイナミックなモデルへと徐々に発展している。移動電話は、ワイヤレスネットワークに接続することができ、以前にはサーバーやワークステーション向けであったタスクを遂行するに充分な処理パワーを有している。従って、移動電話は、個々のユーザの状況において動作して毎日のタスクで彼らを支援するユーザのデジタルコンパニオンとなっている。さらに、ワイヤレス伝送速度の増加が、移動電話が分散型サービス（例えば、ウェブサービス）と対話すると共に、豊富なマルチメディアコンテンツにアクセスし且つそれを共有することを可能にするアプリケーションの開発を可能にする。
【０００４】
[0004]ソフトウェアサービスの関与が高まるにつれて、移動電話デバイス用のより精巧なオペレーティングシステムが必要になる。これらのオペレーティングシステムは、Ｊａｖａ（ＭＩＤＰ２．０、ＤｏＪａ、Ｐｅｒｓｏｎａｌ  Ｊａｖａ）、Ｃ＃、Ｃ、及びＣ＋＋のような言語をベースとするアプリケーション開発のためのサポートを提供する。さらに、これらのオペレーティングシステムは、分散型アプリケーションを開発する上で助けとなるミドルウェアサービスのためのサポートも提供する。移動電話が益々精巧になることは、デバイスコンフィギュレーションの複雑さが増し、ソフトウェアエラーの確率が高くなり、ランタイムでの既存のソフトウェアの改善が必要になることを意味する。例えば、移動電話は、デジタルカメラを装備し、画像の送信をサポートし（ＭＭＳとして知られている）、且つインターネット接続性をサポートすることができ、これによって、ウェブ及びＷＡＰページをブラウズし、ダウンロードを行い、ｅメールを送信し、更に、インターネットで実行されるサービスにアクセスすることを可能にする。しかしながら、これらのサービスを利用する前に、ユーザは、自身の端末のコンフィギュレーションを行わねばならない。このコンフィギュレーションのタスクは、通常、退屈で且つエラーを生じ易いプロセスであり、顧客支援センターに電話をし、ホスト名、ＩＰアドレス、ユーザ名及びパスワードのようなパラメータの入力を含む多数の命令に従うことを伴う。
【０００５】
[0005]加えて、ソフトウェアプラットホームが大きくなるにつれて、ソフトウェアエラーの確率も高くなる。近年の研究によれば、移動電話の１０％がソフトウェアの問題で返品されている。世界中には１２億以上の加入者がおり、これは、毎年１億２千万以上の電話が返品されることを意味する。即ち、１億２千万のユーザは、自身のデバイスを顧客支援センターに持ち込んで、自身の電話を更新しなければならない。これは、運搬に関して極めてコストを要するものであり、移動電話ユーザにフラストレーションをもたらす。
【０００６】
[0006]さらに、ソフトウェアヴェンダーは、定期的に、既存の移動ソフトウェア用の新規な機能を提供する。例えば、既存のメールクライアントが、付加的な添付ファイル用のサポートを提供してもよく、或いはウェブブラウザが、スクリプトを操作するための付加的な機能を与えてもよい。この場合も、移動電話ユーザがソフトウェア更新のために顧客支援センターに電話を持ち込むことを要求するのは、ユーザにとって不便である。
【０００７】
[0007]これら問題の幾つかに対処する解決策がある。例えば、幾つかの既存の製品は、移動電話のファームウェアをランタイムで更新するための機能を提供する。それらは、既存のファームウェアのイメージを新規なファームウェアのイメージと比較し、それら二つのイメージ間のバイナリでの相違を計算し、そして既存のイメージをその計算された相違で更新することによって実行する。しかしながら、この解決策は、更新を実施するためにユーザの介入を必要とし、ソフトウェアイメージ全体を交換することしかできず（あるロジック又は構造的プロパティではなく）、且つシステムが停止したときしか更新を行うことができない。
【０００８】
[0008]ランタイムでプロセスを交換する技術の一例が米国特許第４，９５４，９４１号に説明されている。この技術は、プロセスをシグナリングメカニズムに登録することを含む。シグナリングメカニズムが信号を発生すると、当該プロセスは、それ自身を更新された２進イメージと交換することができる。しかしながら、米国特許第４，９５４，９４１号に説明された技術は、プロセスの個々の断片を交換することを可能にするものではなく、処理されているデータの崩壊を招くことがあり、且つ動的なソフトウェアの構成をサポートすることができない。更に、上述した技術は、ソフトウェアアプリケーションの状態、構造及びロジックを管理するメカニズムに欠ける。
【０００９】
[0009]米国特許第５，１５５，８４７号は、クライアントデバイスの集合体に常駐するソフトウェアを交換するための技術の一例を説明している。このソフトウェアは、更新を記憶していて異なるクライアントデバイスに対してパッチを発生する中央ホストを使用して更新される。クライアントエージェントは、このホストに接続し、最新のパッチを検索し、そしてこれらのパッチを関連するクライアントデバイスにインストールする。しかしながら、米国特許第５，１５５，８４７号に説明された技術は、更新プロセス中に、影響のあるアプリケーションを停止する必要がある。更に、この技術は、リモート状態コンフィギュレーション、動的なソフトウェアの構成、並びにシステムの構造及びロジックの点検及び変更をサポートすることができない。
【００１０】
[0010]米国特許第５，３５９，７３０号は、ランタイムでオペレーティングシステム（ＯＳ）のコンポーネントを交換するための技術を説明している。ＯＳコンポーネントは、ＯＳコンポーネントの呼び出しを対応のモジュールへリダイレクトするハードウェアトラップを使用して交換される。しかしながら、米国特許第５，３５９，７３０号に説明された技術は、プラットホームに依存するもので、動的なソフトウェアの構成及びシステムの点検をランタイムでサポートする能力に欠ける。
【００１１】
[0011]米国特許第５，７３２，２７５号は、クライアントデバイスに常駐するソフトウェアを更新するための技術を説明している。この技術は、アプリケーションを実行する前に最新のアプリケーションバージョンをダウンロードしてインストールさせるようにアプリケーションランチャーを変更することに基づいている。米国特許第５，７３２，２７５号に説明された技術の主たる制約は、ソフトウェアを開始時しか更新できず、ソフトウェアの実行中には更新できないことである。
【００１２】
[0012]米国特許第６，４６６，９４２号、及び米国特許出願公告第ＵＳ２００３０１６７２５５Ａ１号は、インデックスを活用してシステムの性能を改善する技術を提供する。米国特許第６，４６６，９４２号は、インデックスを使用して、関連データベースのコンピュータ記憶レコードへのアクセスをスピードアップするメカニズムを説明している。米国特許出願公告第ＵＳ２００３０１６７２５５Ａ１号は、ＳＱＬステートメントの所与のセットについてＩＢＭメインフレームＤＢ２データベースサーバーによって使用するための、新規な又は改善された性能インデックスを推奨する方法を開示している。この推奨は、各ＳＱＬステートメントに対するＤＢ２オプチマイザーの単一コールに基づき、既存のインデックスセット、ＳＱＬステートメントの構文解析（パース）、ＳＱＬステートメント述部のフィルタ係数、及びＳＱＬステートメントのｇｅｔｐａｇｅワークロードで計算される。ＳＱＬステートメントのｇｅｔｐａｇｅワークロードは、ＳＱＬステートメントの全ての呼び出しについて現在使用される各テーブル及び各インデックスに対する読み取り／変更アクティビティである。ＸＯＰプログラムは、全ての関連ＳＱＬステートメントのｇｅｔｐａｇｅワークロードに基づいて新規な及び改善された性能インデックスを計算するもので、ＤＢ２オプチマイザーを使用して潜在的インデックスの有用性を決定するものではない。
【発明の概要】
【００１３】
[0013]ソフトウェアを構成（コンポーズ）する方法及び装置を説明する。一実施の形態において、この装置は、要求された機能に関連する複数のアプリケーションコンポーネントを特定するソフトウェア構造データを得ると共に、複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーと、記述ファイルを構文解析すると共に、複数のアプリケーションコンポーネントの各パラメータに対するインデックスを発生するためのパラメータインデックスジェネレータと、入力、出力及び状態パラメータを、当該入力、出力及び状態パラメータにアクセスするためにアプリケーションコンポーネントによって使用されるインデックスへとマップするためのパラメータマッピングと、ソフトウェアロジックデータに基づいてランタイムに複数のアプリケーションコンポーネントの呼び出しを整合（コーディネート）するためのスケジューラーとを備えている。
【００１４】
[0014]本発明の他の特徴は、添付図面及び以下の詳細な説明から明らかとなろう。
【００１５】
[0015]本発明は、添付図面を参照した本発明の種々の実施の形態の以下の詳細な説明からより充分に理解されるであろうが、これらは、本発明を単に例示するものに過ぎず、本発明は、これらの特定の実施の形態に限定されない。
【本発明の詳細な説明】
【００１６】
[0049]以下、インデックスベースのパラメータアクセス技術、並びにこれを使用するソフトウェアを構成するための方法及び装置について説明する。一実施の形態において、ソフトウェアは、インデックスベースのパラメータアクセス技術を使用して種々のパラメータへのアクセスを可能にするマイクロビルディングブロック（ＭＢＢ）で構成される。これらの技術は、上述したハッシュテーブルを、整数インデックスアレー及び動的に発生されるインデックスの集合に置き換えることによって、入力、出力及び状態パラメータにアクセスするのに必要な時間を短縮する。一実施の形態では、インデックスの発生は、ＭＢＢ  ＸＭＬ記述ファイルを使用して自動的に処理される。更に、一実施の形態では、これらの技術は、アプリケーションデベロッパーからインデックスの使用を隠すコードを自動的に発生するための機能を提供する。
【００１７】
[0050]以下の説明では、多数の細部について述べる。しかしながら、当業者であれば、本発明がこれら特定の細部を伴わずに実施できることが明らかであろう。他の点について、本発明を不明瞭にしないために、良く知られた構造及び装置は、ブロック図形態で示し、詳細には示さない。
【００１８】
[0051]以下の詳細な説明のある部分は、コンピュータメモリ内のデータビットに対するオペレーションをアルゴリズム及び記号表示の形態で示す。これらアルゴリズム記述及び表示は、データ処理技術の当業者によって使用される手段であり、それらの仕事の実体をこの技術の他の当業者へ最も有効に伝えるものである。アルゴリズムとは、ここでは、一般に、希望の結果を導くステップの自己矛盾のないシーケンスであると考えられる。これらステップは、物理的な量の物理的操作を要求する。通常、必ずしもそうでないが、これらの量は、記憶、転送、合成、比較、及びその他、操作することのできる電気的又は磁気的信号の形態をとる。時には、主として、共通の使用という理由で、これらの信号を、ビット、値、エレメント、記号、キャラクタ、項、数字等として参照するのが便利であることが分かっている。
【００１９】
[0052]しかしながら、これら及び同様の用語は、全て、適当な物理的量に関連付けられるべきものであり、これらの量に適用される便利なラベルに過ぎないことを留意されたい。特に指示のない限り、以下の説明から明らかなように、この説明全体にわたり、「処理」又は「コンピューティング」又は「計算」又は「決定」又は「表示」等の用語を使用する議論は、コンピュータシステム又は同様の電子的計算デバイスのアクション及び処理を指し、これらは、コンピュータシステムのレジスタ及びメモリ内で物理的（電子的）量として表わされたデータを、コンピュータシステムのメモリ又はレジスタ、或いは他のこのような情報ストレージ、送信又は表示装置内の物理的量として同様に表わされる他のデータへと操作及び変換するものを指すことが明らかであろう。
【００２０】
[0053]また、本発明は、本明細書に説明されるオペレーションを実行するための装置にも係るものである。この装置は、要求される目的に対して特別に構成されてもよいし、或いはコンピュータに記憶されるコンピュータプログラムにより選択的にアクチベートされ又はコンフィギュレーションされる汎用コンピュータを備えてもよい。このようなコンピュータプログラムは、コンピュータ読み取り可能な記憶媒体、例えば、これに限定されないが、フロッピーディスク、光学ディスク、ＣＤ−ＲＯＭ、及び磁気−光学ディスクを含む任意の形式のディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気又は光学カード、或いは電子的インストラクションを記憶するのに適していて、コンピュータシステムバスに各々結合される任意の形式の媒体に記憶されてもよい。
【００２１】
[0054]本明細書で提供するアルゴリズム及びディスプレイは、特定のコンピュータ又は他の装置に固有に関連したものではない。種々の汎用システムが、本明細書で述べる教示に基づくプログラムと共に使用されてもよいし、又は必要な方法ステップを実行するために更に特殊な装置を構成するのが便利であることも理解されよう。種々のこれらシステムに必要な構造は、以下の説明から明らかであろう。更に、本発明は、特定のプログラミング言語を参照して説明しない。本明細書で述べる本発明の教示を実施するのに種々のプログラミング言語を使用できることが明らかであろう。
【００２２】
[0055]マシン読み取り可能な媒体は、マシン（例えば、コンピュータ）で読み取り可能な形態で情報を記憶し又は送信するためのメカニズムを含む。例えば、マシン読み取り可能な媒体は、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリ装置、電気的、光学的、音響的又は他の形態の伝播信号（例えば、搬送波、赤外線信号、デジタル信号等）、等々を含む。
【００２３】
概略
[0056]上述したインデックスベースのパラメータアクセス技術を説明する前に、ランタイムでソフトウェアをアッセンブルし、再コンフィギュレーションし、移動し、そして適応することを可能にするメカニズムについて以下に述べる。図１は、再コンフィギュレーション可能なソフトウェアの動的な構成を容易にするためのシステム１００の一実施の形態のブロック図である。
【００２４】
[0057]図１を参照すると、システム１００は、ネットワークサーバー１０６と、ネットワーク１０２と、該ネットワーク１０２を経てネットワークサーバー１０６に結合されたクライアントデバイス１０４とを備えている。これらクライアントデバイス１０４は、対話式の通信デバイスである。一実施の形態において、ネットワーク１０２は、ワイヤレスネットワークであり、そしてクライアントデバイス１０４は、ワイヤレス電話、手のひらサイズのコンピューティングデバイス、ＰＤＡ、又はインターネット対応の機器リモートコントローラのような移動装置である。このような通信デバイスは、ワイヤレスネットワーク１０２を経てネットワークサーバー１０６とワイヤレス通信すると共に、互いに通信することができる。別の実施の形態では、ネットワーク１０２が非ワイヤレスネットワーク（例えば、インターネット）であり、そしてクライアントデバイス１０４が、ＰＣシステム、ＰＤＡ、消費者向け電子デバイスといいた非ワイヤレスデバイスである。この技術で良く知られた種々様々な通信技術を使用して、クライアントデバイス１０４とネットワークサーバー１０６との間で通信を行うことができる。
【００２５】
[0058]ソフトウェア構成システム１０８は、いずれのクライアントデバイス１０４に存在してもよい。更に、ソフトウェア構成システムは、ネットワークサーバー１０６に存在してもよい。ソフトウェア構成システム１０８は、クライアントデバイス１０４のユーザ又はネットワークサーバー１０６、或いは他のシステム又は装置により要求される機能に対してソフトウェア（例えば、アプリケーション又はサービス）を構成する役割を果たす。ソフトウェア構成システム１０８は、必要な機能を実施するアプリケーションコンポーネントの集合体を特定するソフトウェア構造データを得、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得、ソフトウェア構造データ及びソフトウェアロジックデータを記憶エリアに記憶し、次いで、ソフトウェアロジックデータを使用して、ソフトウェア構造データにより指定されたアプリケーションコンポーネントの呼び出しをコーディネート（整合する）ことによって、ソフトウェアを構成する。
【００２６】
[0059]一実施の形態において、アプリケーションコンポーネント（ここでは、マイクロビルディングブロック又はＭＢＢとも称される）は、システムにおいて最も小さなアドレス可能な機能的ユニットである。各ＭＭＢは、入力パラメータの集合体を受け取り、その状態に影響し得るアクションを実行し、そして出力パラメータの集合体を発生する。ＭＢＢは、他のＭＢＢへのリファレンスを記憶しない。従って、ＭＢＢが新たなＭＢＢと交換される場合に、他のＭＢＢは、交換について通知される必要がない。
【００２７】
[0060]ソフトウェア構造の全てのコンポーネントに関する情報と、これらコンポーネント間の対話ルールに関する情報とを、指定の記憶エリアに維持することによって、ソフトウェア構成システム１０８は、構成されるソフトウェアの構造及びロジックを明示的に外部化(externalize)する。更に、一実施の形態では、ソフトウェア構成システム１０８は、個々のコンポーネントの内部状態属性、内部ソフトウェア実行状態（現在実行中のコンポーネントの状態）、及びソフトウェアを実行するのに必要なコンフィギュレーションパラメータ（例えば、ユーザの好み及び実行ディレクトリー）を記憶エリアに維持することによって、構成されるソフトウェアの状態を明示的に外部化する。
【００２８】
[0061]ソフトウェア状態の明示的な外部化は、ソフトウェアのコンフィギュレーション性をサポートする（即ち、ソフトウェア内部状態を変更する能力を与える）。例えば、顧客サポートの代表者がユーザの移動電話に接続して、ソフトウェアパラメータを変更し、ユーザの介在を必要とせずに、移動電話をリモート位置でコンフィギュレーションしてもよい。コンフィギュレーション性の他の例は、リモートオブジェクト、バッファサイズ、及びネットワークパラメータに対するリファレンスを変更することを含み得る。ソフトウェア状態の明示的な外部化は、ランタイムでソフトウェア状態の点検を可能にする。次いで、この情報を使用して、ユーザがアプリケーションにアクセスする間にソフトウェアをコンフィギュレーションすることができる。
【００２９】
[0062]一実施の形態において、ソフトウェア構成システム１０８は、指定された個人がソフトウェア状態をブラウズして希望の変更を特定することを可能にするユーザインターフェイスを提供する。
【００３０】
[0063]さらに、ソフトウェア状態、ロジック及び構造の外部化は、ソフトウェアの更新性もサポートする（即ち、特定のコンポーネントを交換するか、又はソフトウェアの実行ロジックを変更することによって、ソフトウェアの振舞いを修正し又は改善することを可能にする）。特に、状態の外部化は、システムの幾つかのパラメータの値（例えば、バッファのサイズ）を変更して間違った振舞いを修正することを可能にする。構造の外部化は、ランタイムでソフトウェアコンポーネントを交換することを可能にし、又、ロジックの外部化は、ソフトウェアのコンポーネント間で対話ルールを変更するための機能を提供する。従って、ソフトウェアは、システムを再始動する必要なく更新することができる。これは、いかなる形式のメモリ（例えば、電気的メモリ、磁気メモリ、光学的メモリ等）を使用するシステムにも適用される。
【００３１】
[0064]一実施の形態において、ソフトウェア構成システム１０８によって提供されるユーザインターフェイスは、ユーザが、アプリケーションコンポーネントのリスト、アプリケーションコンポーネント間の対話ルール、及びソフトウェア状態を見て、このデータの任意の断片への希望の変化を特定することを可能にする。
【００３２】
[0065]さらに、ソフトウェアのロジック、構造及び状態の明示的な外部化は、自動的なソフトウェアアップグレードをサポートする。即ち、アプリケーションロジックは、明示的に外部化されたロジックにアクセスして変化を導入する（例えば、ユーザインターフェイスを経て）ことによって、変更されてもよい。次いで、ランタイムインフラストラクチャーが、新規なロジックルールを更新し、それに応じて、ソフトウェアの振舞いを変更してもよい。さらに、ソフトウェアコンポーネントは、明示的に外部化されたソフトウェア構造を更新しソフトウェアのロジックを変更して、新たなコンポーネントに対する新たな対話ルールを追加し、又は既存の対話ルールを編集して、削除されたコンポーネントをもはや使用しないようにすることによって、変更又は除去することができる。
【００３３】
ソフトウェアの動的構成
[0066]図２Ａは、ソフトウェアを動的に構成するプロセス２００の一実施の形態を示すフローチャートである。このプロセスは、ハードウェア（例えば、回路、専用ロジック、プログラム可能なロジック、マイクロコード等）、ソフトウェア（汎用コンピュータシステム又は専用マシンにおいて実行されるような）、又はその両方の組合せを含む処理ロジックにより実行され得る。一実施の形態では、プロセス２００は、図１のソフトウェア構成システム１０８により実行される。
【００３４】
[0067]図２Ａを参照すると、処理ロジックは、要求される機能に関連したアプリケーションコンポーネントのセットを特定するソフトウェア構造の定義を受け取ることで開始される（処理ブロック２０２）。一実施の形態では、ソフトウェア構造の定義は、ＸＭＬで表わされる。或いは又、ソフトウェア構造の定義は、種々の他のコンピュータ言語（例えば、Ｊａｖａ、ＨＴＭＬ、Ｃ＋＋等）で表わされてもよい。一実施の形態において、アプリケーションコンポーネントは、ユーザによって選択される。或いは又、アプリケーションコンポーネントは、処理ロジック又は他の何らかのシステムによって希望の機能に基づいて選択される。一実施の形態において、アプリケーションコンポーネント（又はＭＢＢ）は、システムにおける最小のアドレス可能な機能ユニットである。ＭＢＢの例示的構成を、図３Ａ及び３Ｂに関連して以下に詳細に説明する。
【００３５】
[0068]処理ブロック２０４において、処理ロジックは、アプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取る。一実施の形態において、ソフトウェアロジックの定義は、ＸＭＬで表わされる。或いは又、ソフトウェア構造の定義は、種々の他のコンピュータ言語（例えば、Ｊａｖａ、ＨＴＭＬ、Ｃ＋＋等）で表わされてもよい。一実施の形態において、ソフトウェアロジックは、ＭＢＢの実行順序を指定するアクションによって定義される。一実施の形態において、ＭＢＢ実行順序は、解釈アクション(interpreted  action)により指定される。或いは又、ＭＢＢ実行順序は、コンパイルアクション(compiled  action)により指定される。解釈アクションとは、決定論的有向グラフ(deterministic  directed  graph)（各ノードからの唯一の考えられる遷移）であり、当該グラフにおいては、ノードが実行状態を表わすＭＢＢであり、且つ辺（edge)が遷移順序を定義する。コンパイルアクションとは、ＭＢＢの呼び出し順序を指定するコードフラグメントである。アクションについては、図４Ａ−４Ｃを参照して以下に詳細に説明する。
【００３６】
[0069]次いで、処理ロジックは、各々のリストされたＭＢＢを特定する情報をソフトウェア構造の定義から抽出し（処理ブロック２０６）、一実施の形態では、この情報を使用して、各ローカルＭＢＢをインスタンス生成する（処理ブロック２０８）。ローカルＭＢＢは、ソフトウェア構成システム１０８と同じデバイスに存在するＭＢＢである。
【００３７】
[0070]処理ブロック２１０では、処理ロジックがＭＢＢデータを記憶エリアに記憶する。一実施の形態において、ＭＢＢデータは、各ＭＢＢに対するＭＢＢ識別子（例えば、ＭＢＢ名）及びＭＢＢリファレンス（ローカル又はリモート）を含む。一実施の形態において、「ドメイン」の観念を使用して、記憶エリアにおける関連ＭＢＢの集合体を参照し、ＭＢＢデータにおいて特定される各ＭＢＢは、ドメインにおいて登録される（即ち、ユニークな名前が指定される）。この実施の形態では、ローカルオブジェクトは、現在のドメインに存在するオブジェクトである。ドメインについては、図５Ａ−５Ｄを参照して以下に詳細に説明する。
【００３８】
[0071]次いで、処理ロジックは、各々のリストされたアクションを特定する情報をソフトウェアロジックの定義から抽出し（処理ブロック２１２）、一実施の形態では、この情報を使用して、各ローカルアクションに対するアクションオブジェクトの集合体をインスタンス生成する（処理ブロック２１４）。一実施の形態では、アクションオブジェクトは、ノードがＭＢＢを表わし、且つエッジが遷移順序を定義する有向グラフを記憶する。一実施の形態では、各アクションは、ランタイムでアクション状態オブジェクトに関連付けられる。アクションは、以下に詳細に述べるように、このオブジェクトを使用して入力及び出力パラメータを記憶する。
【００３９】
[0072]処理ブロック２１６において、処理ロジックは、アクションデータを記憶エリアに記憶する。一実施の形態では、記憶データは、各ＭＢＢに対するアクションオブジェクト識別子（例えば、名前）及びアクションオブジェクトリファレンス（ローカル又はリモート）を含む。一実施の形態では、アクションデータにおいて特定される各アクションは、ドメインにおいて登録される。
【００４０】
[0073]一実施の形態において、処理ロジックは、各ＭＢＢの内部属性を特定する情報も抽出し（処理ブロック２１８）、この情報を記憶エリアに記憶する（処理ブロック２２０）。一実施の形態では、ＭＢＢ属性情報は、各ＭＢＢ用の処理ロジックによって受け取られる関連ＭＢＢの定義から抽出される。或いは又、この情報は、処理ブロック２０２において受け取られたソフトウェア構造の定義から抽出される。一実施の形態において、ＭＢＢ属性情報は、全てのＭＢＢに対して各ＭＢＢ属性の値及び識別子を含む。加えて、ＭＢＢ属性情報は、各ＭＢＢの入力及び出力パラメータを特定する。一実施の形態では、ＭＢＢ属性情報で特定される各属性は、ドメインにおいて登録される。
【００４１】
[0074]処理ブロック２２２では、処理ロジックは、図６を参照して以下に詳細に述べるように、ソフトウェアロジックに基づき、リストされたＭＢＢの呼び出しをコーディネートする。
【００４２】
[0075]図２Ｂは、ソフトウェア構成システム２５０の一実施の形態を示すブロック図である。一実施の形態において、このソフトウェア構成システムは、ローダー２５２と、スケジューラー２５４と、データ記憶装置２６０とを備えている。
【００４３】
[0076]ローダー２５２は、要求された機能を実施するＭＢＢの集合体を特定するデータ（ＭＢＢデータ）と、これらＭＢＢの中で対話ルールを特定するデータ（ロジックデータ）と、各ＭＢＢの状態属性を特定するデータ（状態データ）とを得るという役割を果たす。一実施の形態において、ローダー２５２は、ソフトウェア構造の定義、ソフトウェアロジックの定義、及び各当該ＭＢＢの定義を構文解析することによって、このデータセットを得る。これらの定義は、同じデバイス（例えば、同じ移動デバイス）で実行される異なるアプリケーションから、又はサーバー又は他の何らかの装置（例えば、他の何らかの移動デバイス）から、ソフトウェア構成システム２５０へダウンロードされてもよい。別の実施の形態では、ソフトウェア構造の定義は、各ＭＢＢに対する状態情報を含み、ＭＢＢの定義は使用されない。
【００４４】
[0077]一実施の形態では、ローダー２５２は、得られたデータセットに基づいてローカルＭＢＢ及びアクションオブジェクトをインスタンス生成し、ＭＢＢデータ、ロジックデータ及び状態データをデータ記憶装置２６０に記憶するという役割も果たす。一実施の形態において、データ記憶装置２６０は、図５Ａを参照して以下に詳細に述べるように、構造メモリ、ロジックメモリ及び状態メモリを有するドメインを表わす。一実施の形態において、データは、名前及び値タプルの形態でデータ記憶装置２６０に記憶される。特に、ＭＢＢデータは、ＭＢＢ名／ＭＢＢリファレンスタプルを含み、ロジックデータは、アクション名／アクションリファレンスタプルを含み、更に、状態データは、属性名／属性値タプルを含む。
【００４５】
[0078]スケジューラー２５４は、ロジックデータに基づいてＭＢＢの呼び出しをコーディネートするという役割を果たす。一実施の形態において、スケジューラー２５４は、構成されたソフトウェアの実行状態に関する情報を維持し且つエクスポートするという役割も果たす。この情報は、例えば、現在実行されているアクションと、現在実行されているアクションのＭＢＢと、アクションに関連したパラメータ（例えば、アクションの入力パラメータ、及びアクションのＭＢＢにより発生されるパラメータ）とを指定する。
【００４６】
[0079]一実施の形態において、スケジューラー２５４は、ＭＢＢとして実装される。従って、スケジューラー２５４の状態はアクセス可能であり、ランタイムで他のＭＢＢのように変更することができる。スケジューラー２５４を交換するための能力は、デベロッパーが異なる実行セマンティックスを提供することを可能にする。例えば、それらは、透過的なローカル又はリモートＭＢＢ呼び出しをサポートするスケジューラーを選択することによって、ランタイムソフトウェアの分割（パーティショニング）を簡単化することができる。さらに、それらは、各ＭＢＢの後にパラメータ及び状態のチェックポイントを設けるスケジューラーを選択することによって、フォルトトレラントのセマンティックスを提供することも可能である。さらに、それらは、アクション実行境界を定義し且つアクション実行回数に関する保証を提供するリアルタイムスケジューラを選択することができる。動的ソフトウェア交換能力と結合された特定のスケジューラーを選択する能力によって、実行条件及び外部要求に基づいてその実行モデルを変更できる適応ソフトウェアの構造が簡単化される。
【００４７】
[0080]一実施の形態において、ソフトウェア構成システム２５０は、また、ユーザインターフェイスマネージャー２５６及び変更コーディネーター２５８を備えている。ユーザインターフェイスマネージャー２５６は、関連ユーザインターフェイスを提供し、当該ユーザインターフェイスを経てユーザ入力を受け取るという役割を果たす。ユーザインターフェイスは、ユーザに使用可能なアプリケーションのリスト、及び各アプリケーションに対するコンポーネントのリストを指定することができる。ユーザは、このユーザインターフェイスを使用して、アプリケーションコンポーネントを選択し、そしてそれらを異なるデバイスへ移動するように要求してもよい。また、ユーザインターフェイスは、アプリケーション分割スキームのリストを指定し、ユーザが一つを選択してアプリケーションを素早くカスタマイズすることを可能にしてもよい。また、ユーザインターフェイスは、ユーザがソフトウェア状態をブラウズして、ソフトウェアを再コンフィギュレーションするための望ましい変化を指定することを可能にしてもよい。さらに、ユーザインターフェイスは、ユーザが、アプリケーションコンポーネントのリスト、アプリケーションコンポーネント間の対話ルール、及びソフトウェア状態を見て、ソフトウェアを更新するためのこのデータの断片への望ましい変化を指定することを可能にしてもよい。さらに、ユーザインターフェイスは、ユーザが、ソフトウェアをアップグレードするためのソフトウェアロジック又はアプリケーションコンポーネントへの変化を要求することを可能にしてもよい。
【００４８】
[0081]変更コーディネーター２５８は、ソフトウェアの再コンフィギュレーション、ソフトウェアの更新、又はソフトウェアのアップグレードに対する要求を処理し、このような要求に応答して、データ記憶装置２６０の関連情報を変更するという役割を果たす。一実施の形態において、変更コーディネーター２５８は、スケジューラー２５４と協働して、変化を実施する。例えば、変更コーディネーター２５８は、変更が要求されたコンポーネントに対して安全コンポーネントスワップ状態を決定し、次いで、データ記憶装置２６０におけるコンポーネントを変更するようスケジューラー２５４に要求してもよい。
【００４９】
[0082]従って、ソフトウェア構成システム２５０は、ランタイムでソフトウェアをアセンブルし、そのロジック、構造及び状態の急な（オンザフライの）変更のサポートを提供する。特に、明示的な実行状態の外部化は、デベロッパーからのサポートなしに、安全コンポーネントスワップ状態を計算するために活用することができる詳細情報をソフトウェア構成システム２５０に提供する。ソフトウェア構成システム２５０は、コンポーネントの呼び出しを制御し、それ故、いつ安全に変化を導入できるかが分かる。さらに、明示的なソフトウェア状態の外部化は、状態移行の要求を排除する。新たなコンポーネントが挿入されると、それが以前のコンポーネントの状態に自動的に接続される。さらに、コンポーネントは、他のコンポーネントへのリファレンスを記憶しないので、コンポーネントのリファレンスを更新する必要はない。同様に、アプリケーションコンポーネントは、リファレンスではなく名前でアドレスされるので、コンポーネントは、ソフトウェアに対する変化により影響されない。
【００５０】
[0083]アプリケーションコンポーネント又はＭＢＢについて、図３Ａ−３Ｃを参照して以下に詳細に説明する。
【００５１】
[0084]図３Ａは、ＭＢＢ３００のオペレーションを例示しており、当該ＭＢＢ３００は、入力パラメータ３０２を受け取り、内部状態パラメータ３０４に影響し得るアクションを実行し、そして出力パラメータ３０６を発生する。
【００５２】
[0085]図３Ｂは、ＭＢＢ３２０の構造の一実施の形態のブロック図である。図３Ｂを参照すると、ＭＢＢ３２０は、一以上のメソッドのセット３２４、ゼロ以上の属性のセット３２２、及びデマルチプレクサ３２６より成るエンティティである。メソッド３２４は、タスクを実施するアルゴリズムである。メソッド３２４は、ゼロ以上の入力値を要求し、ゼロ以上の出力値のセットを発生する。一実施の形態において、デマルチプレクサ３２６は、ＭＢＢのエントリーポイントであり、入力パラメータ３２８を受け取り、それに対応するＭＢＢメソッド３２４を抽出する。一実施の形態において、各属性３２２は、名前及び値タプルである。値は、アルゴリズムを実施するためにメソッドにより要求される情報を記憶する変数である。属性３２２は、外部記憶エリアに記憶され、名前でアクセスできる。
【００５３】
[0086]一実施の形態において、各ＭＢＢが、アプリケーションコンポーネントの定義で記述される。この定義は、当該ＭＢＢに対して、入力パラメータのリストと、出力パラメータのリストと、状態属性のリストと、ＭＢＢを実施するエンティティを指定するプラットホーム従属フィールド（例えば、Ｊａｖａクラスファイル、ＮＥＴオブジェクト、ＤＬＬ等）とを指定する。図３Ｃは、ＭＢＢ「ＲｅｇｉｓｔｅｒＯｂｊｅｃｔ」に対するＸＭＬ記述ファイルを例示するものであり、クラスタグは、各プラットホームに対する実装を表わし、状態タグは、各状態属性に対する名前及びタイプタプルを指定し、入力タグは、名前及びタイプタプルに関して入力パラメータを記述し、そして出力タグは、ＭＢＢが名前及びタイプタプルに関して発生するパラメータを表わす。
【００５４】
[0087]ここで、図４Ａ−４Ｃを参照して、アクションについて詳細に説明する。
【００５５】
[0088]上述したように、アクションは、ＭＢＢ実行順序を指定し、それ故に、ソフトウェアのロジックを定義する。アクションは、解釈アクション又はコンパイルアクションであり得る。解釈アクションは、実行状態を示すＭＢＢを表わすノードと遷移順序を定義する辺を有する決定論的有向グラフである。各辺は、ランタイムで評価される関連の条件付きステートメントを有しており、次の遷移を決定する。条件付きステートメントは、ＭＢＢにより発生されたパラメータ（出力パラメータ）を参照することができる。多数の出力辺を伴うノードでは、一つ辺のみがランタイムにおいて真と評価できる（決定論的グラフ）。デフォールトでは、この条件付きステートメントの値は、真である。アクショングラフは、通常、一つの開始ノードと、中間ノードと、一つの終了ノードとを有する。開始ノード及び終了ノード（終了ノードは、アクショングラフの終端を示す）は、各グラフ走査（Traversal)の一部分である。中間ノードは、辺に指定された条件付きステートメントに基づくグラフの走査に依存する。アクショングラフは、エラーの場合に遷移を指定する付加的なノード及び辺を含む。即ち、エラーが検出されない場合には、システムは、デフォールトアクショングラフを使用する。しかしながら、実行エラーが検出された場合には、システムは、エラーノード及び辺を使用する。例えば、各ノードは、エラーが検出された場合に終了状態に達してアクションを終了させる付加的な辺を有してもよい。アクショングラフは、より精巧な振舞い（例えば、「ｗｈｉｌｅ」、「ｆｏｒ」及び「ｒｅｐｅａｔ」のようなループステートメントをサポートする）を定義してもよい。解釈アクションを実行することは、グラフを走査することに対応する。
【００５６】
[0089]図４Ａは、解釈アクションを例示しており、ここでは、ＭＢＢ１が開始ノードである。このアクションは、ＭＢＢ１の呼び出しで開始し、ＭＢＢ２の呼び出しに続き、次いで、「Ｘ」の値に基づいて、ＭＢＢ３又はＭＢＢ４を呼び出し、最終的に、ＭＢＢ５を呼び出す。変数「Ｘ」の値は、アクションを呼び出すクライアントにより与えられるか、或いはＭＢＢ１又はＭＢＢ２により発生される出力パラメータである。この値は、以下に詳細に述べるアクション実行状態の一部分として記憶される。
【００５７】
[0090]解釈アクションは、現在の実行状態に関する情報をエクスポートし、そしてランタイムでアクショングラフを変更するためのサポートを提供することによって、実行レベルにおけるレフレクション(reflection)を提供する。更に、明示的な表現は、システムのロジックに関する推論を簡単化し、静的な分析をサポートし、且つ第三者が状態を追加又は除去しそしてグラフをコンフィギュレーションすることでシステムの振舞いを変更することを可能にする。
【００５８】
[0091]コンパイルアクションは、ＭＢＢ呼び出し順序を指定するコードフラグメントである。図４Ｂは、図４Ａに示す解釈アクションに対応するコンパイルアクションを例示するものである。
【００５９】
[0092]コンパイルアクションは、指定のライブラリーを使用してＭＢＢを呼び出す。一実施の形態において、指定のライブラリーは、ＭＢＢの名前と、入力タプルの集合体とを受け取り、そして与えられた入力パラメータで指定のＭＢＢを呼び出す。このメカニズムは、ソフトウェア構成システムがＭＢＢの呼び出しに対して制御権を得ることを可能にし、ＭＢＢの安全な交換を可能にする。一実施の形態において、ソフトウェア構成システムに登録されたＭＢＢとしてコンパイルアクションコードが提供される。それ故、アクションを呼び出すことは、ＭＢＢを呼び出すことに対応し、従って、ソフトウェア構成システムがランタイムにアクションの定義を交換することを可能にする。
【００６０】
[0093]図４Ｃは、解釈（左）及びコンパイル（右）アクション「ｅｘａｍｐｌｅＡｃｔｉｏｎ」の定義を与えるＸＭＬ記述ファイルを例示する。
【００６１】
[0094]図４Ｃを参照すると、解釈アクションの場合、各状態は、名前、即ちその状態で呼び出されるＭＢＢの名前と、例外が生じない場合の次の状態と、例外が生じたときの次の状態とを有する。条件付き遷移（例えば、状態２）については、条件付きステートメントが各状態名に指定される。又、エラー状態遷移については、条件付き遷移を使用することもできる。一実施の形態において、アクション状態に関連した情報、即ち状態の名前、その状態で呼び出されるＭＢＢの名前、例外が生じない場合の次の状態、及び例外が生じたときの次の状態を記憶するために、各アクションに対してＡｃｔｉｏｎＳｔａｔｅオブジェクトが生成される。
【００６２】
[0095]コンパイルアクションの記述は、アクションの名前と、それを実装するＭＢＢとを含む。
【００６３】
[0096]解釈及びコンパイルアクションの両者は、ＭＢＢ交換をサポートする。特に、自動的ランタイムＭＢＢ交換のための一つの重要な要件は、システムが安全なコンポーネントスワップ状態（即ち、ターゲットコンポーネントが他のコンポーネントにより参照されない実行状態）に達するのを検出し、そしてスワップされたコンポーネントに残りのコンポーネントがアクセスすることを回避することである。解釈及びコンパイルの両方のアクションでは、安全なコンポーネントスワップ状態を自動的に決定することができる。解釈アクションでは、インタープリターがＭＢＢを明示的に呼び出す。コンパイルアクションは、指定のライブラリーを使用して、ＭＢＢを呼び出す。両者の場合に、システムが呼び出しの制御権を得るので、ＭＢＢを安全に交換することができる。
【００６４】
[0097]さらに、解釈及びコンパイルの両アクションは、ソフトウェアの更新性及びアップグレード性に貢献する。アクションを更新することは、既存のアクションを交換することに対応し、又は解釈アクションの場合には、実行グラフを変更することに対応する。システムをアップグレードすることは、新たなアクションを追加することを意味し、又は解釈アクションの場合には、アクショングラフを変更して、状態を組み込み又は変更することを意味する。
【００６５】
[0098]解釈アクションとコンパイルアクションとの間の一つの相違は、ランタイム操作粒度である。コンパイルアクションは、ランタイムには、変更することができず、即ち遷移状態を追加、除去又は変更することができない。コンパイルアクションの振舞いを変化させるには、それに関連したＭＢＢを交換し、即ちアクションコードを交換することが必要である。さらに、ランタイムにコンパイルアクションを点検することはできないので、現在実行状態について学習することも、アクションの振舞いについて学習することもできない。解釈アクションでは、グラフが、アクションの振舞いについて学習するのに充分な情報を提供する。しかしながら、コンパイルアクションは、解釈アクションより迅速に実行する。何故ならば、コンパイルアクションは、それらの実行を推進するためのインタープリターを必要としないからである。構成されたソフトウェアの必要な機能に依存して、ソフトウェア構成システムは、解釈アクション又はコンパイルアクションのいずれを使用してもよい。
【００６６】
[0099]図５Ａ−５Ｃを参照して、ドメインについて詳細に説明する。ドメインとは、関連するＭＢＢの集合体を統合する抽象概念（アブストラクション）である。ドメインは、ドメインの構成（ＭＢＢのリスト）、ドメインのロジック（アクションのリスト）、及びドメインの状態（ＭＢＢの状態属性及び実行状態値）を記憶するための記憶エリアを与える。ドメインは、単一ユニットとしてのＭＢＢの集合体の操作（例えば、移動、保留及び再開）を容易にするために、階層式に構成することができる。
【００６７】
[00100]図５Ａは、ドメイン５００の構成を例示する。
【００６８】
[00101]図５Ａを参照すれば、ドメイン５００は、構造メモリ５０２と、ロジックメモリ５０４と、状態メモリ５０６とを備えている。各メモリは、名前及び値タプルを記憶する。構造メモリ５０２は、ドメインに登録されたＭＢＢに対応するタプルの集合体を維持する。タプルの名前は、ＭＢＢの名前を指し（各ＭＢＢには登録時に名前が指定される）、そして値は、ＭＢＢへのリファレンスを記憶する。リファレンスとは、ローカルポインタであるか、又はリモートＭＢＢに対するポインタである。一実施の形態において、ソフトウェア構成システムは、ローカル又はリモート呼び出しをデベロッパーに対して透過的にする。
【００６９】
[00102]ロジックメモリ５０４は、ドメインによりエクスポートされるアクションのリストを記憶する。構造メモリと同様に、ロジックメモリ５０４は、名前によりアクションを参照し、そして値は、ローカルポインタであるか又はリモートリファレンスである。
【００７０】
[00103]状態メモリ５０６は、ドメインに登録されたＭＢＢに対する状態属性を記憶する。状態メモリ５０６は、名前で属性を参照し、そして値は、属性の値である。ＭＢＢ登録中に、システムは、状態メモリ５０６に対するポインタをＭＢＢに指定する。同じドメインに属するＭＢＢが同じ状態メモリ５０６を共有する。
【００７１】
[00104]ドメインは、ＭＢＢの大きな集合体の編成を簡単化するために階層式に構成することができる。ドメインメモリは、登録されたサブドメインのドメインメモリに対するリファレンス（名前及び値タプル）を記憶すると共に、ルート(root)ドメインメモリに対するリファレンスも記憶する。図５Ｂは、ドメインの階層式構成を例示する。
【００７２】
[00105]図５Ｂを参照すると、ルートドメイン５２０は、二つのサブドメイン（ドメイン５２２及び５２４２）を有し、そしてドメイン５２２は、三つのサブドメイン（ドメイン５２６、５２８及び５３０）を有する。
【００７３】
[00106]一実施の形態において、デフォールト可視性(visibility)ポリシーが、ドメインがサブドメインのメモリにアクセスできることを指示する。例えば、ルートドメイン５２０は、システムの全てのドメインメモリ（即ち、ドメイン５２２乃至５３０）にアクセスすることができ、一方、ドメイン５３０は、それ自身のドメインメモリにしかアクセスできない。可視性ポリシーを変更する（例えば、サブドメインがそれらの親又は兄弟ドメインのメモリにアクセスすることを可能にする）ことが可能である。
【００７４】
[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]処理ブロック２３１２において、処理ロジックは、アクション状態オブジェクトからアクションによって要求される入力パラメータを抽出する。
【０１２６】
[00159]処理ブロック２３１４において、処理ロジックは、抽出されたパラメータを使用してａｃｔｉｏｎＮａｍｅ値によって指定されるメソッドを呼び出す。
【０１２７】
[00160]次いで、処理ロジックは、呼び出しからの結果をアクション状態オブジェクトに記憶し（処理ブロック２３１６）、次いで、アクション状態オブジェクトを返す（処理ブロック２３１８）。
【０１２８】
[00161]図２４は、タスクのロジックを外部化するためのプロセスの一実施の形態を示すフローチャートである。
【０１２９】
[00162]図２４を参照すると、処理ロジックは、タスクの呼び出しのフローを分析して、有向グラフを発生することで始まり、ここでは、ノードの名前が呼出し番号に対応する（処理ブロック２４０２）。
【０１３０】
[00163]処理ブロック２４０４において、処理ロジックは、その名前がグラフノードの名前であり且つその値がノードに関する情報を記憶するオブジェクトであるタプルを、グラフノードごとに生成することによって、有向グラフからＤＦＳＡを発生する。
【０１３１】
[00164]処理ブロック２４０６において、処理ロジックは、上記タプルをドメインメモリに記憶する。
【０１３２】
[00165]処理ブロック２４０８において、処理ロジックは、その名前がアクション名であり且つその値が第１グラフノードを伴うストリングである付加的なタプルを記憶する。
【０１３３】
インデックスベースのパラメータアクセス
[00166]図３Ａに示したように、一実施の形態において、ＭＢＢのインフラストラクチャーは、ハッシュテーブルを使用して、情報を記憶したりアクセスしたりする。これは、デベロッパーにとって便利である。その理由は、彼等が名前でパラメータを直接アクセスできるからである。別の実施の形態では、ハッシュテーブルが、インデックスでアクセスされるポインタアレーに置き換えられる。従って、マイクロビルディングブロック（ＭＢＢ）は、インデックスベースのパラメータアクセス技術を使用して、種々のパラメータへのアクセスを可能にする。
【０１３４】
[00167]図２５は、本明細書に説明するパラメータアクセス技術を示している。この技術は、上述したハッシュテーブルを、整数インデックスアレー及び動的に発生されるインデックスの集合に置き換えることによって、入力、出力及び状態パラメータにアクセスするのに必要な時間を短縮する。一実施の形態では、インフラストラクチャーは、ＭＢＢ及び構造ＸＭＬ記述ファイルを使用して、インデックスを自動的に発生し、パラメータ名とそれらに関連するインデックスとの間のマッピングを維持し、それらの初期化中にインデックスの値をＭＢＢに指定する機能をエクスポートする。
【０１３５】
[00168]図２６は、最適化機能を実装するビルディングブロックのセットの一実施の形態を示すブロック図である。図２６を参照すると、ＭＢＢパラメータインデックスジェネレータ２６０１は、ＭＢＢ  ＸＭＬ記述ファイルを構文解析し、そしてパラメータに関連するユニークなインデックスを発生する。一実施の形態では、入力、出力及び状態オブジェクトごとにインデックスがある。
【０１３６】
[00169]一実施の形態において、インデックスは、数値インデックスである。数値インデックスは、メモリに記憶されたオブジェクトへの直接的なアクセスを可能にする。ＭＢＢラッパージェネレータ２６０２は、ＭＢＢ  ＸＭＬ記述を構文解析し、そしてパラメータを表わす定数のリストを伴うＭＢＢコードテンプレート、定数値を初期化するためのメソッド、及びデベロッパーが満たすＭＢＢによって実施されるアクションに対する一つ以上のエンプティ(empty)メソッドを発生する。
【０１３７】
[00170]一実施の形態において、ＭＢＢラッパージェネレータ２６０２は、ＸＭＬパーサを使用して、構文解析を遂行する。このパーサは、ファイルをオープンし、コンテンツを読み取り、ファイルに含まれた異なるキーワードを分析し、そしてＭＢＢに関する情報を抽出する。パーサは、この情報を使用して、コードを自動的に発生する。
【０１３８】
[00171]一実施の形態では、表現されるメソッドは、次のものを含む。
１）ＭＢＢに関連した定数に値を指定するためのコードを含む定数初期化メソッド。ＭＢＢインフラストラクチャーは、ＭＢＢを初めてロードするときにこのメソッドを自動的に呼び出す。
２）ＭＢＢの機能をエクスポートするＭＢＢメソッド。一実施の形態において、これらのメソッドは、ユーザによりオリジナルＸＭＬファイルに定義され、そして指定の機能を提供するためにインフラストラクチャーが呼び出すものである。
【０１３９】
[00172]パラメータマッピング２６０３は、パラメータ及びそれらに関連したインデックスのリストを記憶するハッシュテーブルである。パラメータマッピング２６０３（即ち、名前とインデックスとの関連付け）は、パラメータマッピングを記憶し、従って、システムは、それらを後で参照することができる。これらのマッピングをセーブする方法は多数あり、例えば、リンク型リスト、スタティックアレー等があるが、一実施の形態では、他のデータ構造に比して、情報を検索するスピードが速いことからハッシュテーブルが使用される。また、一実施の形態では、パラメータマッピング２６０３が状態メモリに記憶される。
【０１４０】
[00173]ＭＢＢパラメータインデックスジェネレータ２６０１は、パラメータインデックスを管理するという役割を果たす。図２７によれば、パラメータインデックスジェネレータ２６０１は、パラメータマッピング２７１０（状態メモリ２７０３に記憶された）及びＭＢＢ  ＸＭＬ記述ファイル２７０２を受け取り、パラメータマッピング２７１０を更新し、そしてそれらマッピングを状態メモリ２７０１に記憶する。一実施の形態では、パラメータインデックスジェネレータ２６０１は、二つの機能、即ちパラメータ追加及びパラメータ除去を提供する。パラメータ追加関数は、パラメータに対する新たなインデックス（入力、出力又は状態）を発生し、一方、パラメータ除去関数は、パラメータを取り去り、そしてそれに関連するインデックスを、そのパラメータを使用してＭＢＢの数に基づいて更新する。
【０１４１】
[00174]インデックスの使用は、性能を高めるが、プログラマーがそれらインデックスを使用してパラメータにアクセスすることを必要とする。パラメータアクセスを簡単化するために、一実施の形態では、ＭＢＢラッパージェネレータ２６０２は、オリジナルパラメータの名前にマッチングするパラメータ定数のリストを発生する。さらに、ラッパージェネレータ２６０２は、ＭＢＢ初期化中にインデックスで定数の値を自動的に初期化するメソッドを生成する。
【０１４２】
[00175]一実施の形態において、ラッパージェネレータは、メソッドの定義と共にコードを含む新たなファイルを発生することによってメソッドを生成する。このコードは、自動的に発生されてもよい。
【０１４３】
[00176]図２８は、ＭＢＢラッパージェネレータ２６０２の一実施の形態を示す。図２８を参照すると、ＭＢＢラッパージェネレータ２６０２は、ＭＢＢ  ＸＭＬ記述ファイル２８０１を受け取り、そしてＭＢＢラッパー２８０２を特定の言語で発生する。図２９は、Ｊａｖａ  ＭＢＢラッパーの一実施例を示す。
【０１４４】
[00177]一実施の形態では、ＭＢＢは、三つの異なる形式のパラメータ、即ち入力、出力及び状態を使用する。入力パラメータは、それが呼び出されたときにＭＢＢへ渡され、一方、出力パラメータは、ＭＢＢによって発生される。ＭＢＢスケジューラーは、これらの出力パラメータを受け取り、そしてそれらを、それに続くＭＢＢへ渡す。最終的に、状態パラメータは、ＭＢＢの内部値を記憶する。これらの状態パラメータは、状態メモリに記憶され、そしてＭＢＢがシステムに存在する限り保持される。一実施の形態では、これら三つの形式のパラメータが、キー値タプルとして記憶される。これらキーの名前を使用するのではなく、インデックスが使用される。ユーザがパラメータに対応する文字列を書き込む名前とは異なり、インデックスでは、ユーザは、インデックスを得た後にそれを使用して値を検索することができる。このタスクを簡単化するために、ラッパージェネレータは、各パラメータに対して変数を自動的に生成する。変数の名前は、パラメータの名前に対応する。一実施の形態では、変数の形式は、整数であり、パラメータに関連したインデックスの値を記憶する。ラッパージェネレータは、これらパラメータの値を自動的に初期化するメソッドを形成する。図３０は、ＭＢＢ  ＸＭＬ記述ファイルの一例を示す。ＭＢＢクラスは、「一例」であり、一つの状態パラメータ（状態１）と、一つの入力パラメータ（入力１）と、一つの出力パラメータ（出力１）とを有する。図２９は、ＸＭＬファイルを構文解析した後に、ＭＢＢラッパージェネレータ２６０２によって発生されるＭＢＢラッパーを示す。この結果は、三つの内部属性、即ち状態１、入力１及び出力１を伴うＪａｖａクラスである。これら三つの整数は、ｉｎｉｔＩｎｄｉｃｅｓメソッドによるＭＢＢの生成中に初期化され、このメソッドは、パラメータマッピングハッシュテーブルを得、三つのパラメータを名前で決定し、インデックス値を得、そしてそれをＭＢＢラッパークラスの属性に指定する。整数属性は、パラメータアレーをインデックスするのに使用できる。
【０１４５】
[00178]図３１は、三つのパラメータにアクセスするコードの一実施例を示す。図３１を参照すると、自動的に発生される変数、即ち状態１、入力１、及び出力１を使用して、アレーをインデックスし、適切な値を得る。コードの例では、ユーザは、これら変数を使用して、適切な値を検索する。例えば、３行目において、ＩｎｐｕｔＰａｒａｍｓ．ｇｅｔＰａｒａｍｅｔｅｒ（ｉｎｐｕｔ１）を使用して入力パラメータ値を検索する。これらの変数（入力１、出力１及び状態１）の各々は、真のパラメータに対するインデックスを記憶する。同じことが、出力及び状態パラメータにも適用される。
【０１４６】
[00179]一実施の形態において、パラメータマッピングオブジェクトは、パラメータマッピングアイテムを記憶するハッシュテーブルである。図３２は、パラメータマッピングアイテムの一実施例である。パラメータマッピングアイテムとは、二つのフィールド、即ちパラメータインデックス及びパラメータリファレンスを伴う構造体である。パラメータインデックスは、パラメータに関連した数値インデックスを表わす整数を記憶する。パラメータリファレンスは、パラメータを参照するＭＢＢの数を記憶するカウンタである。即ち、パラメータ「ｘ」は、入力パラメータとしてＭＢＢ「Ａ」及びＭＢＢ「Ｂ」に、そして出力パラメータとしてＭＢＢ「Ｃ」にリストすることができる。一実施の形態では、システムは、リファレンスの数を保持し、いつマッピングのリストからパラメータを削除するのが安全かを判断する。
【０１４７】
インデックスベースのパラメータアクセスをサポートするための例示的プロトコル及びパラメータラッパーの発生
[00180]図３３Ａ及び３３Ｂは、新たなパラメータを登録してインデックスを得るためのプロトコルの一実施の形態を示すフローチャートである。図３３Ａは、パラメータが存在しないときのシナリオを示し、一方、図３３Ｂは、パラメータが既に存在する場合のシナリオを示す。
【０１４８】
[00181]図３３Ａを参照すると、ＭＢＢパラメータインデックスジェネレータ２６０１が、ＭＢＢ  ＸＭＬ記述を構文解析し（３３０９）、そして各入力、出力及び状態パラメータに対して、パラメータマッピング２６０３を探す（３３１０）。パラメータが存在しない場合には（３３１１）、ＭＢＢパラメータインデックスジェネレータ２６０１は、新たなパラメータマッピングアイテムを生成し（３３１２）、それに新たなインデックスを指定し（３３１３）、そしてそれをパラメータマッピング２６０３に記憶する（３３１４）。最後に、ＭＢＢパラメータインデックスジェネレータ２６０１は、新たなインデックス値を発生する（３３１５）。
【０１４９】
[00182]図３３Ｂを参照すると、ＭＢＢパラメータインデックスジェネレータ２６０１が、ＭＢＢ  ＸＭＬ記述を構文解析し（３３２０）、そして各入力、出力及び状態パラメータに対して、ＭＢＢパラメータインデックスジェネレータ２６０１は、パラメータマッピング２６０３を探す。パラメータが存在する場合には（３３２２）、ＭＢＢパラメータインデックスジェネレータ２６０１は、パラメータマッピングアイテムに記憶されたリファレンスカウンタを増加する（３３２３）。
【０１５０】
[00183]図３４は、パラメータ除去プロトコルの一実施の形態を示すフローチャートである。図３４を参照すると、ＭＢＢパラメータインデックスジェネレータ２６０１は、パラメータマッピング２６０２を探し、そしてそのパラメータマッピングからパラメータマッピングアイテムを得ることで、開始する（３３１１）。次いで、ＭＢＢパラメータインデックスジェネレータ２６０１は、パラメータマッピングアイテムに記憶されたリファレンスカウンタを減少する（３３１２）。カウンタ値が０に達すると、ＭＢＢパラメータインデックスジェネレータ２６０１は、マッピングからアイテムを除去し（３３１３）、その他の場合には、ＭＢＢパラメータインデックスジェネレータ２６０１は、それをマッピングに残す。その理由は、それが他のＭＢＢにより使用されるからである。
【０１５１】
[00184]図３５は、ＭＢＢラッパーを自動的に発生するためのプロトコルの一実施の形態を示すフローチャートである。ＭＢＢラッパージェネレータ２６０２は、ＭＢＢ  ＸＭＬ記述を構文解析し（３５１０）、そしてユーザによって指定されたプログラミング言語を使用してＭＢＢラッパーを生成する（３５１１）。例えば、Ｊａｖａでは、ＭＢＢラッパーは、ＭｉｃｒｏＢｕｉｌｄｉｎｇＢｌｏｃｋから継承するクラスであり、そしてエンプティフィニシュ(empty finish)及びプロセスメソッド（これは、例えば、デベロッパーにより提供されるコードである）を有する。ラッパージェネレータ２６０２は、パラメータの名前を伴う定数（整数）のリストを生成する。一実施の形態では、これらの定数は、パラメータをインデックスするのに使用される。ラッパージェネレータ２６０２は、これらの定数の値を初期化するためのメソッドを生成する。このメソッドは、ＭＢＢラッパー３５２１のｉｎｉｔメソッドから自動的にコールされ、これも、また、ＭＢＢラッパー３５２１により自動的に生成される。
【０１５２】
[00185]図３６は、パラメータインデックスを初期化するためのプロセスの一実施の形態を示すフローチャートである。図３６を参照すると、ＭＢＢローダー３６０１が新たなＭＢＢを生成するときに、ｉｎｉｔメソッドを呼び出す（３６１０）。このメソッドは、初期化パラメータメソッドを呼び出すもので（３６１１）、これは、パラメータマッピングを得て、各ＭＢＢパラメータに対してインデックス値を検索し（３６１２及び３６１３）、そしてそれらのインデックスをパラメータ定数に指定する（３６１４）。
【０１５３】
通信ミドルウェアサービスの実施例
[00186]以下、ＭＢＢを使用して形成されたマルチプロトコルオブジェクト要求ブローカー（ＯＲＢ）通信ミドルウェアサービスについて説明する。このサービスは、ワイヤプロトコルとは独立して、クライアント及びサーバー機能を提供する。即ち、サーバーオブジェクトメソッドは、ＩＩＯＰ、ＳＯＡＰ、又はＸＭＬ−ＲＰＣのような異なるプロトコルを経て呼び出すことができる。同様に、クライアント要求は、基礎となるプロトコルに関わらず、同じインターフェイス及びセマンティックスを使用する。その実装は、ＩＩＯＰ及びＸＭＬ−ＲＰＣのためのサポートを提供する。しかしながら、ランタイムで付加的なＭＢＢを開発して展開することによって付加的なプロトコルを追加することが可能である。ＥｘＯＲＢアーキテクチャー（状態、構成及びロジック）が外部化されるので、ランタイムでＥｘＯＲＢアーキテクチャーを点検して操作することが可能である。
【０１５４】
[00187]ＥｘＯＲＢは、１１個のドメインにグループ編成される２８個のマイクロビルディングブロックで構成される。図３７は、ＥｘＯＲＢの構造を示す。
【０１５５】
[00188]図３７を参照すると、ＣＤＲパラメータマネージメントドメインは、共通データ表現（ＣＤＲ）フォーマット（ＣＯＲＢＡデフォールト表現）に基づいてパラメータをマーシャル及びデマーシャルする機能を提供する。ＣＤＲマーシャルパラメータマイクロビルディングブロックは、パラメータ及びＣＤＲバッファエンコードオブジェクトを受け取り、そしてパラメータのＣＤＲ表現を含むバイトアレーを返す。ＣＤＲデマーシャルパラメータマイクロビルディングブロックは、バイトバッファ、当該バッファから抽出すべきパラメータタイプのリストを伴うアレー、及びＣＤＲバッファデコードオブジェクトを受け取り、そしてオブジェクトの値を伴うアレーを返す。
【０１５６】
[00189]ＸＭＬＲＰＣパラメータマネージメントドメインは、ＣＤＲパラメータマネージメントドメインと同様であるが、ＸＭＬＲＰＣプロトコルに基づいてエンコードされたパラメータをマーシャル及びデマーシャルする機能を提供する。
【０１５７】
[00190]ＩＩＯＰプロトコル処理ドメインは、ＩＩＯＰプロトコルに合致するメッセージをエンコード及びデコードするための機能をエクスポートするマイクロビルディングブロックを統合する。ＩＩＯＰエンコード要求マイクロビルディングブロックは、マーシャル化パラメータのリスト及び要求フィールドの集合（例えば、リモートオペレーション名、予想される応答、及び要求ｉｄ）を受け取り、そしてＩＩＯＰに基づいてフォーマットされたバイトバッファを発生する。ＩＩＯＰデコード要求マイクロビルディングブロックは、ＩＩＯＰフォーマットの受信要求を伴うバイトバッファと、要求メッセージを記述するフィールド（例えば、長さ）の集合とを受け取り、その要求を構文解析し、そして要求のｉｄやターゲットオブジェクトやターゲットメソッドを含む要求に関する情報を伴う属性の集合と、パラメータを伴うバイトバッファとを発生する。ＩＩＯＰエンコード応答及びＩＩＯＰデコード応答は、ＩＩＯＰ応答メッセージを発生すると共に、到来するＩＩＯＰ応答メッセージをデコードするための機能を提供する。最終的に、ＩＩＯＰデコードヘッダは、ネットワークからオリジナルの受信要求を受け取り（バイトバッファ）、そしてＧＩＯＰヘッダを構成する１２個の初期バイトを構文解析する。このヘッダは、残りのメッセージの長さ及びメッセージのタイプに関する情報を含む。
【０１５８】
[00191]ＸＭＬＲＰＣプロトコル処理ドメインは、ＩＩＯＰプロトコル処理ドメインと同等であり、ＸＭＬＲＰＣ要求及び応答を取り扱う機能を提供する。
【０１５９】
[00192]ネットワークデータマネージメントドメインは、到来する及び発信するネットワークトラフィックを取り扱うという役割を果たす。これは、三つのマイクロビルディングブロック、即ちデータ送信、データ受信及びピークデータ(Peek Data)で構成される。データ送信マイクロビルディングブロックは、バッファ、その長さ及び通信ポイントオブジェクト（例えば、ＴＣＰソケット）を受け取り、そしてその通信ポイントを使用してネットワークを経てデータを送信する。データ受信マイクロビルディングブロックは、バッファ、受信すべきデータの長さ、及び通信ポイントオブジェクトを受け取り、そしてその通信ポイントオブジェクトを使用してデータをバッファに記憶し、データを得る。ピークデータマイクロビルディングブロックは、データ受信マイクロビルディングブロックと同様であるが、ネットワークバッファから読み取ったデータを除去するものではない。
【０１６０】
[00193]オブジェクト呼び出しドメインは、Ｊａｖａ言語レフレクション能力を使用してサーバーメソッド呼び出しを自動化するために二つのマイクロビルディングブロックを含んでいる。この機能の結果として、デベロッパーは、それらのサーバーオブジェクトに対するスケルトンを構築する必要がなく、それらを登録するだけでよく、そしてシステムは、それが要求する全ての情報を自動的に得る。準備メソッド呼び出しマイクロビルディングブロックは、オブジェクトに対するポインタと、呼び出すべきメソッドの名前とを受け取る。このマイクロビルディングブロックは、Ｊａｖａレフレクションを使用して、メソッドシグネチャーを点検し、メソッドを呼び出すのに必要なパラメータのタイプを伴うアレーを生成し、そのアレーを出力パラメータとして返す。呼び出しメソッドマイクロビルディングブロックは、パラメータ値を伴うアレーを受け取り、オブジェクトメソッドを呼び出し、そしてメソッドにより発生されたパラメータを伴うアレーを返す。
【０１６１】
[00194]ＴＣＰ受信接続マネージメントドメインは、到来するＴＣＰネットワークの接続を取り扱う機能を提供する。Ｉｎｉｔマイクロビルディングブロックは、ＥｘＯＲＢが要求を聴取するために使用するポートを指定する整数を受け取る。受け容れマイクロビルディングブロックは、到来するＴＣＰ要求を聴取し、それが入力パラメータを受け取らない場合に、ネットワーク接続をカプセル化するＴＣＰ通信ポイントオブジェクトを返す。
【０１６２】
[00195]ＴＣＰ発信接続マネージメントドメインは、リモートピアとのＴＣＰ接続確立を取り扱う。このドメインは、二つのマイクロビルディングブロックを含む。接続マイクロビルディングブロックは、ホスト名及びポートを受け取り、ホストへ接続し、更に、ネットワーク接続をカプセル化するＴＣＰ通信ポイントを返す。返送通信ポイントマイクロビルディングブロックは、ＴＣＰ通信ポイントオブジェクトを受け取り、そしてそれを閉じるか、又はそのキャッシングアルゴリズムに基づいてそれをキャッシュ記憶する。
【０１６３】
[00196]オブジェクト登録ドメインは、サーバーオブジェクトを管理するという役割を果たす。登録オブジェクトマイクロビルディングブロックは、オブジェクトｉｄ及びオブジェクトリファレンスを受け取り、オブジェクトをテーブルに記憶する。このテーブルは、ドメインの状態メモリに記憶される状態属性である。除去オブジェクトマイクロビルディングブロックは、オブジェクトｉｄを受け取り、それに関連したオブジェクトをテーブルから除去する。ゲットオブジェクトマイクロビルディングブロックは、オブジェクトｉｄを受け取り、その関連オブジェクトへのリファレンスを返す。
【０１６４】
[00197]プロトコル検出ドメインは、到来する要求の通信ミドルウェアプロトコルを特定するための機能をエクスポートする。この機能は、ＥｘＯＲＢの多プロトコル振舞いをサポートするために要求される。検出プロトコルマイクロビルディングブロックは、バイトバッファを受け取り、このバッファを構文解析し、そしてミドルウェアプロトコルの名前と共にストリングを返す。ＭＢＢの現在の実装は、二つのタイプのプロトコル、即ちＸＭＬＰＲＣ及びＩＩＯＰを検出する。
【０１６５】
[00198]ＵＲＩオブジェクトリファレンスマネージメントドメインは、リモートオブジェクトＵＲＩリファレンスを構文解析して、リモートオブジェクトに要求を送信するに必要な全ての情報を抽出するための機能を提供する。このドメインは、オブジェクトへのリファレンスと称される単一のマイクロビルディングブロックを含み、これは、ＵＲＩ及びプロトコルタイプを受け取り、ホスト名、ポート番号及びオブジェクトｉｄを返す。
【０１６６】
[00199]テーブル１は、各ＥｘＯＲＢドメイン（Ｊａｖａバージョン）のサイズをリストしたものである。全サイズは、デバッグ情報なしで、７０ＫＢである。
【表１】
2008507755.tif 000002
【０１６７】
[00200]ＥｘＯＲＢは、四つのアクション、即ち要求送信、要求受信、初期化、及びオブジェクト登録、をエクスポートする。第１のものは、クライアント側の機能として意図され、一方、残りの三つ（要求受信、初期化、及びオブジェクト登録）は、サーバー側の機能として意図される。オブジェクト初期化及びオブジェクト登録は、ＭＢＢ初期化を呼び出すと共に、オブジェクトＭＢＢを登録する単一ノードアクションである。
【０１６８】
[00201]図３８は、要求送信アクションのためのアクショングラフを示す。簡単化のために、エラー状態は除去されている。クライアントオブジェクトは、それがアクションを呼び出すと、アクションの名前、リモートオブジェクトのリファレンス、呼び出すべきメソッド、要求されたパラメータ、及び使用すべきプロトコル（即ち、ＸＭＬＲＰＣ又はＩＩＯＰ）を含むアクション状態オブジェクト（アクションの実行中に発生されるパラメータを記憶するもの）を提供する。このアクションは、オブジェクトＭＢＢに対するリファレンスの呼び出しを開始し、これは、リモートオブジェクトのリファレンスを構文解析すると共に、ホスト名、オブジェクトｉｄ及びポートを抽出する。これらのパラメータは、アクション状態オブジェクトに記憶される。
【０１６９】
[00202]次いで、このアクションは、接続を呼び出し、これは、アクション状態オブジェクトからホスト名及びポートを得、リモートホストとの接続を確立し（又は既存の接続を再使用し）、そしてＴＣＰソケット（ＴＣＰ通信ポイント）をカプセル化するオブジェクトをアクション状態オブジェクトに記憶する。次の状態への遷移は、条件付きであり、アクション状態オブジェクトに記憶された「プロトコル」変数の値に依存する。変数の値が「ｉｉｏｐ」である場合には、このアクションは、ＣＤＲマーシャルパラメータを呼び出して、パラメータをマーシャル化し、次いで、ＩＩＯＰエンコード要求ＭＢＢを呼び出して、要求メッセージを生成する。変数の値が「ｘｍｌｒｐｃ」である場合には、このアクションは、ＸＭＬＲＰＣマーシャルパラメータを呼び出し、次いで、ＸＭＬＲＰＣエンコード要求を呼び出す。ＩＩＯＰエンコード要求及びＸＭＬＲＰＣエンコード要求ＭＢＢは、両者とも、適切なプロトコルに基づいてフォーマットされた要求と共にバイトバッファを発生する。アクショングラフにおける次の状態は、データ送信であり、これは、アクション状態オブジェクトからバッファを検索して、それを、アクション状態オブジェクトに記憶されたＴＣＰ通信ポイントを使用してリモートオブジェクトへ送信する。データ送信を呼び出した後に、このアクションは、「一方向」と称されるタプルをアクション状態オブジェクトから検索する。値が「真」である場合に、このアクションは、通信ポイント返送を呼び出し、これは、ＴＣＰ通信ポイントオブジェクトをアクション状態オブジェクトから処分し、アクション状態オブジェクトをアクション呼び出し者へ返して終了となる。
【０１７０】
[00203]「一方向」の値が「偽」である場合には、このアクションは、応答のデコードへ続く。先ず、「プロトコル」タプルの値に基づいて、このアクションは、ＩＩＯＰヘッダ又はＸＭＬＲＰＣヘッダをデコードする。両ＭＢＢは、メッセージヘッダを構文解析し、要求に関する情報をアクション状態オブジェクトに記憶する。両ＭＢＢに対する一つの必須のフィールドは、応答の残部の長さである。このアクションは、データ受信を呼び出し、これは、ネットワークから読み出さねばならないデータの量を決定するために長さタプルを要求する。次いで、アクションは、応答をデコードし、パラメータをデマーシャルするように進む。この場合も、アクションインタープリターは、「プロトコル」の値を使用して、グラフにおいてどんな経路をたどるか判断する。その後、このアクションは、通信ポイント返送ＭＢＢ（ＴＣＰ通信ポイントを処分する）を呼び出し、アクション状態オブジェクトをアクション呼び出し者へ返して終了となる。アクション状態オブジェクトは、結果パラメータを含む。
【０１７１】
[00204]図３９は、要求受信のためのアクショングラフである。このアクションは、受け容れを呼び出すことで開始し、これは、到来するネットワーク要求を検出し、ネットワーク接続をカプセル化するＴＣＰ通信ポイントを発生するまで阻止する。次いで、このアクションは、ピークデータ (peek data)を呼び出し、これは、到来データバッファを見て、初期バイトを構文解析し、プロトコルのタイプを検出する。プロトコルのタイプがＩＩＯＰである場合には、ピークデータＭＢＢは、名前「プロトコル」で登録された値「ｉｉｏｐ」と共にタプルを記憶する。プロトコルタイプがＸＭＬＲＰＣである場合には、ＭＢＢは、同じ名前のもとで値「ｘｍｌｒｐｃ」を記憶する。次いで、このアクションは、「プロトコル」値を使用して、ＩＩＯＰデコードヘッダへジャンプすべきかＸＭＬＲＰＣデコードヘッダへジャンプすべきかを決定する。これら二つのＭＢＢは、ヘッダを構文解析し、次いで、それらがアクション状態オブジェクトに記憶する情報を抽出する。両ＭＢＢは、残りのデータの長さを指定する「長さ」という名前の必須タプルを記憶しなければならない。この値は、データ受信ＭＢＢにより使用され、残りの要求データをネットワークバッファから得る。
【０１７２】
[00205]このアクションは、アクション状態オブジェクトに記憶された「プロトコル」タプルの値に基づいて、ＩＩＯＰデコード要求又はＸＭＬＲＰＣデコード要求を呼び出す。両ＭＢＢは、ターゲットオブジェクトのｉｄ及びメソッドの名前を含む多数のフィールドを発生する。次いで、このアクションは、ゲットオブジェクトを呼び出し、これは、オブジェクトｉｄを使用して、ターゲットオブジェクトを探索すると共に、そのリファレンスをアクション状態オブジェクトに記憶する。メソッド準備呼び出しは、ターゲットメソッドの名前を使用して、Ｊａｖａレフレクションを使用するメソッドを呼び出すのに必要なパラメータを検査する。このＭＢＢは、パラメータタイプのアレーを発生する。次いで、「プロトコル」の値に基づいて、このアクションは、ＣＤＲデマーシャルパラメータ又はＸＭＬＲＰＣデマーシャルパラメータを呼び出し、これは、以前に発生されたタイプのアレーを使用して、到来する要求から値をデマーシャルする。これら二つのＭＢＢは、パラメータ値のアレーを発生する。メソッド呼び出しＭＢＢは、この値アレーを使用して、アクション状態オブジェクトに記憶されたターゲットオブジェクトのメソッドを呼び出す。メソッド呼び出しＭＢＢは、出力パラメータの値を伴うアレーを発生する。次いで、このアクションは、「プロトコル」値を使用して、出力パラメータをマーシャル化すると共に、応答メッセージをＩＩＯＰ又はＸＭＬＲＰＣのいずれかで発生する。ＩＩＯＰエンコード応答及びＸＭＬＲＰＣエンコード応答ＭＢＢは、応答と共にバイトバッファを発生する。データ送信マイクロビルディングブロックは、アクション状態オブジェクトに記憶されたＴＣＰ通信オブジェクト（受け容れマイクロビルディングブロックで発生された）を使用してクライアントホストへ応答を送信する。その後、データを送信した後に、このアクションは、通信ポイント返送を呼び出し、これは、ＴＣＰ通信ポイントを処分するか、又はキャッシングアルゴリズムに基づいてキャッシュに記憶する。
【０１７３】
[00206]上述したように、コンフィギュレーション可能なソフトウェアの重要な特徴は、ソフトウェア状態を第１クラスオブジェクトとして操作するためのサポートにある。一実施の形態において、各ＭＢＢは、名前及び値の対に関して定義されたその状態依存性を明示的に指定する。これらのタプルは、ＭＢＢドメインによって与えられる記憶エリアに記憶される。ソフトウェアの状態は、全てのＭＢＢ状態属性を統合したものである。それ故、ＥｘＯＲＢの状態は、２８個のマイクロビルディングブロックにより定義された全ての状態属性より成る。
【０１７４】
[00207]テーブル２は、ＥｘＯＲＢに関連した状態属性をリストする。このテーブルは、属性の名前、その目的、及びそれを記憶するドメインの名前を含む。
【表２】
2008507755.tif 000003
【０１７５】
コンピュータシステムの実施例
[00208]図４０は、上述したオペレーションの一つ以上を遂行するのに使用できるコンピュータシステム２８００を例示するブロック図である。別の実施の形態において、このマシンは、ネットワークルータ、ネットワークスイッチ、ネットワークブリッジ、パーソナルデジタルアシスタント（ＰＤＡ）、セルラー電話、ウェブアプライアンス、或いはマシンにより行われるべきアクションを特定する一連の命令を実行できる何らかのマシンを備えてもよい。
【０１７６】
[00209]コンピュータシステム４０００は、プロセッサ４００２と、メインメモリ４００４と、静的メモリ４００６とを備え、これらは、バス４００８を経て互いに通信する。コンピュータシステム４０００は、更に、ビデオディスプレイユニット４０１０（例えば、液晶ディスプレイ（ＬＣＤ）又は陰極線管（ＣＲＴ））を備えてもよい。また、コンピュータシステム４０００は、アルファニューメリック入力装置４０１２（例えば、キーボード）と、カーソルコントロール装置４０１４（例えば、マウス）と、ディスクドライブユニット４０１６と、信号発生装置４０２０（例えば、スピーカ）と、ネットワークインターフェイス装置４０２２も備えている。
【０１７７】
[00210]ディスクドライブユニット４０１６は、上述したメソッドの一つ又は全てを実施する命令のセット（即ち、ソフトウェア）４０２６が記憶されたコンピュータ読み取り可能な媒体４０２４を備えている。また、ソフトウェア４０２６は、メインメモリ４００４及び／又はプロセッサ４００２内に完全に又は少なくとも部分的に存在するように示されている。さらに、ソフトウェア４０２６は、ネットワークインターフェイス装置４０２２を経て送信又は受信されてもよい。説明上、「コンピュータ読み取り可能な媒体」という語は、コンピュータにより実行するための一連のインストラクションを記憶又はエンコードできる媒体であって、コンピュータが本発明のメソッドのいずれをも実行するようにさせる媒体を包含するものとする。従って、「コンピュータ読み取り可能な媒体」という語は、ソリッドステートメモリ、光学的及び磁気的ディスク、並びに搬送波信号を包含するが、これらに限定されない。
【０１７８】
[00211]ランタイムで小さな実行ユニット（マイクロビルディングブロック）を動的にアッセンブルし且つコンフィギュレーションするためのソフトウェア構成方法及び装置について説明した。本発明の実施の形態は、状態、構成及びロジックのような実行エレメントの外部化を使用できる。本発明の実施の形態は、言語及びプラットホームに独立したもので、ソフトウェアコンポーネントのランタイムコンフィギュレーション性、更新性及びアップグレード性と、ソフトウェアコンポーネントのシームレス移動性と、構成されたソフトウェアの高い信頼性とを与えるものである。
【０１７９】
[00212]当業者であれば、以上の説明を読んだ後に、本発明の多数の変更や修正が疑いなく明らかとなろうが、図示して説明した特定の実施の形態は、本発明を何らそれに限定するものではないことを理解されたい。それ故、種々の実施の形態の細部にわたる言及は、本発明の本質と考えられる特徴のみを記載した特許請求の範囲を限定するものではない。
【図面の簡単な説明】
【０１８０】
【図１】再コンフィギュレーション可能なソフトウェアの動的な構成を容易にするためのシステムの一実施の形態を示すブロック図である。
【図２Ａ】ソフトウェアを動的に構成するプロセスの一実施の形態を示すフローチャートである。
【図２Ｂ】ソフトウェア構成システムの一実施の形態を示すブロック図である。
【図３Ａ】マイクロビルディングブロック（ＭＢＢ）のオペレーションを例示する図である。
【図３Ｂ】ＭＢＢの構造の一実施の形態を示すブロック図である。
【図３Ｃ】ＭＢＢに対するＸＭＬ記述ファイルを例示する図である。
【図４Ａ】解釈アクションを例示する図である。
【図４Ｂ】コンパイルアクションを例示する図である。
【図４Ｃ】解釈及びコンパイルアクションの定義を提供するＸＭＬ記述ファイルを例示する図である。
【図５Ａ】ドメインの構造を例示する図である。
【図５Ｂ】ドメインの階層的構成を例示する図である。
【図５Ｃ】ソフトウェアアーキテクチャーの定義を提供するＸＭＬ記述ファイルを例示する図である。
【図５Ｄ】ドメインに対するソフトウェア構造の定義を提供するＸＭＬ記述子ファイルを例示する図である。
【図６】解釈アクションを実行するためのプロセスの一実施の形態を示すフローチャートである。
【図７】解釈アクションの実行を例示する図である。
【図８Ａ】ドメインの一実施の形態を示すブロック図である。
【図８Ｂ】タプルコンテナを例示する図である。
【図９】ドメインに使用されるプロトコルのセットを示す図である。
【図１０】ドメインに使用されるプロトコルのセットを示す図である。
【図１１】ドメインに使用されるプロトコルのセットを示す図である。
【図１２】ドメインに使用されるプロトコルのセットを示す図である。
【図１３】ドメインに使用されるプロトコルのセットを示す図である。
【図１４】ドメインに使用されるプロトコルのセットを示す図である。
【図１５】ドメインに使用されるプロトコルのセットを示す図である。
【図１６】ドメインに使用されるプロトコルのセットを示す図である。
【図１７】ドメインに使用されるプロトコルのセットを示す図である。
【図１８】ドメインに使用されるプロトコルのセットを示す図である。
【図１９】ドメインに使用されるプロトコルのセットを示す図である。
【図２０】ドメインに使用されるプロトコルのセットを示す図である。
【図２１】ドメインに使用されるプロトコルのセットを示す図である。
【図２２】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施の形態を示す図である。
【図２３】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施の形態を示す図である。
【図２４】プログラムを再コンフィギュレーション可能なソフトウェアへ変換するためのプロセスの一実施の形態を示す図である。
【図２５】パラメータアクセスを示す図である。
【図２６】最適化機能を実施するビルディングブロックのセットの一実施の形態を示すブロック図である。
【図２７】パラメータインデックスジェネレータの一実施の形態を示すデータフロー図である。
【図２８】ラッパージェネレータの一実施の形態を示す図である。
【図２９】Ｊａｖａマイクロビルディングブロック（ＭＢＢ）を例示する図である。
【図３０】ＭＢＢ  ＸＭＬ記述ファイルを例示する図である。
【図３１】三つのパラメータにアクセスするコードを例示する図である。
【図３２】パラメータマッピングアイテムを例示する図である。
【図３３Ａ】新たなパラメータを登録してインデックスを得るためのプロトコルの一実施の形態を示すフローチャートである。
【図３３Ｂ】新たなパラメータを登録してインデックスを得るためのプロトコルの一実施の形態を示すフローチャートである。
【図３４】パラメータ除去プロトコルの一実施の形態を示すフローチャートである。
【図３５】ＭＢＢラッパーを自動的に発生するためのプロトコルの一実施の形態を示すフローチャートである。
【図３６】パラメータインデックスを初期化するプロセスの一実施の形態を示すフローチャートである。
【図３７】再コンフィギュレーション可能な通信ミドルウェアサービスの構造を例示する図である。
【図３８】再コンフィギュレーション可能な通信ミドルウェアサービスの構造を例示する図である。
【図３９】再コンフィギュレーション可能な通信ミドルウェアサービスの構造を例示する図である。
【図４０】コンピュータシステムを例示するブロック図である。
【符号の説明】
【０１８１】
１００…システム、１０２…ネットワーク、１０４…クライアント装置、１０６…ネットワークサーバー、１０８…ソフトウェア構造システム、２５０…ソフトウェア構造システム、２５２…ローダー、２５４…スケジューラー、２５６…ユーザインターフェイスマネージャー、２５８…変更コーディネーター、２６０…データ記憶装置、３００…マイクロビルディングブロック、３０２…入力パラメータ、３０４…内部状態パラメータ、３０６…出力パラメータ、３２０…ＭＢＢ、３２２…属性、３２４…メソッド、３２６…デマルチプレクサ、５０２…構造メモリ、５０４…ロジックメモリ、５０６…状態メモリ、５２０…ルートドメイン、５２２，５２４，５２６，５２８，５３０…ドメイン、８０２…ドメインメモリ、８０４…ドメインローダー、８０６…ドメインスケジューラー、２６０１…ＭＢＢパラメータインデックスジェネレータ、２６０２…ＭＢＢラッパージェネレータ、２６０３：パラメータマッピング、２７０１、２７０３…状態メモリ、２７０２…ＭＢＢ記述子、２８０１…ＭＢＢ  ＸＭＬ記述ファイル、２８０２…ＭＢＢラッパー。
【図１】
2008507755.tif 000004
【図２Ａ】
2008507755.tif 000005
【図２Ｂ】
2008507755.tif 000006
【図３Ａ】
2008507755.tif 000007
【図３Ｂ】
2008507755.tif 000008
【図３Ｃ】
2008507755.tif 000009
【図４Ａ】
2008507755.tif 000010
【図４Ｂ】
2008507755.tif 000011
【図４Ｃ】
2008507755.tif 000012
【図５Ａ】
2008507755.tif 000013
【図５Ｂ】
2008507755.tif 000014
【図５Ｃ】
2008507755.tif 000015
【図５Ｄ】
2008507755.tif 000016
【図６】
2008507755.tif 000017
【図７】
2008507755.tif 000018
【図８Ａ】
2008507755.tif 000019
【図８Ｂ】
2008507755.tif 000020
【図９】
2008507755.tif 000021
【図１０】
2008507755.tif 000022
【図１１】
2008507755.tif 000023
【図１２】
2008507755.tif 000024
【図１３】
2008507755.tif 000025
【図１４】
2008507755.tif 000026
【図１５】
2008507755.tif 000027
【図１６】
2008507755.tif 000028
【図１７】
2008507755.tif 000029
【図１８】
2008507755.tif 000030
【図１９】
2008507755.tif 000031
【図２０】
2008507755.tif 000032
【図２１】
2008507755.tif 000033
【図２２】
2008507755.tif 000034
【図２３Ａ】
2008507755.tif 000035
【図２３Ｂ】
2008507755.tif 000036
【図２４】
2008507755.tif 000037
【図２５】
2008507755.tif 000038
【図２６】
2008507755.tif 000039
【図２７】
2008507755.tif 000040
【図２８】
2008507755.tif 000041
【図２９】
2008507755.tif 000042
【図３０】
2008507755.tif 000043
【図３１】
2008507755.tif 000044
【図３２】
2008507755.tif 000045
【図３３Ａ】
2008507755.tif 000046
【図３３Ｂ】
2008507755.tif 000047
【図３４】
2008507755.tif 000048
【図３５】
2008507755.tif 000049
【図３６】
2008507755.tif 000050
【図３７】
2008507755.tif 000051
【図３８】
2008507755.tif 000052
【図３９】
2008507755.tif 000053
【図４０】
2008507755.tif 000054
【手続補正書】
【提出日】平成19年1月24日(2007.1.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
要求された機能に関連したアプリケーションの複数のアプリケーションコンポーネントを特定するソフトウェア構造データを得、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーと、
記述ファイルを構文解析し、前記ローダーが前記ソフトウェア構造及び前記ソフトウェアロジックをロードするときに、ランタイムで前記複数のアプリケーションコンポーネントの各パラメータに対するインデックスを発生するためのパラメータインデックスジェネレータと、
前記複数のアプリケーションコンポーネントに関連する入力、出力及び状態パラメータを、前記パラメータインデックスジェネレータにより発生されるインデックスであって、前記入力、出力及び状態パラメータにアクセスするために前記複数のアプリケーションコンポーネントの中のアプリケーションコンポーネントによって使用されるインデックスへとマップするパラメータマッピングを記憶するためのメモリと、
インデックスベースのパラメータアクセスのために前記ソフトウェアロジックデータに基づき且つ前記パラメータマッピングを使用してランタイムで前記複数のアプリケーションコンポーネントの呼び出しをコーディネートするためのスケジューラーと、
を備える装置。
【請求項２】
少なくとも二つ以上の前記入力、出力及び状態パラメータの名前にマッチングするパラメータ定数のリストを発生し、前記複数のアプリケーションコンポーネントの初期化中に前記パラメータインデックスジェネレータによって発生されたインデックスで前記定数の値を初期化するためのラッパージェネレータを更に備える、請求項１に記載の装置。
【請求項３】
前記ラッパージェネレータは、前記記述ファイルを構文解析するのに応答して前記パラメータ定数のリストを発生する、請求項２に記載の装置。
【請求項４】
前記記述ファイルはＸＭＬ記述ファイルを含む、請求項１に記載の装置。
【請求項５】
前記パラメータマッピングはポインタアレーを含む、請求項１に記載の装置。
【請求項６】
前記パラメータインデックスジェネレータは、パラメータを追加又は除去することによって前記パラメータマッピングを更新する、請求項１に記載の装置。
【請求項７】
前記パラメータジェネレータは、第１のパラメータを、該第１のパラメータに対して新たなインデックスを自動的に発生することによって、追加する、請求項１に記載の装置。
【請求項８】
前記パラメータジェネレータは、記述ファイルを構文解析し、各入力、出力及び状態パラメータに対して、該パラメータジェネレータは、
前記パラメータマッピングを検査して前記第１パラメータが存在するか否かを決定し、
第１のパラメータが存在しない場合に、新たなパラメータマッピングアイテムを発生し、新たなインデックスを指定し、更に、新たなインデックス値を発生し、
前記第１のパラメータが存在する場合に、前記アプリケーションコンポーネントによって存在する前記第１のパラメータに対するリファレンスの数を指示するリファレンスカウンタを増加する、
請求項７に記載の装置。
【請求項９】
前記パラメータジェネレータは、第１のパラメータを、該第１のパラメータを取り去り、それに関連したインデックスを、該第１のパラメータを使用して前記アプリケーションコンポーネントの数に基づいて、更新することによって、除去する、請求項６に記載の装置。
【請求項１０】
前記パラメータジェネレータは、
前記パラメータマッピングからパラメータマッピングアイテムを得、
前記アプリケーションコンポーネントにより存在するパラメータに対するリファレンスの数を指示するリファレンスカウンタを減少し、
前記リファレンスカウンタが、前記パラメータを使用するアプリケーションコンポーネントが無いことを指示する場合に、前記パラメータマッピングインデックスを除去する、
ことによって、パラメータを除去する、請求項９に記載の装置。
【請求項１１】
要求された機能に関連したアプリケーションの複数のアプリケーションコンポーネントを特定するソフトウェア構造データを得、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るためのローダーであって、該ローダーが前記ソフトウェア構造をロードするときに、ランタイムで発生される一つ以上のインデックスを使用するインデックスベースのパラメータアクセスを使用して前記複数のアプリケーションコンポーネントの各々に対してソフトウェアパラメータデータを得る該ローダーと、
インデックス対パラメータ定数の指定を含む前記ソフトウェアロジックデータ及び前記ソフトウェア構造データを記憶するためのメモリと、
前記ソフトウェアロジックデータに基づき、一つ以上の前記インデックス対パラメータ定数の指定を使用し、且つ前記インデックスベースのパラメータアクセスを使用して、ランタイムで前記複数のアプリケーションコンポーネントの呼び出しをコーディネートするためのスケジューラーと、
を備える装置。
【請求項１２】
前記ローダーは、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックの定義を受け取り、前記ソフトウェアロジックの定義を構文解析することによって、前記ソフトウェアロジックデータを得る、請求項１１に記載の装置。
【請求項１３】
前記ソフトウェアロジックデータは、アクションオブジェクトの識別子と、ソフトウェアロジックの定義において参照される各アクションに対するアクションオブジェクトへのリファレンスとを含む、請求項１１に記載の装置。
【請求項１４】
前記要求された機能は、要求されたワイヤレス機能を含む、請求項１１に記載の装置。
【請求項１５】
前記ソフトウェア構造データは、前記複数のアプリケーションコンポーネントの各々の識別子と、前記複数のアプリケーションコンポーネントの各々へのリファレンスとを含む、請求項１１に記載の装置。
【請求項１６】
前記複数のアプリケーションコンポーネントの各々はオブジェクトである、請求項１１に記載の装置。
【請求項１７】
記述ファイルを構文解析し、前記複数のアプリケーションコンポーネントの各入力、出力及び状態パラメータに対するインデックスを発生するためのパラメータインデックスジェネレータを更に備える、請求項１１に記載の装置。
【請求項１８】
前記パラメータインデックスジェネレータは、前記パラメータマッピングを、パラメータを追加又は除去することによって、更新する、請求項１１に記載の装置。
【請求項１９】
前記パラメータジェネレータは、前記記述ファイルを構文解析し、各入力、出力及び状態パラメータに対して、前記パラメータジェネレータは、
パラメータマッピングを検査して、前記パラメータが存在するか否かを決定し、
パラメータが存在しない場合に、新たなパラメータマッピングアイテムを発生し、新たなインデックスを指定し、更に、新たなインデックス値を発生し、
パラメータが存在する場合に、前記アプリケーションコンポーネントにより存在する前記パラメータに対するリファレンスの数を指示するリファレンスカウンタを増加する、
請求項１８に記載の装置。
【請求項２０】
前記パラメータジェネレータは、パラメータを取り去り、それに関連したインデックスを、該パラメータを使用して前記アプリケーションコンポーネントの数に基づいて更新することによって、パラメータを除去する、請求項１８に記載の装置。
【請求項２１】
前記パラメータジェネレータは、
前記パラメータマッピングからパラメータマッピングアイテムを得、
前記アプリケーションコンポーネントにより存在する前記パラメータに対するリファレンスの数を指示するリファレンスカウンタを減少し、
前記リファレンスカウンタが、前記パラメータを使用するアプリケーションコンポーネントが無いことを指示する場合に、前記パラメータマッピングインデックスを除去する、
ことによって、パラメータを除去する、請求項２０に記載の装置。
【請求項２２】
パラメータの名前にマッチングするパラメータ定数のリストを発生し、前記複数のアプリケーションコンポーネントの初期化中に前記定数の値をインデックスで初期化するためのラッパージェネレータを更に備える、請求項１１に記載の装置。
【請求項２３】
前記ラッパージェネレータは、記述ファイルを構文解析するのに応答して前記パラメータ定数のリストを発生する、請求項２２に記載の装置。
【請求項２４】
前記記述ファイルはＸＭＬ記述ファイルを含む、請求項１１に記載の装置。
【請求項２５】
要求された機能に関連したアプリケーションの複数のアプリケーションコンポーネントを特定するソフトウェア構造データを得、前記複数のアプリケーションコンポーネント間の対話ルールを指示するソフトウェアロジックデータを得るステップと、
前記複数のアプリケーションコンポーネントの一つ以上によって使用される複数のパラメータに対するインデックスをランタイムで自動的に発生するステップと、
前記複数のパラメータの名前とそれらに関連したインデックスとの間のマッピングを維持するステップと、
初期化中に前記アプリケーションの少なくとも一つのアプリケーションコンポーネントに前記インデックスを指定するステップと、
前記マッピングに示されたインデックスを使用するアレーから前記複数のパラメータの一つ以上の各々をアクセスするステップと、
前記一つ以上のパラメータであって、それらに関連付けられたインデックスを使用する前記アレーからアクセスされる該一つ以上のパラメータを使用して、ランタイムで前記複数のアプリケーションコンポーネントの呼び出しをコーディネートするステップと、
を備える方法。
【国際調査報告】
2008507755.tif 000055
2008507755.tif 000056
2008507755.tif 000057
2008507755.tif 000058
2008507755.tif 000059
2008507755.tif 000060
2008507755.tif 000061
2008507755.tif 000062
2008507755.tif 000063