説明

動的ソフトウエア・バージョン選択のための方法およびコンピュータ・プログラム

【課題】バージョン変更の間、サポートされているプロセスまたはサービスの中断がないソフトウエア・バージョンの動的な選択を提供する。
【解決手段】動的ソフトウエア・バージョン選択は、バインディング・ライブラリ104をソフトウエア・コンポーネント102に関連付けることによって遂行される。動的ソフトウエア・バージョン選択は、バインディング・コンポーネント108から処理デバイスのメモリ110中にライブラリをロードする決定を行う、ローダ・コンポーネント106中のロジックと、要求されたライブラリの望ましいバージョンをローダ・コンポーネント106によって選択することとをさらに含み、ライブラリの望ましいバージョンは、バインディング・ライブラリ104のバインディング・コンポーネント108に関連付けられたライブラリの少なくとも2つのバージョンから選択される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の各種態様は一般にソフトウエア・バージョン選択に関し、具体的には、バージョン変更の間、サポートされているプロセスまたはサービスに最小限の中断または全く中断なしに、ソフトウエア・バージョンを動的に選択することに関する。
【背景技術】
【0002】
ミドルウエアは、一つ以上のマシン上で複数のプロセスが実行され相互作用することを可能にする。それ故、ミドルウエアは、トランザクション・システム、およびメッセージング−待ち行列システムなどの複雑な分散型アプリケーションのサポートにおいて有用である。一例として、ミドルウエアは、オンライン・トランザクション処理(OLTP:Online Transaction Processing)システムの形で、主要なビジネス・プロセスおよびサービスをサポートするために多く使われている。例えば、受注システムの中で、オンライン・トランザクション処理システムを活用し、新規データの取り入れ、既存データの更新、データ入力および取り出しの処理などを行うトランザクション指向のアプリケーションを促進し管理することができる。別の例として、メッセージ待ち行列システムの形でミドルウエアを活用し、必ずしも通信するプログラム間の専用の論理接続の必要なく、待ち行列にアプリケーション固有のメッセージを書き込み、これからメッセージを取り出すことによって、プログラムの間の通信を容易化することができる。
【発明の概要】
【発明が解決しようとする課題】
【0003】
最近のOLDPシステム、およびメッセージ−待ち行列システムなどを含め、ミドルウエアは、通常、ネットワークにまたがるトランザクションをサポートし、異なるエンティティにより制御される一つ以上のドメインを横断することができる。しかして、OLTPアプリケーション、およびメッセージ−待ち行列アプリケーションなどのミドルウエア・アプリケーションは、通常、ネットワーク中の相異なるコンピュータ・プラットフォーム上でトランザクションの実行を可能にする、クライアント/サーバ処理、およびブローカリング(仲介)を用いて実装される。従って、かかるミドルウエア・システムのソフトウエアのアップグレードを行うには、通常、ソフトウエアのインストールおよび構成を可能にするため、必要に応じアプリケーションを閉じ、関連するアプリケーションをオフラインにする必要が生じる。
【課題を解決するための手段】
【0004】
本発明の態様によれば、バインディング(結合)ライブラリをソフトウエア・コンポーネントに関連付けることによって、動的ソフトウエア・バージョン選択が遂行される。バインディング・ライブラリは、ローダ・コンポーネントおよびバインディング・コンポーネントを含み、ローダ・コンポーネントは、ソフトウエア・コンポーネントとバインディング・コンポーネントとの間の媒介体としての役割をし、バインディング・コンポーネントは、ソフトウエア・コンポーネント側のロジックを含む。動的ソフトウエア・バージョン選択は、バインディング・コンポーネントから処理デバイスのメモリ中にライブラリをロードするためのトリガを、ローダ・コンポーネントによって認識すること、およびライブラリの望ましいバージョンを、ローダ・コンポーネントによって選択することをさらに含み、ライブラリの望ましいバージョンは、バインディング・ライブラリのバインディング・コンポーネントに関連付けられたライブラリの少なくとも2つのバージョンから選択される。さらに、動的ソフトウエア・バージョン選択は、関連付けられたソフトウエア・コンポーネントを再起動する必要なしに、ライブラリの望ましいバージョンをコンピュータ処理システムのメモリ中にロードすることを含む。例えば、ライブラリの望ましいバージョンをロードするための、ローダ・コンポーネントによる決定は、制御プロセスによって投入されたライブラリ・バージョン・テーブルまたは他のソースによって制御することができる。
【図面の簡単な説明】
【0005】
【図1】本発明の態様による、動的ソフトウエア・バージョン選択を実施するためのシステムの概略説明図である。
【図2】本発明の態様による、動的ソフトウエア・バージョン選択を実施するための例示的アプローチを示すフロー・チャートである。
【図3】本発明の態様による、メッセージング・システム環境の例示的コンテキストにおいて動的ソフトウエア・バージョン選択を実施するためのシステムの概略説明図である。
【図4】本発明の態様による、共用ライブラリ・バージョン・テーブルを用いて、動的ソフトウエア・バージョン選択を実施するためのシステムの概略説明図である。
【図5】本発明の態様による、共用ライブラリ・バージョン・テーブルおよび共用プログラム・バージョン・テーブルを用いて、動的ソフトウエア・バージョン選択を実施するためのシステムの概略説明図である。
【図6】本明細書で詳しく説明する、本発明のさまざまな態様による機能を実施するための、コンピュータ可読記憶媒体を備えたコンピュータ・システムのブロック図である。
【発明を実施するための形態】
【0006】
本発明のさまざまな態様によって、ソフトウエア・システムを停止することなく、または他のサービス中断をもたらすことなく、新規ソフトウエアを使ってソフトウエア・システムを修正することを可能にする技法を提供する。ソフトウエア修正には、例えば、ソフトウエア・アップグレードの実施、以前のソフトウエア・バージョンへの復旧、ソフトウエア・バージョンのリロード、ソフトウエア・バージョンの修理または補修などが含まれる。これにより、サービスの中断なく、例えば既知の問題の修正処置もしくは新しい機能またはその両方を包含し、部分的に、サービス・レベルなどソフトウエアの異なるバージョンを使っている可能性のある、新規ソフトウエアにアップグレードができるソフトウエア・システムを提供する。また、ソフトウエア・システムを以前のバージョンに逆グレードすることもできる。さらに、クライアント側およびサーバ側のシステムの両方を新規ソフトウエアに修正することもできる。
【0007】
さらに、本明細書で説明する本発明のさまざまな態様によって、連続的に実行されているプロセス内の、アプリケーション・プログラミング・インタフェース(API:application programming interface)境界におけるバージョン化された実装を、関連するソフトウエア・コードに対してプロセスを再起動する必要がないように管理する仕方を提供する。プロセスを再起動せずに更新を実装するこの能力は、プロセスが、例えば顧客のアプリケーションなど、ソフトウエア修正を実行するため備えられた更新メカニズムの制御の下にない第三者のアプリケーションの場合であっても遂行することができる。しかして、ネイティブ・コード・ライブラリの実行時の更新および修正が容易に実装される。また、この更新メカニズムは、例えば動的結合ライブラリを利用するシステムにおいて、実行中のプロセスの下での機能的なライブラリ・バージョンの切り替えを可能にするための動的な内部状態処理を実行することができる。
【0008】
さらに、本発明の態様は、ライブラリに格納され得るソフトウエア・コードをどのように何時アップグレード、ダウングレード、または別途に置き換えるかなど、移行の決定を行い制御する能力を促進する更新メカニズムを提供する。かくのごとく、本更新メカニズムは、ソフトウエア・バージョン修正プロセスおよび決定におけるフレキシビリティを提供する、ダイナミックな動きをとることができる。さらに、本更新メカニズムは、例えば、プログラムごとのベースで、または他の選択基準に基づいて、選択的ソフトウエア・バージョン設定を実施することができる。
【0009】
本発明のまださらなる態様によれば、更新メカニズムには、ソフトウエア・コンポーネント(呼び出しコンポーネント)に関連付けられたバインディング・ライブラリを含めることができる。かくして、呼び出しコンポーネントは、随時にバインディング・ライブラリを呼び出し、アプリケーション・プログラミング・インタフェース(API)呼び出しを行う。バインディング・ライブラリは、ローダ・コンポーネントおよびバインディング・コンポーネントとして実装される。ローダ・コンポーネントは、ソフトウエア・コンポーネントからの呼び出しを受信し、同等なAPI呼び出しをバインディング・コンポーネントに発行する媒介体の役割をする。バインディング・コンポーネントは、ライブラリの少なくとも2つのバージョンを包含する、ソフトウエア・コンポーネント側のロジックを含む。各ライブラリ・バージョンは、呼び出しコンポーネントからのアプリケーション・プログラミング・インタフェース呼び出しに応答するためのロジックを包含する。
【0010】
ローダ・コンポーネントは、トリガを認識または別途に検知し、それに応じて、決定ロジックを実行する。決定ロジックは、新規ライブラリ・バージョンの有無をチェックし、ロードすべきライブラリの望ましいバージョンを検知し、ローダ・コンポーネントに、バインディング・コンポーネントからライブラリの望ましいバージョンを選択し、処理デバイスなどのメモリ中にロードするよう命令することができる。メモリ中にロードされたライブラリのバージョンを置き換える場合、旧ライブラリ・バージョンのアンローディングおよび新規ライブラリ・バージョンのローディングは、関連するソフトウエア・コンポーネントの再起動の必要なくして実施される。
【0011】
例として、第一実施例において、例えば接続/切断(または類似の)APIなど選択API呼び出しだけが、ライブラリ・バージョンをリロードさせる決定ロジックを有する。しかして、ローダ・コンポーネントは、関連するソフトウエア・コンポーネントから、例えば接続および切断API呼び出しなど特定の命令または命令群を受信するのに応じて、トリガされ、メモリ中にロードされたライブラリのバージョンをチェックし、必要な場合そのバージョンを更新することができる。本明細書でさらに詳しく説明するように、この実施例において、ライブラリ・バージョンのリロードを実施するために状態移行をする必要はない。
【0012】
別の実施例として、ローダ・コンポーネントに対する全てのAPI呼び出しが、決定ロジックを有する。しかして、ローダ・コンポーネントは、関連するソフトウエア・コンポーネントからの一切のAPI呼び出しを受信するのに応じて、トリガされ、メモリ中にロードされたライブラリのバージョンをチェックし、必要な場合そのバージョンを更新することができる。本明細書でさらに詳しく説明するように、この実施例では状態移行がサポートされなければならない。さらに、ライブラリ・バージョンのチェックをトリガする決定ロジックを、選択API呼び出しまたは全API呼び出しのいずれが有するのかに関係なく、ローダ・コンポーネントは、受信されたAPI呼び出しに応じて、どのプログラムがライブラリ・バージョンを移行するか、どれがしないかを制御可能にする、プログラム・レベルまたはプログラム固有の制御をサポートすることができる。
【0013】
動的ソフトウエア・バージョン選択
ここで図面、具体的には図1を参照すると、本発明の態様による動的ソフトウエア・バージョン選択を実施するのに適したシステム100の概略図が示されている。システム100は、単一の物理的処理デバイスに実装することができる。上記に換えて、システム100を、ネットワークなどによって通信可能に一緒に接続された複数の物理的処理デバイスに亘って分散させることもできる。この点に関し、本明細書でさらに詳しく説明するように、各処理デバイスには、本発明の態様を実行するためのハードウエアもしくはソフトウエア処理コンポーネントまたはその両方を含めることができる。
【0014】
図示のように、システム100は、少なくとも一つのソフトウエア・コンポーネント102および関連するバインディング・ライブラリ104を含む。ソフトウエア・コンポーネント102には、例えば、関連バインディング・ライブラリ104など別のコンポーネントのサービスを呼び出す任意のソフトウエアを含めることができる。ソフトウエア・コンポーネント102は、例えば、ソフトウエア・アプリケーション、プログラム、オブジェクト、サービス、エージェント、オペレーティング・システムなどとして実装することができる。この点に関し、本明細書では、ソフトウエア・コンポーネント102を呼び出しコンポーネント102と称することもある。
【0015】
バインディング・ライブラリ104は、ローダ・コンポーネント106およびバインディング・コンポーネント108を包含する2つのコンポーネント中に実装される。ローダ・コンポーネント106は、ソフトウエア・コンポーネント(群)102およびバインディング・コンポーネント108と相互作用し、バインディング・コンポーネントの関連ライブラリの適正なバージョンをメモリ110中にロードする。また、ローダ・コンポーネント106は、随意的に一つ以上の任意の情報源112と相互作用することができ、この情報源はバージョン管理を実行する際の助力として設けることができる。例えば、本明細書でさらに詳しく説明するように、情報源112は、メモリ110の中、または別個のファイルとしてのいずれかに格納されたテーブルとして実装することができ、該テーブルは、バインディング・コンポーネント108によって維持されている関連ライブラリの現行バージョンを示す。
【0016】
バインディング・コンポーネント108は、ライブラリの一つ以上のバージョンを含み、これには、ライブラリの少なくとも2つのバージョンを包含する、ソフトウエア・コンポーネント側のロジックが入っている。各ライブラリ・バージョンは、呼び出しコンポーネント102からのアプリケーション・プログラミング・インタフェース(API)呼び出しに応答するためのロジックを包含する。本明細書で用いる「ライブラリ」は、一般的で限定のない用語として意図されている。例えば、「ライブラリ」バージョンには、各々にjarファイル、プログラム、モジュール、動的結合ライブラリなどの、ソフトウエアの任意の関連パッケージング・ユニットなどを含めることができる。さらに、各ライブラリ・バージョンは、ネイティブ・コードのライブラリに限定されず、しかしてJAVAなどの実装により用いることができる
【0017】
ローダ・コンポーネント106は、ソフトウエア・コンポーネント102とバインディング・ライブラリ104のバインディング・コンポーネント108との間の媒介体としての役割をする。この点に関し、ローダ・コンポーネント106は、静的にソフトウエア・コンポーネント(群)102とリンクする唯一のコンポーネントとすることができる。本発明の態様によれば、ローダ・コンポーネント106をライブラリ自体として実装することができる。この例示的実装において、ローダ・コンポーネント106は、主として転送ライブラリの機能をする。すなわち、大部分の時間、ローダ・コンポーネント106は、ソフトウエア・コンポーネント102からAPI呼び出しを受け、それに応じて、バインディング・ライブラリ108に関連付けられた、現在ロードされているライブラリ・バージョン中の同等なAPIを呼び出す。
【0018】
本発明のさらなる態様によれば、決定ロジックは、ローダ・コンポーネント106からバインディング・コンポーネント108の適切なライブラリへの転送機能の実行パス中に挿入することができる。どの転送機能が決定ロジックを有すべきでどれが有さざるべきかの選択は、特定の実装の如何により、その例を後記で詳細に説明する。
【0019】
バインディング・コンポーネント108は、ライブラリの一つ以上のバージョンを含む。例えば、図示のように、バインディング・コンポーネント108は、あるライブラリの「N」個のバージョンを含む。前記のNはライブラリ・バージョンの任意の数を表すことができる。各ライブラリ・バージョンには、例えば、ソフトウエア・コンポーネント102が、ミドルウエア・プロセスに関連付けられたAPI呼び出しを実行するためなど、特定のオペレーションまたは機能を実行するために使うソフトウエア・コンポーネント側のロジックを提供する、動的リンク・ライブラリを含めることができる。例えば、バインディング・コンポーネント108には、ソフトウエア・コンポーネント102からのAPI呼び出しを遂行またはこれに別途に応答するロジックを含めることができる。
【0020】
前述で詳細を述べたように、バインディング・コンポーネント108は、さまざまな形で実装することができる。図示のように、ファイル・システムは、複数のバインディング・コンポーネント・バージョンを格納し、各バインディング・コンポーネント・バージョンは関連するライブラリを有する。全ての必要なプログラムおよびコードがライブラリにカプセル化されている場合など、別の例示的実装において、バインディング・コンポーネント108には、例えば図3中に示されているような、ライブラリ・バージョンの各々を格納するファイル・システム・ライブラリを含めることができる。上記に換えて、他のバインディング・コンポーネント構成も実装することもできる。
【0021】
ローダ・コンポーネント106は、ソフトウエア・コンポーネント102による呼び出しをサポートするのに必要ないかなるロジックも包含していない。それよりも、ローダ・コンポーネント106は、バインディング・ライブラリ104のバインディング・コンポーネント108に関連付けられたライブラリの適正なバージョンを、対応するコンピュータ処理システムのメモリ110中に、動的にロードする。ライブラリをロードするプロセスは、関連するソフトウエア・コンポーネントの再起動を必要とせずに達成される。適切なライブラリが選択され、メモリ110中にロードされたならば、ローダ・コンポーネント106は、ソフトウエア・コンポーネント102からの呼び出しを受信し、ソフトウエア・コンポーネント102からのものと同等な呼び出しをライブラリからメモリ110中にロードされた適切なロジックに転送する。このように、ローダ・コンポーネント106はソフトウエア・コンポーネント102からの呼び出しをインターセプトし媒介する。ライブラリがメモリ110中にロードされたならば、ローダ・コンポーネント106は、新規バインディング・ライブラリ・バージョン(または既存だが異なるバージョンのバインディング・ライブラリに戻す命令)の有無を時折チェックする。ローダ・コンポーネント106がメモリ110中にロードされたライブラリ・バージョンを変更する必要を検知した場合、その変更は、根底にあるソフトウエア・コンポーネント102の再起動を必要とせずに実装される。
【0022】
ある例示的実装において、ローダ・コンポーネント106が、現在ロードされているまたは別途に使用されている、バインディング・コンポーネント108のライブラリ・バージョンが、最新の利用可能なバインディング・コンポーネント108よりも前のレベルであることを検知したときなど、といった状況に基づいて、ローダ・コンポーネント106は、メモリ中にロードされたライブラリの現在のバージョンを動的にアンロードし、そのライブラリの最新バージョンをバインディング・コンポーネント108からメモリ中に動的にロードすることができる。また、ローダ・コンポーネント106は、随意的に、例えば新しく選択されたライブラリ・バージョン中に備えられていることのある、移行ロジックを呼び出し、必要な場合、任意の内部データ構造を、新規のライブラリ・バージョンの必要条件に適合するよう再編成することができる。このように、内部状態の移行は、バインディング・ライブラリ104によって、自動的に且つ動的に管理される。ライブラリの新規のバージョンがメモリ中にロードされ、(必要に応じ)内部状態データ構造が移行されたならば、ローダ・コンポーネント106は、新規ライブラリを使って、ソフトウエア・コンポーネント102からの現在の呼び出し(呼び出しが行われている場合)の処理を完了することができる。
【0023】
本明細書でさらに詳しく説明するように、ローダ・コンポーネント106は、バインディング・コンポーネント108からロードする適切なバージョンのライブラリを選択するため、一つ以上の情報源112などのリソースを用いることができる。この点に関し、情報源112には、バインディング・コンポーネント108からの望ましいライブラリを識別するための、ファイル・システム・シンボリック・リンク(例、Unix(R)のようなファイル・システムなど)、制御ファイル、一つ以上のテーブルまたはデータベース(ファイルとして保存またはメモリ110中にロードされる)、ポインタ、または他のソースを含めることができる。
【0024】
本発明のさらなる態様によれば、例えば、マネージャ機能、アドミニストレータ機能、スーパバイザ機能など、共通の制御機能によって、ソフトウエア・バージョン制御を監視または監督することができる。例えば、マネージャは、接続された全てのソフトウエア・コンポーネント102が、次にアプリケーションがローダ・コンポーネント106に呼び出しを行うとき、望ましいライブラリ・バージョンを使用するように(例えば、ローダ・コンポーネント106を介して)命令することができる。また、マネージャは、随時、新規のライブラリ・バージョンを使ってバインディング・コンポーネント108を更新することができる。このように、バインディング・ライブラリ104は、単独で、もしくは、例えばマネージャまたは監視ロジックなど一つ以上の追加プロセスとの組み合わせで、更新メカニズムを実施する。
【0025】
本明細書で説明する技法は、バインディング・コンポーネント108内のライブラリ・バージョンを介するバインディング・ソフトウエアの動的アップグレード/ダウングレードを可能にするルールまたは他のプロセスによって駆動することができる。さらに、バインディング・ソフトウエアの動的アップグレード/ダウングレードは、顧客アプリケーション・プログラムのサブセットに対しでだけ行うようにしたり、特定のアプリケーションに対して行うようにしたり、または特定の日時に行うようにしたりなどすることができる。
【0026】
図2を参照すると、フロー・チャートが、本発明のさまざまな態様による、動的ソフトウエア・バージョン選択を遂行するプロセス200の全体的フローを示している。プロセス200は、方法、またはハードウエアとソフトウエアとの組み合わせを包含するシステムの一部として実装することができる。例えば、ソフトウエアを物理メモリ・デバイスに格納し、そのソフトウエアが少なくとも一つのプロセッサに処理されるとき、該ソフトウエアが、対応する物理マシンに、図示のプロセス200によって規定される処置を実行させるようにすることができる。しかして、例えば、プロセス200は、図1を参照して例示し説明したシステム100上に実装することができる。さらに、プロセス200は、内部に具現されたコンピュータ可読のプログラム・コードを有する有形のコンピュータ可読記憶媒体を含むコンピュータ・プログラム製品として実装することもできる。
【0027】
プロセス200は、202において、バインディング・ライブラリをソフトウエア・コンポーネントに関連付けするステップを含む。バインディング・ライブラリは、ローダ・コンポーネントおよびバインディング・コンポーネントを含み、ローダ・コンポーネントは、ソフトウエア・コンポーネントとバインディング・コンポーネントとの間の媒介体としての役割をし、バインディング・コンポーネントは、ソフトウエア・コンポーネント側のロジックを含む。本発明のある態様によれば、バインディング・ライブラリのリロードが必要であることを「認識」または「判定」するのはローダ・コンポーネントの役割である。この点に関して、ローダ・コンポーネントは、異なるバインディング・ライブラリをロードしなければならないことも認識する。
【0028】
プロセス200は、204において、ロードされたライブラリ・バージョンの、ローダ・コンポーネントによる検証をトリガするステップをさらに含む。例として、ローダ・コンポーネントは、決定ロジックを実行し、例えば、ルール、条件、または他の情報に基づいて、現在ロードされているライブラリを、例えば、新しいバージョンにアップグレードする、または以前のバージョンに逆グレードするなどの修正をすべきかどうかを決定する。このトリガは、ライブラリ・バージョンの検証をトリガする決定ロジックに関連付らけれた特定のAPI呼び出しを受信することによって実行される。別の実施例として、ローダ・コンポーネントによって受信される全てのAPI呼び出しに、それらに関連付けた決定ロジックを持たせることができる。ライブラリがロードされなければ、ローダ・コンポーネントは、メモリ中にロードするライブラリ・バージョンを選択するために、同じルール、条件、または他の情報を用いることができる。
【0029】
メモリ中にロードされたライブラリのバージョンを修正する必要がない場合、プロセス200は終了する。必要がある場合、プロセス200は、206において、要求されるライブラリの望ましいバージョンをローダ・コンポーネントによって選択するステップをさらに含む。ライブラリの望ましいバージョンは、バインディング・ライブラリのバインディング・コンポーネントに関連付けられた、ライブラリの少なくとも2つのバージョンから選択することができる。要求されたライブラリの望ましいバージョンは、例えば、ファイル・システム・シンボリック・リンクなどのファイル、選択を命令する制御ファイルなどのファイルを使って選択することができる。別の例として、ローダ・コンポーネントは、テーブルまたは他の情報源を調べて、メモリ中にロードする望ましいバージョンの識別を確認することができる。例として、本プロセスは、例えばローダ・コンポーネントを介しライブラリ・バージョン・テーブルを使って、ライブラリのバージョンを識別することができる。しかして、プロセス200は、ライブラリの現行バージョンを追跡するライブラリ・バージョン変数を格納することができ、ローダ・コンポーネントがこれにアクセスして利用することができる。このようにして、例えば、ローダ・コンポーネントは、ライブラリ・バージョン変数の値を読み取り、そのライブラリ・バージョン変数の値に基づきライブラリの望ましいバージョンを選択することができる。
【0030】
プロセス200は、208において、関連するソフトウエア・コンポーネントを再起動する必要なしに、そのライブラリの望ましいバージョンをコンピュータ処理システムのメモリ中にロードするステップをさらに含む。本プロセスには、ライブラリ・バージョンが選択されメモリ中にロードされたならば、ソフトウエア・コンポーネントからのソフトウエア・アプリケーション・プログラム・インタフェース呼び出しを、ローダ・コンポーネントによって受信するステップと、受信した呼び出しを、メモリ中にロードされたライブラリの望ましいバージョンの対応ソフトウエア・アプリケーション・プログラミング・インタフェースに転送するステップとをさらに含めることができる。
【0031】
ミドルウエア環境における動的バージョン制御
本発明のさまざまな態様は、停止時間またはサービスの中断なしに、新しい動的結合ライブラリをミドルウエア・システムに組み入れることによって、ミドルウエア環境などの環境における動的バージョン制御を容易化する。かかる実装は、ミドルウエア環境におけるバージョン区分け使用の管理をさらに提供する。
【0032】
図3を参照すると、動的ソフトウエア・バージョン選択を実施するためのシステム300の概略図が示されている。システム300は、本発明の態様を実装し、多くの点において図1のシステム100に関して述べたことと類似である。しかしながら、システム300は、本発明のさらなる態様による、特定の機能を説明するため、メッセージング・システム環境の例示的コンテキスト(状態、状況)中に示されている。
【0033】
システム300は、複数のソフトウエア・コンポーネント302を包含し、これらは顧客アプリケーションとして実装されている。各ソフトウエア・コンポーネント302は、ローダ・コンポーネント306およびバインディング・コンポーネント308を含むバインディング・ライブラリ304に関連付けられている。バインディング・コンポーネント308は、メッセージング−待ち行列システムのアプリケーション・プログラミング・インタフェース呼び出しを処理するために必要なソフトウエア・コンポーネント側のロジックの全てを包含する。該して、バインディング・ライブラリ304は、ローダ・コンポーネント306およびバインディング・コンポーネント308を包含し、図1を参照して説明した同名のコンポーネントと類似である。
【0034】
例示的システム300には、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシン・コーポレーションによる、メッセージング−待ち行列用のMQSeries(IBM社の登録商標)ミドルウエア・システムなど、メッセージ−待ち行列システムを組み込むことができる。かかるアレンジメント(方法/装置/配列)を用いて、さまざまなソフトウエア・コンポーネント302は、アプリケーションをリンクするための自分専用の論理的接続を持たなくても、待ち行列にアプリケーション固有のデータ(メッセージ)の書き込み、これから読み出しをすることによって、相互に通信することができる。この点に関し、各バインディング・ライブラリ304は、例えば、メッセージング−待ち行列システムを使って通信するためクライアント314を実施する実行ファイルのセットを包含することができる。
【0035】
システム300は、複数のクライアント処理デバイス322をさらに包含し、これらデバイスは、これらに関連する顧客ソフトウエア・コンポーネント302を実行する過程で、ネットワーク324を介してサーバ・コンピュータ326と通信する。典型的な物理的処理デバイスには、例えば、サーバ・コンピュータ、パソコン、ノート型パソコン、ネットブック型パソコン、タブレット型パソコン、トランザクション・システム、用途指向アプライアンス、例えば、携帯データ端末(PDA:personal data assistant)、パーム・コンピュータ、携帯電話アクセス処理デバイス、スマート・フォンなどの普及したコンピューティング・デバイス、またはコンピュータ・コードを実行する能力のある他の任意のデバイスなどを含めることができる。
【0036】
ネットワーク324は、さまざまなクライアント処理デバイス322とサーバ・コンピュータ326との間の通信リンクを提供し、これを、例えば、ルータ、ハブ、ファイヤウオール、ネットワーク・インタフェース、有線または無線の通信リンクおよび対応する相互接続機能、携帯電話基地局および例えば携帯電話とTCP/IPとの間を変換するなどの対応する携帯電話変換技術等を含むネットワーキング・コンポーネントによってサポートすることができる。さらに、ネットワーク324には、一つ以上のイントラネット、エクストラネット、ローカル・エリア・ネットワーク(LAN:local area network)、広域ネットワーク(WAN:wide area network)、無線ネットワーク(WIFI)、ワールド・ワイド・ウェブを含むインターネット、もしくは、クライアント処理デバイス322とサーバ・コンピュータ326との間の通信を、リアル・タイムまたは例えばタイム・シフト、バッチ処理など他の仕方で可能にする他のアレンジメント、または前述の組み合わせを使用する接続を含めることができる。
【0037】
サーバ・コンピュータ326は、例えば、待ち行列マネージャ328を実行するために用いることができ、該マネージャは長期的サービス・プロセスのセットとして具現することができる。待ち行列マネージャ328は、顧客ソフトウエア・コンポーネント302の各々に対するメッセージの送信および待ち行列を管理する実行時アプリケーションを定義する。この実施例において、メッセージング−待ち行列システムは、クライアント/サーバ構成中に実装される。上記に換えて、待ち行列マネージャ328のインスタンスを、各クライアント処理デバイス322上の長期的プロセスとして実装することもできよう。
【0038】
大まかに言えば、顧客ソフトウエア・コンポーネント302は、API呼び出しを使って、自分に関連するクライアント314を介し待ち行列マネージャ328と通信し、例えば、他の顧客のアプリケーションに関連付けられた待ち行列にメッセージを送信したり、または関連する待ち行列から、他のソフトウエア・コンポーネント302が置いたメッセージを読み出したりする。しかして、待ち行列マネージャ328は、各々が製品固有のバインディング・ライブラリ304を使用してこれらのサービス・プロセスにアクセスする、相異なるクライアント処理デバイス322に関連付けられた、潜在的に多数の異なった顧客ソフトウエア・コンポーネント302と相互作用する。かかるアレンジメントは、待ち行列マネージャが、例えば、クライアント/サーバ実装の一部としてサーバ・コンピュータ326上などの遠隔にあるか、あるいは、対応するクライアント処理デバイス322のローカル構成中のバインディング・ライブラリ304とともに同一場所に配置されているかどうかにかかわらず実施することができる。
【0039】
時折に、システム300内で作動している多様なコンポーネントのソフトウエアを更新することが望ましい。メッセージング−待ち行列システムが更新の実施を必要としているとしよう。本発明のさまざまな態様によれば、メッセージ−待ち行列システム・ソフトウエアの新規バージョンは、サービスを中断することなく動的に展開することができる。かかるソフトウエア修正には、例えば、バインディング・ライブラリ304の関連インスタンスによってロードされたライブラリの関連バージョンなど、各顧客ソフトウエア・コンポーネント302に結び付くソフトウエアの変更が含まれる。ソフトウエア修正には、例えば、待ち行列マネージャ328への変更などメッセージング−待ち行列システムの内部プロセスの変更、バインディング・コンポーネント308に関連付けられた、格納されたライブラリ・バージョンの変更、追加または削除などがさらに含まれる。
【0040】
かかる内部プロセスは、メッセージング−待ち行列システムの内部のソフトウエアを修正する場合に、ソフトウエア・アップグレードが利用可能になったときまたはそのすぐ後に、再起動が可能なように設計することができる。それに対して、顧客ソフトウエア・コンポーネント302は、顧客のビジネス要求事項によって決定されたプロセス・ライフサイクル要件を有し、これらコンポーネントは、メッセージング−待ち行列システムによる制御でなく、顧客の制御下にある。
【0041】
一般に、待ち行列マネージャ328に関連付けられたサービス・プロセスは、従来のオペレーティング・システムのプロセスとして実装することができる。MQSeries(IBM社の登録商標)待ち行列マネージャ中の例に、メッセージ・チャネル・エージェント(MCA:Message Channel Agent)およびローカル待ち行列マネージャ・エージェント(LQMA:Local Queue Manager Agent)があり、前者はネットワークを介して他のMCAとのメッセージを読み取り、書き込みするのに使用され、後者は基礎的待ち行列エンジンを形成する。待ち行列マネージャ328自体が、必要に応じ再使用される利用可能なMCAおよびLQMAプロセスのプールを維持するという意味で、これらのプロセスは管理されている。MCAおよびLQMA双方のプロセスの遊休中のインスタンスは、新規作業が到着次第再使用される。例えば新規ライブラリまたはプログラムいずれかの形で、新しいソフトウエアがファイル・システム中にインストールされるとき、待ち行列マネージャは、これらプログラムの一切の遊休インスタンスを停止し、新しいプロセスを起動することができる。これらプロセスは、一切他からの助力なしに、新規ソフトウエアを使用することになる。また、同様に、ソフトウエアのダウングレートも、新規ソフトウエア・ファイルをインストールしたファイル・システム変更を逆実施することによって可能である。
【0042】
顧客ソフトウエア・コンポーネント302は、例えばMQSeries(IBM社の登録商標)の場合であれば「libmqm」と名付けられたライブラリなどのバインディング・ライブラリ304を使って、メッセージング−待ち行列システムのサービスにアクセスを得る。バインディング・ライブラリ304は、一面では、アプリケーションに一定で明確なインタフェースを提供する。さらに、バインディング・ライブラリ304は、待ち行列マネージャ328の内部とも相互作用する。
【0043】
顧客ソフトウエア・コンポーネント302は、通常、新規ソフトウエアが利用可能になっても再起動を強制することはできない。例えば、通常、サーバ・コンピュータ326上のプロセスは、遠隔クライアント処理デバイス322上のソフトウエア・コンポーネント302の再起動を強制することはできない。また一方、この実施例において、複数の異なるライブラリ・バージョンを含む各バインディング・コンポーネント308によって示されるように、プログラム/ライブラリ実行ファイルの現在セットおよびプログラム/ライブラリ実行ファイルの新規セットの両方が、各ファイル・システムにおいて共に利用可能である。この点に関し、メッセージング−待ち行列システムに関連付けられた各ソフトウエア・コンポーネント302によって実行される、例えばクライアント314などのソフトウエアは、図1および図2を参照して説明したのと類似の仕方で更新することができる。
【0044】
顧客が自分のソフトウエア・コンポーネント302を再起動する必要なしにバインディング・ライブラリの新規バージョンの展開を可能にするため、各バインディング・ライブラリ304は、図1を参照して説明したローダ・コンポーネント106およびバインディング・コンポーネント108に対するのと類似の仕方で、ローダ・コンポーネント306およびバインディング・コンポーネント308を包含する、2つの異なるコンポーネントに分割される。ローダ・コンポーネント306は、例えば小型のライブラリとして実装することができる。しかしながら、ローダ・コンポーネント306は、メッセージング−待ち行列システムのアプリケーション・プログラミング・インタフェースをサポートするため必要なロジックを一切具備していない。それよりも、ローダ・コンポーネント306は、バインディング・ライブラリの適正なバージョンを、対応するクライアント処理デバイス322のメモリ中にロードする。次いで、ローダ・コンポーネント306は、アプリケーション・プログラムからのものと同等なAPI呼び出しを、例えばクライアント314など、ロードされたライブラリ中の適切なインタフェースに転送し、メッセージのメッセージ待ち行列への送信、およびメッセージ待ち行列からのメッセージの読み出し、または、別途にメッセージング−待ち行列システムとの相互作用を実施する。
【0045】
ローダ・コンポーネント306がバインディング・コンポーネント308からのライブラリを選択し、ロードしたならば、ローダ・コンポーネント306は、ソフトウエア・コンポーネント302からの全てのAPI呼び出しの同等バージョンを、バインディング・コンポーネント308からロードされたライブラリに転送する。しかして、ローダ・コンポーネント306は、メッセージング−待ち行列システムに関連づけられた、顧客ソフトウエア・コンポーネント302とバインディング・コンポーネント308からロードされたライブラリとの間の、全API呼び出しを効果的にインターセプトし媒介する。
【0046】
クライアント処理デバイス322上のライブラリのソフトウエア修正を実施するため、サーバ・コンピュータ326または他の任意のソースは、対応するライブラリの新規バージョンをバインディング・コンポーネント308に提供する。バインディング・コンポーネント308は、ライブラリを、対応するローダ・コンポーネント306が、ライブラリの各バージョンを一意的に識別できるような仕方で格納する。さらに、ローダ・コンポーネント306には、本明細書でさらに詳しく説明するように、ロードされるライブラリのバージョンを識別する情報を提供することができる。また一方、ローダ・コンポーネント306に対しライブラリの新規バージョンを用いて対応するクライアント処理デバイス322のメモリを更新させる適切な命令が与えられるまでは、顧客ソフトウエア・コンポーネント302の実行中のインスタンスは、関連するクライアント処理デバイス322のメモリ中に現在ロードされているライブラリ・バージョンのいずれの使用も継続することができる。
【0047】
ローダ・コンポーネント306は、所定イベントのタイミングに応じ、前回ライブラリ・バージョンが既にロードされていた場合、前回バージョンをアンロードすることができる。それに応じ、ローダ・コンポーネント306は、そのライブラリの新規バージョンをバインディング・コンポーネント308からロードできる。
【0048】
ある実施例によれば、顧客ソフトウエア・コンポーネント302は、所定の切断および再接続APIシーケンスを用いて、バインディング・コンポーネント308からの新規ライブラリのローディングをトリガすることができる。顧客ソフトウエア・コンポーネント302が、アプリケーション・プログラミング・インタフェース呼び出しのこのシーケンスを実施するまでは、顧客ソフトウエア・コンポーネント302は旧ライブラリ・バージョンのソフトウエアを使い続けることになる。
【0049】
ある例示的実装において、顧客ソフトウエア・コンポーネント302がバインディング・ライブラリ304に、切断および再接続API呼び出しを発行することによって、ソフトウエア・ライブラリ修正をトリガすることができる。これにより、ローダ・コンポーネント306は、顧客のアプリケーションの切断に応じてメモリ中にロードされたライブラリの現行バージョンを動的にアンロードし、続いて、顧客のアプリケーションの接続に応じてそのライブラリの新規バージョンを動的にロードすることができる。MQSeries(IBM社の登録商標)の例示的実装において、バインディング・コンポーネント308へのライブラリのローディングおよびアンローディングは、ローダ・コンポーネントのMQCONN(MQシリーズ接続)およびMQDISC(MQシリーズ切断)処理で実行される。この実施例においてライブラリをロードもしくはアンロードまたはその両方を行うための命令は、対応する顧客ソフトウエア・コンポーネント302によって実行され、これにより、顧客アプリケーションが更新のタイミングを制御することを可能にする。
【0050】
本発明の態様によれば、前述の例示的実装において、接続/切断を転送するAPIだけが、その中に決定ロジックを有している必要がある。接続/切断APIに対し、呼び出しが対応するライブラリに転送される前に決定ロジックを実行することができる。しかして、現在ロードされているライブラリ・バージョンを修正する必要が生じた場合、かかる変更を、呼び出されたAPIを実行する前に遂行することができる。他のAPIは、ローダ・コンポーネント306から関連するバインディング・ライブラリ308の対応ライブラリ・バージョンへの、同等API呼び出しをトリガし、内に決定ロジックを持たない機能の転送を実施することができる。この場合、ローダ・コンポーネント306は、上記の「特別」なAPI(または同様な所定の初期化/初期化解放API)の中の新規バインディング・ライブラリの有無をチェックするだけである。他のAPIは、ローダ・コンポーネント306がバージョン・チェックを行うようトリガすることはない。接続/切断APIは「特別」とみなされる。というのは、これらは、バインディング・ライブラリ304が他のAPIの処理のため用いる内部状態をセットアップし、解除するからである。しかして、接続/切断API自体が状態データをセットアップし、解除するので、ローダ・コンポーネントがトリガする状態の移行をサポートする必要はない。かくして、状態移行は必要がない。
【0051】
さらに別の実施例によれば、あらゆるAPI(またはAPIのサブセット)が、ライブラリ・バージョンをチェックし必要な場合ライブラリ修正をトリガするための、決定ロジックを有する。この決定ロジックは、例えば、同等呼び出しがロードされているライブラリ・バージョンに転送される前に実行することができる。全API(またはそのサブセットの)実行のため決定ロジックを実行する必要があるので、現在望まれているライブラリ・バージョンの表示もしくは利用可能なライブラリ・バージョンのリストまたはその両方を格納している、メモリ・ベースの共用ライブラリ・バージョン・テーブルを使うなどして、このロジックを効率化することができる。バインディング・ライブラリは、APIが呼び出されたときの内部状態データを持ち越す可能性が高いので、ローダ・コンポーネント306は、例えば新しいバインディング・ライブラリ中の移行APIを使うなどして、バインディング・ライブラリの状態を移行する能力を有すべきである。
【0052】
しかして、本発明の態様によれば、メモリ中にロードされることになる、バインディング・コンポーネント308からのライブラリ・バージョンの選択は、オペレーティング・システムの制御から外され、これをローダ・コンポーネント306の直接制御の下に置くことができる。ローダ・コンポーネント306は、ライブラリをローディングする前に、必要などのような妥当性確認をも遂行することができ、単に基盤のオペレーティング・システムのライブラリ・ローディング・メカニズムに頼って可能なよりも、もっと高度なローディング技法および方策を実施することができる。さらに、ローダ・コンポーネント306は、例えば、内部状態移行が可能で、後続のバインディング・ライブラリ中の移行APIにサポートされていれば、以前のライブラリ・バージョン・ソフトウエア・レベルへのフォールバックを行う能力も有する。
【0053】
しかして、本発明の態様は、システム・ソフトウエア、例えばこの実施例ではミドルウエア、のメンテナンス更新のための計画的な停止を排除することによって、連続的な使用可能性に寄与する。この点に関し、本明細書で説明するソフトウエアの機能は、システム・ソフトウエアの再起動の必要なしに、さらには変更中のアプリケーションの休止もなしに変更を行うことを可能にできる。このように、変更を適用するプロセスの間、同じシステム・ソフトウエアによって2つ(またはそれ以上)の異なるアプリケーション・インタフェースが提供できるようにして、変更がアプリケーション・インタフェースに影響を与える場合であっても、アプリケーションがシステム・ソフトウエアの使用を継続することを可能にする
【0054】
例としてメッセージング−待ち行列システムなど、ミドルウエア・システムに関連付けられたソフトウエアの動的更新についての本説明は、本明細書に詳記された、サービスの中断なしに動的ソフトウエア修正を実施するための技法を説明するための例示を目的として提示されており、限定するためのものではない。
【0055】
ライブラリ・バージョン・テーブル
図4を参照すると、動的ソフトウエア・バージョン選択を実施するためのシステム400の概略図が示されている。システム400は、一般に、ソフトウエア・コンポーネント402および関連するバインディング・ライブラリ404を包含する。バインディング・ライブラリ404は、ローダ・コンポーネント406およびバインディング・コンポーネント408を包含する、2つの別個のコンポーネント中に実装される。この点に関し、ソフトウエア・コンポーネント402、バインディング・ライブラリ404、ローダ・コンポーネント406、およびバインディング・コンポーネント408は、図1〜3のいずれか一つ以上を参照して説明した同名のコンポーネントと実質上類似である。
【0056】
本発明のさらなる態様によれば、新規ライブラリ・ソフトウエアのローディングおよび使用は、一般に、顧客アプリケーション(ソフトウエア・コンポーネント)402がAPI呼び出しを発行するときにトリガすることができる。本明細書でさらなる詳細を説明したように、バージョン・チェックおよびライブラリのリローディングのトリガは、ローダ・コンポーネント406が特別なAPI、例えば接続および切断APIなどを受信するのに応じて発生させることができる。さらに別の実施例として、バージョン・チェックおよびライブラリのリローディングのトリガは、ローダ・コンポーネント406が、対応する呼び出しソフトウエア・コンポーネント(群)からの全APIを受信するのに応じて発生させることもできる。
【0057】
示された例示的実装において、システム400は、共用ライブラリ・バージョン・テーブル430をさらに含む。この共用ライブラリ・バージョン・テーブルは、バインディング・コンポーネント408に保存されたライブラリのさまざまなバージョンに関する情報を格納する。例えば、図示のように、共用ライブラリ・バージョン・テーブル430は、対応するバインディング・コンポーネント408に関連付けられた全ての利用可能なライブラリの名称およびバージョン番号を包含する。加えて、共用ライブラリ・バージョン・テーブル430には、ライブラリ・バージョン変数432を包含させることができ、該変数は、例えば共用テーブルのどのエントリかなど、ライブラリのどのバージョンが、メモリ中にロードされるべきライブラリの現行バージョンに相当するかの表示を格納する。
【0058】
共用テーブルは、図3を参照して説明した待ち行列マネージャ328など、任意の管理プロセスによって投入することができる。さらに、例えば共用ライブラリ・バージョン・テーブル430に、利用可能なライブラリ・バージョンを発行するためのメカニズムを実装することができる。
【0059】
例えば対応する決定ロジックに関連付けられた「特別」API呼び出しの受信など所定のトリガリング・イベントに応じて、または全てのAPI呼び出し(しかるべき決定ロジックに関連付けられた全てのAPI呼び出し)の受信に応じて、あるいは(特定の実装による)他の決定ロジックに基づいて、ローダ・コンポーネント406は、共用ライブラリ・バージョン・テーブル430を調べ、顧客プログラム(ソフトウエア・コンポーネント)402が、利用可能なライブラリの適正な現行バージョンを使用しているかどうかを確かめる。ソフトウエア・コンポーネント402がライブラリの適正なバージョンを使用していない場合、ローダ・コンポーネント406は、旧ライブラリ・バージョンのアンローディングを行うよう調整し、適正な新バージョンをロードする。例えば、ローダ・コンポーネント406は、ライブラリ・バージョン変数432に格納された値をメモリにロードされているライブラリのバージョンと対比することができる。
【0060】
かくして、例えば、顧客ソフトウエア・コンポーネント402が、対応する決定ロジックに関連付けられたAPI呼び出しを発行した何時においても、ローダ・コンポーネント406は、利用可能なライブラリに対比して、現在使われているライブラリ・バージョンの検査を実施することができる。ローダ・コンポーネント406が、現在ロードされているライブラリは最新の利用可能ライブラリとは異なるレベルのものであることを検知した場合、ローダ・コンポーネントは、現在のライブラリを動的にアンロードし、規定されたライブラリを動的にロードすることができる。随意的に、新規ライブラリ中の特別な移行APIへの呼び出しを実施し、例えば、(必要な場合)その新規ライブラリの要件に適合するように一切の内部状態データ構造を再編成し、新規ライブラリを用いて只今のAPI呼び出しの処理を遂行することができる。
【0061】
ある例示的実装において、例えば図3を参照して説明した待ち行列マネージャなど、マネージャまたは他の監視プロセスは、全ての接続された顧客アプリケーション・プログラムに対し、次にアプリケーションがAPI呼び出しを行うとき、より新しいまたは古いバージョンなど、ライブラリ・ソフトウエアの異なるバージョンを使うよう命令することができる。上記に換えて、他のルール、タイミング条件などによって、何時ソフトウエア・バージョン修正を実施するかを命令することもできる。
【0062】
プログラム固有ライブラリ・バージョンの制御
図5を参照すると、動的ソフトウエア・バージョン選択を実施するためのシステム500の概略図が示されており、該システムは、動的ソフトウエア・バージョン選択を、どのプログラムを新規/異なるバージョンに移行しどれは移行すべきでないかの一部の制御を可能にする「プログラム固有」制御をサポートするように拡張している。システム500は、一般に、ソフトウエア・コンポーネント502および関連するバインディング・ライブラリ504を包含する。バインディング・ライブラリ504は、ローダ・コンポーネント506およびバインディング・コンポーネント508を包含する、2つの別個のコンポーネント中に実装されている。この点に関し、ソフトウエア・コンポーネント502、バインディング・ライブラリ504、ローダ・コンポーネント506、およびバインディング・コンポーネント508は、図1〜4のいずれか一つ以上を参照して説明した同名のコンポーネントと実質上類似である。
【0063】
通例、全てのソフトウエア・コンポーネント502は、それらがアプリケーション・プログラミング・インタフェース呼び出しを実行する際、ライブラリの指定現行バージョン、通常最新バージョン、に移行するようにされていることが多い。しかしながら、本発明のさらなる態様によれば、どのプログラムが現行バージョンに移行すべきか、および移行すべきでない特定のプログラムがあるかどうかについての制御が提供される。
【0064】
図示のように、図5には、共用ライブラリ・バージョン・テーブル530を包含させることができ、これは図4を参照して説明した共用ライブラリ・バージョン・テーブル430と類似である。しかしながら、この例示的実装は、共用プログラム・バージョン・テーブル540をさらに含む。共用プログラム・バージョン・テーブル540は、複数のソフトウエア・コンポーネント、および各アプリケーションに対する対応ライブラリ・バージョンの情報を格納している。例えば、図示のように、第一ソフトウエア・プログラム「UPDATE」はライブラリ・バージョン2を用いて設定されている。また一方、ソフトウエア・プログラム「REPORT」はライブラリ・バージョン3を使って設定されている。
【0065】
しかして、ローダ・コンポーネント506を呼び出すソフトウエア・コンポーネント502がソフトウエア・プログラムUPDATEである場合、ローダ・コンポーネント506は(対応する決定ロジックに関連付けられた適切なAPIによってトリガされたとき)、その呼び出しを処理する前に、ライブラリ・バージョン2がロードされていることを確実にする。同様に、ローダ・コンポーネント506を呼び出すソフトウエア・コンポーネント502がプログラムREPORTである場合、ローダ・コンポーネント506は(対応する決定ロジックに関連付けられた適切なAPIによってトリガされたとき)、その呼び出しを処理する前に、ライブラリ・バージョン3がロードされていることを確実にする。共用プログラム・バージョン・テーブル540を中央制御することによって、管理コンポーネントは、何時、個々のプログラムが新規のまたは異なるライブラリ・バージョンへの移行を開始すべきかを決定することができる。
【0066】
共用プログラム・バージョン・テーブル540は、プログラム名称(またはプログラム名称に合致するパターンなど)をライブラリ・バージョンにマップする。共用プログラム・バージョン・テーブル540は、例えば図3の例の中の待ち行列マネージャ328などの適切な管理プロセス、または他の任意の適切な監視プロセスによって投入される。さらに、共用プログラム・バージョン・テーブル540は、関連付けられた特定のライブラリ・バージョンを有する、プログラムの名称または名称パターンを包含する。ローダ・コンポーネント506は、バージョンのアップグレードまたはダウングレードの決定を行うに先立って、プログラム・ライブラリ・バージョン・テーブル中の呼び出し側プログラムの名称を探し出す。
【0067】
ローダ・コンポーネント506のプログラム固有の決定ロジックを拡張し、例えば、最新の利用可能なまたは現行のライブラリ・バージョンを記述するワイルドカードまたは他の適切な言語を使用するなどして、全てのプログラム名称がマッチする一つの列を持たせることによって、全プログラムを移行させることができる。この実装では、プログラム・ライブラリ・バージョン・テーブル中の少なくとも一つの列で全プログラムがマッチすることを要件とすることもできようし、あるいは、例えば、プログラム名称がいずれかの列でマッチしない場合は、所定のまたは以前のバージョンに単にデフォルトする実装とすることもできよう。
【0068】
カプセル化
本発明のさまざまな態様を、動的にロードされるライブラリを用いるソフトウエア実装を参照しながら説明してきた。この点に関し、慣例的にプログラム群を用いるソフトウエア実装は、従来式のプログラム・フォーマットでなく、動的ロードが可能なライブラリ中にカプセル化することができる。一旦カプセル化したならば、本明細書の図1〜5を参照してさらに詳しく説明したように、さまざまなソフトウエア修正技法を利用することができる。例えば、アプリケーションに対するオンライン・トランザクション処理(OLTP)システムの大部分(または全部)を、プログラムでなく、動的にロード可能なライブラリ中にカプセル化することによって、動的ソフトウエア・バージョン管理を実施することが可能になる。これが実施されれば、当該OLTPシステムと相互作用するプログラムを停止することなく、新規のOLTPソフトウエアをロードし使用することができる。OLTPシステムと関係のないプログラム機能は全く中断されることなく、新規のソフトウエアを用いてOLTPシステムに関係するプログラム機能がアップグレードされる。
【0069】
クライアント側環境および多くのサーバ側環境でのダウンタイム・ゼロのアップグレードのための、動的ソフトウエア・ライブラリ選択は、顧客のビジネス・プログラムまたはOLTPシステム自体によって使用されるライブラリのセットとして、OLTP機能を具現することによって実施することができる。なお、本明細書でさらなる詳細を説明したように、ダウンタイム・ゼロのアップグレードサポートは、プログラムが、それら自体が選択した時に、OTLPシステムから論理的に切断し、既存のOLTPソフトウエア(ライブラリ)を動的にアンロードし、新規のOLTPソフトウエア(ライブラリ)を動的にロードし、その新規のソフトウエアを使ってOLTPシステムに再接続することを可能にすることによって達成される。
【0070】
厳密にいえば、旧ライブラリのアンローディングおよび新規ライブラリのローディングの実施の間、サービスは中断されるが、この中断は短く、このステップが行われる特定のクライアント・プロセスに限定される。さらに、使われるライブラリ/ソフトウエア・バージョンの選択は、もはやオペレーティング・システムのオペレーションではなく、OLTPソフトウエア・パッケージの直接制御下に置かれる。OLTPソフトウエアは、何であれ必要な妥当性確認を実施することができ、単に基盤のオペレーティング・システムに頼って可能なよりも、もっと高度なローディング技法および方策を実施することができる。加えて、この技法を使って以前のソフトウエア・レベルにフォールバックすることも可能である。
【0071】
例示的コンピュータ・システム
図6を参照すると、本発明の態様による、コンピュータ・システム602として実装されたデータ処理システム600のブロック図が描かれている。コンピュータ・システム602は、数多くの汎用または特殊用途コンピューティング・システム環境または構成による作動が可能である。さらに、コンピュータ・システム602は、コンピュータ・システムによって実行されるプログラム・モジュールなど、コンピュータ・システムが実行可能な命令の一般的なコンテキストで表すことができる。一般に、プログラム・モジュールには、特定のタスクを遂行し、または特定の抽象データ型を実装する、ルーティン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含めることができる。
【0072】
コンピュータ・システム602のコンポーネントには、以下に限らないが、対称マルチプロセッサ(SMP:symmetric multiprocessor)システムなど一つ以上のプロセッサまたは処理ユニット604、あるいはシステム・バスに接続された複数のプロセッサを包含する他の構成を含めることができる。上記に換えて単一のプロセッサを使うことも可能である。コンピュータ・システム602のコンポーネントは、システム・メモリ606、およびシステム・メモリ606を含め、さまざまなシステム・コンポーネントをプロセッサ(群)604に連結するバス608をさらに包含する。メモリ606には、ランダム・アクセス・メモリ(RAM:random access memory)610もしくはキャッシュ・メモリ612またはその両方など、揮発性メモリの形で、コンピュータ・システム可読媒体を含めることができる。また、メモリ606には、例えば一つ以上のハード・ドライブなどの記憶システム614など、他の着脱可能型/固定型、揮発性/不揮発性のコンピュータ・システム記憶媒体も含めることができる。さらに、メモリ606には、内部に具現されたコンピュータ可読プログラム・コードを有する、少なくとも一つのコンピュータ可読記憶媒体616を含めることができ、該コンピュータ可読プログラム・コードは、本明細書で詳しく説明した本発明の実施形態の機能を実行するよう構成されたコンピュータ可読プログラム・コードを含む。
【0073】
また、コンピュータ・システム602には、バス608を介してプロセッサ604と通信する、入力/出力(I/O:input/output)インタフェース(群)618もしくはネットワーク・アダプタ620またはその両方を含めることができる。同様に、コンピュータ・システム602には、外部デバイス622もしくはディスプレイ624またはその両方とインタフェース接続することもできる。他のハードウエアもしくはソフトウエア・コンポーネントまたはその両方を、コンピュータ・システム602と連結して用いることができよう。
【0074】
このデータ処理システムには、例えば、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシン・コーポレーションの製品であり、アドバンスト・インタラクティブ・エグゼクティブ(AIX(IBM社の登録商標):Advanced Interactive Executive)オペレーティング・システムを搭載しているIBM(IBM社の登録商標)RS/6000(IBM社の登録商標)システムを含めることができる。オペレーティング・システムとつなげて、Javaなどのオブジェクト指向プログラミング・システムを実行し、データ処理システム上で実行されているJavaプログラムまたはアプリケーションからオペレーティング・システムへの呼び出しを行うことができる。
【0075】
当業者ならよく理解するであろうように、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現することができる。従って、本発明の態様は、全体がハードウエアの実施形態、全体がソフトウエアの実施形態(ファームウエア、常駐ソフトウエア、マイクロコードなどを含む)、あるいは、一般に本明細書では全て「回路」、「モジュール」、または「システム」といわれる、ソフトウエアおよびハードウエア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の態様は、内部に具体化されたコンピュータ可読プログラム・コードを有する一つ以上のコンピュータ可読記憶媒体中に具現されたコンピュータ・プログラム製品の形を取ることもできる。
【0076】
一つ以上のコンピュータ可読媒体の任意の組み合わせを用いることができる。このコンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的な、または半導体の、システム、装置、もしくはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例(非包括的リスト)には、一つ以上の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read−only memory)、消去可能プログラム可能読み取り専用メモリ(EPROM(erasable programmable read−only memory)またはフラッシュ・メモリ)、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disc read−only memory)、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが含まれよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体とすることができる。
【0077】
コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現されたコンピュータ可読のプログラム・コードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、さまざまな形態の任意の形を取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではないが、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを通信、伝播、または伝送が可能な任意のコンピュータ可読媒体であり得る。
【0078】
コンピュータ可読媒体中に具現されたプログラム・コードは、以下に限らないが、無線、有線、光ファイバ・ケーブル、RFなど、またはこれらの任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【0079】
本発明の態様に対するオペレーションを実行するためのコンピュータ・プログラム・コードは、Java(R)、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および、“C”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合せで記述することができる。このプログラム・コードは、全体をユーザのコンピュータで、一部をユーザのコンピュータで、スタンドアロン・ソフトウエア・パッケージとして実行することができ、一部をユーザのコンピュータで他の部分を遠隔コンピュータで、または全体を遠隔のコンピュータまたはサーバで実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは(例えばインターネット・サービス・プロバイダを使いインターネットを介し)外部のコンピュータへの接続を行うことができる。
【0080】
本発明の実施形態による方法、装置(システム)およびコンピュータ・プログラム製品のフロー・チャート説明図もしくはブロック図またはその両方を参照しながら本発明の態様を以下に説明する。フロー・チャート説明図もしくはブロック図またはその両方の各ブロック、および、フロー・チャート説明図もしくはブロック図またはその両方中のブロックの組み合せは、コンピュータ・プログラム命令によって実行可能であることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに供給し、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フロー・チャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群/処理群を実施するための手段を生成するようにすることができる。
【0081】
また、これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フロー・チャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施する命令群を包含する製品を形成するようにすることができる。
【0082】
同様に、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、または他のデバイス上で一連のオペレーション・ステップを実施させてコンピュータ実装のプロセスを生成し、これらコンピュータまたは他のプログラム可能装置で実行されるこれらの命令が、フロー・チャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群/処理群を実施するためのプロセスを提供するようにすることもできる。
【0083】
図中のフロー・チャートおよびブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、およびオペレーションを例示している。この点に関し、フロー・チャートまたはブロック図中の各ブロックは、所定の論理機能(群)を実行するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図に記載された順序を外れて行われることがあり得ることに留意すべきである。例えば、連続して示された2つのブロックが、実際にはほぼ同時に実行されることがあり、関与する機能によっては、時には、これらブロックが逆の順序で実行されることもあり得る。また、ブロック図もしくはフロー・チャート説明図またはその両方の各ブロック、およびブロック図もしくはフロー・チャート説明図またはその両方中のブロックの組み合わせは、特定の機能または処置を実施する、特殊用途のハードウエア・ベースのシステム、または特殊用途のハードウエアとコンピュータ命令との組み合わせによって実装可能なことにも留意すべきである。
【0084】
本明細書で使用する用語は、特定の実施形態を説明する目的のためだけのものであり、本発明を限定することは意図されていない。本明細書で用いられる、単数形「ある(a、an)」、および「該(the)」は、文脈上明確に別途に示されていなければ、複数形も同じように含むことを意図されている。さらに、本明細書で用いられる「含む(comprise)」または「含んでいる(comprising)」もしくはその両方の用語は、述べられた機能、完全体、ステップ、オペレーション、エレメント、またはコンポーネント、あるいはこれらの組み合わせの存在を特定するが、一つ以上の他の機能、完全体、ステップ、オペレーション、エレメント、コンポーネント、またはこれらの群、もしくは上記の組み合わせの存在または追加を排除するものでないことがさらに理解されよう。
【0085】
添付の請求項中の全ての手段またはステップに加え機能エレメントの、対応する構造、材料、処置および同等物は、具体的に請求された他の請求エレメントと組み合わせて機能を遂行するための、一切の構造、材料または処置を包含することが意図されている。本発明の記述は、例示および説明目的で提示されたもので、網羅的であること、または本発明を開示した形態に限定することは意図されていない。当業者には、本発明の範囲および精神から逸脱することのない多くの修改および変形が明白であろう。本発明の諸態様は、本発明の原理および実際的な応用を最善に説明し、他の当業者が、意図する特定の用途に適したさまざまな修改を加えたさまざまな実施形態のため、本発明を理解できるようにするため、選択し説明したものである。
【符号の説明】
【0086】
100 システム
102 ソフトウエア・コンポーネント
104 バインディング・ライブラリ
106 ローダ・コンポーネント
108 バインディング・コンポーネント
バインディング・コンポーネント・バージョン1
ライブラリ・バージョン1
バインディング・コンポーネント・バージョンN
ライブラリ・バージョンN
110 メモリ
112 情報源

