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

【発明の詳細な説明】
【技術分野】
【０００１】
本発明の各種態様は一般にソフトウエア・バージョン選択に関し、具体的には、バージョン変更の間、サポートされているプロセスまたはサービスに最小限の中断または全く中断なしに、ソフトウエア・バージョンを動的に選択することに関する。
【背景技術】
【０００２】
ミドルウエアは、一つ以上のマシン上で複数のプロセスが実行され相互作用することを可能にする。それ故、ミドルウエアは、トランザクション・システム、およびメッセージング−待ち行列システムなどの複雑な分散型アプリケーションのサポートにおいて有用である。一例として、ミドルウエアは、オンライン・トランザクション処理（ＯＬＴＰ：Ｏｎｌｉｎｅ  Ｔｒａｎｓａｃｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ）システムの形で、主要なビジネス・プロセスおよびサービスをサポートするために多く使われている。例えば、受注システムの中で、オンライン・トランザクション処理システムを活用し、新規データの取り入れ、既存データの更新、データ入力および取り出しの処理などを行うトランザクション指向のアプリケーションを促進し管理することができる。別の例として、メッセージ待ち行列システムの形でミドルウエアを活用し、必ずしも通信するプログラム間の専用の論理接続の必要なく、待ち行列にアプリケーション固有のメッセージを書き込み、これからメッセージを取り出すことによって、プログラムの間の通信を容易化することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
最近のＯＬＤＰシステム、およびメッセージ−待ち行列システムなどを含め、ミドルウエアは、通常、ネットワークにまたがるトランザクションをサポートし、異なるエンティティにより制御される一つ以上のドメインを横断することができる。しかして、ＯＬＴＰアプリケーション、およびメッセージ−待ち行列アプリケーションなどのミドルウエア・アプリケーションは、通常、ネットワーク中の相異なるコンピュータ・プラットフォーム上でトランザクションの実行を可能にする、クライアント／サーバ処理、およびブローカリング（仲介）を用いて実装される。従って、かかるミドルウエア・システムのソフトウエアのアップグレードを行うには、通常、ソフトウエアのインストールおよび構成を可能にするため、必要に応じアプリケーションを閉じ、関連するアプリケーションをオフラインにする必要が生じる。
【課題を解決するための手段】
【０００４】
本発明の態様によれば、バインディング（結合）ライブラリをソフトウエア・コンポーネントに関連付けることによって、動的ソフトウエア・バージョン選択が遂行される。バインディング・ライブラリは、ローダ・コンポーネントおよびバインディング・コンポーネントを含み、ローダ・コンポーネントは、ソフトウエア・コンポーネントとバインディング・コンポーネントとの間の媒介体としての役割をし、バインディング・コンポーネントは、ソフトウエア・コンポーネント側のロジックを含む。動的ソフトウエア・バージョン選択は、バインディング・コンポーネントから処理デバイスのメモリ中にライブラリをロードするためのトリガを、ローダ・コンポーネントによって認識すること、およびライブラリの望ましいバージョンを、ローダ・コンポーネントによって選択することをさらに含み、ライブラリの望ましいバージョンは、バインディング・ライブラリのバインディング・コンポーネントに関連付けられたライブラリの少なくとも２つのバージョンから選択される。さらに、動的ソフトウエア・バージョン選択は、関連付けられたソフトウエア・コンポーネントを再起動する必要なしに、ライブラリの望ましいバージョンをコンピュータ処理システムのメモリ中にロードすることを含む。例えば、ライブラリの望ましいバージョンをロードするための、ローダ・コンポーネントによる決定は、制御プロセスによって投入されたライブラリ・バージョン・テーブルまたは他のソースによって制御することができる。
【図面の簡単な説明】
【０００５】
【図１】本発明の態様による、動的ソフトウエア・バージョン選択を実施するためのシステムの概略説明図である。
【図２】本発明の態様による、動的ソフトウエア・バージョン選択を実施するための例示的アプローチを示すフロー・チャートである。
【図３】本発明の態様による、メッセージング・システム環境の例示的コンテキストにおいて動的ソフトウエア・バージョン選択を実施するためのシステムの概略説明図である。
【図４】本発明の態様による、共用ライブラリ・バージョン・テーブルを用いて、動的ソフトウエア・バージョン選択を実施するためのシステムの概略説明図である。
【図５】本発明の態様による、共用ライブラリ・バージョン・テーブルおよび共用プログラム・バージョン・テーブルを用いて、動的ソフトウエア・バージョン選択を実施するためのシステムの概略説明図である。
【図６】本明細書で詳しく説明する、本発明のさまざまな態様による機能を実施するための、コンピュータ可読記憶媒体を備えたコンピュータ・システムのブロック図である。
【発明を実施するための形態】
【０００６】
本発明のさまざまな態様によって、ソフトウエア・システムを停止することなく、または他のサービス中断をもたらすことなく、新規ソフトウエアを使ってソフトウエア・システムを修正することを可能にする技法を提供する。ソフトウエア修正には、例えば、ソフトウエア・アップグレードの実施、以前のソフトウエア・バージョンへの復旧、ソフトウエア・バージョンのリロード、ソフトウエア・バージョンの修理または補修などが含まれる。これにより、サービスの中断なく、例えば既知の問題の修正処置もしくは新しい機能またはその両方を包含し、部分的に、サービス・レベルなどソフトウエアの異なるバージョンを使っている可能性のある、新規ソフトウエアにアップグレードができるソフトウエア・システムを提供する。また、ソフトウエア・システムを以前のバージョンに逆グレードすることもできる。さらに、クライアント側およびサーバ側のシステムの両方を新規ソフトウエアに修正することもできる。
【０００７】
さらに、本明細書で説明する本発明のさまざまな態様によって、連続的に実行されているプロセス内の、アプリケーション・プログラミング・インタフェース（ＡＰＩ：ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）境界におけるバージョン化された実装を、関連するソフトウエア・コードに対してプロセスを再起動する必要がないように管理する仕方を提供する。プロセスを再起動せずに更新を実装するこの能力は、プロセスが、例えば顧客のアプリケーションなど、ソフトウエア修正を実行するため備えられた更新メカニズムの制御の下にない第三者のアプリケーションの場合であっても遂行することができる。しかして、ネイティブ・コード・ライブラリの実行時の更新および修正が容易に実装される。また、この更新メカニズムは、例えば動的結合ライブラリを利用するシステムにおいて、実行中のプロセスの下での機能的なライブラリ・バージョンの切り替えを可能にするための動的な内部状態処理を実行することができる。
【０００８】
さらに、本発明の態様は、ライブラリに格納され得るソフトウエア・コードをどのように何時アップグレード、ダウングレード、または別途に置き換えるかなど、移行の決定を行い制御する能力を促進する更新メカニズムを提供する。かくのごとく、本更新メカニズムは、ソフトウエア・バージョン修正プロセスおよび決定におけるフレキシビリティを提供する、ダイナミックな動きをとることができる。さらに、本更新メカニズムは、例えば、プログラムごとのベースで、または他の選択基準に基づいて、選択的ソフトウエア・バージョン設定を実施することができる。
【０００９】
本発明のまださらなる態様によれば、更新メカニズムには、ソフトウエア・コンポーネント（呼び出しコンポーネント）に関連付けられたバインディング・ライブラリを含めることができる。かくして、呼び出しコンポーネントは、随時にバインディング・ライブラリを呼び出し、アプリケーション・プログラミング・インタフェース（ＡＰＩ）呼び出しを行う。バインディング・ライブラリは、ローダ・コンポーネントおよびバインディング・コンポーネントとして実装される。ローダ・コンポーネントは、ソフトウエア・コンポーネントからの呼び出しを受信し、同等なＡＰＩ呼び出しをバインディング・コンポーネントに発行する媒介体の役割をする。バインディング・コンポーネントは、ライブラリの少なくとも２つのバージョンを包含する、ソフトウエア・コンポーネント側のロジックを含む。各ライブラリ・バージョンは、呼び出しコンポーネントからのアプリケーション・プログラミング・インタフェース呼び出しに応答するためのロジックを包含する。
【００１０】
ローダ・コンポーネントは、トリガを認識または別途に検知し、それに応じて、決定ロジックを実行する。決定ロジックは、新規ライブラリ・バージョンの有無をチェックし、ロードすべきライブラリの望ましいバージョンを検知し、ローダ・コンポーネントに、バインディング・コンポーネントからライブラリの望ましいバージョンを選択し、処理デバイスなどのメモリ中にロードするよう命令することができる。メモリ中にロードされたライブラリのバージョンを置き換える場合、旧ライブラリ・バージョンのアンローディングおよび新規ライブラリ・バージョンのローディングは、関連するソフトウエア・コンポーネントの再起動の必要なくして実施される。
【００１１】
例として、第一実施例において、例えば接続／切断（または類似の）ＡＰＩなど選択ＡＰＩ呼び出しだけが、ライブラリ・バージョンをリロードさせる決定ロジックを有する。しかして、ローダ・コンポーネントは、関連するソフトウエア・コンポーネントから、例えば接続および切断ＡＰＩ呼び出しなど特定の命令または命令群を受信するのに応じて、トリガされ、メモリ中にロードされたライブラリのバージョンをチェックし、必要な場合そのバージョンを更新することができる。本明細書でさらに詳しく説明するように、この実施例において、ライブラリ・バージョンのリロードを実施するために状態移行をする必要はない。
【００１２】
別の実施例として、ローダ・コンポーネントに対する全てのＡＰＩ呼び出しが、決定ロジックを有する。しかして、ローダ・コンポーネントは、関連するソフトウエア・コンポーネントからの一切のＡＰＩ呼び出しを受信するのに応じて、トリガされ、メモリ中にロードされたライブラリのバージョンをチェックし、必要な場合そのバージョンを更新することができる。本明細書でさらに詳しく説明するように、この実施例では状態移行がサポートされなければならない。さらに、ライブラリ・バージョンのチェックをトリガする決定ロジックを、選択ＡＰＩ呼び出しまたは全ＡＰＩ呼び出しのいずれが有するのかに関係なく、ローダ・コンポーネントは、受信されたＡＰＩ呼び出しに応じて、どのプログラムがライブラリ・バージョンを移行するか、どれがしないかを制御可能にする、プログラム・レベルまたはプログラム固有の制御をサポートすることができる。
【００１３】
動的ソフトウエア・バージョン選択
ここで図面、具体的には図１を参照すると、本発明の態様による動的ソフトウエア・バージョン選択を実施するのに適したシステム１００の概略図が示されている。システム１００は、単一の物理的処理デバイスに実装することができる。上記に換えて、システム１００を、ネットワークなどによって通信可能に一緒に接続された複数の物理的処理デバイスに亘って分散させることもできる。この点に関し、本明細書でさらに詳しく説明するように、各処理デバイスには、本発明の態様を実行するためのハードウエアもしくはソフトウエア処理コンポーネントまたはその両方を含めることができる。
【００１４】
図示のように、システム１００は、少なくとも一つのソフトウエア・コンポーネント１０２および関連するバインディング・ライブラリ１０４を含む。ソフトウエア・コンポーネント１０２には、例えば、関連バインディング・ライブラリ１０４など別のコンポーネントのサービスを呼び出す任意のソフトウエアを含めることができる。ソフトウエア・コンポーネント１０２は、例えば、ソフトウエア・アプリケーション、プログラム、オブジェクト、サービス、エージェント、オペレーティング・システムなどとして実装することができる。この点に関し、本明細書では、ソフトウエア・コンポーネント１０２を呼び出しコンポーネント１０２と称することもある。
【００１５】
バインディング・ライブラリ１０４は、ローダ・コンポーネント１０６およびバインディング・コンポーネント１０８を包含する２つのコンポーネント中に実装される。ローダ・コンポーネント１０６は、ソフトウエア・コンポーネント（群）１０２およびバインディング・コンポーネント１０８と相互作用し、バインディング・コンポーネントの関連ライブラリの適正なバージョンをメモリ１１０中にロードする。また、ローダ・コンポーネント１０６は、随意的に一つ以上の任意の情報源１１２と相互作用することができ、この情報源はバージョン管理を実行する際の助力として設けることができる。例えば、本明細書でさらに詳しく説明するように、情報源１１２は、メモリ１１０の中、または別個のファイルとしてのいずれかに格納されたテーブルとして実装することができ、該テーブルは、バインディング・コンポーネント１０８によって維持されている関連ライブラリの現行バージョンを示す。
【００１６】
バインディング・コンポーネント１０８は、ライブラリの一つ以上のバージョンを含み、これには、ライブラリの少なくとも２つのバージョンを包含する、ソフトウエア・コンポーネント側のロジックが入っている。各ライブラリ・バージョンは、呼び出しコンポーネント１０２からのアプリケーション・プログラミング・インタフェース（ＡＰＩ）呼び出しに応答するためのロジックを包含する。本明細書で用いる「ライブラリ」は、一般的で限定のない用語として意図されている。例えば、「ライブラリ」バージョンには、各々にｊａｒファイル、プログラム、モジュール、動的結合ライブラリなどの、ソフトウエアの任意の関連パッケージング・ユニットなどを含めることができる。さらに、各ライブラリ・バージョンは、ネイティブ・コードのライブラリに限定されず、しかしてＪＡＶＡなどの実装により用いることができる
【００１７】
ローダ・コンポーネント１０６は、ソフトウエア・コンポーネント１０２とバインディング・ライブラリ１０４のバインディング・コンポーネント１０８との間の媒介体としての役割をする。この点に関し、ローダ・コンポーネント１０６は、静的にソフトウエア・コンポーネント（群）１０２とリンクする唯一のコンポーネントとすることができる。本発明の態様によれば、ローダ・コンポーネント１０６をライブラリ自体として実装することができる。この例示的実装において、ローダ・コンポーネント１０６は、主として転送ライブラリの機能をする。すなわち、大部分の時間、ローダ・コンポーネント１０６は、ソフトウエア・コンポーネント１０２からＡＰＩ呼び出しを受け、それに応じて、バインディング・ライブラリ１０８に関連付けられた、現在ロードされているライブラリ・バージョン中の同等なＡＰＩを呼び出す。
【００１８】
本発明のさらなる態様によれば、決定ロジックは、ローダ・コンポーネント１０６からバインディング・コンポーネント１０８の適切なライブラリへの転送機能の実行パス中に挿入することができる。どの転送機能が決定ロジックを有すべきでどれが有さざるべきかの選択は、特定の実装の如何により、その例を後記で詳細に説明する。
【００１９】
バインディング・コンポーネント１０８は、ライブラリの一つ以上のバージョンを含む。例えば、図示のように、バインディング・コンポーネント１０８は、あるライブラリの「Ｎ」個のバージョンを含む。前記のＮはライブラリ・バージョンの任意の数を表すことができる。各ライブラリ・バージョンには、例えば、ソフトウエア・コンポーネント１０２が、ミドルウエア・プロセスに関連付けられたＡＰＩ呼び出しを実行するためなど、特定のオペレーションまたは機能を実行するために使うソフトウエア・コンポーネント側のロジックを提供する、動的リンク・ライブラリを含めることができる。例えば、バインディング・コンポーネント１０８には、ソフトウエア・コンポーネント１０２からのＡＰＩ呼び出しを遂行またはこれに別途に応答するロジックを含めることができる。
【００２０】
前述で詳細を述べたように、バインディング・コンポーネント１０８は、さまざまな形で実装することができる。図示のように、ファイル・システムは、複数のバインディング・コンポーネント・バージョンを格納し、各バインディング・コンポーネント・バージョンは関連するライブラリを有する。全ての必要なプログラムおよびコードがライブラリにカプセル化されている場合など、別の例示的実装において、バインディング・コンポーネント１０８には、例えば図３中に示されているような、ライブラリ・バージョンの各々を格納するファイル・システム・ライブラリを含めることができる。上記に換えて、他のバインディング・コンポーネント構成も実装することもできる。
【００２１】
ローダ・コンポーネント１０６は、ソフトウエア・コンポーネント１０２による呼び出しをサポートするのに必要ないかなるロジックも包含していない。それよりも、ローダ・コンポーネント１０６は、バインディング・ライブラリ１０４のバインディング・コンポーネント１０８に関連付けられたライブラリの適正なバージョンを、対応するコンピュータ処理システムのメモリ１１０中に、動的にロードする。ライブラリをロードするプロセスは、関連するソフトウエア・コンポーネントの再起動を必要とせずに達成される。適切なライブラリが選択され、メモリ１１０中にロードされたならば、ローダ・コンポーネント１０６は、ソフトウエア・コンポーネント１０２からの呼び出しを受信し、ソフトウエア・コンポーネント１０２からのものと同等な呼び出しをライブラリからメモリ１１０中にロードされた適切なロジックに転送する。このように、ローダ・コンポーネント１０６はソフトウエア・コンポーネント１０２からの呼び出しをインターセプトし媒介する。ライブラリがメモリ１１０中にロードされたならば、ローダ・コンポーネント１０６は、新規バインディング・ライブラリ・バージョン（または既存だが異なるバージョンのバインディング・ライブラリに戻す命令）の有無を時折チェックする。ローダ・コンポーネント１０６がメモリ１１０中にロードされたライブラリ・バージョンを変更する必要を検知した場合、その変更は、根底にあるソフトウエア・コンポーネント１０２の再起動を必要とせずに実装される。
【００２２】
ある例示的実装において、ローダ・コンポーネント１０６が、現在ロードされているまたは別途に使用されている、バインディング・コンポーネント１０８のライブラリ・バージョンが、最新の利用可能なバインディング・コンポーネント１０８よりも前のレベルであることを検知したときなど、といった状況に基づいて、ローダ・コンポーネント１０６は、メモリ中にロードされたライブラリの現在のバージョンを動的にアンロードし、そのライブラリの最新バージョンをバインディング・コンポーネント１０８からメモリ中に動的にロードすることができる。また、ローダ・コンポーネント１０６は、随意的に、例えば新しく選択されたライブラリ・バージョン中に備えられていることのある、移行ロジックを呼び出し、必要な場合、任意の内部データ構造を、新規のライブラリ・バージョンの必要条件に適合するよう再編成することができる。このように、内部状態の移行は、バインディング・ライブラリ１０４によって、自動的に且つ動的に管理される。ライブラリの新規のバージョンがメモリ中にロードされ、（必要に応じ）内部状態データ構造が移行されたならば、ローダ・コンポーネント１０６は、新規ライブラリを使って、ソフトウエア・コンポーネント１０２からの現在の呼び出し（呼び出しが行われている場合）の処理を完了することができる。
【００２３】
本明細書でさらに詳しく説明するように、ローダ・コンポーネント１０６は、バインディング・コンポーネント１０８からロードする適切なバージョンのライブラリを選択するため、一つ以上の情報源１１２などのリソースを用いることができる。この点に関し、情報源１１２には、バインディング・コンポーネント１０８からの望ましいライブラリを識別するための、ファイル・システム・シンボリック・リンク（例、Ｕｎｉｘ（Ｒ）のようなファイル・システムなど）、制御ファイル、一つ以上のテーブルまたはデータベース（ファイルとして保存またはメモリ１１０中にロードされる）、ポインタ、または他のソースを含めることができる。
【００２４】
本発明のさらなる態様によれば、例えば、マネージャ機能、アドミニストレータ機能、スーパバイザ機能など、共通の制御機能によって、ソフトウエア・バージョン制御を監視または監督することができる。例えば、マネージャは、接続された全てのソフトウエア・コンポーネント１０２が、次にアプリケーションがローダ・コンポーネント１０６に呼び出しを行うとき、望ましいライブラリ・バージョンを使用するように（例えば、ローダ・コンポーネント１０６を介して）命令することができる。また、マネージャは、随時、新規のライブラリ・バージョンを使ってバインディング・コンポーネント１０８を更新することができる。このように、バインディング・ライブラリ１０４は、単独で、もしくは、例えばマネージャまたは監視ロジックなど一つ以上の追加プロセスとの組み合わせで、更新メカニズムを実施する。
【００２５】
本明細書で説明する技法は、バインディング・コンポーネント１０８内のライブラリ・バージョンを介するバインディング・ソフトウエアの動的アップグレード／ダウングレードを可能にするルールまたは他のプロセスによって駆動することができる。さらに、バインディング・ソフトウエアの動的アップグレード／ダウングレードは、顧客アプリケーション・プログラムのサブセットに対しでだけ行うようにしたり、特定のアプリケーションに対して行うようにしたり、または特定の日時に行うようにしたりなどすることができる。
【００２６】
図２を参照すると、フロー・チャートが、本発明のさまざまな態様による、動的ソフトウエア・バージョン選択を遂行するプロセス２００の全体的フローを示している。プロセス２００は、方法、またはハードウエアとソフトウエアとの組み合わせを包含するシステムの一部として実装することができる。例えば、ソフトウエアを物理メモリ・デバイスに格納し、そのソフトウエアが少なくとも一つのプロセッサに処理されるとき、該ソフトウエアが、対応する物理マシンに、図示のプロセス２００によって規定される処置を実行させるようにすることができる。しかして、例えば、プロセス２００は、図１を参照して例示し説明したシステム１００上に実装することができる。さらに、プロセス２００は、内部に具現されたコンピュータ可読のプログラム・コードを有する有形のコンピュータ可読記憶媒体を含むコンピュータ・プログラム製品として実装することもできる。
【００２７】
プロセス２００は、２０２において、バインディング・ライブラリをソフトウエア・コンポーネントに関連付けするステップを含む。バインディング・ライブラリは、ローダ・コンポーネントおよびバインディング・コンポーネントを含み、ローダ・コンポーネントは、ソフトウエア・コンポーネントとバインディング・コンポーネントとの間の媒介体としての役割をし、バインディング・コンポーネントは、ソフトウエア・コンポーネント側のロジックを含む。本発明のある態様によれば、バインディング・ライブラリのリロードが必要であることを「認識」または「判定」するのはローダ・コンポーネントの役割である。この点に関して、ローダ・コンポーネントは、異なるバインディング・ライブラリをロードしなければならないことも認識する。
【００２８】
プロセス２００は、２０４において、ロードされたライブラリ・バージョンの、ローダ・コンポーネントによる検証をトリガするステップをさらに含む。例として、ローダ・コンポーネントは、決定ロジックを実行し、例えば、ルール、条件、または他の情報に基づいて、現在ロードされているライブラリを、例えば、新しいバージョンにアップグレードする、または以前のバージョンに逆グレードするなどの修正をすべきかどうかを決定する。このトリガは、ライブラリ・バージョンの検証をトリガする決定ロジックに関連付らけれた特定のＡＰＩ呼び出しを受信することによって実行される。別の実施例として、ローダ・コンポーネントによって受信される全てのＡＰＩ呼び出しに、それらに関連付けた決定ロジックを持たせることができる。ライブラリがロードされなければ、ローダ・コンポーネントは、メモリ中にロードするライブラリ・バージョンを選択するために、同じルール、条件、または他の情報を用いることができる。
【００２９】
メモリ中にロードされたライブラリのバージョンを修正する必要がない場合、プロセス２００は終了する。必要がある場合、プロセス２００は、２０６において、要求されるライブラリの望ましいバージョンをローダ・コンポーネントによって選択するステップをさらに含む。ライブラリの望ましいバージョンは、バインディング・ライブラリのバインディング・コンポーネントに関連付けられた、ライブラリの少なくとも２つのバージョンから選択することができる。要求されたライブラリの望ましいバージョンは、例えば、ファイル・システム・シンボリック・リンクなどのファイル、選択を命令する制御ファイルなどのファイルを使って選択することができる。別の例として、ローダ・コンポーネントは、テーブルまたは他の情報源を調べて、メモリ中にロードする望ましいバージョンの識別を確認することができる。例として、本プロセスは、例えばローダ・コンポーネントを介しライブラリ・バージョン・テーブルを使って、ライブラリのバージョンを識別することができる。しかして、プロセス２００は、ライブラリの現行バージョンを追跡するライブラリ・バージョン変数を格納することができ、ローダ・コンポーネントがこれにアクセスして利用することができる。このようにして、例えば、ローダ・コンポーネントは、ライブラリ・バージョン変数の値を読み取り、そのライブラリ・バージョン変数の値に基づきライブラリの望ましいバージョンを選択することができる。
【００３０】
プロセス２００は、２０８において、関連するソフトウエア・コンポーネントを再起動する必要なしに、そのライブラリの望ましいバージョンをコンピュータ処理システムのメモリ中にロードするステップをさらに含む。本プロセスには、ライブラリ・バージョンが選択されメモリ中にロードされたならば、ソフトウエア・コンポーネントからのソフトウエア・アプリケーション・プログラム・インタフェース呼び出しを、ローダ・コンポーネントによって受信するステップと、受信した呼び出しを、メモリ中にロードされたライブラリの望ましいバージョンの対応ソフトウエア・アプリケーション・プログラミング・インタフェースに転送するステップとをさらに含めることができる。
【００３１】
ミドルウエア環境における動的バージョン制御
本発明のさまざまな態様は、停止時間またはサービスの中断なしに、新しい動的結合ライブラリをミドルウエア・システムに組み入れることによって、ミドルウエア環境などの環境における動的バージョン制御を容易化する。かかる実装は、ミドルウエア環境におけるバージョン区分け使用の管理をさらに提供する。
【００３２】
図３を参照すると、動的ソフトウエア・バージョン選択を実施するためのシステム３００の概略図が示されている。システム３００は、本発明の態様を実装し、多くの点において図１のシステム１００に関して述べたことと類似である。しかしながら、システム３００は、本発明のさらなる態様による、特定の機能を説明するため、メッセージング・システム環境の例示的コンテキスト（状態、状況）中に示されている。
【００３３】
システム３００は、複数のソフトウエア・コンポーネント３０２を包含し、これらは顧客アプリケーションとして実装されている。各ソフトウエア・コンポーネント３０２は、ローダ・コンポーネント３０６およびバインディング・コンポーネント３０８を含むバインディング・ライブラリ３０４に関連付けられている。バインディング・コンポーネント３０８は、メッセージング−待ち行列システムのアプリケーション・プログラミング・インタフェース呼び出しを処理するために必要なソフトウエア・コンポーネント側のロジックの全てを包含する。該して、バインディング・ライブラリ３０４は、ローダ・コンポーネント３０６およびバインディング・コンポーネント３０８を包含し、図１を参照して説明した同名のコンポーネントと類似である。
【００３４】
例示的システム３００には、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシン・コーポレーションによる、メッセージング−待ち行列用のＭＱＳｅｒｉｅｓ（ＩＢＭ社の登録商標）ミドルウエア・システムなど、メッセージ−待ち行列システムを組み込むことができる。かかるアレンジメント（方法／装置／配列）を用いて、さまざまなソフトウエア・コンポーネント３０２は、アプリケーションをリンクするための自分専用の論理的接続を持たなくても、待ち行列にアプリケーション固有のデータ（メッセージ）の書き込み、これから読み出しをすることによって、相互に通信することができる。この点に関し、各バインディング・ライブラリ３０４は、例えば、メッセージング−待ち行列システムを使って通信するためクライアント３１４を実施する実行ファイルのセットを包含することができる。
【００３５】
システム３００は、複数のクライアント処理デバイス３２２をさらに包含し、これらデバイスは、これらに関連する顧客ソフトウエア・コンポーネント３０２を実行する過程で、ネットワーク３２４を介してサーバ・コンピュータ３２６と通信する。典型的な物理的処理デバイスには、例えば、サーバ・コンピュータ、パソコン、ノート型パソコン、ネットブック型パソコン、タブレット型パソコン、トランザクション・システム、用途指向アプライアンス、例えば、携帯データ端末（ＰＤＡ：ｐｅｒｓｏｎａｌ  ｄａｔａ  ａｓｓｉｓｔａｎｔ）、パーム・コンピュータ、携帯電話アクセス処理デバイス、スマート・フォンなどの普及したコンピューティング・デバイス、またはコンピュータ・コードを実行する能力のある他の任意のデバイスなどを含めることができる。
【００３６】
ネットワーク３２４は、さまざまなクライアント処理デバイス３２２とサーバ・コンピュータ３２６との間の通信リンクを提供し、これを、例えば、ルータ、ハブ、ファイヤウオール、ネットワーク・インタフェース、有線または無線の通信リンクおよび対応する相互接続機能、携帯電話基地局および例えば携帯電話とＴＣＰ／ＩＰとの間を変換するなどの対応する携帯電話変換技術等を含むネットワーキング・コンポーネントによってサポートすることができる。さらに、ネットワーク３２４には、一つ以上のイントラネット、エクストラネット、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）、無線ネットワーク（ＷＩＦＩ）、ワールド・ワイド・ウェブを含むインターネット、もしくは、クライアント処理デバイス３２２とサーバ・コンピュータ３２６との間の通信を、リアル・タイムまたは例えばタイム・シフト、バッチ処理など他の仕方で可能にする他のアレンジメント、または前述の組み合わせを使用する接続を含めることができる。
【００３７】
サーバ・コンピュータ３２６は、例えば、待ち行列マネージャ３２８を実行するために用いることができ、該マネージャは長期的サービス・プロセスのセットとして具現することができる。待ち行列マネージャ３２８は、顧客ソフトウエア・コンポーネント３０２の各々に対するメッセージの送信および待ち行列を管理する実行時アプリケーションを定義する。この実施例において、メッセージング−待ち行列システムは、クライアント／サーバ構成中に実装される。上記に換えて、待ち行列マネージャ３２８のインスタンスを、各クライアント処理デバイス３２２上の長期的プロセスとして実装することもできよう。
【００３８】
大まかに言えば、顧客ソフトウエア・コンポーネント３０２は、ＡＰＩ呼び出しを使って、自分に関連するクライアント３１４を介し待ち行列マネージャ３２８と通信し、例えば、他の顧客のアプリケーションに関連付けられた待ち行列にメッセージを送信したり、または関連する待ち行列から、他のソフトウエア・コンポーネント３０２が置いたメッセージを読み出したりする。しかして、待ち行列マネージャ３２８は、各々が製品固有のバインディング・ライブラリ３０４を使用してこれらのサービス・プロセスにアクセスする、相異なるクライアント処理デバイス３２２に関連付けられた、潜在的に多数の異なった顧客ソフトウエア・コンポーネント３０２と相互作用する。かかるアレンジメントは、待ち行列マネージャが、例えば、クライアント／サーバ実装の一部としてサーバ・コンピュータ３２６上などの遠隔にあるか、あるいは、対応するクライアント処理デバイス３２２のローカル構成中のバインディング・ライブラリ３０４とともに同一場所に配置されているかどうかにかかわらず実施することができる。
【００３９】
時折に、システム３００内で作動している多様なコンポーネントのソフトウエアを更新することが望ましい。メッセージング−待ち行列システムが更新の実施を必要としているとしよう。本発明のさまざまな態様によれば、メッセージ−待ち行列システム・ソフトウエアの新規バージョンは、サービスを中断することなく動的に展開することができる。かかるソフトウエア修正には、例えば、バインディング・ライブラリ３０４の関連インスタンスによってロードされたライブラリの関連バージョンなど、各顧客ソフトウエア・コンポーネント３０２に結び付くソフトウエアの変更が含まれる。ソフトウエア修正には、例えば、待ち行列マネージャ３２８への変更などメッセージング−待ち行列システムの内部プロセスの変更、バインディング・コンポーネント３０８に関連付けられた、格納されたライブラリ・バージョンの変更、追加または削除などがさらに含まれる。
【００４０】
かかる内部プロセスは、メッセージング−待ち行列システムの内部のソフトウエアを修正する場合に、ソフトウエア・アップグレードが利用可能になったときまたはそのすぐ後に、再起動が可能なように設計することができる。それに対して、顧客ソフトウエア・コンポーネント３０２は、顧客のビジネス要求事項によって決定されたプロセス・ライフサイクル要件を有し、これらコンポーネントは、メッセージング−待ち行列システムによる制御でなく、顧客の制御下にある。
【００４１】
一般に、待ち行列マネージャ３２８に関連付けられたサービス・プロセスは、従来のオペレーティング・システムのプロセスとして実装することができる。ＭＱＳｅｒｉｅｓ（ＩＢＭ社の登録商標）待ち行列マネージャ中の例に、メッセージ・チャネル・エージェント（ＭＣＡ：Ｍｅｓｓａｇｅ  Ｃｈａｎｎｅｌ  Ａｇｅｎｔ）およびローカル待ち行列マネージャ・エージェント（ＬＱＭＡ：Ｌｏｃａｌ  Ｑｕｅｕｅ  Ｍａｎａｇｅｒ  Ａｇｅｎｔ）があり、前者はネットワークを介して他のＭＣＡとのメッセージを読み取り、書き込みするのに使用され、後者は基礎的待ち行列エンジンを形成する。待ち行列マネージャ３２８自体が、必要に応じ再使用される利用可能なＭＣＡおよびＬＱＭＡプロセスのプールを維持するという意味で、これらのプロセスは管理されている。ＭＣＡおよびＬＱＭＡ双方のプロセスの遊休中のインスタンスは、新規作業が到着次第再使用される。例えば新規ライブラリまたはプログラムいずれかの形で、新しいソフトウエアがファイル・システム中にインストールされるとき、待ち行列マネージャは、これらプログラムの一切の遊休インスタンスを停止し、新しいプロセスを起動することができる。これらプロセスは、一切他からの助力なしに、新規ソフトウエアを使用することになる。また、同様に、ソフトウエアのダウングレートも、新規ソフトウエア・ファイルをインストールしたファイル・システム変更を逆実施することによって可能である。
【００４２】
顧客ソフトウエア・コンポーネント３０２は、例えばＭＱＳｅｒｉｅｓ（ＩＢＭ社の登録商標）の場合であれば「ｌｉｂｍｑｍ」と名付けられたライブラリなどのバインディング・ライブラリ３０４を使って、メッセージング−待ち行列システムのサービスにアクセスを得る。バインディング・ライブラリ３０４は、一面では、アプリケーションに一定で明確なインタフェースを提供する。さらに、バインディング・ライブラリ３０４は、待ち行列マネージャ３２８の内部とも相互作用する。
【００４３】
顧客ソフトウエア・コンポーネント３０２は、通常、新規ソフトウエアが利用可能になっても再起動を強制することはできない。例えば、通常、サーバ・コンピュータ３２６上のプロセスは、遠隔クライアント処理デバイス３２２上のソフトウエア・コンポーネント３０２の再起動を強制することはできない。また一方、この実施例において、複数の異なるライブラリ・バージョンを含む各バインディング・コンポーネント３０８によって示されるように、プログラム／ライブラリ実行ファイルの現在セットおよびプログラム／ライブラリ実行ファイルの新規セットの両方が、各ファイル・システムにおいて共に利用可能である。この点に関し、メッセージング−待ち行列システムに関連付けられた各ソフトウエア・コンポーネント３０２によって実行される、例えばクライアント３１４などのソフトウエアは、図１および図２を参照して説明したのと類似の仕方で更新することができる。
【００４４】
顧客が自分のソフトウエア・コンポーネント３０２を再起動する必要なしにバインディング・ライブラリの新規バージョンの展開を可能にするため、各バインディング・ライブラリ３０４は、図１を参照して説明したローダ・コンポーネント１０６およびバインディング・コンポーネント１０８に対するのと類似の仕方で、ローダ・コンポーネント３０６およびバインディング・コンポーネント３０８を包含する、２つの異なるコンポーネントに分割される。ローダ・コンポーネント３０６は、例えば小型のライブラリとして実装することができる。しかしながら、ローダ・コンポーネント３０６は、メッセージング−待ち行列システムのアプリケーション・プログラミング・インタフェースをサポートするため必要なロジックを一切具備していない。それよりも、ローダ・コンポーネント３０６は、バインディング・ライブラリの適正なバージョンを、対応するクライアント処理デバイス３２２のメモリ中にロードする。次いで、ローダ・コンポーネント３０６は、アプリケーション・プログラムからのものと同等なＡＰＩ呼び出しを、例えばクライアント３１４など、ロードされたライブラリ中の適切なインタフェースに転送し、メッセージのメッセージ待ち行列への送信、およびメッセージ待ち行列からのメッセージの読み出し、または、別途にメッセージング−待ち行列システムとの相互作用を実施する。
【００４５】
ローダ・コンポーネント３０６がバインディング・コンポーネント３０８からのライブラリを選択し、ロードしたならば、ローダ・コンポーネント３０６は、ソフトウエア・コンポーネント３０２からの全てのＡＰＩ呼び出しの同等バージョンを、バインディング・コンポーネント３０８からロードされたライブラリに転送する。しかして、ローダ・コンポーネント３０６は、メッセージング−待ち行列システムに関連づけられた、顧客ソフトウエア・コンポーネント３０２とバインディング・コンポーネント３０８からロードされたライブラリとの間の、全ＡＰＩ呼び出しを効果的にインターセプトし媒介する。
【００４６】
クライアント処理デバイス３２２上のライブラリのソフトウエア修正を実施するため、サーバ・コンピュータ３２６または他の任意のソースは、対応するライブラリの新規バージョンをバインディング・コンポーネント３０８に提供する。バインディング・コンポーネント３０８は、ライブラリを、対応するローダ・コンポーネント３０６が、ライブラリの各バージョンを一意的に識別できるような仕方で格納する。さらに、ローダ・コンポーネント３０６には、本明細書でさらに詳しく説明するように、ロードされるライブラリのバージョンを識別する情報を提供することができる。また一方、ローダ・コンポーネント３０６に対しライブラリの新規バージョンを用いて対応するクライアント処理デバイス３２２のメモリを更新させる適切な命令が与えられるまでは、顧客ソフトウエア・コンポーネント３０２の実行中のインスタンスは、関連するクライアント処理デバイス３２２のメモリ中に現在ロードされているライブラリ・バージョンのいずれの使用も継続することができる。
【００４７】
ローダ・コンポーネント３０６は、所定イベントのタイミングに応じ、前回ライブラリ・バージョンが既にロードされていた場合、前回バージョンをアンロードすることができる。それに応じ、ローダ・コンポーネント３０６は、そのライブラリの新規バージョンをバインディング・コンポーネント３０８からロードできる。
【００４８】
ある実施例によれば、顧客ソフトウエア・コンポーネント３０２は、所定の切断および再接続ＡＰＩシーケンスを用いて、バインディング・コンポーネント３０８からの新規ライブラリのローディングをトリガすることができる。顧客ソフトウエア・コンポーネント３０２が、アプリケーション・プログラミング・インタフェース呼び出しのこのシーケンスを実施するまでは、顧客ソフトウエア・コンポーネント３０２は旧ライブラリ・バージョンのソフトウエアを使い続けることになる。
【００４９】
ある例示的実装において、顧客ソフトウエア・コンポーネント３０２がバインディング・ライブラリ３０４に、切断および再接続ＡＰＩ呼び出しを発行することによって、ソフトウエア・ライブラリ修正をトリガすることができる。これにより、ローダ・コンポーネント３０６は、顧客のアプリケーションの切断に応じてメモリ中にロードされたライブラリの現行バージョンを動的にアンロードし、続いて、顧客のアプリケーションの接続に応じてそのライブラリの新規バージョンを動的にロードすることができる。ＭＱＳｅｒｉｅｓ（ＩＢＭ社の登録商標）の例示的実装において、バインディング・コンポーネント３０８へのライブラリのローディングおよびアンローディングは、ローダ・コンポーネントのＭＱＣＯＮＮ（ＭＱシリーズ接続）およびＭＱＤＩＳＣ（ＭＱシリーズ切断）処理で実行される。この実施例においてライブラリをロードもしくはアンロードまたはその両方を行うための命令は、対応する顧客ソフトウエア・コンポーネント３０２によって実行され、これにより、顧客アプリケーションが更新のタイミングを制御することを可能にする。
【００５０】
本発明の態様によれば、前述の例示的実装において、接続／切断を転送するＡＰＩだけが、その中に決定ロジックを有している必要がある。接続／切断ＡＰＩに対し、呼び出しが対応するライブラリに転送される前に決定ロジックを実行することができる。しかして、現在ロードされているライブラリ・バージョンを修正する必要が生じた場合、かかる変更を、呼び出されたＡＰＩを実行する前に遂行することができる。他のＡＰＩは、ローダ・コンポーネント３０６から関連するバインディング・ライブラリ３０８の対応ライブラリ・バージョンへの、同等ＡＰＩ呼び出しをトリガし、内に決定ロジックを持たない機能の転送を実施することができる。この場合、ローダ・コンポーネント３０６は、上記の「特別」なＡＰＩ（または同様な所定の初期化／初期化解放ＡＰＩ）の中の新規バインディング・ライブラリの有無をチェックするだけである。他のＡＰＩは、ローダ・コンポーネント３０６がバージョン・チェックを行うようトリガすることはない。接続／切断ＡＰＩは「特別」とみなされる。というのは、これらは、バインディング・ライブラリ３０４が他のＡＰＩの処理のため用いる内部状態をセットアップし、解除するからである。しかして、接続／切断ＡＰＩ自体が状態データをセットアップし、解除するので、ローダ・コンポーネントがトリガする状態の移行をサポートする必要はない。かくして、状態移行は必要がない。
【００５１】
さらに別の実施例によれば、あらゆるＡＰＩ（またはＡＰＩのサブセット）が、ライブラリ・バージョンをチェックし必要な場合ライブラリ修正をトリガするための、決定ロジックを有する。この決定ロジックは、例えば、同等呼び出しがロードされているライブラリ・バージョンに転送される前に実行することができる。全ＡＰＩ（またはそのサブセットの）実行のため決定ロジックを実行する必要があるので、現在望まれているライブラリ・バージョンの表示もしくは利用可能なライブラリ・バージョンのリストまたはその両方を格納している、メモリ・ベースの共用ライブラリ・バージョン・テーブルを使うなどして、このロジックを効率化することができる。バインディング・ライブラリは、ＡＰＩが呼び出されたときの内部状態データを持ち越す可能性が高いので、ローダ・コンポーネント３０６は、例えば新しいバインディング・ライブラリ中の移行ＡＰＩを使うなどして、バインディング・ライブラリの状態を移行する能力を有すべきである。
【００５２】
しかして、本発明の態様によれば、メモリ中にロードされることになる、バインディング・コンポーネント３０８からのライブラリ・バージョンの選択は、オペレーティング・システムの制御から外され、これをローダ・コンポーネント３０６の直接制御の下に置くことができる。ローダ・コンポーネント３０６は、ライブラリをローディングする前に、必要などのような妥当性確認をも遂行することができ、単に基盤のオペレーティング・システムのライブラリ・ローディング・メカニズムに頼って可能なよりも、もっと高度なローディング技法および方策を実施することができる。さらに、ローダ・コンポーネント３０６は、例えば、内部状態移行が可能で、後続のバインディング・ライブラリ中の移行ＡＰＩにサポートされていれば、以前のライブラリ・バージョン・ソフトウエア・レベルへのフォールバックを行う能力も有する。
【００５３】
しかして、本発明の態様は、システム・ソフトウエア、例えばこの実施例ではミドルウエア、のメンテナンス更新のための計画的な停止を排除することによって、連続的な使用可能性に寄与する。この点に関し、本明細書で説明するソフトウエアの機能は、システム・ソフトウエアの再起動の必要なしに、さらには変更中のアプリケーションの休止もなしに変更を行うことを可能にできる。このように、変更を適用するプロセスの間、同じシステム・ソフトウエアによって２つ（またはそれ以上）の異なるアプリケーション・インタフェースが提供できるようにして、変更がアプリケーション・インタフェースに影響を与える場合であっても、アプリケーションがシステム・ソフトウエアの使用を継続することを可能にする
【００５４】
例としてメッセージング−待ち行列システムなど、ミドルウエア・システムに関連付けられたソフトウエアの動的更新についての本説明は、本明細書に詳記された、サービスの中断なしに動的ソフトウエア修正を実施するための技法を説明するための例示を目的として提示されており、限定するためのものではない。
【００５５】
ライブラリ・バージョン・テーブル
図４を参照すると、動的ソフトウエア・バージョン選択を実施するためのシステム４００の概略図が示されている。システム４００は、一般に、ソフトウエア・コンポーネント４０２および関連するバインディング・ライブラリ４０４を包含する。バインディング・ライブラリ４０４は、ローダ・コンポーネント４０６およびバインディング・コンポーネント４０８を包含する、２つの別個のコンポーネント中に実装される。この点に関し、ソフトウエア・コンポーネント４０２、バインディング・ライブラリ４０４、ローダ・コンポーネント４０６、およびバインディング・コンポーネント４０８は、図１〜３のいずれか一つ以上を参照して説明した同名のコンポーネントと実質上類似である。
【００５６】
本発明のさらなる態様によれば、新規ライブラリ・ソフトウエアのローディングおよび使用は、一般に、顧客アプリケーション（ソフトウエア・コンポーネント）４０２がＡＰＩ呼び出しを発行するときにトリガすることができる。本明細書でさらなる詳細を説明したように、バージョン・チェックおよびライブラリのリローディングのトリガは、ローダ・コンポーネント４０６が特別なＡＰＩ、例えば接続および切断ＡＰＩなどを受信するのに応じて発生させることができる。さらに別の実施例として、バージョン・チェックおよびライブラリのリローディングのトリガは、ローダ・コンポーネント４０６が、対応する呼び出しソフトウエア・コンポーネント（群）からの全ＡＰＩを受信するのに応じて発生させることもできる。
【００５７】
示された例示的実装において、システム４００は、共用ライブラリ・バージョン・テーブル４３０をさらに含む。この共用ライブラリ・バージョン・テーブルは、バインディング・コンポーネント４０８に保存されたライブラリのさまざまなバージョンに関する情報を格納する。例えば、図示のように、共用ライブラリ・バージョン・テーブル４３０は、対応するバインディング・コンポーネント４０８に関連付けられた全ての利用可能なライブラリの名称およびバージョン番号を包含する。加えて、共用ライブラリ・バージョン・テーブル４３０には、ライブラリ・バージョン変数４３２を包含させることができ、該変数は、例えば共用テーブルのどのエントリかなど、ライブラリのどのバージョンが、メモリ中にロードされるべきライブラリの現行バージョンに相当するかの表示を格納する。
【００５８】
共用テーブルは、図３を参照して説明した待ち行列マネージャ３２８など、任意の管理プロセスによって投入することができる。さらに、例えば共用ライブラリ・バージョン・テーブル４３０に、利用可能なライブラリ・バージョンを発行するためのメカニズムを実装することができる。
【００５９】
例えば対応する決定ロジックに関連付けられた「特別」ＡＰＩ呼び出しの受信など所定のトリガリング・イベントに応じて、または全てのＡＰＩ呼び出し（しかるべき決定ロジックに関連付けられた全てのＡＰＩ呼び出し）の受信に応じて、あるいは（特定の実装による）他の決定ロジックに基づいて、ローダ・コンポーネント４０６は、共用ライブラリ・バージョン・テーブル４３０を調べ、顧客プログラム（ソフトウエア・コンポーネント）４０２が、利用可能なライブラリの適正な現行バージョンを使用しているかどうかを確かめる。ソフトウエア・コンポーネント４０２がライブラリの適正なバージョンを使用していない場合、ローダ・コンポーネント４０６は、旧ライブラリ・バージョンのアンローディングを行うよう調整し、適正な新バージョンをロードする。例えば、ローダ・コンポーネント４０６は、ライブラリ・バージョン変数４３２に格納された値をメモリにロードされているライブラリのバージョンと対比することができる。
【００６０】
かくして、例えば、顧客ソフトウエア・コンポーネント４０２が、対応する決定ロジックに関連付けられたＡＰＩ呼び出しを発行した何時においても、ローダ・コンポーネント４０６は、利用可能なライブラリに対比して、現在使われているライブラリ・バージョンの検査を実施することができる。ローダ・コンポーネント４０６が、現在ロードされているライブラリは最新の利用可能ライブラリとは異なるレベルのものであることを検知した場合、ローダ・コンポーネントは、現在のライブラリを動的にアンロードし、規定されたライブラリを動的にロードすることができる。随意的に、新規ライブラリ中の特別な移行ＡＰＩへの呼び出しを実施し、例えば、（必要な場合）その新規ライブラリの要件に適合するように一切の内部状態データ構造を再編成し、新規ライブラリを用いて只今のＡＰＩ呼び出しの処理を遂行することができる。
【００６１】
ある例示的実装において、例えば図３を参照して説明した待ち行列マネージャなど、マネージャまたは他の監視プロセスは、全ての接続された顧客アプリケーション・プログラムに対し、次にアプリケーションがＡＰＩ呼び出しを行うとき、より新しいまたは古いバージョンなど、ライブラリ・ソフトウエアの異なるバージョンを使うよう命令することができる。上記に換えて、他のルール、タイミング条件などによって、何時ソフトウエア・バージョン修正を実施するかを命令することもできる。
【００６２】
プログラム固有ライブラリ・バージョンの制御
図５を参照すると、動的ソフトウエア・バージョン選択を実施するためのシステム５００の概略図が示されており、該システムは、動的ソフトウエア・バージョン選択を、どのプログラムを新規／異なるバージョンに移行しどれは移行すべきでないかの一部の制御を可能にする「プログラム固有」制御をサポートするように拡張している。システム５００は、一般に、ソフトウエア・コンポーネント５０２および関連するバインディング・ライブラリ５０４を包含する。バインディング・ライブラリ５０４は、ローダ・コンポーネント５０６およびバインディング・コンポーネント５０８を包含する、２つの別個のコンポーネント中に実装されている。この点に関し、ソフトウエア・コンポーネント５０２、バインディング・ライブラリ５０４、ローダ・コンポーネント５０６、およびバインディング・コンポーネント５０８は、図１〜４のいずれか一つ以上を参照して説明した同名のコンポーネントと実質上類似である。
【００６３】
通例、全てのソフトウエア・コンポーネント５０２は、それらがアプリケーション・プログラミング・インタフェース呼び出しを実行する際、ライブラリの指定現行バージョン、通常最新バージョン、に移行するようにされていることが多い。しかしながら、本発明のさらなる態様によれば、どのプログラムが現行バージョンに移行すべきか、および移行すべきでない特定のプログラムがあるかどうかについての制御が提供される。
【００６４】
図示のように、図５には、共用ライブラリ・バージョン・テーブル５３０を包含させることができ、これは図４を参照して説明した共用ライブラリ・バージョン・テーブル４３０と類似である。しかしながら、この例示的実装は、共用プログラム・バージョン・テーブル５４０をさらに含む。共用プログラム・バージョン・テーブル５４０は、複数のソフトウエア・コンポーネント、および各アプリケーションに対する対応ライブラリ・バージョンの情報を格納している。例えば、図示のように、第一ソフトウエア・プログラム「ＵＰＤＡＴＥ」はライブラリ・バージョン２を用いて設定されている。また一方、ソフトウエア・プログラム「ＲＥＰＯＲＴ」はライブラリ・バージョン３を使って設定されている。
【００６５】
しかして、ローダ・コンポーネント５０６を呼び出すソフトウエア・コンポーネント５０２がソフトウエア・プログラムＵＰＤＡＴＥである場合、ローダ・コンポーネント５０６は（対応する決定ロジックに関連付けられた適切なＡＰＩによってトリガされたとき）、その呼び出しを処理する前に、ライブラリ・バージョン２がロードされていることを確実にする。同様に、ローダ・コンポーネント５０６を呼び出すソフトウエア・コンポーネント５０２がプログラムＲＥＰＯＲＴである場合、ローダ・コンポーネント５０６は（対応する決定ロジックに関連付けられた適切なＡＰＩによってトリガされたとき）、その呼び出しを処理する前に、ライブラリ・バージョン３がロードされていることを確実にする。共用プログラム・バージョン・テーブル５４０を中央制御することによって、管理コンポーネントは、何時、個々のプログラムが新規のまたは異なるライブラリ・バージョンへの移行を開始すべきかを決定することができる。
【００６６】
共用プログラム・バージョン・テーブル５４０は、プログラム名称（またはプログラム名称に合致するパターンなど）をライブラリ・バージョンにマップする。共用プログラム・バージョン・テーブル５４０は、例えば図３の例の中の待ち行列マネージャ３２８などの適切な管理プロセス、または他の任意の適切な監視プロセスによって投入される。さらに、共用プログラム・バージョン・テーブル５４０は、関連付けられた特定のライブラリ・バージョンを有する、プログラムの名称または名称パターンを包含する。ローダ・コンポーネント５０６は、バージョンのアップグレードまたはダウングレードの決定を行うに先立って、プログラム・ライブラリ・バージョン・テーブル中の呼び出し側プログラムの名称を探し出す。
【００６７】
ローダ・コンポーネント５０６のプログラム固有の決定ロジックを拡張し、例えば、最新の利用可能なまたは現行のライブラリ・バージョンを記述するワイルドカードまたは他の適切な言語を使用するなどして、全てのプログラム名称がマッチする一つの列を持たせることによって、全プログラムを移行させることができる。この実装では、プログラム・ライブラリ・バージョン・テーブル中の少なくとも一つの列で全プログラムがマッチすることを要件とすることもできようし、あるいは、例えば、プログラム名称がいずれかの列でマッチしない場合は、所定のまたは以前のバージョンに単にデフォルトする実装とすることもできよう。
【００６８】
カプセル化
本発明のさまざまな態様を、動的にロードされるライブラリを用いるソフトウエア実装を参照しながら説明してきた。この点に関し、慣例的にプログラム群を用いるソフトウエア実装は、従来式のプログラム・フォーマットでなく、動的ロードが可能なライブラリ中にカプセル化することができる。一旦カプセル化したならば、本明細書の図１〜５を参照してさらに詳しく説明したように、さまざまなソフトウエア修正技法を利用することができる。例えば、アプリケーションに対するオンライン・トランザクション処理（ＯＬＴＰ）システムの大部分（または全部）を、プログラムでなく、動的にロード可能なライブラリ中にカプセル化することによって、動的ソフトウエア・バージョン管理を実施することが可能になる。これが実施されれば、当該ＯＬＴＰシステムと相互作用するプログラムを停止することなく、新規のＯＬＴＰソフトウエアをロードし使用することができる。ＯＬＴＰシステムと関係のないプログラム機能は全く中断されることなく、新規のソフトウエアを用いてＯＬＴＰシステムに関係するプログラム機能がアップグレードされる。
【００６９】
クライアント側環境および多くのサーバ側環境でのダウンタイム・ゼロのアップグレードのための、動的ソフトウエア・ライブラリ選択は、顧客のビジネス・プログラムまたはＯＬＴＰシステム自体によって使用されるライブラリのセットとして、ＯＬＴＰ機能を具現することによって実施することができる。なお、本明細書でさらなる詳細を説明したように、ダウンタイム・ゼロのアップグレードサポートは、プログラムが、それら自体が選択した時に、ＯＴＬＰシステムから論理的に切断し、既存のＯＬＴＰソフトウエア（ライブラリ）を動的にアンロードし、新規のＯＬＴＰソフトウエア（ライブラリ）を動的にロードし、その新規のソフトウエアを使ってＯＬＴＰシステムに再接続することを可能にすることによって達成される。
【００７０】
厳密にいえば、旧ライブラリのアンローディングおよび新規ライブラリのローディングの実施の間、サービスは中断されるが、この中断は短く、このステップが行われる特定のクライアント・プロセスに限定される。さらに、使われるライブラリ／ソフトウエア・バージョンの選択は、もはやオペレーティング・システムのオペレーションではなく、ＯＬＴＰソフトウエア・パッケージの直接制御下に置かれる。ＯＬＴＰソフトウエアは、何であれ必要な妥当性確認を実施することができ、単に基盤のオペレーティング・システムに頼って可能なよりも、もっと高度なローディング技法および方策を実施することができる。加えて、この技法を使って以前のソフトウエア・レベルにフォールバックすることも可能である。
【００７１】
例示的コンピュータ・システム
図６を参照すると、本発明の態様による、コンピュータ・システム６０２として実装されたデータ処理システム６００のブロック図が描かれている。コンピュータ・システム６０２は、数多くの汎用または特殊用途コンピューティング・システム環境または構成による作動が可能である。さらに、コンピュータ・システム６０２は、コンピュータ・システムによって実行されるプログラム・モジュールなど、コンピュータ・システムが実行可能な命令の一般的なコンテキストで表すことができる。一般に、プログラム・モジュールには、特定のタスクを遂行し、または特定の抽象データ型を実装する、ルーティン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含めることができる。
【００７２】
コンピュータ・システム６０２のコンポーネントには、以下に限らないが、対称マルチプロセッサ（ＳＭＰ：ｓｙｍｍｅｔｒｉｃ  ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ）システムなど一つ以上のプロセッサまたは処理ユニット６０４、あるいはシステム・バスに接続された複数のプロセッサを包含する他の構成を含めることができる。上記に換えて単一のプロセッサを使うことも可能である。コンピュータ・システム６０２のコンポーネントは、システム・メモリ６０６、およびシステム・メモリ６０６を含め、さまざまなシステム・コンポーネントをプロセッサ（群）６０４に連結するバス６０８をさらに包含する。メモリ６０６には、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）６１０もしくはキャッシュ・メモリ６１２またはその両方など、揮発性メモリの形で、コンピュータ・システム可読媒体を含めることができる。また、メモリ６０６には、例えば一つ以上のハード・ドライブなどの記憶システム６１４など、他の着脱可能型／固定型、揮発性／不揮発性のコンピュータ・システム記憶媒体も含めることができる。さらに、メモリ６０６には、内部に具現されたコンピュータ可読プログラム・コードを有する、少なくとも一つのコンピュータ可読記憶媒体６１６を含めることができ、該コンピュータ可読プログラム・コードは、本明細書で詳しく説明した本発明の実施形態の機能を実行するよう構成されたコンピュータ可読プログラム・コードを含む。
【００７３】
また、コンピュータ・システム６０２には、バス６０８を介してプロセッサ６０４と通信する、入力／出力（Ｉ／Ｏ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）インタフェース（群）６１８もしくはネットワーク・アダプタ６２０またはその両方を含めることができる。同様に、コンピュータ・システム６０２には、外部デバイス６２２もしくはディスプレイ６２４またはその両方とインタフェース接続することもできる。他のハードウエアもしくはソフトウエア・コンポーネントまたはその両方を、コンピュータ・システム６０２と連結して用いることができよう。
【００７４】
このデータ処理システムには、例えば、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシン・コーポレーションの製品であり、アドバンスト・インタラクティブ・エグゼクティブ（ＡＩＸ（ＩＢＭ社の登録商標）：Ａｄｖａｎｃｅｄ  Ｉｎｔｅｒａｃｔｉｖｅ  Ｅｘｅｃｕｔｉｖｅ）オペレーティング・システムを搭載しているＩＢＭ（ＩＢＭ社の登録商標）ＲＳ／６０００（ＩＢＭ社の登録商標）システムを含めることができる。オペレーティング・システムとつなげて、Ｊａｖａなどのオブジェクト指向プログラミング・システムを実行し、データ処理システム上で実行されているＪａｖａプログラムまたはアプリケーションからオペレーティング・システムへの呼び出しを行うことができる。
【００７５】
当業者ならよく理解するであろうように、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現することができる。従って、本発明の態様は、全体がハードウエアの実施形態、全体がソフトウエアの実施形態（ファームウエア、常駐ソフトウエア、マイクロコードなどを含む）、あるいは、一般に本明細書では全て「回路」、「モジュール」、または「システム」といわれる、ソフトウエアおよびハードウエア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の態様は、内部に具体化されたコンピュータ可読プログラム・コードを有する一つ以上のコンピュータ可読記憶媒体中に具現されたコンピュータ・プログラム製品の形を取ることもできる。
【００７６】
一つ以上のコンピュータ可読媒体の任意の組み合わせを用いることができる。このコンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的な、または半導体の、システム、装置、もしくはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例（非包括的リスト）には、一つ以上の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが含まれよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体とすることができる。
【００７７】
コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現されたコンピュータ可読のプログラム・コードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、さまざまな形態の任意の形を取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではないが、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを通信、伝播、または伝送が可能な任意のコンピュータ可読媒体であり得る。
【００７８】
コンピュータ可読媒体中に具現されたプログラム・コードは、以下に限らないが、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【００７９】
本発明の態様に対するオペレーションを実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合せで記述することができる。このプログラム・コードは、全体をユーザのコンピュータで、一部をユーザのコンピュータで、スタンドアロン・ソフトウエア・パッケージとして実行することができ、一部をユーザのコンピュータで他の部分を遠隔コンピュータで、または全体を遠隔のコンピュータまたはサーバで実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことができる。
【００８０】
本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフロー・チャート説明図もしくはブロック図またはその両方を参照しながら本発明の態様を以下に説明する。フロー・チャート説明図もしくはブロック図またはその両方の各ブロック、および、フロー・チャート説明図もしくはブロック図またはその両方中のブロックの組み合せは、コンピュータ・プログラム命令によって実行可能であることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに供給し、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フロー・チャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群／処理群を実施するための手段を生成するようにすることができる。
【００８１】
また、これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フロー・チャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能／処理を実施する命令群を包含する製品を形成するようにすることができる。
【００８２】
同様に、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、または他のデバイス上で一連のオペレーション・ステップを実施させてコンピュータ実装のプロセスを生成し、これらコンピュータまたは他のプログラム可能装置で実行されるこれらの命令が、フロー・チャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群／処理群を実施するためのプロセスを提供するようにすることもできる。
【００８３】
図中のフロー・チャートおよびブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、およびオペレーションを例示している。この点に関し、フロー・チャートまたはブロック図中の各ブロックは、所定の論理機能（群）を実行するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図に記載された順序を外れて行われることがあり得ることに留意すべきである。例えば、連続して示された２つのブロックが、実際にはほぼ同時に実行されることがあり、関与する機能によっては、時には、これらブロックが逆の順序で実行されることもあり得る。また、ブロック図もしくはフロー・チャート説明図またはその両方の各ブロック、およびブロック図もしくはフロー・チャート説明図またはその両方中のブロックの組み合わせは、特定の機能または処置を実施する、特殊用途のハードウエア・ベースのシステム、または特殊用途のハードウエアとコンピュータ命令との組み合わせによって実装可能なことにも留意すべきである。
【００８４】
本明細書で使用する用語は、特定の実施形態を説明する目的のためだけのものであり、本発明を限定することは意図されていない。本明細書で用いられる、単数形「ある（ａ、ａｎ）」、および「該（ｔｈｅ）」は、文脈上明確に別途に示されていなければ、複数形も同じように含むことを意図されている。さらに、本明細書で用いられる「含む（ｃｏｍｐｒｉｓｅ）」または「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」もしくはその両方の用語は、述べられた機能、完全体、ステップ、オペレーション、エレメント、またはコンポーネント、あるいはこれらの組み合わせの存在を特定するが、一つ以上の他の機能、完全体、ステップ、オペレーション、エレメント、コンポーネント、またはこれらの群、もしくは上記の組み合わせの存在または追加を排除するものでないことがさらに理解されよう。
【００８５】
添付の請求項中の全ての手段またはステップに加え機能エレメントの、対応する構造、材料、処置および同等物は、具体的に請求された他の請求エレメントと組み合わせて機能を遂行するための、一切の構造、材料または処置を包含することが意図されている。本発明の記述は、例示および説明目的で提示されたもので、網羅的であること、または本発明を開示した形態に限定することは意図されていない。当業者には、本発明の範囲および精神から逸脱することのない多くの修改および変形が明白であろう。本発明の諸態様は、本発明の原理および実際的な応用を最善に説明し、他の当業者が、意図する特定の用途に適したさまざまな修改を加えたさまざまな実施形態のため、本発明を理解できるようにするため、選択し説明したものである。
【符号の説明】
【００８６】
１００  システム
１０２  ソフトウエア・コンポーネント
１０４  バインディング・ライブラリ
１０６  ローダ・コンポーネント
１０８  バインディング・コンポーネント
バインディング・コンポーネント・バージョン１
ライブラリ・バージョン１
バインディング・コンポーネント・バージョンＮ
ライブラリ・バージョンＮ
１１０  メモリ
１１２  情報源
【図１】
0006025136.tif 000002
【図２】
0006025136.tif 000003
【図３】
0006025136.tif 000004
【図４】
0006025136.tif 000005
【図５】
0006025136.tif 000006
【図６】
0006025136.tif 000007