当業者により理解されるであろうように、本発明はシステム、方法あるいはコンピュータ・プログラム製品として具体化され得る。従って、本発明は、完全にハードウェアの実施態様、完全にソフトウェアの実施態様(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、あるいはソフトウェアと、ここで“回路”、“モジュール”または“システム”と全て一般的に称され得るハードウェア側面とを組み合わせた実施態様の形をとることができる。さらに、本発明は、コンピュータ使用可能なプログラム・コードが具体化されている任意の有形表現媒体において具体化されたコンピュータ・プログラム製品の形をとることができる。
1つ以上のコンピュータ使用可能なあるいはコンピュータ可読の媒体(1つまたは複数)の任意の組み合わせが利用され得る。該コンピュータ使用可能なあるいはコンピュータ可読の媒体は、例えば、それらに限定されないが、電子、磁気、光学、電磁、赤外線、または半導体のシステム、装置、デバイス、または伝播媒体であり得る。コンピュータ可読媒体のより具体的な例(非網羅的なリスト)は次のものを含む:1つ以上のワイヤを有する電気的結線、携帯用コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(random access memory(RAM))、読み出し専用メモリ(read−only memory(ROM))、消去可能なプログラマブル読み出し専用メモリ(erasable programmable read−only memory(EPROMまたはフラッシュ・メモリ))、光ファイバ、携帯用コンパクト・ディスク読み出し専用メモリ(compact disc read−only memory(CDROM))、光記憶装置、インターネットまたはイントラネットをサポートするものなどの伝送媒体、あるいは磁気記憶装置。プログラムは、例えば紙または他の媒体の光学式走査を介して電子的に取り込まれ、その後、必要ならば、コンパイルされ、解釈されあるいは適切な仕方で別様に処理され、その後コンピュータ・メモリに格納され得るので、該コンピュータ使用可能なあるいはコンピュータ可読の媒体は、プログラムが印刷されている紙または他の適切な媒体であっても良いことに留意されたい。この文書の文脈においては、コンピュータ使用可能なあるいはコンピュータ可読の媒体は、命令実行システム、装置、またはデバイスに使用されるあるいは関連するプログラムを包含し、記憶し、伝達し、伝播し、あるいは運ぶことのできる任意の媒体であり得る。コンピュータ使用可能な媒体は、ベースバンドであるいは搬送波の一部として、コンピュータ使用可能なプログラム・コードが具体化されている伝播されるデータ信号を含むことができる。コンピュータ使用可能なプログラム・コードは、無線、ワイヤライン、光ファイバ・ケーブル、RFなどを含むが限定はされない任意の適切な媒体を用いて伝送され得る。
本発明の操作を実行するためのコンピュータ・プログラム・コードは、Java(R)、Smalltalk、C++等のオブジェクト指向のプログラミング言語および在来の手続き型プログラミング言語を含む1つ以上のプログラミング言語の任意の組み合わせで書かれ得る。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でかつ部分的にリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で、実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(local area network(LAN))またはワイド・エリア・ネットワーク(wide area network(WAN))を含む任意のタイプのネットワークを通してユーザのコンピュータに接続されることができ、あるいは、接続は外部コンピュータに対して(例えば、インターネット・サービス・プロバイダを用いてインターネットを通して)なされることができる。
本発明は、以下で、本発明の実施態様に従う方法、装置(システム)およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して記述される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロック同士の組み合わせはコンピュータ・プログラム命令により実行され得ることが理解されるであろう。
これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブルなデータ処理装置のプロセッサを介して実行する命令が該フローチャートまたは該ブロック図あるいはその両方の1つ若しくは複数のブロックにおいて指定されている機能/行為を実行するための手段を作成するようにマシンを製造するために、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブルなデータ処理装置のプロセッサに提供され得る。これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に格納された命令が該フローチャートまたは該ブロック図あるいはその両方の1つ若しくは複数のブロックにおいて指定されている機能/行為を実行する命令手段を含む製造物品を生じさせるように、特定の仕方で機能するようにコンピュータまたは他のプログラマブルなデータ処理装置に指令できるコンピュータ可読媒体に格納されることもできる。
該コンピュータ・プログラム命令は、コンピュータまたは他のプログラマブルな装置上で実行する命令が該フローチャートまたは該ブロック図あるいはその両方の1つ若しくは複数のブロックにおいて指定されている機能/行為を実行するためのプロセスを提供するように、コンピュータ実行プロセスを生じさせるべくコンピュータまたは他のプログラマブルな装置上で一連の操作ステップを実行させるためにコンピュータまたは他のプログラマブルなデータ処理装置にロードされることもできる。
ここで図を参照すると、特に図1−2を参照すると、実施例が実現され得るデータ処理環境の代表的な図が提供されている。図1−2は、単に代表的なものであること、種々の実施態様が実現され得る環境に関して如何なる限定も主張あるいは示唆するものではないこと、が理解されるべきである。描かれている環境に多くの改変を加えることができる。
図1は、実施例が実現され得るデータ処理システムのネットワークの絵画的表示を描いている。ネットワーク・データ処理システム100は、実施例が実現され得るコンピュータのネットワークである。ネットワーク・データ処理システム100はネットワーク102を包含し、これは、ネットワーク・データ処理システム100の中で互いに接続されている種々のデバイスおよびコンピュータの間の通信リンクを提供するために用いられる媒体である。ネットワーク102は、有線、無線通信リンク、または光ファイバ・ケーブルなどの結線を含むことができる。
描かれている例では、サーバ104およびサーバ106は、記憶単位108とともにネットワーク102に接続する。さらに、クライアント110、112、および114がネットワーク102に接続する。クライアント110、112、および114は、例えば、パーソナル・コンピュータまたはネットワーク・コンピュータであり得る。描かれている例では、サーバ104は、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどの情報をクライアント110、112、および114に提供する。クライアント110、112、および114は、この例ではサーバ104に対してクライアントである。ネットワーク・データ処理システム100は、図示されていないさらなるサーバ、クライアント、および他のデバイスを含むことができる。
ネットワーク・データ処理システム100に置かれるプログラム・コードは、コンピュータ記録可能記憶媒体に格納されて、使用されるべくデータ処理システムまたは他のデバイスにダウンロードされることができる。例えば、プログラム・コードは、サーバ104上のコンピュータ記録可能記憶媒体に格納されて、クライアント110上で使用されるべくネットワーク102によりクライアント110にダウンロードされることができる。
描かれている例では、ネットワーク・データ処理システム100は、相互に通信するためにプロトコルの伝送制御プロトコル/インターネット・プロトコル(Transmission Control Protocol/Internet Protocol(TCP/IP))スイートを使用するネットワークおよびゲートウェイの世界的集合を表わすネットワーク102を有するインターネットである。インターネットの中心部には、データおよびメッセージを経路指定する数千の商用、政府機関用、教育用およびその他のコンピュータ・システムから成る、主要なノードまたはホスト・コンピュータ間の高速データ通信ラインのバックボーンがある。もちろん、ネットワーク・データ処理システム100は、例えばイントラネット、ローカル・エリア・ネットワーク(LAN)、あるいはワイド・エリア・ネットワーク(WAN)などの多くの異なるタイプのネットワークとしても実現され得る。図1は、例示されているのであって、種々の実施例についての構成上の限定として意図されているのではない。
ここで図2を参照すると、実施例が実現され得るデータ処理システムのブロック図が示されている。データ処理システム200は、図1におけるサーバ104またはクライアント110などのコンピュータの例であり、その中に、プロセスを実行するコンピュータ使用可能プログラム・コードまたは命令を実施例のために置くことができる。この例では、データ処理システム200は通信ファブリック202を含み、これは、プロセッサ・ユニット204、メモリ206、永続記憶装置208、通信ユニット210、入力/出力(input/output(I/O))ユニット212、およびディスプレイ214の間の通信を提供する。
プロセッサ・ユニット204は、メモリ206にロードされ得るソフトウェアのための命令を実行する役割を果たす。プロセッサ・ユニット204は、インプリメンテーションにより、1つ以上のプロセッサのセットであることができ、あるいはマルチ・プロセッサ・コアであることができる。さらに、プロセッサ・ユニット204は、主プロセッサが副プロセッサとともに単一のチップ上に存在する1つ以上のヘテロジニアス・プロセッサ・システムを用いて実装され得る。他の1つの例では、プロセッサ・ユニット204は、同じタイプの複数のプロセッサを包含する対称的マルチ・プロセッサ・システムであることができる。
メモリ206および永続記憶装置208は、記憶装置216の例である。記憶装置は、例えば無限定で、データ、関数形式のプログラム・コード、または他の適切な情報のうちの少なくとも1つあるいはそれらの組み合わせなどの情報を一時的にまたは永久的にあるいは一時的にかつ永久的に記憶することのできる任意のハードウェア・ピースである。メモリ206は、これらの例では、例えば、ランダム・アクセス・メモリあるいは他の任意の適切な揮発性または不揮発性の記憶装置であることができる。永続記憶装置208は、特定のインプリメンテーションにより種々の形をとることができる。例えば、永続記憶装置208は、1つ以上のコンポーネントまたはデバイスを包含することができる。例えば、永続記憶装置208は、ハード・ディスク、フラッシュ・メモリ、再書き込み可能な光ディスク、再書き込み可能な磁気テープ、あるいは上記のものの何らかの組み合わせであることができる。永続記憶装置208により使用される媒体は取り外し可能であることもできる。例えば、永続記憶装置208のために取り外し可能のハード・ディスクが使用され得る。
通信ユニット210は、これらの例において、他のデータ処理システムまたはデバイスとの通信を提供する。これらの例では、通信ユニット210はネットワーク・インターフェース・カードである。通信ユニット210は、物理的通信リンクおよび無線通信リンクの一方または両方の使用を通して通信を提供することができる。
入力/出力ユニット212は、データ処理システム200に接続され得る他のデバイスとのデータの入力または出力あるいはその両方のためのものである。例えば、入力/出力ユニット212は、キーボード、マウス、および他の何らかの適切な入力装置のうちの少なくとも1つを通してのユーザ入力のための接続を提供することができる。さらに、入力/出力ユニット212は、出力をプリンタに送ることができる。ディスプレイ214は、情報をユーザに表示するためのメカニズムを提供する。
オペレーティング・システム、アプリケーション、またはプログラムあるいはそれらの組み合わせのための命令は記憶装置216に置かれることができ、これは通信ファブリック202を通してプロセッサ・ユニット204と通信する。これらの実施例では、命令は関数形式で永続記憶装置208上に存在する。これらの命令は、プロセッサ・ユニット204により実行されるべくメモリ206にロードされることができる。種々の実施態様のプロセスは、コンピュータ実行命令を用いるプロセッサ・ユニット204により実行されることができ、それらはメモリ206などのメモリに置かれることができる。
これらの命令は、プロセッサ・ユニット204内のプロセッサにより読み出されて実行され得るプログラム・コード、コンピュータ使用可能プログラム・コード、あるいはコンピュータ可読プログラム・コードと称される。種々の実施態様におけるプログラム・コードは、メモリ206または永続記憶装置208などの、種々の物理的なあるいは有形のコンピュータ可読媒体上で具体化されることができる。
プログラム・コード218は、選択的に取り外すことのできるコンピュータ可読媒体220上に関数形式で置かれて、プロセッサ・ユニット204により実行されるべくデータ処理システム200にロードされあるいは転送されることができる。プログラム・コード218およびコンピュータ可読媒体220は、これらの例ではコンピュータ・プログラム製品222を形成する。一例では、コンピュータ可読媒体220は、例えば、永続記憶装置208の一部分であるハード・ディスク等の記憶装置に転送されるべく永続記憶装置208の一部分であるドライブまたは他のデバイスに挿入されあるいは中に置かれる光ディスクまたは磁気ディスクなど、有形の形式であることができる。有形の形式では、コンピュータ可読媒体218は、データ処理システム200に接続されるハード・ディスク、サム・ドライブ、またはフラッシュ・メモリなどの永続記憶装置の形をとることもできる。コンピュータ可読媒体220の有形の形式は、コンピュータ記録可能記憶媒体とも称される。或る例では、コンピュータ可読媒体220は取り外し可能でないかもしれない。
あるいは、プログラム・コード218は、通信ユニット210への通信リンクを通して、または入力/出力ユニット212への結線を通して、あるいはその両方を通して、コンピュータ可読媒体220からデータ処理システム200に転送されることができる。該通信リンクまたは該結線あるいはその両方は、該例では物理的なものでありあるいは無線であることができる。コンピュータ可読媒体は、通信リンク、あるいはプログラム・コードを包含する無線伝送などの、非有形の媒体の形をとることもできる。
或る実施例では、プログラム・コード218は、データ処理システム200内で使用されるべく他のデバイスまたはデータ処理システムからネットワークを介して永続記憶装置208にダウンロードされることができる。例えば、サーバ・データ処理システム内のコンピュータ可読記憶媒体に格納されているプログラム・コードはネットワークを介して該サーバからデータ処理システム200にダウンロードされることができる。プログラム・コード218を提供するデータ処理システムは、サーバ・コンピュータ、クライアント・コンピュータ、あるいは、プログラム・コード218を記憶し送信することのできる他の何らかのデバイスであることができる。
データ処理システム200のために示された種々のコンポーネントは、種々の実施態様が実現され得る仕方に構成上の限定を与えるよう意図されているのではない。種々の実施例は、データ処理システム200のために示されたもの以外の、あるいはそれらの代わりのコンポーネントを含むデータ処理システムにおいて実現されることができる。図2に示されている他のコンポーネントは、図示された例から変えられることができる。種々の実施態様は、プログラム・コードを実行することのできる任意のハードウェア・デバイスまたはシステムを用いて実現されることができる。一例として、データ処理システムは、無機コンポーネントと統合された有機コンポーネントを含むことができ、または人間を除外した有機コンポーネントから完全に構成されることができ、あるいは、無機コンポーネントと統合された有機コンポーネントを含み、かつ人間を除外した有機コンポーネントから完全に構成されることもできる。例えば、記憶装置は、有機半導体から構成されることができる。
他の1つの例として、データ処理システム200の記憶装置は、データを記憶できる任意のハードウェア装置である。メモリ206、永続記憶装置208およびコンピュータ可読媒体220は、有形の形式の記憶装置の例である。
他の1つの例では、バス・システムが、通信ファブリック202を実現するために使用されることができ、システム・バスまたは入力/出力バスなどの1つ以上のバスから構成されることができる。もちろん、バス・システムは、該バス・システムに取り付けられた種々のコンポーネントまたはデバイス間にデータの転送のための手段を提供する任意の適切なタイプのアーキテクチャを用いて実現されることができる。さらに、通信ユニットは、モデムまたはネットワーク・アダプタなど、データを送信し受信するために使用される1つ以上のデバイスを含むことができる。さらに、メモリは、例えば、メモリ206、または、通信ファブリック202に存在し得るインターフェースおよびメモリ・コントローラ・ハブに見出されるようなキャッシュであることができる。
ここで図3を参照すると、ブロック図が、本発明を実施し得るコンピュータ・システムの中で動作するソフトウェア・コンポーネント同士の関係を示している。Java(R)ベースのシステム300は、特定のハードウェア・プラットフォーム上で実行するソフトウェアにハードウェアおよびシステム・サポートを提供するプラットフォーム固有オペレーティング・システム302を包含する。Java(R)仮想マシン(Java virtual machine(JVM))304は、該オペレーティング・システムと関連して実行し得る1つのソフトウェア・アプリケーションである。Java(R)仮想マシン304は、Java(R)プログラミング言語で書かれたプログラム、サーブレット、またはソフトウェア・コンポーネントであるJava(R)アプリケーション/アプレット306を実行する能力を持ったJava(R)ランタイム環境を提供する。Java(R)仮想マシン304が動作するコンピュータ・システムは、上記のデータ処理システム200またはコンピュータ100に類似することができる。しかし、Java(R)仮想マシン304は、picoJavaコアが埋め込まれているいわゆるJava(R)チップ、Java(R)オン・シリコン、あるいはJava(R)プロセッサ上の専用ハードウェアに実現され得る。
Java(R)ランタイム環境の中心にはJava(R)仮想マシンがあり、これは、そのアーキテクチャ、セキュリティ機能、およびネットワークを渡るモビリティ、およびプラットフォーム独立性を含む、Java(R)の環境の全側面をサポートする。
Java(R)仮想マシンは仮想コンピュータ、例えば、抽象的に明示されるコンピュータ、である。その仕様は、Java(R)仮想マシンがその上で実行するように設計されるプラットフォームに依存し得る或る範囲の設計選択肢のある、どのJava(R)仮想マシンもが実現しなければならない或る機能を定める。例えば、全てのJava(R)仮想マシンは、Java(R)バイトコードを実行しなければならず、該バイトコードにより表される命令を実行するために或る範囲の技術を使用することができる。Java(R)仮想マシンは、完全にソフトウェアで、あるいは或る程度ハードウェアで、実現されることができる。この柔軟性は、メインフレーム・コンピュータおよびPDAのために種々のJava(R)仮想マシンを設計することを可能にする。
Java(R)仮想マシンは、実際にJava(R)プログラムを実行する仮想コンピュータ・コンポーネントの名称である。Java(R)プログラムは、中央プロセッサによって直接実行されるのではなくて、それ自体が該プロセッサ上で動作する1つのソフトウェアであるJava(R)仮想マシンにより実行される。Java(R)仮想マシンは、該コードがそれ向けにコンパイルされた唯一のプラットフォームではなくて異なるプラットフォーム上でJava(R)プログラムを実行することを可能にする。Java(R)プログラムは、Java(R)仮想マシン向けにコンパイルされる。このようにして、Java(R)は、多様な中央処理装置およびオペレーティング・システム・アーキテクチャを包含し得る多くのタイプのデータ処理システムのためのアプリケーションをサポートすることができる。Java(R)アプリケーションがいろいろなタイプのデータ処理システム上で実行し得るように、コンパイラは、通例、アーキテクチャ中立のファイル・フォーマットを生成する。このコンパイルされたコードは、Java(R)ランタイム・システムが存在するならば、多くのプロセッサ上で実行可能である。Java(R)コンパイラは、特定のコンピュータ・アーキテクチャ向けではないバイトコード命令を生成する。バイトコードは、Java(R)コンパイラにより生成されてJava(R)インタープリタにより実行されるマシン非依存コードである。Java(R)インタープリタは、1つまたは複数のバイトコードの復号と解釈とを交互に行うJava(R)仮想マシンの部分である。これらのバイトコード命令は、どんなコンピュータでも容易に解釈でき、かつネイティブのマシン・コードに容易にオン・ザ・フライで翻訳されるように設計される。バイトコードは、ジャスト・イン・タイム(just−in−time(JIT))コンパイラによってネイティブ・コードに翻訳されることができる。
Java(R)仮想マシンは、クラス・ファイルをロードし、それらの中のバイトコードを実行する。クラス・ファイルはJava(R)仮想マシン内のクラス・ローダによってロードされる。クラス・ローダは、アプリケーションからのクラス・ファイルと、そのアプリケーションが必要とするJava(R)アプリケーション・プログラミング・インターフェース(application programming interface(API))からのクラス・ファイルとをロードする。バイトコードを実行する実行エンジンは、プラットフォームおよびインプリメンテーションにより異なり得る。
1つのタイプのソフトウェア・ベースの実行エンジンはジャスト・イン・タイム・コンパイラである。このタイプの実行では、メソッドをジッティング(jitting)することについての或るタイプの基準がうまく満たされると、メソッドのバイトコードはネイティブ・マシン・コードにコンパイルされる。該メソッドのためのネイティブ・マシン・コードはその後キャッシュされて、該メソッドが次に呼び出されると再使用される。実行エンジンは、Java(R)バイトコードがネイティブ的に実行されるようにハードウェアで実現されてチップに埋め込まれることもできる。Java(R)仮想マシンは、普通はバイトコードを解釈するけれども、Java(R)仮想マシンは、バイトコードを実行するためにジャスト・イン・タイム・コンパイリングなどの他の手法を使用することもできる。
アプリケーションがプラットフォーム固有のオペレーティング・システム上のソフトウェアに実装されているJava(R)仮想マシン上で実行されるとき、Java(R)アプリケーションは、ネイティブ・メソッドを呼び出すことによってホスト・オペレーティング・システムとインタラクトすることができる。Java(R)メソッドは、Java(R)言語で書かれ、バイトコードにコンパイルされ、クラス・ファイルに格納される。ネイティブ・メソッドは、他の何らかの言語で書かれて特定のプロセッサのネイティブ・マシン・コードにコンパイルされる。ネイティブ・メソッドは、その正確な形がプラットフォーム固有である動的にリンクされるライブラリに格納される。
ここで図4を参照すると、一実施例に従うJava(R)仮想マシンのブロック図が描かれている。Java(R)仮想マシン(JVM)400は、完全修飾名を与えられた、クラスおよびインターフェースなどのタイプをロードするためのメカニズムであるクラス・ローダ・サブシステム402を含む。Java(R)仮想マシン400は、ランタイム・データ・エリア404、実行エンジン406、ネイティブ・メソッド・インターフェース408、およびメモリ・マネージメント410も包含している。実行エンジン406は、クラス・ローダ・サブシステム402によりロードされるクラスのメソッドに包含される命令を実行するためのメカニズムである。実行エンジン406は、例えば、Java(R)インタープリタ412またはジャスト・イン・タイム・コンパイラ414であることができる。ネイティブ・メソッド・インターフェース408は、下にあるオペレーティング・システム内のリソースへのアクセスを可能にする。ネイティブ・メソッド・インターフェース408は、例えば、Java(R)ネイティブ・インターフェース(Native Interface(JNI))であることができる。
ランタイム・データ・エリア404は、ネイティブ・メソッド・スタック416、Java(R)スタック418、PCレジスタ420、メソッド・エリア422、およびヒープ424を包含する。これらの種々のデータ・エリアは、Java(R)仮想マシンがプログラムを実行するために必要とするメモリの構成を表わす。
Java(R)スタック418は、Java(R)メソッドの呼び出しの状態を格納するために使用される。新しいスレッドが起動されるとき、Java(R)仮想マシンは、そのスレッドのために新しいJava(R)スタックを作成する。Java(R)仮想マシンは、Java(R)スタックに対して2つの操作だけを直接実行する。それは、フレームをプッシュしポップする。スレッドのJava(R)スタックは、そのスレッドのためのJava(R)メソッドの呼び出しの状態を記憶する。Java(R)メソッドの呼び出しの状態は、そのローカル変数、それを呼び出すのに使われたパラメータ、もしあるならばその戻り値、および中間の計算を含む。Java(R)スタックは、スタック・フレームから構成される。スタック・フレームは、単一のJava(R)メソッドの呼び出しの状態を包含する。スレッドがメソッドを呼び出すとき、Java(R)仮想マシンは新しいフレームを該スレッドのJava(R)スタックにプッシュする。該メソッドが完了すると、Java(R)仮想マシンはそのメソッドのためのフレームをポップし、それを廃棄する。Java(R)仮想マシンは中間値を保持するためのレジスタを持っていない;中間値を必要としあるいは生じさせるJava(R)命令は、その中間値を保持するために該スタックを使用する。このようにして、Java(R)命令セットは、いろいろなプラットフォーム・アーキテクチャのために明確に定義される。
プログラム・カウンタ(program counter(PC))レジスタ420は、次に実行されるべき命令を示すために使用される。各々のインスタンス化されたスレッドは、それ自身のPCレジスタおよびJava(R)スタックを得る。もし該スレッドがJava(R)仮想マシン・メソッドを実行しているならば、該PCレジスタの値は次に実行するべき命令を示す。もし該スレッドがネイティブ・メソッドを実行しているならば、該PCレジスタの内容は不定である。
ネイティブ・メソッド・スタック416は、ネイティブ・メソッドの呼び出しの状態を記憶する。ネイティブ・メソッドの呼び出しの状態は、ネイティブ・メソッド・スタック、レジスタ、または他のインプリメンテーション依存のメモリ・エリアにインプリメンテーション依存の仕方で格納される。或るJava(R)仮想マシン・インプリメンテーションでは、ネイティブ・メソッド・スタック416とJava(R)スタック418とは結合される。
メソッド・エリア422はクラス・データを包含し、ヒープ424は全てのインスタンス化されたオブジェクトを包含する。定数プールは、これらの例ではメソッド・エリア422に置かれる。Java(R)仮想マシン仕様は、データ・タイプおよび操作を厳密に定義する。大抵のJava(R)仮想マシンは1つのメソッド・エリアおよび1つのヒープを持つことを選択し、その各々は、Java(R)仮想マシン400などのJava(R)仮想マシンの中で動作する全てのスレッドにより共有される。Java(R)仮想マシン400は、クラス・ファイルをロードするとき、該クラス・ファイルに包含されているバイナリ・データからタイプに関する情報を構文解析する。Java(R)仮想マシン400は、このタイプの情報をメソッド・エリアに入れる。クラス・インスタンスまたはアレイが作成されるたびに、新しいオブジェクトのためのメモリはヒープ424から割り当てられる。Java(R)仮想マシン400は、ヒープ424のためにメモリの中のメモリ・スペースを割り当てる命令を含むけれども、メモリの中のそのスペースを解放するための命令を含んでいない。描かれている例においてメモリ・マネージメント410は、ヒープ424に割り当てられたメモリの中のメモリ・スペースを管理する。メモリ・マネージメント410はガーベージ・コレクタを含むことができ、それは、最早参照されないオブジェクトにより使用されているメモリを自動的に解放する。さらに、ガーベージ・コレクタは、ヒープの断片化を減少させるためにオブジェクトを移動させることもできる。
本出願の実施例は、システムのランタイム環境を構築するためのコンピュータ実行方法、有形の記憶媒体、およびデータ処理システムを記述する。プロファイル・マネージャは、プロファイル識別子を包含するサービス要求を受け取る。該プロファイル識別子は、少なくとも1つのソフトウェア・コンポーネントの必要とされるバージョンを指定する。該プロファイル・マネージャは、そのソフトウェア・コンポーネントの完全なインストレーションと、少なくとも1つのデルタ・ファイルとを特定する。該プロファイル・マネージャは、該少なくとも1つのデルタ・ファイルからのファイルと、それらに続く、該完全なインストレーションからのファイルとを優先的に利用することによって、該必要とされるバージョンのためのクラスパスを動的に構築する。ランタイム環境は、その後、該クラスパスを利用して構築される。
実施例は、アプリケーション/プロファイルがランタイム中にランタイム環境バージョンを選択するためのコンピュータ実行方法、システムおよびコンピュータ・プログラム製品を提供する。一実施例では、エンタープライズ・アプリケーション・サーバ・フィックス・パック・アップグレードは、仮想インストレーションのように機能し、該エンタープライズ・アプリケーション・サーバ・バージョンを全体としてはアップグレードしない。代わりに、アプリケーション・スタートアップまたはプロファイル・スタートアップ段階の間にどちらのバージョンも選択され得るように、アップグレード後に現在のバージョンとより新しいバージョンとの両方がシステムに存在するべきである。
1つのさらなる実施例では、ベース・バージョンとアップグレードされたバージョンとを含む種々のランタイム・バージョンがシステムにおいて維持されて、ランタイム選択に基づいて動的にロードされる。
ここで図5を参照すると、データ処理システムのJava(R)仮想マシンにプロファイルを供給するための既知のデータフロー図が描かれている。Java(R)仮想マシン510は、図4のJava(R)仮想マシン400などのJava(R)仮想マシンである。Java(R)仮想マシン510は、エンタープライズ・アプリケーション・サーバの種々のバージョンを同じマシンの別々のプロファイルにおいて、その別々のプロファイルの各々のために完全なインストレーションを維持することによって、インストールし維持する。
Java(R)仮想マシン510はアプリケーション・サーバ512−516を包含する。アプリケーション・サーバ512−516は、Java(R)仮想マシン510のアプリケーションが実際にそこで実行するところの主要なランタイム・コンポーネントである。
アプリケーション・サーバ512−516の各々は、Java(R)仮想マシン・インスタンス518−522の1つを実行する。Java(R)仮想マシン・インスタンス518−522は、Java(R)仮想マシン510の中のクラス・インスタンスである。Java(R)仮想マシン・インスタンス518−522の幾つかは、それらのインスタンスがアプリケーション・サーバ512−516などの別々のアプリケーション・サーバに各々包含される限り、Java(R)仮想マシン510の中で別々に実行することができる。
Java(R)仮想マシン・インスタンス518−522は、プロファイル・データベース530に格納されているプロファイル524−528の1つを用いて作成される。プロファイル・データベース529は、プロファイル524−528の位置を包含しあるいは参照する、図1の記憶単位108などの、記憶単位上に実現されるデータ構造である。プロファイル524−528は、ディプロイメント・マネージャまたはアプリケーション・サーバなどの、アプリケーション・サーバ・プロセスのためのランタイム環境を定義するファイルを含む別々のデータ・パーティションである。各ランタイム環境は、それ自身の構成ファイル、ログ、プロパティおよび他の属性を有する。プロファイル524−528は、アプリケーション・サーバ512−516の各ランタイムを一意で、かつサーバ・バイナリおよび他のプロファイルとは異なるものとすることができる。
各プロファイル524−528は、該プロファイルが作成されるときに利用し得るどのソフトウェア・パッチおよびアップデートをも含む、完全なエンタープライズ・アプリケーション・サーバ・インストレーションである。プロファイル524−528の1つがパッチされあるいは更新されるたびに、新しい、別のプロファイルが作成される。従って、一実施例では、プロファイル524は、エンタープライズ・アプリケーション・サーバのマイルストーン・リリースの完全なインストレーションである。プロファイル526は、エンタープライズ・アプリケーション・サーバの完全なインストレーションである。プロファイル526は、プロファイル524のパッチされたバージョンでもある。プロファイル528は、エンタープライズ・アプリケーション・サーバの完全なインストレーションである。プロファイル528は、プロファイル526のパッチされたバージョンでもある。
Java(R)仮想マシン510がサービス要求530を受け取ると、プロファイル・マネージャ532はプロファイル識別子534を認識する。プロファイル識別子534は、その要求を満たすためにエンタープライズ・アプリケーション・サーバのどのバージョンが使用されるべきであるか、従って、Java(R)仮想マシン・インスタンス518−522の1つなどの特定のインスタンスを作成するときにプロファイル524−528のいずれが利用されるべきか、の表示である。プロファイル・マネージャ532は、その後、プロファイル524−528の表示された1つを取り出し、その取り出したプロファイルを、アプリケーション・サーバ512−516のうちの、該インスタンスを実行する1つに割り当てる。
ここで図6を参照すると、一実施例に従うデータ処理システムのJava(R)仮想マシンにプロファイルを供給するためのデータフロー図が示されている。Java(R)仮想マシン610は、図4のJava(R)仮想マシン400などのJava(R)仮想マシンである。Java(R)仮想マシン610は、エンタープライズ・アプリケーション・サーバの種々のバージョンを、そして同じマシンに別々のプロファイルを、その別々のプロファイルの各々のためにデルタ・ファイルを維持することにより、インストールし維持する。
Java(R)仮想マシン610は、アプリケーション・サーバ612−616を包含する。アプリケーション・サーバ612−616は、Java(R)仮想マシン610のアプリケーションが実際にそこで実行するところの主要なランタイム・コンポーネントである。
アプリケーション・サーバ612−616の各々は、Java(R)仮想マシン・インスタンス618−622の1つを実行する。Java(R)仮想マシン・インスタンス618−622は、Java(R)仮想マシン610の中のクラス・インスタンスである。Java(R)仮想マシン・インスタンス618−622の幾つかは、それらのインスタンスがアプリケーション・サーバ612−616などの別々のアプリケーション・サーバにそれぞれ包含されている限り、Java(R)仮想マシン610の中で別々に実行することができる。
Java(R)仮想マシン・インスタンス618−622は、プロファイル・データベース631に格納されているプロファイルの1つ624と、デルタ・ファイル626−630の1つ以上とを用いて作成される。プロファイル・データベース631は、プロファイル624の位置を包含しあるいは参照する、図1の記憶単位108などの記憶単位において実現されるデータ構造である。プロファイル624は、ディプロイメント・マネージャまたはアプリケーション・サーバなどの、アプリケーション・サーバ・プロセスのためのランタイム環境を定義するファイルを含む独立のデータ・パーティションである。各ランタイム環境は、それ自身の構成ファイル、ログ、プロパティ、および他の属性を有する。プロファイル624は、アプリケーション・サーバ612−616の各ランタイムを一意で、かつサーバ・バイナリおよび他のプロファイルとは異なるものとすることができる。
プロファイル624は、完全なエンタープライズ・アプリケーション・サーバ・インストレーションである。図5のプロファイル524−528とは違って、プロファイル624は、該プロファイルが作成されるときに利用し得るどのソフトウェア・パッチおよびアップデートも含まない。一実施例ではプロファイル624は、エンタープライズ・アプリケーション・サーバのマイルストーン・リリースの完全なインストレーションである。
デルタ・ファイル626−630は、プロファイル624などのベース・プロファイルに対する変更、あるいはデルタ・ファイル626−630のうちの他のものなどの、以前のデルタ・ファイルに対する変更を含むファイルである。プロファイル624に対して用いられるべきソフトウェア・パッチまたはアップデートに関しては、プロファイル624に対して行われるべき変更は初めはプロファイル624に対して用いられずに、デルタ・ファイル626−630の1つとして保存される。
一実施例では、デルタ・ファイル626−630の各々は、プロファイル624に対して行われるべき変更を包含するソフトウェア・パッチまたはアップデートである。プロファイル624がアプリケーション・サーバ612−616の1つに動的にロードされるとき、クラスパスは、始めは特定されたデルタ・ファイル626−630からのファイルで、次にはベース・プロファイル624からのファイルで、構築される。
一実施例では、デルタ・ファイル626−630の各々は、デルタ・ファイル626−630のうちの以前の1つにより改変されたプロファイル624に対して行われるべき変更を包含するシーケンシャルなソフトウェア・パッチまたはアップデートである。例えば、それに限定はされないけれども、デルタ・ファイル626は、デルタ・ファイル626のソフトウェア・パッチまたはアップデートがプロファイル624に対して直接用いられるべきであるような、プロファイル624に対する第1アップデートであり得る。デルタ・ファイル628は、デルタ・ファイル628のソフトウェア・パッチまたはアップデートが、デルタ・ファイル626により改変されたプロファイル624に対して用いられるべきであるような、プロファイル624に対する次のアップデートであり得る。デルタ・ファイル630は、デルタ・ファイル628のソフトウェア・パッチまたはアップデートが、デルタ・ファイル626およびデルタ・ファイル628の両方により改変されたプロファイル624に対して用いられるべきであるような、プロファイル624に対するさらなる次のアップデートであり得る。従って、もしサービス要求632がデルタ・ファイル626−630の各々を含むプロファイル・バージョンを特定するならば、クラスパスは、始めにデルタ・ファイル630からのファイルで、次にデルタ・ファイル628からのファイルで、次にデルタ・ファイル626からのファイルで、次にベース・プロファイル624からのファイルで構築される。
Java(R)仮想マシン610がサービス要求632を受け取ると、プロファイル・マネージャ634はプロファイル識別子636を認識する。プロファイル識別子636は、その要求を満たすためにエンタープライズ・アプリケーション・サーバのどのバージョンが使用されるべきであるか、従って、Java(R)仮想マシン・インスタンス618−622の1つなどの特定のインスタンスを作成するときにプロファイル624とともにデルタ・ファイル626−630のいずれが利用されるべきか、の表示である。プロファイル・マネージャ634は、その後、プロファイル624とともにデルタ・ファイル626−630のうちの表示されたものを取り出し、その取り出したプロファイルを、アプリケーション・サーバ612−616のうちの、該インスタンスを実行する1つに割り当てる。
実施例は、アプリケーション/プロファイルがランタイム中にランタイム環境のバージョンを選択するためのコンピュータ実行方法、システムおよびコンピュータ・プログラム製品を提供する。一実施例では、エンタープライズ・アプリケーション・サーバ・フィックス・パック・アップグレードは、仮想インストレーションのように機能し、該エンタープライズ・アプリケーション・サーバ・バージョンを全体としてはアップグレードしない。代わりに、アプリケーションのスタートアップまたはプロファイルのスタートアップ段階の間にどちらのバージョンでも選択され得るように、アップグレード後に現在のバージョンとより新しいバージョンとの両方がシステムに存在するべきである。
1つのさらなる実施例では、ベース・バージョンとアップグレードされたバージョンとを含む種々のランタイム・バージョンがシステムにおいて維持されて、ランタイム選択に基づいて動的にロードされる。
ここで図7を参照すると、従来技術に従うエンタープライズ・アプリケーション・サーバのファイル・システム構造を概略的に示すブロック図が示されている。ファイル構造700は、ランタイム・ファイルのベース・バージョンと他の多数の完全なインストレーションとがエンタープライズ・アプリケーション・サーバのホーム・ディレクトリにおいて維持され得るEASのファイル・システム構造の構成である。ファイル構造700は、図5のプロファイル524−528などのプロファイルを包含するファイル・システムの概略的表示である。
ファイル構造700はホーム・ディレクトリ702を含む。ホーム・ディレクトリ702は、例えば、それに限定されないけれども、エンタープライズ・アプリケーション・サーバがWebSphere(IBM社の登録商標)アプリケーション・サーバであるときには¥WebSphere(IBM社の登録商標)¥AppServer WAS_HOMEディレクトリであり得る。WebSphereはIBM社の登録商標である。¥プロファイル・ディレクトリは種々のプロファイルをリストしているけれども、WebSphere(IBM社の登録商標)の他のディレクトリおよびファイル、例えば、Java(R)ディレクトリ704、libディレクトリ706、プラグイン・ディレクトリ708およびプロパティ・ファイル710、は全てWAS_HOMEレベルにある。エンタープライズ・アプリケーション・サーバに対するアップグレードが、例えば、バージョン6.1.0.0からバージョン6.1.0.25へのアップグレードのために、行われるときには、ファイルの各々、例えば、Java(R)ディレクトリ704、libディレクトリ706、プラグイン・ディレクトリ708およびプロパティ・ファイル710の中のファイル、は全て該アップグレードを反映するように変更される。
もしエンタープライズ・アプリケーション・サーバに対するアップグレードが異なるファイル名として保存されるならば、ファイル構造700は、アップグレードされたエンタープライズ・アプリケーション・サーバとオリジナルのエンタープライズ・アプリケーション・サーバとの両方の完全なコピーを維持することができる。エンタープライズ・アプリケーション・サーバに対するアップグレードが異なるファイル名として保存されないのであれば、エンタープライズ・アプリケーション・サーバのオリジナルのバージョンのためのファイルは取って代わられて失われる。
ここで図8を参照すると、一実施例に従うエンタープライズ・アプリケーション・サーバのファイル・システム構造を概略的に示すブロック図が示されている。ファイル構造800は、ランタイム・ファイルのベース・バージョンと他の多数の完全なインストレーションとがエンタープライズ・アプリケーション・サーバのホーム・ディレクトリにおいて維持され得るエンタープライズ・アプリケーション・サーバのファイル・システム構造の構成である。ファイル構造800は、図6のプロファイル624およびデルタ・ファイル626−630などのプロファイルおよびデルタ・ファイルを包含するファイル・システムの概略的表示である。
ファイル構造800はホーム・ディレクトリ802を包含する。ホーム・ディレクトリ802は、例えば、それに限定されないけれども、エンタープライズ・アプリケーション・サーバがWebSphere(IBM社の登録商標)アプリケーション・サーバであるときには¥WebSphere(IBM社の登録商標)¥AppServer WAS_HOMEディレクトリであり得る。WebSphereはIBM社の登録商標である。
ホーム・ディレクトリ802は当初はバージョン・サブディレクトリ804を包含する。インストールされるエンタープライズ・アプリケーション・サーバの各パッチまたはソフトウェア・アップグレードについて、新しいバージョンのサブディレクトリがホーム・ディレクトリ802に加えられる。ホーム・ディレクトリ802は、種々のプロファイルをリストする。種々のプロファイルの各々は、エンタープライズ・アプリケーション・サーバの他のファイル、例えば、Java(R)ディレクトリ806、libディレクトリ808、プラグイン・ディレクトリ810およびプロパティ・ファイル812、を含む。その他のファイルは、WAS_HOME¥Version_base_6.1.0.0レベルにインストールされる。
エンタープライズ・アプリケーション・サーバに対するアップグレードが行われるとき、新しいバージョンのサブディレクトリ814が作成される。例えば、バージョン6.1.0.0からバージョン6.1.0.25へのアップグレードでは、バージョン6.1.0.0およびバージョン6.1.0.25の両方がファイル・システムの中に格納されるように、ランタイム・ディレクトリ・ファイル、例えば、それらに限定はされないが、Java(R)ディレクトリ816、libディレクトリ818、プラグイン・ディレクトリ820、およびプロパティ・ファイル822など、を包含するように¥version_base6.1.0.0ディレクトリが加えられる。
一実施例では、ランタイム・ディレクトリ・ファイル、例えば、それらに限定はされないが、Java(R)ディレクトリ816、libディレクトリ818、プラグイン・ディレクトリ820、およびプロパティ・ファイル822など、は図6のデルタ・ファイル624−628の1つなどのデルタ・ファイルである。ランタイム・ディレクトリ・ファイル、例えば、それらに限定はされないが、Java(R)ディレクトリ816、libディレクトリ818、プラグイン・ディレクトリ820、およびプロパティ・ファイル822など、はエンタープライズ・アプリケーション・サーバに対する以前のJava(R)ディレクトリ806、libディレクトリ808、プラグイン・ディレクトリ810およびプロパティ・ファイル812からの変更である。
フィックスパック、パッチ、またはアップグレードがエンタープライズ・アプリケーション・サーバに対して用いられるとき、該フィックスパック、パッチ、またはアップグレードは“マイルストーン・アップグレード”またはノン−マイルストーン・”アップグレードであり得る。“マイルストーン”アップグレードが選択されるならば、ファイルの更新されたセットを包含する新しい¥version_delta_6.1.0.25が作成される。例えば、バージョン6.1.0.0からバージョン6.1.0.25へアップグレードするためには、バージョン6.1.0.0のランタイム・ディレクトリ・ファイルのためのデルタ・ファイル、例えば、Java(R)ディレクトリ816、libディレクトリ818、プラグイン・ディレクトリ820、およびプロパティ・ファイル822、は新しいバージョン・サブディレクトリ814に格納される。
ノン−マイルストーン・インストレーションは、エンタープライズ・アプリケーション・サーバのファイルおよびディレクトリの全てを包含する完全なバージョン・レベルの完全なインストレーションである。ノン−マイルストーン・インストレーションでは、エンタープライズ・アプリケーション・サーバ・システム全体がより新しいバージョンにアップグレードされる。対照的に、マイルストーン・インストレーションは、1つ以上の他のインストレーション・ディレクトリおよびおそらく少なくとも1つの完全なベース・プロファイル/インストレーション・ディレクトリに依存するバージョン・レベルの部分的インストレーションである。マイルストーン・インストレーションでは、旧ファイル・バージョンおよび新ファイル・バージョンが保存される。新ファイル・バージョンは、図6のデルタ・ファイル626−630の1つなどのデルタ・ファイルとして格納される。
“ノン−マイルストーン”アップグレードが選択される場合に、アップグレードが行われると、ランタイム・ディレクトリ・ファイルは、アップグレードされたバージョンだけがファイル構造の中に存在するように単に上書きされる。
図6のアプリケーション・サーバ612−616の1つなどのアプリケーション・サーバが起動されるとき、Java(R)仮想マシン・インスタンスは適切なプロファイルで起動される。仮想マシン・インスタンスのためのクラスパスが構築され、始めはversion_delta_6.1.0.25からのファイルを、次にversion_base_6.1.0.0からのファイルを包含する。幾つかの状態データ・ファイル、例えばプロパティ・サブディレクトリ内のもの、は、矛盾しないよう、必要ならば全体が複製され得る。特定のプロファイルが特定のデルタ・ファイルと組み合わされて起動され得る。エンタープライズ・アプリケーション・サーバ・ランタイムは、ベース・ファイルで、あるいは場合によっては他のデルタ・ファイルで、バックフィルされる。
このようにして、エンタープライズ・アプリケーション・サーバの以前のバージョン上でも、後のバージョン上でも、全ファイルを完全にコピーすることを必要とせずにプロファイルを実行する能力が維持される。
図9は、一実施例に従うエンタープライズ・アプリケーション・サーバのアップグレード、パッチ、またはフィックスパックのインストレーションを概略的に示すブロック図である。プロセス900は、図6のプロファイル・マネージャ634などのソフトウェア・コンポーネント上で実行するソフトウェア・プロセスである。
プロセス900は、アップグレードされたバージョンをインストールするためにインストーラを起動することにより始まる(ステップ902)。そのアップグレードがマイルストーン・アップグレードであるかが判定される(ステップ904)。該アップグレードはマイルストーン・アップグレードであるという判定に応答して(ステップ904のイエス出力)、該アップグレードは、該アップグレードにより更新されるファイルの全ての以前のバージョンを維持しながらインストールされる(ステップ906)。該アップグレードはマイルストーン・アップグレードではないという判定に応答して(ステップ904のノー出力)、該アップグレードは、以前のバージョンのためのファイルをアップグレード済みバージョンのためのファイルに替えることによってWASのシステム全体がアップグレードされるように、インストールされる(ステップ908)。
図10は、一実施例に従ってランタイム環境によりシステムのバージョンを選択する方法を概略的に示すフローチャートである。プロセス1000は、図6のプロファイル・マネージャ634などの、ソフトウェア・プロセス上で実行するソフトウェア方法である。プロセス1000は、クラスタ内の各ノードが同じアップデート・インストーラ・パッケージをインストールされていること、および、それらのパッケージが無矛盾の仕方でインストールされたということを想定する。従って、もし既存のプロファイル・ツールがプロファイルとランタイムとの間の関連付けを更新するために拡張され、かつノード・エージェントを用いて全ノードにプッシュアウトされるならば、この関連付けは容易に行われ得る。該関連付けを格納するために、ファイル、例えば、プロファイル¥AppSrv01¥config¥cells¥cellName¥nodes¥nodeName¥runtime version.xml内のファイル、が導入され得る。
プロセス1000は、プロファイルを起動することにより始まる(ステップ1002)。プロセス1000は、ユーザ・インターフェースが特定のバージョン・レベルでプロファイルとランタイム・サーバ・インスタンスとの間の関連付けをセットアップすることを可能にする(ステップ1004)。
プロセス1000は、要求を満たすためにエンタープライズ・アプリケーション・サーバのどのバージョンが使用されるべきかを特定する(ステップ1006)。プロセス1000は、その特定を、図6のプロファイル識別子636などのプロファイル識別子に基づいて行う。選択されたバージョンからのファイルを包含するクラスパスが構築され、以前のバージョンからの任意の必要なファイルでバックフィルされる(ステップ1008)。例えば、バージョン6.1.0.25がプロファイル識別子により示される。その後、バージョン6.1.0.25をバージョン6.1.0.25に包含されていない任意の必要なファイルでバックフィルするためにバージョン−ベース−6.1.0.0が使用される。必要とされたバージョンが起動され(ステップ1010)、その後、該プロセスは終了する。
このように、実施例は、システムのランタイム環境を構築するためのコンピュータ実行方法、有形記憶媒体、およびデータ処理システムを提供する。プロファイル・マネージャは、プロファイル識別子を包含するサービス要求を受け取る。プロファイル識別子は、少なくとも1つのソフトウェア・コンポーネントの必要とされるバージョンを指定する。プロファイル・マネージャは、該ソフトウェア・コンポーネントの完全なインストレーションと、少なくとも1つのデルタ・ファイルとを特定する。プロファイル・マネージャは、その少なくとも1つのデルタ・ファイルからのファイルと、それらに続く、該完全なインストレーションからのファイルとを優先的に利用することによって、該必要とされるバージョンのためのクラスパスを動的に構築する。ランタイム環境は、その後、そのクラスパスを利用して構築される。
実施例は、アプリケーション/プロファイルがランタイム中にランタイム環境のバージョンを選択するためのコンピュータ実行方法、システムおよびコンピュータ・プログラム製品を提供する。一実施例では、エンタープライズ・アプリケーション・サーバ・フィックス・パックのアップグレードは、仮想インストレーションのように機能し、エンタープライズ・アプリケーション・サーバのバージョンを全体としてはアップグレードしない。代わりに、アプリケーション・スタートアップまたはプロファイル・スタートアップ段階の間にどちらのバージョンも選択され得るように、アップグレード後に現在のバージョンとより新しいバージョンとの両方がシステムに存在するべきである。
別の1つの実施例では、ベース・バージョンとアップグレードされたバージョンとを含む種々のランタイム・バージョンがシステムにおいて維持されて、ランタイム選択に基づいて動的にロードされる。
プロファイルのランタイム環境へのマッチングは、プロファイル・マネージャ・ツールによって、あるいは該プロファイルの頂部の何らかのディプロイメント記述子を編集することによって、行われることができる。ノード・クラスタの各ノード上の対応するプロファイルは、クラスタの各ノード上の対応するランタイム・バージョンにマッチングされなければならないかもしれない。
図面中のフローチャートおよびブロック図は、本発明の種々の実施態様に従うシステム、方法およびコンピュータ・プログラム製品の可能なインプリメンテーションのアーキテクチャ、機能性、および動作を示す。これに関して、該フローチャートまたはブロック図中の各ブロックは、指定された論理機能(1つまたは複数)を実行するための1つ以上の実行可能な命令を含むコードのモジュール、セグメント、または部分を表わすことができる。或る代わりのインプリメンテーションでは、ブロック中に記されている機能は図に記されている順序から外れて生じ得ることにも留意するべきである。例えば、連続して示されている2つのブロックは、実際には、実質的に同時に実行されることがあり、あるいは、それらのブロックは、ときには、関係する機能性に依存して逆の順序で実行されることがある。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方のブロックの組み合わせは、指定された機能または行為を実行する特殊目的ハードウェア・ベースのシステムにより、あるいは特殊目的ハードウェアおよびコンピュータ命令の組み合わせにより、実行され得ることにも留意するべきである。
ここで使用されている術語は、特定の実施態様だけを記述することを目的としているのであって、本発明を限定するべく意図されているのではない。さらに、“含む”という用語は、この明細書で使用されるとき、述べられた機能、インテジャー、ステップ、操作、エレメント、またはコンポーネントあるいはそれらのうちの組み合わせの存在を明示するけれども、1つ以上の他の機能、インテジャー、ステップ、操作、エレメント、コンポーネントまたはそれらのグループあるいはそれらの組み合わせの存在または付加を除外しないことが理解されるであろう。
添付の請求項の中の全ての手段またはステッププラス・ファンクションの要素の対応する構造、材料、行為、および同等物は、請求項において明示された他の要素と組み合わされた機能を実行するための任意の構造、材料、または行為を含むように意図されている。本発明の記述は、解説および記述を目的として提示されているが、網羅的であることあるいは開示された形の発明に限定されることは意図されていない。本発明の範囲を逸脱しない多くの改変および変化形が、当業者にとっては明らかであろう。実施態様は、本発明の原理および実際的応用を最善に説明するとともに、熟慮されている特定の使用法に適する種々の改変を伴う種々の実施態様について他の当業者が本発明を理解することを可能にするために選択され記述された。
本発明は、完全にハードウェアの実施態様、完全にソフトウェアの実施態様あるいはハードウェア要素およびソフトウェア要素の両方を包含する実施態様の形をとることができる。1つの好ましい実施態様では、本発明はソフトウェアで実現され、それはファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されない。
さらに、本発明は、コンピュータまたは任意の命令実行システムにより、あるいはそれらと関連して、使用されるプログラム・コードを提供するコンピュータ使用可能なあるいはコンピュータ可読の媒体からアクセスし得るコンピュータ・プログラム製品の形をとることができる。この記述の目的上、コンピュータ使用可能なあるいはコンピュータ可読の媒体は、命令実行システム、装置、またはデバイスにより、あるいはこれらと関連して、使用されるプログラムを包含し、記憶し、伝達し、伝播し、あるいは移送することのできる任意の有形装置であり得る。
媒体は、電子、磁気、光学、電磁、赤外線、または半導体システム(あるいは装置またはデバイス)、あるいは伝播媒体であり得る。コンピュータ可読媒体の例は、半導体またはソリッド・ステート・メモリ、磁気テープ、取り外し可能なコンピュータ・ディスケット、ランダム・アクセス・メモリ(random access memory(RAM))、読み出し専用メモリ(read−only memory(ROM))、堅固な磁気ディスクおよび光ディスクを含む。光ディスクの現在の例は、コンパクト・ディスク−読み出し専用メモリ(compact disk−read only memory(CD−ROM))、コンパクト・ディスク−読出し/書き込み(compact disk−read/write(CD−R/W))およびDVDを含む。
プログラム・コードの記憶または実行あるいはその両方を行うのに適するデータ処理システムは、システム・バスを通して記憶素子に直接あるいは間接的に接続された少なくとも1つのプロセッサを含むであろう。記憶素子は、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量記憶装置、および、実行中にコードを大容量記憶装置から取り出さなければならない回数を減らすために少なくとも幾らかのプログラム・コードの一時的記憶を提供するキャッシュ・メモリを含むことができる。
入力/出力装置あるいはI/O装置(キーボード、ディスプレイ、ポインティング・デバイスなどを含むが、これらに限定されない)は、直接、あるいは中間のI/Oコントローラを通して、システムに接続され得る。
中間の構内ネットワークまたは公衆網を通してデータ処理システムを他のデータ処理システムまたは遠隔プリンタまたは記憶装置に接続できるようにネットワーク・アダプタをシステムに接続させることもできる。モデム、ケーブル・モデムおよびイーサネット(R)・カードは、現在利用できるタイプのネットワーク・アダプタのほんの幾つかである。
本発明の記述は、解説および記述を目的として提示されているが、網羅的であることあるいは開示された形の発明に限定されることは意図されていない。多くの改変および変化形が、当業者にとっては明らかであろう。実施態様は、本発明の原理および実際的応用を最善に説明するとともに、熟慮されている特定の使用法に適する種々の改変を伴う種々の実施態様について他の当業者が本発明を理解することを可能にするために選択され記述された。