【特許請求の範囲】
【請求項1】
動的ソフトウエア・バージョン選択を実施する方法であって、
バインディング・ライブラリをソフトウエア・コンポーネントに関連付けるステップであって、前記バインディング・ライブラリはローダ・コンポーネントおよびバインディング・コンポーネントを含み、
前記ローダ・コンポーネントは前記ソフトウエア・コンポーネントと前記バインディング・コンポーネントとの間の媒介体としての役割をし、
前記バインディング・コンポーネントはソフトウエア・コンポーネント側のロジックを含む、
前記関連付けるステップと、
前記バインディング・コンポーネントから処理デバイスのメモリ中にライブラリをロードするためのトリガを、前記ローダ・コンポーネントによって認識するステップと、
要求されたライブラリの望ましいバージョンを前記ローダ・コンポーネントによって選択するステップであって、前記ライブラリの前記望ましいバージョンは、前記バインディング・ライブラリの前記バインディング・コンポーネントに関連付けられた、前記ライブラリの少なくとも2つのバージョンから選択される、前記選択するステップと、
前記関連付けられたソフトウエア・コンポーネントを再起動する必要なしに、前記ライブラリの前記望ましいバージョンを、コンピュータ処理システムのメモリ中にロードするステップと、
を含む前記方法。
【請求項2】
前記ソフトウエア・コンポーネントからのソフトウエア・コンポーネント・プログラム・インタフェース呼び出しを、前記ローダ・コンポーネントによって受信するステップと、
メモリ中にロードされた前記ライブラリの前記望ましいバージョンの対応するソフトウエア・コンポーネント・プログラミング・インタフェースに、前記受信された呼び出しを転送するステップと、
をさらに含む、請求項1に記載の方法。
【請求項3】
前記要求されたライブラリの望ましいバージョンを、前記ローダ・コンポーネントによって選択するステップは、
ファイル・システム・シンボリック・リンクを使って、前記要求されたライブラリの前記望ましいバージョンを、前記ローダ・コンポーネントによって選択するステップ、
を含む、請求項1に記載の方法。
【請求項4】
前記要求されたライブラリの望ましいバージョンを、前記ローダ・コンポーネントによって選択するステップは、
前記要求されたライブラリの前記望ましいバージョンを、前記選択を命令する制御ファイルを使って、前記ローダ・コンポーネントによって選択するステップ、
を含む、請求項1に記載の方法。
【請求項5】
前記ライブラリのバージョンを識別するためライブラリ・バージョン・テーブルを用いるステップと
前記ライブラリの現行バージョンを追跡するライブラリ・バージョン変数を格納するステップと、
をさらに含み、
前記要求されたライブラリの望ましいバージョンを、前記ローダ・コンポーネントによって選択するステップは、
前記ライブラリ・バージョン変数の値を、前記ローダ・コンポーネントによって読み取るステップと、
前記ライブラリ・バージョン変数の前記値に基づいて前記ライブラリの前記望ましいバージョンを選択するステップと、
を含む、請求項1に記載の方法。
【請求項6】
前記バインディング・ライブラリのローダ・コンポーネントを変えることなく、前記ライブラリの更新されたバージョンを使って、前記バインディング・ライブラリの前記バインディング・コンポーネントを更新するステップと、
前記ローダ・コンポーネントを介して前記ライブラリの前記更新されたバージョンをロードするステップであって、前記ソフトウエア・コンポーネントは前記ローディングの間停止せず、前記ロードするステップは、
前記バインディング・コンポーネントの前のライブラリ・バージョンを切断するステップ、および
前記ライブラリの前記更新されたバージョンを接続するステップ、
を含む、前記ロードするステップと、
前記ソフトウエア・コンポーネントから、前記ライブラリの前記ロードされた更新バージョンに、前記ローダ・コンポーネントによって呼び出しを転送するステップと、
をさらに含む、請求項1に記載の方法。
【請求項7】
前記バインディング・コンポーネントから処理デバイスのメモリ中にライブラリをロードする要求を、前記ローダ・コンポーネントによって受信するステップは、
前記ソフトウエア・コンポーネントから切断呼び出しを受信するステップと、
前記ソフトウエア・コンポーネントから接続呼び出しを受信するステップと、
を含む、請求項1に記載の方法。
【請求項8】
前記バインディング・コンポーネントから処理デバイスのメモリ中にライブラリをロードする要求を、前記ローダ・コンポーネントによって受信するステップは、
前記ソフトウエア・コンポーネントからの一切の呼び出しを受信するステップ、
を含む、請求項1に記載の方法。
【請求項9】
対応するプログラムに対する特定のライブラリ・バージョンを格納するプログラム・バージョン・テーブルを用いるステップをさらに含み、
前記ローダ・コンポーネントによってトリガを認識するステップは、識別されたソフトウエア・コンポーネントからアプリケーション・プログラミング・インタフェース呼び出しを受信するステップを含み、
前記要求されたライブラリの望ましいバージョンを、前記ローダ・コンポーネントによって選択するステップは、ライブラリ・バージョン変数の値に基づいて前記ライブラリの前記望ましいバージョンを選択するステップを含む、
請求項1に記載の方法。
【請求項10】
動的ソフトウエア・バージョン選択を遂行するためのコンピュータ・プログラムであって、
内部に具現されたコンピュータ可読のプログラム・コードを有する有形のコンピュータ可読記憶媒体を含み、前記コンピュータ可読プログラム・コードは、
バインディング・ライブラリをソフトウエア・コンポーネントに関連付けるよう構成されたコンピュータ可読プログラム・コードであって、前記バインディング・ライブラリは、ローダ・コンポーネントおよびバインディング・コンポーネントを含み、
前記ローダ・コンポーネントは前記ソフトウエア・コンポーネントと前記バインディング・コンポーネントとの間の媒介体としての役割をし、
前記バインディング・コンポーネントはソフトウエア・コンポーネント側のロジックを含む、
前記コンピュータ可読プログラム・コードと、
前記バインディング・コンポーネントから処理デバイスのメモリ中にライブラリをロードするためのトリガを、前記ローダ・コンポーネントによって認識するよう構成されたコンピュータ可読プログラム・コードと、
要求されたライブラリの望ましいバージョンを、前記ローダ・コンポーネントによって選択するよう構成されたコンピュータ可読プログラム・コードであって、前記ライブラリの前記望ましいバージョンは、前記バインディング・ライブラリの前記バインディング・コンポーネントに関連付けられた、前記ライブラリの少なくとも2つのバージョンから選択される、前記コンピュータ可読プログラム・コードと、
前記関連するソフトウエア・コンポーネントを再起動する必要なしに、前記ライブラリの前記望ましいバージョンを、コンピュータ処理システムのメモリ中にロードするよう構成されたコンピュータ可読プログラム・コードと、
を含む、前記コンピュータ・プログラム。
【請求項11】
前記ソフトウエア・コンポーネントからのソフトウエア・コンポーネント・プログラム・インタフェース呼び出しを、前記ローダ・コンポーネントによって受信するよう構成されたコンピュータ可読プログラム・コードと、
メモリ中にロードされた前記ライブラリの前記望ましいバージョンの対応するソフトウエア・コンポーネント・プログラミング・インタフェースに、前記受信された呼び出しを転送するよう構成されたコンピュータ可読プログラム・コードと、
をさらに含む、請求項10に記載のコンピュータ・プログラム。
【請求項12】
前記要求されたライブラリの望ましいバージョンを、前記ローダ・コンポーネントによって選択するよう構成された前記コンピュータ可読プログラム・コードは、
ファイル・システム・シンボリック・リンクを使って、前記要求されたライブラリの前記望ましいバージョンを、前記ローダ・コンポーネントによって選択するよう構成されたコンピュータ可読プログラム・コード、
を含む、請求項10に記載のコンピュータ・プログラム。
【請求項13】
前記要求されたライブラリの望ましいバージョンを、前記ローダ・コンポーネントによって選択するよう構成された前記コンピュータ可読プログラム・コードは、
前記要求されたライブラリの前記望ましいバージョンを、前記選択を命令する制御ファイルを使って、前記ローダ・コンポーネントによって選択するよう構成されたコンピュータ可読プログラム・コード、
を含む、請求項10に記載のコンピュータ・プログラム。
【請求項14】
前記ライブラリのバージョンを識別するためライブラリ・バージョン・テーブルを用いるよう構成されたコンピュータ可読プログラム・コードと、
前記ライブラリの現行バージョンを追跡するライブラリ・バージョン変数を格納するよう構成されたコンピュータ可読プログラム・コードと、
をさらに含み、
前記要求されたライブラリの望ましいバージョンを、前記ローダ・コンポーネントによって選択するよう構成された前記コンピュータ可読プログラム・コードは、
前記ライブラリ・バージョン変数の値を、前記ローダ・コンポーネントによって読み取るよう構成されたコンピュータ可読プログラム・コードと、
前記ライブラリ・バージョン変数の前記値に基づいて前記ライブラリの前記望ましいバージョンを選択するよう構成されたコンピュータ可読プログラム・コードと、
を含む、請求項10に記載のコンピュータ・プログラム。
【請求項15】
前記バインディング・ライブラリのローダ・コンポーネントを変えることなく、前記ライブラリの更新されたバージョンを使って、前記バインディング・ライブラリの前記バインディング・コンポーネントを更新するよう構成されたコンピュータ可読プログラム・コードと、
前記ローダ・コンポーネントを介して前記ライブラリの前記更新されたバージョンをロードするよう構成されたコンピュータ可読プログラム・コードであって、前記ソフトウエア・コンポーネントは前記ローディングの間停止せず、前記ロードするよう構成されたコンピュータ可読プログラム・コードは、
前記バインディング・コンポーネントの前のライブラリ・バージョンを切断するよう構成されたコンピュータ可読プログラム・コード、および
前記ライブラリの前記更新されたバージョンを接続するよう構成されたコンピュータ可読プログラム・コード、
を含む、前記ロードするよう構成されたコンピュータ可読プログラム・コードと、
前記ソフトウエア・コンポーネントから、前記ライブラリの前記ロードされた更新バージョンに、前記ローダ・コンポーネントによって呼び出しを転送するよう構成されたコンピュータ可読プログラム・コードと、
をさらに含む、請求項10に記載のコンピュータ・プログラム。
【請求項16】
前記バインディング・コンポーネントから処理デバイスのメモリ中にライブラリをロードする要求を、前記ローダ・コンポーネントによって受信するよう構成されたコンピュータ可読プログラム・コードは、
前記ソフトウエア・コンポーネントから切断呼び出しを受信するよう構成されたコンピュータ可読プログラム・コードと、
前記ソフトウエア・コンポーネントから接続呼び出しを受信するよう構成されたコンピュータ可読プログラム・コードと、
を含む、請求項10に記載のコンピュータ・プログラム。
【請求項17】
前記バインディング・コンポーネントから処理デバイスのメモリ中にライブラリをロードする要求を、前記ローダ・コンポーネントによって受信するよう構成された前記コンピュータ可読プログラム・コードは、
前記ソフトウエア・コンポーネントからの一切の呼び出しを受信するよう構成されたコンピュータ可読プログラム・コード、
を含む、請求項10に記載のコンピュータ・プログラム。
【請求項18】
新しくロードされたバインディング・コンポーネントに対する必要に応じ、内部状態データ構造をそれらの現在の形式から新規形式に移行するよう構成されたコンピュータ可読プログラム・コードをさらに含む、請求項10に記載のコンピュータ・プログラム。
【請求項19】
前記移行を実施するために必要な前記ロジックは、前記バインディング・コンポーネントの各バージョンによって提供される、請求項18に記載のコンピュータ・プログラム。
【請求項20】
対応するプログラムに対する特定のライブラリ・バージョンを格納するプログラム・バージョン・テーブルを用いるよう構成されたコンピュータ可読プログラム・コードをさらに含み、
前記ローダ・コンポーネントによってトリガを認識するよう構成された前記コンピュータ可読プログラム・コードは、識別されたソフトウエア・コンポーネントからアプリケーション・プログラミング・インタフェース呼び出しを受信するよう構成されたコンピュータ可読プログラム・コードを含み、
前記要求されたライブラリの望ましいバージョンを前記ローダ・コンポーネントによって選択するよう構成された前記コンピュータ可読プログラム・コードは、ライブラリ・バージョン変数の値に基づいて前記ライブラリの前記望ましいバージョンを選択するよう構成されたコンピュータ可読プログラム・コードを含む、
請求項10に記載のコンピュータ・プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2012−141973(P2012−141973A)
【公開日】平成24年7月26日(2012.7.26)
【国際特許分類】
【出願番号】特願2011−277481(P2011−277481)
【出願日】平成23年12月19日(2011.12.19)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【Fターム(参考)】