動的ソフトウエアバージョン選択を実施する方法であって、バインディングライブラリをソフトウエアコンポーネントに関連付けるステップであって、前記バインディングライブラリはローダコンポーネントおよびバインディングコンポーネントを含み、前記ローダコンポーネントは前記ソフトウエアコンポーネントと前記バインディングコンポーネントとの間の媒介体としての役割をし、前記バインディングコンポーネントはソフトウエアコンポーネント側のロジックを含む、前記関連付けるステップと、前記バインディングコンポーネントから処理デバイスのメモリ中にライブラリをロードするためのトリガを、前記ローダコンポーネントによって認識するステップと、要求されたライブラリの望ましいバージョンを前記ローダコンポーネントによって選択するステップであって、前記ライブラリの前記望ましいバージョンは、前記バインディングライブラリの前記バインディングコンポーネントに関連付けられた、前記ライブラリの少なくとも2つのバージョンから選択される、前記選択するステップと、前記関連付けられたソフトウエアコンポーネントを再起動する必要なしに、前記ライブラリの前記望ましいバージョンを、コンピュータ処理システムのメモリ中にロードするステップと、を含む前記方法。前記ソフトウエアコンポーネントからのソフトウエアコンポーネントプログラムインタフェース呼び出しを、前記ローダコンポーネントによって受信するステップと、メモリ中にロードされた前記ライブラリの前記望ましいバージョンの対応するソフトウエアコンポーネントプログラミングインタフェースに、前記受信された呼び出しを転送するステップと、をさらに含む、請求項1に記載の方法。前記要求されたライブラリの望ましいバージョンを、前記ローダコンポーネントによって選択するステップは、ファイルシステムシンボリックリンクを使って、前記要求されたライブラリの前記望ましいバージョンを、前記ローダコンポーネントによって選択するステップ、を含む、請求項1に記載の方法。前記要求されたライブラリの望ましいバージョンを、前記ローダコンポーネントによって選択するステップは、前記要求されたライブラリの前記望ましいバージョンを、前記選択を命令する制御ファイルを使って、前記ローダコンポーネントによって選択するステップ、を含む、請求項1に記載の方法。前記ライブラリのバージョンを識別するためライブラリバージョンテーブルを用いるステップと前記ライブラリの現行バージョンを追跡するライブラリバージョン変数を格納するステップと、をさらに含み、前記要求されたライブラリの望ましいバージョンを、前記ローダコンポーネントによって選択するステップは、前記ライブラリバージョン変数の値を、前記ローダコンポーネントによって読み取るステップと、前記ライブラリバージョン変数の前記値に基づいて前記ライブラリの前記望ましいバージョンを選択するステップと、を含む、請求項1に記載の方法。前記バインディングライブラリのローダコンポーネントを変えることなく、前記ライブラリの更新されたバージョンを使って、前記バインディングライブラリの前記バインディングコンポーネントを更新するステップと、前記ローダコンポーネントを介して前記ライブラリの前記更新されたバージョンをロードするステップであって、前記ソフトウエアコンポーネントは前記ローディングの間停止せず、前記ロードするステップは、前記バインディングコンポーネントの前のライブラリバージョンを切断するステップ、および前記ライブラリの前記更新されたバージョンを接続するステップ、を含む、前記ロードするステップと、前記ソフトウエアコンポーネントから、前記ライブラリの前記ロードされた更新バージョンに、前記ローダコンポーネントによって呼び出しを転送するステップと、をさらに含む、請求項1に記載の方法。前記バインディングコンポーネントから処理デバイスのメモリ中にライブラリをロードする要求を、前記ローダコンポーネントによって受信するステップは、前記ソフトウエアコンポーネントから切断呼び出しを受信するステップと、前記ソフトウエアコンポーネントから接続呼び出しを受信するステップと、を含む、請求項1に記載の方法。前記バインディングコンポーネントから処理デバイスのメモリ中にライブラリをロードする要求を、前記ローダコンポーネントによって受信するステップは、前記ソフトウエアコンポーネントからの一切の呼び出しを受信するステップ、を含む、請求項1に記載の方法。対応するプログラムに対する特定のライブラリバージョンを格納するプログラムバージョンテーブルを用いるステップをさらに含み、前記ローダコンポーネントによってトリガを認識するステップは、識別されたソフトウエアコンポーネントからアプリケーションプログラミングインタフェース呼び出しを受信するステップを含み、前記要求されたライブラリの望ましいバージョンを、前記ローダコンポーネントによって選択するステップは、ライブラリバージョン変数の値に基づいて前記ライブラリの前記望ましいバージョンを選択するステップを含む、請求項1に記載の方法。動的ソフトウエアバージョン選択を遂行するためのコンピュータプログラムであって、内部に具現されたコンピュータ可読のプログラムコードを有する有形のコンピュータ可読記憶媒体を含み、前記コンピュータ可読プログラムコードは、バインディングライブラリをソフトウエアコンポーネントに関連付けるよう構成されたコンピュータ可読プログラムコードであって、前記バインディングライブラリは、ローダコンポーネントおよびバインディングコンポーネントを含み、前記ローダコンポーネントは前記ソフトウエアコンポーネントと前記バインディングコンポーネントとの間の媒介体としての役割をし、前記バインディングコンポーネントはソフトウエアコンポーネント側のロジックを含む、前記コンピュータ可読プログラムコードと、前記バインディングコンポーネントから処理デバイスのメモリ中にライブラリをロードするためのトリガを、前記ローダコンポーネントによって認識するよう構成されたコンピュータ可読プログラムコードと、要求されたライブラリの望ましいバージョンを、前記ローダコンポーネントによって選択するよう構成されたコンピュータ可読プログラムコードであって、前記ライブラリの前記望ましいバージョンは、前記バインディングライブラリの前記バインディングコンポーネントに関連付けられた、前記ライブラリの少なくとも2つのバージョンから選択される、前記コンピュータ可読プログラムコードと、前記関連するソフトウエアコンポーネントを再起動する必要なしに、前記ライブラリの前記望ましいバージョンを、コンピュータ処理システムのメモリ中にロードするよう構成されたコンピュータ可読プログラムコードと、を含む、前記コンピュータプログラム。前記ソフトウエアコンポーネントからのソフトウエアコンポーネントプログラムインタフェース呼び出しを、前記ローダコンポーネントによって受信するよう構成されたコンピュータ可読プログラムコードと、メモリ中にロードされた前記ライブラリの前記望ましいバージョンの対応するソフトウエアコンポーネントプログラミングインタフェースに、前記受信された呼び出しを転送するよう構成されたコンピュータ可読プログラムコードと、をさらに含む、請求項10に記載のコンピュータプログラム。前記要求されたライブラリの望ましいバージョンを、前記ローダコンポーネントによって選択するよう構成された前記コンピュータ可読プログラムコードは、ファイルシステムシンボリックリンクを使って、前記要求されたライブラリの前記望ましいバージョンを、前記ローダコンポーネントによって選択するよう構成されたコンピュータ可読プログラムコード、を含む、請求項10に記載のコンピュータプログラム。前記要求されたライブラリの望ましいバージョンを、前記ローダコンポーネントによって選択するよう構成された前記コンピュータ可読プログラムコードは、前記要求されたライブラリの前記望ましいバージョンを、前記選択を命令する制御ファイルを使って、前記ローダコンポーネントによって選択するよう構成されたコンピュータ可読プログラムコード、を含む、請求項10に記載のコンピュータプログラム。前記ライブラリのバージョンを識別するためライブラリバージョンテーブルを用いるよう構成されたコンピュータ可読プログラムコードと、前記ライブラリの現行バージョンを追跡するライブラリバージョン変数を格納するよう構成されたコンピュータ可読プログラムコードと、をさらに含み、前記要求されたライブラリの望ましいバージョンを、前記ローダコンポーネントによって選択するよう構成された前記コンピュータ可読プログラムコードは、前記ライブラリバージョン変数の値を、前記ローダコンポーネントによって読み取るよう構成されたコンピュータ可読プログラムコードと、前記ライブラリバージョン変数の前記値に基づいて前記ライブラリの前記望ましいバージョンを選択するよう構成されたコンピュータ可読プログラムコードと、を含む、請求項10に記載のコンピュータプログラム。前記バインディングライブラリのローダコンポーネントを変えることなく、前記ライブラリの更新されたバージョンを使って、前記バインディングライブラリの前記バインディングコンポーネントを更新するよう構成されたコンピュータ可読プログラムコードと、前記ローダコンポーネントを介して前記ライブラリの前記更新されたバージョンをロードするよう構成されたコンピュータ可読プログラムコードであって、前記ソフトウエアコンポーネントは前記ローディングの間停止せず、前記ロードするよう構成されたコンピュータ可読プログラムコードは、前記バインディングコンポーネントの前のライブラリバージョンを切断するよう構成されたコンピュータ可読プログラムコード、および前記ライブラリの前記更新されたバージョンを接続するよう構成されたコンピュータ可読プログラムコード、を含む、前記ロードするよう構成されたコンピュータ可読プログラムコードと、前記ソフトウエアコンポーネントから、前記ライブラリの前記ロードされた更新バージョンに、前記ローダコンポーネントによって呼び出しを転送するよう構成されたコンピュータ可読プログラムコードと、をさらに含む、請求項10に記載のコンピュータプログラム。前記バインディングコンポーネントから処理デバイスのメモリ中にライブラリをロードする要求を、前記ローダコンポーネントによって受信するよう構成されたコンピュータ可読プログラムコードは、前記ソフトウエアコンポーネントから切断呼び出しを受信するよう構成されたコンピュータ可読プログラムコードと、前記ソフトウエアコンポーネントから接続呼び出しを受信するよう構成されたコンピュータ可読プログラムコードと、を含む、請求項10に記載のコンピュータプログラム。前記バインディングコンポーネントから処理デバイスのメモリ中にライブラリをロードする要求を、前記ローダコンポーネントによって受信するよう構成された前記コンピュータ可読プログラムコードは、前記ソフトウエアコンポーネントからの一切の呼び出しを受信するよう構成されたコンピュータ可読プログラムコード、を含む、請求項10に記載のコンピュータプログラム。新しくロードされたバインディングコンポーネントに対する必要に応じ、内部状態データ構造をそれらの現在の形式から新規形式に移行するよう構成されたコンピュータ可読プログラムコードをさらに含む、請求項10に記載のコンピュータプログラム。前記移行を実施するために必要な前記ロジックは、前記バインディングコンポーネントの各バージョンによって提供される、請求項18に記載のコンピュータプログラム。対応するプログラムに対する特定のライブラリバージョンを格納するプログラムバージョンテーブルを用いるよう構成されたコンピュータ可読プログラムコードをさらに含み、前記ローダコンポーネントによってトリガを認識するよう構成された前記コンピュータ可読プログラムコードは、識別されたソフトウエアコンポーネントからアプリケーションプログラミングインタフェース呼び出しを受信するよう構成されたコンピュータ可読プログラムコードを含み、前記要求されたライブラリの望ましいバージョンを前記ローダコンポーネントによって選択するよう構成された前記コンピュータ可読プログラムコードは、ライブラリバージョン変数の値に基づいて前記ライブラリの前記望ましいバージョンを選択するよう構成されたコンピュータ可読プログラムコードを含む、請求項10に記載のコンピュータプログラム。最近のOLDPシステム、およびメッセージ-待ち行列システムなどを含め、ミドルウエアは、通常、ネットワークにまたがるトランザクションをサポートし、異なるエンティティにより制御される一つ以上のドメインを横断することができる。しかして、OLTPアプリケーション、およびメッセージ-待ち行列アプリケーションなどのミドルウエアアプリケーションは、通常、ネットワーク中の相異なるコンピュータプラットフォーム上でトランザクションの実行を可能にする、クライアント/サーバ処理、およびブローカリング仲介を用いて実装される。従って、かかるミドルウエアシステムのソフトウエアのアップグレードを行うには、通常、ソフトウエアのインストールおよび構成を可能にするため、必要に応じアプリケーションを閉じ、関連するアプリケーションをオフラインにする必要が生じる。本発明の態様によれば、バインディング結合ライブラリをソフトウエアコンポーネントに関連付けることによって、動的ソフトウエアバージョン選択が遂行される。バインディングライブラリは、ローダコンポーネントおよびバインディングコンポーネントを含み、ローダコンポーネントは、ソフトウエアコンポーネントとバインディングコンポーネントとの間の媒介体としての役割をし、バインディングコンポーネントは、ソフトウエアコンポーネント側のロジックを含む。動的ソフトウエアバージョン選択は、バインディングコンポーネントから処理デバイスのメモリ中にライブラリをロードするためのトリガを、ローダコンポーネントによって認識すること、およびライブラリの望ましいバージョンを、ローダコンポーネントによって選択することをさらに含み、ライブラリの望ましいバージョンは、バインディングライブラリのバインディングコンポーネントに関連付けられたライブラリの少なくとも2つのバージョンから選択される。さらに、動的ソフトウエアバージョン選択は、関連付けられたソフトウエアコンポーネントを再起動する必要なしに、ライブラリの望ましいバージョンをコンピュータ処理システムのメモリ中にロードすることを含む。例えば、ライブラリの望ましいバージョンをロードするための、ローダコンポーネントによる決定は、制御プロセスによって投入されたライブラリバージョンテーブルまたは他のソースによって制御することができる。本発明のさまざまな態様によって、ソフトウエアシステムを停止することなく、または他のサービス中断をもたらすことなく、新規ソフトウエアを使ってソフトウエアシステムを修正することを可能にする技法を提供する。ソフトウエア修正には、例えば、ソフトウエアアップグレードの実施、以前のソフトウエアバージョンへの復旧、ソフトウエアバージョンのリロード、ソフトウエアバージョンの修理または補修などが含まれる。これにより、サービスの中断なく、例えば既知の問題の修正処置もしくは新しい機能またはその両方を包含し、部分的に、サービスレベルなどソフトウエアの異なるバージョンを使っている可能性のある、新規ソフトウエアにアップグレードができるソフトウエアシステムを提供する。また、ソフトウエアシステムを以前のバージョンに逆グレードすることもできる。さらに、クライアント側およびサーバ側のシステムの両方を新規ソフトウエアに修正することもできる。さらに、本明細書で説明する本発明のさまざまな態様によって、連続的に実行されているプロセス内の、アプリケーションプログラミングインタフェースAPI:applicationprogramminginterface境界におけるバージョン化された実装を、関連するソフトウエアコードに対してプロセスを再起動する必要がないように管理する仕方を提供する。プロセスを再起動せずに更新を実装するこの能力は、プロセスが、例えば顧客のアプリケーションなど、ソフトウエア修正を実行するため備えられた更新メカニズムの制御の下にない第三者のアプリケーションの場合であっても遂行することができる。しかして、ネイティブコードライブラリの実行時の更新および修正が容易に実装される。また、この更新メカニズムは、例えば動的結合ライブラリを利用するシステムにおいて、実行中のプロセスの下での機能的なライブラリバージョンの切り替えを可能にするための動的な内部状態処理を実行することができる。さらに、本発明の態様は、ライブラリに格納され得るソフトウエアコードをどのように何時アップグレード、ダウングレード、または別途に置き換えるかなど、移行の決定を行い制御する能力を促進する更新メカニズムを提供する。かくのごとく、本更新メカニズムは、ソフトウエアバージョン修正プロセスおよび決定におけるフレキシビリティを提供する、ダイナミックな動きをとることができる。さらに、本更新メカニズムは、例えば、プログラムごとのベースで、または他の選択基準に基づいて、選択的ソフトウエアバージョン設定を実施することができる。本発明のまださらなる態様によれば、更新メカニズムには、ソフトウエアコンポーネント呼び出しコンポーネントに関連付けられたバインディングライブラリを含めることができる。かくして、呼び出しコンポーネントは、随時にバインディングライブラリを呼び出し、アプリケーションプログラミングインタフェースAPI呼び出しを行う。バインディングライブラリは、ローダコンポーネントおよびバインディングコンポーネントとして実装される。ローダコンポーネントは、ソフトウエアコンポーネントからの呼び出しを受信し、同等なAPI呼び出しをバインディングコンポーネントに発行する媒介体の役割をする。バインディングコンポーネントは、ライブラリの少なくとも2つのバージョンを包含する、ソフトウエアコンポーネント側のロジックを含む。各ライブラリバージョンは、呼び出しコンポーネントからのアプリケーションプログラミングインタフェース呼び出しに応答するためのロジックを包含する。ローダコンポーネントは、トリガを認識または別途に検知し、それに応じて、決定ロジックを実行する。決定ロジックは、新規ライブラリバージョンの有無をチェックし、ロードすべきライブラリの望ましいバージョンを検知し、ローダコンポーネントに、バインディングコンポーネントからライブラリの望ましいバージョンを選択し、処理デバイスなどのメモリ中にロードするよう命令することができる。メモリ中にロードされたライブラリのバージョンを置き換える場合、旧ライブラリバージョンのアンローディングおよび新規ライブラリバージョンのローディングは、関連するソフトウエアコンポーネントの再起動の必要なくして実施される。例として、第一実施例において、例えば接続/切断または類似のAPIなど選択API呼び出しだけが、ライブラリバージョンをリロードさせる決定ロジックを有する。しかして、ローダコンポーネントは、関連するソフトウエアコンポーネントから、例えば接続および切断API呼び出しなど特定の命令または命令群を受信するのに応じて、トリガされ、メモリ中にロードされたライブラリのバージョンをチェックし、必要な場合そのバージョンを更新することができる。本明細書でさらに詳しく説明するように、この実施例において、ライブラリバージョンのリロードを実施するために状態移行をする必要はない。別の実施例として、ローダコンポーネントに対する全てのAPI呼び出しが、決定ロジックを有する。しかして、ローダコンポーネントは、関連するソフトウエアコンポーネントからの一切のAPI呼び出しを受信するのに応じて、トリガされ、メモリ中にロードされたライブラリのバージョンをチェックし、必要な場合そのバージョンを更新することができる。本明細書でさらに詳しく説明するように、この実施例では状態移行がサポートされなければならない。さらに、ライブラリバージョンのチェックをトリガする決定ロジックを、選択API呼び出しまたは全API呼び出しのいずれが有するのかに関係なく、ローダコンポーネントは、受信されたAPI呼び出しに応じて、どのプログラムがライブラリバージョンを移行するか、どれがしないかを制御可能にする、プログラムレベルまたはプログラム固有の制御をサポートすることができる。動的ソフトウエアバージョン選択ここで図面、具体的には図1を参照すると、本発明の態様による動的ソフトウエアバージョン選択を実施するのに適したシステム100の概略図が示されている。システム100は、単一の物理的処理デバイスに実装することができる。上記に換えて、システム100を、ネットワークなどによって通信可能に一緒に接続された複数の物理的処理デバイスに亘って分散させることもできる。この点に関し、本明細書でさらに詳しく説明するように、各処理デバイスには、本発明の態様を実行するためのハードウエアもしくはソフトウエア処理コンポーネントまたはその両方を含めることができる。図示のように、システム100は、少なくとも一つのソフトウエアコンポーネント102および関連するバインディングライブラリ104を含む。ソフトウエアコンポーネント102には、例えば、関連バインディングライブラリ104など別のコンポーネントのサービスを呼び出す任意のソフトウエアを含めることができる。ソフトウエアコンポーネント102は、例えば、ソフトウエアアプリケーション、プログラム、オブジェクト、サービス、エージェント、オペレーティングシステムなどとして実装することができる。この点に関し、本明細書では、ソフトウエアコンポーネント102を呼び出しコンポーネント102と称することもある。バインディングライブラリ104は、ローダコンポーネント106およびバインディングコンポーネント108を包含する2つのコンポーネント中に実装される。ローダコンポーネント106は、ソフトウエアコンポーネント群102およびバインディングコンポーネント108と相互作用し、バインディングコンポーネントの関連ライブラリの適正なバージョンをメモリ110中にロードする。また、ローダコンポーネント106は、随意的に一つ以上の任意の情報源112と相互作用することができ、この情報源はバージョン管理を実行する際の助力として設けることができる。例えば、本明細書でさらに詳しく説明するように、情報源112は、メモリ110の中、または別個のファイルとしてのいずれかに格納されたテーブルとして実装することができ、該テーブルは、バインディングコンポーネント108によって維持されている関連ライブラリの現行バージョンを示す。バインディングコンポーネント108は、ライブラリの一つ以上のバージョンを含み、これには、ライブラリの少なくとも2つのバージョンを包含する、ソフトウエアコンポーネント側のロジックが入っている。各ライブラリバージョンは、呼び出しコンポーネント102からのアプリケーションプログラミングインタフェースAPI呼び出しに応答するためのロジックを包含する。本明細書で用いるライブラリは、一般的で限定のない用語として意図されている。例えば、ライブラリバージョンには、各々にjarファイル、プログラム、モジュール、動的結合ライブラリなどの、ソフトウエアの任意の関連パッケージングユニットなどを含めることができる。さらに、各ライブラリバージョンは、ネイティブコードのライブラリに限定されず、しかしてJAVAなどの実装により用いることができるローダコンポーネント106は、ソフトウエアコンポーネント102とバインディングライブラリ104のバインディングコンポーネント108との間の媒介体としての役割をする。この点に関し、ローダコンポーネント106は、静的にソフトウエアコンポーネント群102とリンクする唯一のコンポーネントとすることができる。本発明の態様によれば、ローダコンポーネント106をライブラリ自体として実装することができる。この例示的実装において、ローダコンポーネント106は、主として転送ライブラリの機能をする。すなわち、大部分の時間、ローダコンポーネント106は、ソフトウエアコンポーネント102からAPI呼び出しを受け、それに応じて、バインディングライブラリ108に関連付けられた、現在ロードされているライブラリバージョン中の同等なAPIを呼び出す。本発明のさらなる態様によれば、決定ロジックは、ローダコンポーネント106からバインディングコンポーネント108の適切なライブラリへの転送機能の実行パス中に挿入することができる。どの転送機能が決定ロジックを有すべきでどれが有さざるべきかの選択は、特定の実装の如何により、その例を後記で詳細に説明する。バインディングコンポーネント108は、ライブラリの一つ以上のバージョンを含む。例えば、図示のように、バインディングコンポーネント108は、あるライブラリのN個のバージョンを含む。前記のNはライブラリバージョンの任意の数を表すことができる。各ライブラリバージョンには、例えば、ソフトウエアコンポーネント102が、ミドルウエアプロセスに関連付けられたAPI呼び出しを実行するためなど、特定のオペレーションまたは機能を実行するために使うソフトウエアコンポーネント側のロジックを提供する、動的リンクライブラリを含めることができる。例えば、バインディングコンポーネント108には、ソフトウエアコンポーネント102からのAPI呼び出しを遂行またはこれに別途に応答するロジックを含めることができる。前述で詳細を述べたように、バインディングコンポーネント108は、さまざまな形で実装することができる。図示のように、ファイルシステムは、複数のバインディングコンポーネントバージョンを格納し、各バインディングコンポーネントバージョンは関連するライブラリを有する。全ての必要なプログラムおよびコードがライブラリにカプセル化されている場合など、別の例示的実装において、バインディングコンポーネント108には、例えば図3中に示されているような、ライブラリバージョンの各々を格納するファイルシステムライブラリを含めることができる。上記に換えて、他のバインディングコンポーネント構成も実装することもできる。ローダコンポーネント106は、ソフトウエアコンポーネント102による呼び出しをサポートするのに必要ないかなるロジックも包含していない。それよりも、ローダコンポーネント106は、バインディングライブラリ104のバインディングコンポーネント108に関連付けられたライブラリの適正なバージョンを、対応するコンピュータ処理システムのメモリ110中に、動的にロードする。ライブラリをロードするプロセスは、関連するソフトウエアコンポーネントの再起動を必要とせずに達成される。適切なライブラリが選択され、メモリ110中にロードされたならば、ローダコンポーネント106は、ソフトウエアコンポーネント102からの呼び出しを受信し、ソフトウエアコンポーネント102からのものと同等な呼び出しをライブラリからメモリ110中にロードされた適切なロジックに転送する。このように、ローダコンポーネント106はソフトウエアコンポーネント102からの呼び出しをインターセプトし媒介する。ライブラリがメモリ110中にロードされたならば、ローダコンポーネント106は、新規バインディングライブラリバージョンまたは既存だが異なるバージョンのバインディングライブラリに戻す命令の有無を時折チェックする。ローダコンポーネント106がメモリ110中にロードされたライブラリバージョンを変更する必要を検知した場合、その変更は、根底にあるソフトウエアコンポーネント102の再起動を必要とせずに実装される。ある例示的実装において、ローダコンポーネント106が、現在ロードされているまたは別途に使用されている、バインディングコンポーネント108のライブラリバージョンが、最新の利用可能なバインディングコンポーネント108よりも前のレベルであることを検知したときなど、といった状況に基づいて、ローダコンポーネント106は、メモリ中にロードされたライブラリの現在のバージョンを動的にアンロードし、そのライブラリの最新バージョンをバインディングコンポーネント108からメモリ中に動的にロードすることができる。また、ローダコンポーネント106は、随意的に、例えば新しく選択されたライブラリバージョン中に備えられていることのある、移行ロジックを呼び出し、必要な場合、任意の内部データ構造を、新規のライブラリバージョンの必要条件に適合するよう再編成することができる。このように、内部状態の移行は、バインディングライブラリ104によって、自動的に且つ動的に管理される。ライブラリの新規のバージョンがメモリ中にロードされ、必要に応じ内部状態データ構造が移行されたならば、ローダコンポーネント106は、新規ライブラリを使って、ソフトウエアコンポーネント102からの現在の呼び出し呼び出しが行われている場合の処理を完了することができる。本明細書でさらに詳しく説明するように、ローダコンポーネント106は、バインディングコンポーネント108からロードする適切なバージョンのライブラリを選択するため、一つ以上の情報源112などのリソースを用いることができる。この点に関し、情報源112には、バインディングコンポーネント108からの望ましいライブラリを識別するための、ファイルシステムシンボリックリンク例、UnixRのようなファイルシステムなど、制御ファイル、一つ以上のテーブルまたはデータベースファイルとして保存またはメモリ110中にロードされる、ポインタ、または他のソースを含めることができる。本発明のさらなる態様によれば、例えば、マネージャ機能、アドミニストレータ機能、スーパバイザ機能など、共通の制御機能によって、ソフトウエアバージョン制御を監視または監督することができる。例えば、マネージャは、接続された全てのソフトウエアコンポーネント102が、次にアプリケーションがローダコンポーネント106に呼び出しを行うとき、望ましいライブラリバージョンを使用するように例えば、ローダコンポーネント106を介して命令することができる。また、マネージャは、随時、新規のライブラリバージョンを使ってバインディングコンポーネント108を更新することができる。このように、バインディングライブラリ104は、単独で、もしくは、例えばマネージャまたは監視ロジックなど一つ以上の追加プロセスとの組み合わせで、更新メカニズムを実施する。本明細書で説明する技法は、バインディングコンポーネント108内のライブラリバージョンを介するバインディングソフトウエアの動的アップグレード/ダウングレードを可能にするルールまたは他のプロセスによって駆動することができる。さらに、バインディングソフトウエアの動的アップグレード/ダウングレードは、顧客アプリケーションプログラムのサブセットに対しでだけ行うようにしたり、特定のアプリケーションに対して行うようにしたり、または特定の日時に行うようにしたりなどすることができる。図2を参照すると、フローチャートが、本発明のさまざまな態様による、動的ソフトウエアバージョン選択を遂行するプロセス200の全体的フローを示している。プロセス200は、方法、またはハードウエアとソフトウエアとの組み合わせを包含するシステムの一部として実装することができる。例えば、ソフトウエアを物理メモリデバイスに格納し、そのソフトウエアが少なくとも一つのプロセッサに処理されるとき、該ソフトウエアが、対応する物理マシンに、図示のプロセス200によって規定される処置を実行させるようにすることができる。しかして、例えば、プロセス200は、図1を参照して例示し説明したシステム100上に実装することができる。さらに、プロセス200は、内部に具現されたコンピュータ可読のプログラムコードを有する有形のコンピュータ可読記憶媒体を含むコンピュータプログラム製品として実装することもできる。プロセス200は、202において、バインディングライブラリをソフトウエアコンポーネントに関連付けするステップを含む。バインディングライブラリは、ローダコンポーネントおよびバインディングコンポーネントを含み、ローダコンポーネントは、ソフトウエアコンポーネントとバインディングコンポーネントとの間の媒介体としての役割をし、バインディングコンポーネントは、ソフトウエアコンポーネント側のロジックを含む。本発明のある態様によれば、バインディングライブラリのリロードが必要であることを認識または判定するのはローダコンポーネントの役割である。この点に関して、ローダコンポーネントは、異なるバインディングライブラリをロードしなければならないことも認識する。プロセス200は、204において、ロードされたライブラリバージョンの、ローダコンポーネントによる検証をトリガするステップをさらに含む。例として、ローダコンポーネントは、決定ロジックを実行し、例えば、ルール、条件、または他の情報に基づいて、現在ロードされているライブラリを、例えば、新しいバージョンにアップグレードする、または以前のバージョンに逆グレードするなどの修正をすべきかどうかを決定する。このトリガは、ライブラリバージョンの検証をトリガする決定ロジックに関連付らけれた特定のAPI呼び出しを受信することによって実行される。別の実施例として、ローダコンポーネントによって受信される全てのAPI呼び出しに、それらに関連付けた決定ロジックを持たせることができる。ライブラリがロードされなければ、ローダコンポーネントは、メモリ中にロードするライブラリバージョンを選択するために、同じルール、条件、または他の情報を用いることができる。メモリ中にロードされたライブラリのバージョンを修正する必要がない場合、プロセス200は終了する。必要がある場合、プロセス200は、206において、要求されるライブラリの望ましいバージョンをローダコンポーネントによって選択するステップをさらに含む。ライブラリの望ましいバージョンは、バインディングライブラリのバインディングコンポーネントに関連付けられた、ライブラリの少なくとも2つのバージョンから選択することができる。要求されたライブラリの望ましいバージョンは、例えば、ファイルシステムシンボリックリンクなどのファイル、選択を命令する制御ファイルなどのファイルを使って選択することができる。別の例として、ローダコンポーネントは、テーブルまたは他の情報源を調べて、メモリ中にロードする望ましいバージョンの識別を確認することができる。例として、本プロセスは、例えばローダコンポーネントを介しライブラリバージョンテーブルを使って、ライブラリのバージョンを識別することができる。しかして、プロセス200は、ライブラリの現行バージョンを追跡するライブラリバージョン変数を格納することができ、ローダコンポーネントがこれにアクセスして利用することができる。このようにして、例えば、ローダコンポーネントは、ライブラリバージョン変数の値を読み取り、そのライブラリバージョン変数の値に基づきライブラリの望ましいバージョンを選択することができる。プロセス200は、208において、関連するソフトウエアコンポーネントを再起動する必要なしに、そのライブラリの望ましいバージョンをコンピュータ処理システムのメモリ中にロードするステップをさらに含む。本プロセスには、ライブラリバージョンが選択されメモリ中にロードされたならば、ソフトウエアコンポーネントからのソフトウエアアプリケーションプログラムインタフェース呼び出しを、ローダコンポーネントによって受信するステップと、受信した呼び出しを、メモリ中にロードされたライブラリの望ましいバージョンの対応ソフトウエアアプリケーションプログラミングインタフェースに転送するステップとをさらに含めることができる。ミドルウエア環境における動的バージョン制御本発明のさまざまな態様は、停止時間またはサービスの中断なしに、新しい動的結合ライブラリをミドルウエアシステムに組み入れることによって、ミドルウエア環境などの環境における動的バージョン制御を容易化する。かかる実装は、ミドルウエア環境におけるバージョン区分け使用の管理をさらに提供する。図3を参照すると、動的ソフトウエアバージョン選択を実施するためのシステム300の概略図が示されている。システム300は、本発明の態様を実装し、多くの点において図1のシステム100に関して述べたことと類似である。しかしながら、システム300は、本発明のさらなる態様による、特定の機能を説明するため、メッセージングシステム環境の例示的コンテキスト状態、状況中に示されている。システム300は、複数のソフトウエアコンポーネント302を包含し、これらは顧客アプリケーションとして実装されている。各ソフトウエアコンポーネント302は、ローダコンポーネント306およびバインディングコンポーネント308を含むバインディングライブラリ304に関連付けられている。バインディングコンポーネント308は、メッセージング-待ち行列システムのアプリケーションプログラミングインタフェース呼び出しを処理するために必要なソフトウエアコンポーネント側のロジックの全てを包含する。該して、バインディングライブラリ304は、ローダコンポーネント306およびバインディングコンポーネント308を包含し、図1を参照して説明した同名のコンポーネントと類似である。例示的システム300には、ニューヨーク州アーモンクのインターナショナルビジネスマシンコーポレーションによる、メッセージング-待ち行列用のMQSeriesIBM社の登録商標ミドルウエアシステムなど、メッセージ-待ち行列システムを組み込むことができる。かかるアレンジメント方法/装置/配列を用いて、さまざまなソフトウエアコンポーネント302は、アプリケーションをリンクするための自分専用の論理的接続を持たなくても、待ち行列にアプリケーション固有のデータメッセージの書き込み、これから読み出しをすることによって、相互に通信することができる。この点に関し、各バインディングライブラリ304は、例えば、メッセージング-待ち行列システムを使って通信するためクライアント314を実施する実行ファイルのセットを包含することができる。システム300は、複数のクライアント処理デバイス322をさらに包含し、これらデバイスは、これらに関連する顧客ソフトウエアコンポーネント302を実行する過程で、ネットワーク324を介してサーバコンピュータ326と通信する。典型的な物理的処理デバイスには、例えば、サーバコンピュータ、パソコン、ノート型パソコン、ネットブック型パソコン、タブレット型パソコン、トランザクションシステム、用途指向アプライアンス、例えば、携帯データ端末PDA:personaldataassistant、パームコンピュータ、携帯電話アクセス処理デバイス、スマートフォンなどの普及したコンピューティングデバイス、またはコンピュータコードを実行する能力のある他の任意のデバイスなどを含めることができる。ネットワーク324は、さまざまなクライアント処理デバイス322とサーバコンピュータ326との間の通信リンクを提供し、これを、例えば、ルータ、ハブ、ファイヤウオール、ネットワークインタフェース、有線または無線の通信リンクおよび対応する相互接続機能、携帯電話基地局および例えば携帯電話とTCP/IPとの間を変換するなどの対応する携帯電話変換技術等を含むネットワーキングコンポーネントによってサポートすることができる。さらに、ネットワーク324には、一つ以上のイントラネット、エクストラネット、ローカルエリアネットワークLAN:localareanetwork、広域ネットワークWAN:wideareanetwork、無線ネットワークWIFI、ワールドワイドウェブを含むインターネット、もしくは、クライアント処理デバイス322とサーバコンピュータ326との間の通信を、リアルタイムまたは例えばタイムシフト、バッチ処理など他の仕方で可能にする他のアレンジメント、または前述の組み合わせを使用する接続を含めることができる。サーバコンピュータ326は、例えば、待ち行列マネージャ328を実行するために用いることができ、該マネージャは長期的サービスプロセスのセットとして具現することができる。待ち行列マネージャ328は、顧客ソフトウエアコンポーネント302の各々に対するメッセージの送信および待ち行列を管理する実行時アプリケーションを定義する。この実施例において、メッセージング-待ち行列システムは、クライアント/サーバ構成中に実装される。上記に換えて、待ち行列マネージャ328のインスタンスを、各クライアント処理デバイス322上の長期的プロセスとして実装することもできよう。大まかに言えば、顧客ソフトウエアコンポーネント302は、API呼び出しを使って、自分に関連するクライアント314を介し待ち行列マネージャ328と通信し、例えば、他の顧客のアプリケーションに関連付けられた待ち行列にメッセージを送信したり、または関連する待ち行列から、他のソフトウエアコンポーネント302が置いたメッセージを読み出したりする。しかして、待ち行列マネージャ328は、各々が製品固有のバインディングライブラリ304を使用してこれらのサービスプロセスにアクセスする、相異なるクライアント処理デバイス322に関連付けられた、潜在的に多数の異なった顧客ソフトウエアコンポーネント302と相互作用する。かかるアレンジメントは、待ち行列マネージャが、例えば、クライアント/サーバ実装の一部としてサーバコンピュータ326上などの遠隔にあるか、あるいは、対応するクライアント処理デバイス322のローカル構成中のバインディングライブラリ304とともに同一場所に配置されているかどうかにかかわらず実施することができる。時折に、システム300内で作動している多様なコンポーネントのソフトウエアを更新することが望ましい。メッセージング-待ち行列システムが更新の実施を必要としているとしよう。本発明のさまざまな態様によれば、メッセージ-待ち行列システムソフトウエアの新規バージョンは、サービスを中断することなく動的に展開することができる。かかるソフトウエア修正には、例えば、バインディングライブラリ304の関連インスタンスによってロードされたライブラリの関連バージョンなど、各顧客ソフトウエアコンポーネント302に結び付くソフトウエアの変更が含まれる。ソフトウエア修正には、例えば、待ち行列マネージャ328への変更などメッセージング-待ち行列システムの内部プロセスの変更、バインディングコンポーネント308に関連付けられた、格納されたライブラリバージョンの変更、追加または削除などがさらに含まれる。かかる内部プロセスは、メッセージング-待ち行列システムの内部のソフトウエアを修正する場合に、ソフトウエアアップグレードが利用可能になったときまたはそのすぐ後に、再起動が可能なように設計することができる。それに対して、顧客ソフトウエアコンポーネント302は、顧客のビジネス要求事項によって決定されたプロセスライフサイクル要件を有し、これらコンポーネントは、メッセージング-待ち行列システムによる制御でなく、顧客の制御下にある。一般に、待ち行列マネージャ328に関連付けられたサービスプロセスは、従来のオペレーティングシステムのプロセスとして実装することができる。MQSeriesIBM社の登録商標待ち行列マネージャ中の例に、メッセージチャネルエージェントMCA:MessageChannelAgentおよびローカル待ち行列マネージャエージェントLQMA:LocalQueueManagerAgentがあり、前者はネットワークを介して他のMCAとのメッセージを読み取り、書き込みするのに使用され、後者は基礎的待ち行列エンジンを形成する。待ち行列マネージャ328自体が、必要に応じ再使用される利用可能なMCAおよびLQMAプロセスのプールを維持するという意味で、これらのプロセスは管理されている。MCAおよびLQMA双方のプロセスの遊休中のインスタンスは、新規作業が到着次第再使用される。例えば新規ライブラリまたはプログラムいずれかの形で、新しいソフトウエアがファイルシステム中にインストールされるとき、待ち行列マネージャは、これらプログラムの一切の遊休インスタンスを停止し、新しいプロセスを起動することができる。これらプロセスは、一切他からの助力なしに、新規ソフトウエアを使用することになる。また、同様に、ソフトウエアのダウングレートも、新規ソフトウエアファイルをインストールしたファイルシステム変更を逆実施することによって可能である。顧客ソフトウエアコンポーネント302は、例えばMQSeriesIBM社の登録商標の場合であればlibmqmと名付けられたライブラリなどのバインディングライブラリ304を使って、メッセージング-待ち行列システムのサービスにアクセスを得る。バインディングライブラリ304は、一面では、アプリケーションに一定で明確なインタフェースを提供する。さらに、バインディングライブラリ304は、待ち行列マネージャ328の内部とも相互作用する。顧客ソフトウエアコンポーネント302は、通常、新規ソフトウエアが利用可能になっても再起動を強制することはできない。例えば、通常、サーバコンピュータ326上のプロセスは、遠隔クライアント処理デバイス322上のソフトウエアコンポーネント302の再起動を強制することはできない。また一方、この実施例において、複数の異なるライブラリバージョンを含む各バインディングコンポーネント308によって示されるように、プログラム/ライブラリ実行ファイルの現在セットおよびプログラム/ライブラリ実行ファイルの新規セットの両方が、各ファイルシステムにおいて共に利用可能である。この点に関し、メッセージング-待ち行列システムに関連付けられた各ソフトウエアコンポーネント302によって実行される、例えばクライアント314などのソフトウエアは、図1および図2を参照して説明したのと類似の仕方で更新することができる。顧客が自分のソフトウエアコンポーネント302を再起動する必要なしにバインディングライブラリの新規バージョンの展開を可能にするため、各バインディングライブラリ304は、図1を参照して説明したローダコンポーネント106およびバインディングコンポーネント108に対するのと類似の仕方で、ローダコンポーネント306およびバインディングコンポーネント308を包含する、2つの異なるコンポーネントに分割される。ローダコンポーネント306は、例えば小型のライブラリとして実装することができる。しかしながら、ローダコンポーネント306は、メッセージング-待ち行列システムのアプリケーションプログラミングインタフェースをサポートするため必要なロジックを一切具備していない。それよりも、ローダコンポーネント306は、バインディングライブラリの適正なバージョンを、対応するクライアント処理デバイス322のメモリ中にロードする。次いで、ローダコンポーネント306は、アプリケーションプログラムからのものと同等なAPI呼び出しを、例えばクライアント314など、ロードされたライブラリ中の適切なインタフェースに転送し、メッセージのメッセージ待ち行列への送信、およびメッセージ待ち行列からのメッセージの読み出し、または、別途にメッセージング-待ち行列システムとの相互作用を実施する。ローダコンポーネント306がバインディングコンポーネント308からのライブラリを選択し、ロードしたならば、ローダコンポーネント306は、ソフトウエアコンポーネント302からの全てのAPI呼び出しの同等バージョンを、バインディングコンポーネント308からロードされたライブラリに転送する。しかして、ローダコンポーネント306は、メッセージング-待ち行列システムに関連づけられた、顧客ソフトウエアコンポーネント302とバインディングコンポーネント308からロードされたライブラリとの間の、全API呼び出しを効果的にインターセプトし媒介する。クライアント処理デバイス322上のライブラリのソフトウエア修正を実施するため、サーバコンピュータ326または他の任意のソースは、対応するライブラリの新規バージョンをバインディングコンポーネント308に提供する。バインディングコンポーネント308は、ライブラリを、対応するローダコンポーネント306が、ライブラリの各バージョンを一意的に識別できるような仕方で格納する。さらに、ローダコンポーネント306には、本明細書でさらに詳しく説明するように、ロードされるライブラリのバージョンを識別する情報を提供することができる。また一方、ローダコンポーネント306に対しライブラリの新規バージョンを用いて対応するクライアント処理デバイス322のメモリを更新させる適切な命令が与えられるまでは、顧客ソフトウエアコンポーネント302の実行中のインスタンスは、関連するクライアント処理デバイス322のメモリ中に現在ロードされているライブラリバージョンのいずれの使用も継続することができる。ローダコンポーネント306は、所定イベントのタイミングに応じ、前回ライブラリバージョンが既にロードされていた場合、前回バージョンをアンロードすることができる。それに応じ、ローダコンポーネント306は、そのライブラリの新規バージョンをバインディングコンポーネント308からロードできる。ある実施例によれば、顧客ソフトウエアコンポーネント302は、所定の切断および再接続APIシーケンスを用いて、バインディングコンポーネント308からの新規ライブラリのローディングをトリガすることができる。顧客ソフトウエアコンポーネント302が、アプリケーションプログラミングインタフェース呼び出しのこのシーケンスを実施するまでは、顧客ソフトウエアコンポーネント302は旧ライブラリバージョンのソフトウエアを使い続けることになる。ある例示的実装において、顧客ソフトウエアコンポーネント302がバインディングライブラリ304に、切断および再接続API呼び出しを発行することによって、ソフトウエアライブラリ修正をトリガすることができる。これにより、ローダコンポーネント306は、顧客のアプリケーションの切断に応じてメモリ中にロードされたライブラリの現行バージョンを動的にアンロードし、続いて、顧客のアプリケーションの接続に応じてそのライブラリの新規バージョンを動的にロードすることができる。MQSeriesIBM社の登録商標の例示的実装において、バインディングコンポーネント308へのライブラリのローディングおよびアンローディングは、ローダコンポーネントのMQCONNMQシリーズ接続およびMQDISCMQシリーズ切断処理で実行される。この実施例においてライブラリをロードもしくはアンロードまたはその両方を行うための命令は、対応する顧客ソフトウエアコンポーネント302によって実行され、これにより、顧客アプリケーションが更新のタイミングを制御することを可能にする。本発明の態様によれば、前述の例示的実装において、接続/切断を転送するAPIだけが、その中に決定ロジックを有している必要がある。接続/切断APIに対し、呼び出しが対応するライブラリに転送される前に決定ロジックを実行することができる。しかして、現在ロードされているライブラリバージョンを修正する必要が生じた場合、かかる変更を、呼び出されたAPIを実行する前に遂行することができる。他のAPIは、ローダコンポーネント306から関連するバインディングライブラリ308の対応ライブラリバージョンへの、同等API呼び出しをトリガし、内に決定ロジックを持たない機能の転送を実施することができる。この場合、ローダコンポーネント306は、上記の特別なAPIまたは同様な所定の初期化/初期化解放APIの中の新規バインディングライブラリの有無をチェックするだけである。他のAPIは、ローダコンポーネント306がバージョンチェックを行うようトリガすることはない。接続/切断APIは特別とみなされる。というのは、これらは、バインディングライブラリ304が他のAPIの処理のため用いる内部状態をセットアップし、解除するからである。しかして、接続/切断API自体が状態データをセットアップし、解除するので、ローダコンポーネントがトリガする状態の移行をサポートする必要はない。かくして、状態移行は必要がない。さらに別の実施例によれば、あらゆるAPIまたはAPIのサブセットが、ライブラリバージョンをチェックし必要な場合ライブラリ修正をトリガするための、決定ロジックを有する。この決定ロジックは、例えば、同等呼び出しがロードされているライブラリバージョンに転送される前に実行することができる。全APIまたはそのサブセットの実行のため決定ロジックを実行する必要があるので、現在望まれているライブラリバージョンの表示もしくは利用可能なライブラリバージョンのリストまたはその両方を格納している、メモリベースの共用ライブラリバージョンテーブルを使うなどして、このロジックを効率化することができる。バインディングライブラリは、APIが呼び出されたときの内部状態データを持ち越す可能性が高いので、ローダコンポーネント306は、例えば新しいバインディングライブラリ中の移行APIを使うなどして、バインディングライブラリの状態を移行する能力を有すべきである。しかして、本発明の態様によれば、メモリ中にロードされることになる、バインディングコンポーネント308からのライブラリバージョンの選択は、オペレーティングシステムの制御から外され、これをローダコンポーネント306の直接制御の下に置くことができる。ローダコンポーネント306は、ライブラリをローディングする前に、必要などのような妥当性確認をも遂行することができ、単に基盤のオペレーティングシステムのライブラリローディングメカニズムに頼って可能なよりも、もっと高度なローディング技法および方策を実施することができる。さらに、ローダコンポーネント306は、例えば、内部状態移行が可能で、後続のバインディングライブラリ中の移行APIにサポートされていれば、以前のライブラリバージョンソフトウエアレベルへのフォールバックを行う能力も有する。しかして、本発明の態様は、システムソフトウエア、例えばこの実施例ではミドルウエア、のメンテナンス更新のための計画的な停止を排除することによって、連続的な使用可能性に寄与する。この点に関し、本明細書で説明するソフトウエアの機能は、システムソフトウエアの再起動の必要なしに、さらには変更中のアプリケーションの休止もなしに変更を行うことを可能にできる。このように、変更を適用するプロセスの間、同じシステムソフトウエアによって2つまたはそれ以上の異なるアプリケーションインタフェースが提供できるようにして、変更がアプリケーションインタフェースに影響を与える場合であっても、アプリケーションがシステムソフトウエアの使用を継続することを可能にする例としてメッセージング-待ち行列システムなど、ミドルウエアシステムに関連付けられたソフトウエアの動的更新についての本説明は、本明細書に詳記された、サービスの中断なしに動的ソフトウエア修正を実施するための技法を説明するための例示を目的として提示されており、限定するためのものではない。ライブラリバージョンテーブル図4を参照すると、動的ソフトウエアバージョン選択を実施するためのシステム400の概略図が示されている。システム400は、一般に、ソフトウエアコンポーネント402および関連するバインディングライブラリ404を包含する。バインディングライブラリ404は、ローダコンポーネント406およびバインディングコンポーネント408を包含する、2つの別個のコンポーネント中に実装される。この点に関し、ソフトウエアコンポーネント402、バインディングライブラリ404、ローダコンポーネント406、およびバインディングコンポーネント408は、図1~3のいずれか一つ以上を参照して説明した同名のコンポーネントと実質上類似である。本発明のさらなる態様によれば、新規ライブラリソフトウエアのローディングおよび使用は、一般に、顧客アプリケーションソフトウエアコンポーネント402がAPI呼び出しを発行するときにトリガすることができる。本明細書でさらなる詳細を説明したように、バージョンチェックおよびライブラリのリローディングのトリガは、ローダコンポーネント406が特別なAPI、例えば接続および切断APIなどを受信するのに応じて発生させることができる。さらに別の実施例として、バージョンチェックおよびライブラリのリローディングのトリガは、ローダコンポーネント406が、対応する呼び出しソフトウエアコンポーネント群からの全APIを受信するのに応じて発生させることもできる。示された例示的実装において、システム400は、共用ライブラリバージョンテーブル430をさらに含む。この共用ライブラリバージョンテーブルは、バインディングコンポーネント408に保存されたライブラリのさまざまなバージョンに関する情報を格納する。例えば、図示のように、共用ライブラリバージョンテーブル430は、対応するバインディングコンポーネント408に関連付けられた全ての利用可能なライブラリの名称およびバージョン番号を包含する。加えて、共用ライブラリバージョンテーブル430には、ライブラリバージョン変数432を包含させることができ、該変数は、例えば共用テーブルのどのエントリかなど、ライブラリのどのバージョンが、メモリ中にロードされるべきライブラリの現行バージョンに相当するかの表示を格納する。共用テーブルは、図3を参照して説明した待ち行列マネージャ328など、任意の管理プロセスによって投入することができる。さらに、例えば共用ライブラリバージョンテーブル430に、利用可能なライブラリバージョンを発行するためのメカニズムを実装することができる。例えば対応する決定ロジックに関連付けられた特別API呼び出しの受信など所定のトリガリングイベントに応じて、または全てのAPI呼び出ししかるべき決定ロジックに関連付けられた全てのAPI呼び出しの受信に応じて、あるいは特定の実装による他の決定ロジックに基づいて、ローダコンポーネント406は、共用ライブラリバージョンテーブル430を調べ、顧客プログラムソフトウエアコンポーネント402が、利用可能なライブラリの適正な現行バージョンを使用しているかどうかを確かめる。ソフトウエアコンポーネント402がライブラリの適正なバージョンを使用していない場合、ローダコンポーネント406は、旧ライブラリバージョンのアンローディングを行うよう調整し、適正な新バージョンをロードする。例えば、ローダコンポーネント406は、ライブラリバージョン変数432に格納された値をメモリにロードされているライブラリのバージョンと対比することができる。かくして、例えば、顧客ソフトウエアコンポーネント402が、対応する決定ロジックに関連付けられたAPI呼び出しを発行した何時においても、ローダコンポーネント406は、利用可能なライブラリに対比して、現在使われているライブラリバージョンの検査を実施することができる。ローダコンポーネント406が、現在ロードされているライブラリは最新の利用可能ライブラリとは異なるレベルのものであることを検知した場合、ローダコンポーネントは、現在のライブラリを動的にアンロードし、規定されたライブラリを動的にロードすることができる。随意的に、新規ライブラリ中の特別な移行APIへの呼び出しを実施し、例えば、必要な場合その新規ライブラリの要件に適合するように一切の内部状態データ構造を再編成し、新規ライブラリを用いて只今のAPI呼び出しの処理を遂行することができる。ある例示的実装において、例えば図3を参照して説明した待ち行列マネージャなど、マネージャまたは他の監視プロセスは、全ての接続された顧客アプリケーションプログラムに対し、次にアプリケーションがAPI呼び出しを行うとき、より新しいまたは古いバージョンなど、ライブラリソフトウエアの異なるバージョンを使うよう命令することができる。上記に換えて、他のルール、タイミング条件などによって、何時ソフトウエアバージョン修正を実施するかを命令することもできる。プログラム固有ライブラリバージョンの制御図5を参照すると、動的ソフトウエアバージョン選択を実施するためのシステム500の概略図が示されており、該システムは、動的ソフトウエアバージョン選択を、どのプログラムを新規/異なるバージョンに移行しどれは移行すべきでないかの一部の制御を可能にするプログラム固有制御をサポートするように拡張している。システム500は、一般に、ソフトウエアコンポーネント502および関連するバインディングライブラリ504を包含する。バインディングライブラリ504は、ローダコンポーネント506およびバインディングコンポーネント508を包含する、2つの別個のコンポーネント中に実装されている。この点に関し、ソフトウエアコンポーネント502、バインディングライブラリ504、ローダコンポーネント506、およびバインディングコンポーネント508は、図1~4のいずれか一つ以上を参照して説明した同名のコンポーネントと実質上類似である。通例、全てのソフトウエアコンポーネント502は、それらがアプリケーションプログラミングインタフェース呼び出しを実行する際、ライブラリの指定現行バージョン、通常最新バージョン、に移行するようにされていることが多い。しかしながら、本発明のさらなる態様によれば、どのプログラムが現行バージョンに移行すべきか、および移行すべきでない特定のプログラムがあるかどうかについての制御が提供される。図示のように、図5には、共用ライブラリバージョンテーブル530を包含させることができ、これは図4を参照して説明した共用ライブラリバージョンテーブル430と類似である。しかしながら、この例示的実装は、共用プログラムバージョンテーブル540をさらに含む。共用プログラムバージョンテーブル540は、複数のソフトウエアコンポーネント、および各アプリケーションに対する対応ライブラリバージョンの情報を格納している。例えば、図示のように、第一ソフトウエアプログラムUPDATEはライブラリバージョン2を用いて設定されている。また一方、ソフトウエアプログラムREPORTはライブラリバージョン3を使って設定されている。しかして、ローダコンポーネント506を呼び出すソフトウエアコンポーネント502がソフトウエアプログラムUPDATEである場合、ローダコンポーネント506は対応する決定ロジックに関連付けられた適切なAPIによってトリガされたとき、その呼び出しを処理する前に、ライブラリバージョン2がロードされていることを確実にする。同様に、ローダコンポーネント506を呼び出すソフトウエアコンポーネント502がプログラムREPORTである場合、ローダコンポーネント506は対応する決定ロジックに関連付けられた適切なAPIによってトリガされたとき、その呼び出しを処理する前に、ライブラリバージョン3がロードされていることを確実にする。共用プログラムバージョンテーブル540を中央制御することによって、管理コンポーネントは、何時、個々のプログラムが新規のまたは異なるライブラリバージョンへの移行を開始すべきかを決定することができる。共用プログラムバージョンテーブル540は、プログラム名称またはプログラム名称に合致するパターンなどをライブラリバージョンにマップする。共用プログラムバージョンテーブル540は、例えば図3の例の中の待ち行列マネージャ328などの適切な管理プロセス、または他の任意の適切な監視プロセスによって投入される。さらに、共用プログラムバージョンテーブル540は、関連付けられた特定のライブラリバージョンを有する、プログラムの名称または名称パターンを包含する。ローダコンポーネント506は、バージョンのアップグレードまたはダウングレードの決定を行うに先立って、プログラムライブラリバージョンテーブル中の呼び出し側プログラムの名称を探し出す。ローダコンポーネント506のプログラム固有の決定ロジックを拡張し、例えば、最新の利用可能なまたは現行のライブラリバージョンを記述するワイルドカードまたは他の適切な言語を使用するなどして、全てのプログラム名称がマッチする一つの列を持たせることによって、全プログラムを移行させることができる。この実装では、プログラムライブラリバージョンテーブル中の少なくとも一つの列で全プログラムがマッチすることを要件とすることもできようし、あるいは、例えば、プログラム名称がいずれかの列でマッチしない場合は、所定のまたは以前のバージョンに単にデフォルトする実装とすることもできよう。カプセル化本発明のさまざまな態様を、動的にロードされるライブラリを用いるソフトウエア実装を参照しながら説明してきた。この点に関し、慣例的にプログラム群を用いるソフトウエア実装は、従来式のプログラムフォーマットでなく、動的ロードが可能なライブラリ中にカプセル化することができる。一旦カプセル化したならば、本明細書の図1~5を参照してさらに詳しく説明したように、さまざまなソフトウエア修正技法を利用することができる。例えば、アプリケーションに対するオンライントランザクション処理OLTPシステムの大部分または全部を、プログラムでなく、動的にロード可能なライブラリ中にカプセル化することによって、動的ソフトウエアバージョン管理を実施することが可能になる。これが実施されれば、当該OLTPシステムと相互作用するプログラムを停止することなく、新規のOLTPソフトウエアをロードし使用することができる。OLTPシステムと関係のないプログラム機能は全く中断されることなく、新規のソフトウエアを用いてOLTPシステムに関係するプログラム機能がアップグレードされる。クライアント側環境および多くのサーバ側環境でのダウンタイムゼロのアップグレードのための、動的ソフトウエアライブラリ選択は、顧客のビジネスプログラムまたはOLTPシステム自体によって使用されるライブラリのセットとして、OLTP機能を具現することによって実施することができる。なお、本明細書でさらなる詳細を説明したように、ダウンタイムゼロのアップグレードサポートは、プログラムが、それら自体が選択した時に、OTLPシステムから論理的に切断し、既存のOLTPソフトウエアライブラリを動的にアンロードし、新規のOLTPソフトウエアライブラリを動的にロードし、その新規のソフトウエアを使ってOLTPシステムに再接続することを可能にすることによって達成される。厳密にいえば、旧ライブラリのアンローディングおよび新規ライブラリのローディングの実施の間、サービスは中断されるが、この中断は短く、このステップが行われる特定のクライアントプロセスに限定される。さらに、使われるライブラリ/ソフトウエアバージョンの選択は、もはやオペレーティングシステムのオペレーションではなく、OLTPソフトウエアパッケージの直接制御下に置かれる。OLTPソフトウエアは、何であれ必要な妥当性確認を実施することができ、単に基盤のオペレーティングシステムに頼って可能なよりも、もっと高度なローディング技法および方策を実施することができる。加えて、この技法を使って以前のソフトウエアレベルにフォールバックすることも可能である。例示的コンピュータシステム図6を参照すると、本発明の態様による、コンピュータシステム602として実装されたデータ処理システム600のブロック図が描かれている。コンピュータシステム602は、数多くの汎用または特殊用途コンピューティングシステム環境または構成による作動が可能である。さらに、コンピュータシステム602は、コンピュータシステムによって実行されるプログラムモジュールなど、コンピュータシステムが実行可能な命令の一般的なコンテキストで表すことができる。一般に、プログラムモジュールには、特定のタスクを遂行し、または特定の抽象データ型を実装する、ルーティン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含めることができる。コンピュータシステム602のコンポーネントには、以下に限らないが、対称マルチプロセッサSMP:symmetricmultiprocessorシステムなど一つ以上のプロセッサまたは処理ユニット604、あるいはシステムバスに接続された複数のプロセッサを包含する他の構成を含めることができる。上記に換えて単一のプロセッサを使うことも可能である。コンピュータシステム602のコンポーネントは、システムメモリ606、およびシステムメモリ606を含め、さまざまなシステムコンポーネントをプロセッサ群604に連結するバス608をさらに包含する。メモリ606には、ランダムアクセスメモリRAM:randomaccessmemory610もしくはキャッシュメモリ612またはその両方など、揮発性メモリの形で、コンピュータシステム可読媒体を含めることができる。また、メモリ606には、例えば一つ以上のハードドライブなどの記憶システム614など、他の着脱可能型/固定型、揮発性/不揮発性のコンピュータシステム記憶媒体も含めることができる。さらに、メモリ606には、内部に具現されたコンピュータ可読プログラムコードを有する、少なくとも一つのコンピュータ可読記憶媒体616を含めることができ、該コンピュータ可読プログラムコードは、本明細書で詳しく説明した本発明の実施形態の機能を実行するよう構成されたコンピュータ可読プログラムコードを含む。また、コンピュータシステム602には、バス608を介してプロセッサ604と通信する、入力/出力I/O:input/outputインタフェース群618もしくはネットワークアダプタ620またはその両方を含めることができる。同様に、コンピュータシステム602には、外部デバイス622もしくはディスプレイ624またはその両方とインタフェース接続することもできる。他のハードウエアもしくはソフトウエアコンポーネントまたはその両方を、コンピュータシステム602と連結して用いることができよう。このデータ処理システムには、例えば、ニューヨーク州アーモンクのインターナショナルビジネスマシンコーポレーションの製品であり、アドバンストインタラクティブエグゼクティブAIXIBM社の登録商標:AdvancedInteractiveExecutiveオペレーティングシステムを搭載しているIBMIBM社の登録商標RS/6000IBM社の登録商標システムを含めることができる。オペレーティングシステムとつなげて、Javaなどのオブジェクト指向プログラミングシステムを実行し、データ処理システム上で実行されているJavaプログラムまたはアプリケーションからオペレーティングシステムへの呼び出しを行うことができる。当業者ならよく理解するであろうように、本発明の態様は、システム、方法、またはコンピュータプログラム製品として具現することができる。従って、本発明の態様は、全体がハードウエアの実施形態、全体がソフトウエアの実施形態ファームウエア、常駐ソフトウエア、マイクロコードなどを含む、あるいは、一般に本明細書では全て回路、モジュール、またはシステムといわれる、ソフトウエアおよびハードウエア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の態様は、内部に具体化されたコンピュータ可読プログラムコードを有する一つ以上のコンピュータ可読記憶媒体中に具現されたコンピュータプログラム製品の形を取ることもできる。一つ以上のコンピュータ可読媒体の任意の組み合わせを用いることができる。このコンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的な、または半導体の、システム、装置、もしくはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例非包括的リストには、一つ以上の配線を有する電気接続、携帯型コンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM:randomaccessmemory、読み取り専用メモリROM:read-onlymemory、消去可能プログラム可能読み取り専用メモリEPROMerasableprogrammableread-onlymemoryまたはフラッシュメモリ、光ファイバ、携帯型コンパクトディスク読み取り専用メモリCD-ROM:compactdiscread-onlymemory、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが含まれよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体とすることができる。コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現されたコンピュータ可読のプログラムコードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、さまざまな形態の任意の形を取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではないが、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを通信、伝播、または伝送が可能な任意のコンピュータ可読媒体であり得る。コンピュータ可読媒体中に具現されたプログラムコードは、以下に限らないが、無線、有線、光ファイバケーブル、RFなど、またはこれらの任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。本発明の態様に対するオペレーションを実行するためのコンピュータプログラムコードは、JavaR、SmalltalkR、Cなどのオブジェクト指向プログラミング言語、および、Cプログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合せで記述することができる。このプログラムコードは、全体をユーザのコンピュータで、一部をユーザのコンピュータで、スタンドアロンソフトウエアパッケージとして実行することができ、一部をユーザのコンピュータで他の部分を遠隔コンピュータで、または全体を遠隔のコンピュータまたはサーバで実行することができる。後者のシナリオでは、ローカルエリアネットワークLANまたは広域ネットワークWANを含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは例えばインターネットサービスプロバイダを使いインターネットを介し外部のコンピュータへの接続を行うことができる。本発明の実施形態による方法、装置システムおよびコンピュータプログラム製品のフローチャート説明図もしくはブロック図またはその両方を参照しながら本発明の態様を以下に説明する。フローチャート説明図もしくはブロック図またはその両方の各ブロック、および、フローチャート説明図もしくはブロック図またはその両方中のブロックの組み合せは、コンピュータプログラム命令によって実行可能であることが理解されよう。これらのコンピュータプログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに供給し、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群/処理群を実施するための手段を生成するようにすることができる。また、これらのコンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施する命令群を包含する製品を形成するようにすることができる。同様に、コンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、または他のデバイス上で一連のオペレーションステップを実施させてコンピュータ実装のプロセスを生成し、これらコンピュータまたは他のプログラム可能装置で実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群/処理群を実施するためのプロセスを提供するようにすることもできる。図中のフローチャートおよびブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータプログラム製品の可能な実装のアーキテクチャ、機能、およびオペレーションを例示している。この点に関し、フローチャートまたはブロック図中の各ブロックは、所定の論理機能群を実行するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図に記載された順序を外れて行われることがあり得ることに留意すべきである。例えば、連続して示された2つのブロックが、実際にはほぼ同時に実行されることがあり、関与する機能によっては、時には、これらブロックが逆の順序で実行されることもあり得る。また、ブロック図もしくはフローチャート説明図またはその両方の各ブロック、およびブロック図もしくはフローチャート説明図またはその両方中のブロックの組み合わせは、特定の機能または処置を実施する、特殊用途のハードウエアベースのシステム、または特殊用途のハードウエアとコンピュータ命令との組み合わせによって実装可能なことにも留意すべきである。本明細書で使用する用語は、特定の実施形態を説明する目的のためだけのものであり、本発明を限定することは意図されていない。本明細書で用いられる、単数形あるa、an、および該theは、文脈上明確に別途に示されていなければ、複数形も同じように含むことを意図されている。さらに、本明細書で用いられる含むcompriseまたは含んでいるcomprisingもしくはその両方の用語は、述べられた機能、完全体、ステップ、オペレーション、エレメント、またはコンポーネント、あるいはこれらの組み合わせの存在を特定するが、一つ以上の他の機能、完全体、ステップ、オペレーション、エレメント、コンポーネント、またはこれらの群、もしくは上記の組み合わせの存在または追加を排除するものでないことがさらに理解されよう。添付の請求項中の全ての手段またはステップに加え機能エレメントの、対応する構造、材料、処置および同等物は、具体的に請求された他の請求エレメントと組み合わせて機能を遂行するための、一切の構造、材料または処置を包含することが意図されている。本発明の記述は、例示および説明目的で提示されたもので、網羅的であること、または本発明を開示した形態に限定することは意図されていない。当業者には、本発明の範囲および精神から逸脱することのない多くの修改および変形が明白であろう。本発明の諸態様は、本発明の原理および実際的な応用を最善に説明し、他の当業者が、意図する特定の用途に適したさまざまな修改を加えたさまざまな実施形態のため、本発明を理解できるようにするため、選択し説明したものである。