(57)【特許請求の範囲】
【請求項１】
アプリケーションを構成する複数のモジュールの各々の実行ファイルの更新を受け付ける、モジュール受付手段と、
前記複数のモジュールの内の第１のモジュールの実行ファイルが更新された場合に、当該第１のモジュールについて、当該更新された実行ファイルを用いた新たなロードモジュールを生成し、当該第１のモジュールを呼び出す第２のモジュールについて、当該第１のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成する、モジュール生成手段と、
を備え、
前記モジュール生成手段は、前記第２のモジュールを呼び出す第３のモジュールについて、当該第２のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成することを再帰的に繰り返す、
情報処理システム。
【請求項２】
さらに、前記複数のモジュールの内のいずれかのモジュールに対する新たなセッションのリクエストを受信した場合に、当該セッションと当該モジュールの最新のロードモジュールを関連づけ、当該セッションの当該受信したリクエスト以降のリクエストを、当該関連づけられたロードモジュールに振り分ける、リクエスト振り分け手段を備える、
請求項１に記載の情報処理システム。
【請求項３】
前記モジュール生成手段は、前記複数のモジュールの内のいずれかのモジュールの実行ファイルが更新、または、呼び出し先のモジュールの新たなロードモジュールが生成された場合に、当該モジュールの最新の実行ファイルを用い、呼び出し先のモジュールの最新のロードモジュールを呼び出す、当該モジュールの新たなロードモジュールを生成する、
請求項１または２に記載の情報処理システム。
【請求項４】
前記モジュール生成手段は、前記モジュールの最新の実行ファイルにもとづき当該モジュールに係る処理を行う処理実行部と、当該モジュールの呼び出し先のモジュールの最新のロードモジュールを呼び出す呼び出し部と、を含む、ロードモジュールを生成する、
請求項３に記載の情報処理システム。
【請求項５】
アプリケーションを構成する複数のモジュールの各々の実行ファイルの更新を受け付け、
前記複数のモジュールの内の第１のモジュールの実行ファイルが更新された場合に、当該第１のモジュールについて、当該更新された実行ファイルを用いた新たなロードモジュールを生成し、当該第１のモジュールを呼び出す第２のモジュールについて、当該第１のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成する、情報処理方法であって、
前記第２のモジュールを呼び出す第３のモジュールについて、当該第２のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成することを再帰的に繰り返す、
情報処理方法。
【請求項６】
さらに、前記複数のモジュールの内のいずれかのモジュールに対する新たなセッションのリクエストを受信した場合に、当該セッションと当該モジュールの最新のロードモジュールを関連づけ、当該セッションの当該受信したリクエスト以降のリクエストを、当該関連づけられたロードモジュールに振り分ける、
請求項５に記載の情報処理方法。
【請求項７】
コンピュータに、
アプリケーションを構成する複数のモジュールの各々の実行ファイルの更新を受け付け、
前記複数のモジュールの内の第１のモジュールの実行ファイルが更新された場合に、当該第１のモジュールについて、当該更新された実行ファイルを用いた新たなロードモジュールを生成し、当該第１のモジュールを呼び出す第２のモジュールについて、当該第１のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成する、
処理を実行させるプログラムであって、
前記第２のモジュールを呼び出す第３のモジュールについて、当該第２のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成することを再帰的に繰り返す、
処理を実行させるプログラム。
【請求項８】
さらに、前記複数のモジュールの内のいずれかのモジュールに対する新たなセッションのリクエストを受信した場合に、当該セッションと当該モジュールの最新のロードモジュールを関連づけ、当該セッションの当該受信したリクエスト以降のリクエストを、当該関連づけられたロードモジュールに振り分ける、
処理を実行させる、請求項７に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理方法、及び、プログラムに関し、特に、アプリケーションの更新を行う情報処理システム、情報処理方法、及び、プログラムに関する。
【背景技術】
【０００２】
アプリケーションサーバで動作するアプリケーションは、２４時間３６５日の連続稼働が求められることがある。一方で、不具合の修正や機能拡張のためのアプリケーションの更新では、一般に、アプリケーションを停止する必要がある。
【０００３】
更新時にアプリケーションの動作を継続させる方法の一例として、変更前のアプリケーションと変更後のアプリケーションを同時に稼働させ、リクエストの振り分け先を変更前から変更後のアプリケーションに切り替える方法がある。ここで、複数のリクエストにより構成されるセッションに対して処理が行われる場合は、セッション内での処理の一貫性を保つため、セッション毎にアプリケーションを切り替える必要がある。すなわち、変更前から処理していたセッションのリクエストは、変更前のアプリケーションに振り分けられ、変更後の新規のセッションのリクエストは、変更後のアプリケーションに振り分けられる。
【０００４】
図２９は、一般的な、アプリケーションの動作継続方法の例を示す図である。図２９の例では、セッションのＩＤ（Identifier）とセッションを処理するアプリケーションのバージョンとの対応表（セッションテーブル）をもとに、リクエストが振り分けられる。
【０００５】
さらに、アプリケーションは、複数のモジュールにより構成される場合がある。例えば、Ｊａｖａ（登録商標）ＥＥ（Enterprise Edition）アプリケーションサーバに配備されるアプリケーションは、Ｗｅｂモジュール、ＥＪＢ（Enterprise JavaBeans）モジュール等により構成される。この場合、Ｗｅｂモジュールが、クライアント端末のＷｅｂブラウザからのリクエストを受け付け、ＥＪＢジュールが、バックエンドの処理を実行する。ＥＪＢモジュールは、さらに、他のＥＪＢモジュールを呼び出すこともある。このように複数のモジュールにより構成されるアプリケーションでは、モジュール呼び出し用のインタフェースに変更がなければ、変更されたモジュールを呼び出すモジュールを更新することなく、変更されたモジュールを更新できる。
【０００６】
図３０〜図３３は、一般的な、複数のモジュールにより構成されるアプリケーションの動作継続方法の例を示す図である。
【０００７】
ここで、リクエストを直接受け付けるモジュールを更新する場合、図３０に示すように、上述の図２９の方法と同様の方法で、アプリケーションを停止せず、処理の一貫性を保ったまま更新を行うことができる。しかしながら、他のモジュールから呼び出されるモジュールを更新する場合、図３１に示すように、リクエストを直接受け付けるモジュールは更新されないため、更新されたモジュールの変更前のモジュールが呼び出され、モジュールの更新が反映されない。また、図３２のように、モジュールの更新を反映するために常に最新のモジュールを呼び出す場合、モジュール更新前に開始されていたセッションに対しても更新後のモジュールが適用されるため、処理の一貫性は保たれない。
【０００８】
この問題を解決する方法として、図３３のように、セッションＩＤとモジュールのバージョンとの対応表をモジュール毎に用意し、モジュール間でセッションＩＤを引き渡しながら、呼び出されるモジュールの適切なバージョンを選択する方法がある。この場合、セッションを使用しないモジュールであっても、バージョン選択のために対応表を持つ必要がある。また、モジュール間の呼び出しで、毎回、モジュールのバージョン選択が行われるため、アプリケーションの処理負荷が大きくなる。
【０００９】
なお、特許文献１には、上述の図３３と同様に、複数のアプリケーションプログラム（上述のモジュールに相当）を含むシステムにおいて、一部のアプリケーションプログラムが更新された場合に、新旧の両方のファイルによる動作を行う技術が開示されている。この技術では、タスクが起動される度に、タスクが保持する情報をもとに、タスクを新ファイル、または、旧ファイルのどちらに従って動作させるかが選択される。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平７−９９６７４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上述のように、複数モジュールより構成されるアプリケーションの一部モジュールの更新を、アプリケーションを停止せず、処理の一貫性を保ったまま行うためには、モジュール毎にバージョン選択を行う必要があり、アプリケーションの処理負荷が大きくなる。
【００１２】
本発明の目的は、上述した課題を解決した、情報処理システム、情報処理方法、プログラムを提供することである。すなわち、本発明の目的は、複数モジュールにより構成されるアプリケーションの一部のモジュールの更新を、アプリケーションを停止せず、処理の一貫性を保ったまま、低負荷で実現できる情報処理システム、情報処理方法、プログラムを提供することである。
【課題を解決するための手段】
【００１３】
本発明の情報処理システムは、アプリケーションを構成する複数のモジュールの各々の実行ファイルの更新を受け付ける、モジュール受付手段と、前記複数のモジュールの内の第１のモジュールの実行ファイルが更新された場合に、当該第１のモジュールについて、当該更新された実行ファイルを用いた新たなロードモジュールを生成し、当該第１のモジュールを呼び出す第２のモジュールについて、当該第１のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成する、モジュール生成手段と、を備える。
【００１４】
本発明の情報処理方法は、アプリケーションを構成する複数のモジュールの各々の実行ファイルの更新を受け付け、前記複数のモジュールの内の第１のモジュールの実行ファイルが更新された場合に、当該第１のモジュールについて、当該更新された実行ファイルを用いた新たなロードモジュールを生成し、当該第１のモジュールを呼び出す第２のモジュールについて、当該第１のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成する。
【００１５】
本発明のプログラムは、コンピュータに、アプリケーションを構成する複数のモジュールの各々の実行ファイルの更新を受け付け、前記複数のモジュールの内の第１のモジュールの実行ファイルが更新された場合に、当該第１のモジュールについて、当該更新された実行ファイルを用いた新たなロードモジュールを生成し、当該第１のモジュールを呼び出す第２のモジュールについて、当該第１のモジュールの新たなロードモジュールを呼び出す新たなロードモジュールを生成する、処理を実行させる。
【発明の効果】
【００１６】
本発明の効果は、複数モジュールにより構成されるアプリケーションの一部のモジュールの更新を、アプリケーションを停止せず、処理の一貫性を保ったまま、低負荷で実現できることである。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施の形態の特徴的な構成を示すブロック図である。
【図２】本発明の実施の形態における、アプリケーションの実行環境の構成を示すブロック図である。
【図３】本発明の実施の形態における、コンピュータにより実現されたアプリケーションサーバ１００の構成を示すブロック図である。
【図４】本発明の実施の形態における、モジュール配備処理を示すフローチャートである。
【図５】本発明の実施の形態における、モジュール生成処理の詳細を示すフローチャートである。
【図６】本発明の実施の形態における、モジュール生成処理の詳細（図５の続き）を示すフローチャートである。
【図７】本発明の実施の形態における、リクエスト処理を示すフローチャートである。
【図８】本発明の実施の形態における、モジュール実行処理の詳細を示すフローチャートである。
【図９】本発明の実施の形態における、モジュール実行部１３０にロードされるロードモジュール４００の構成を示す図である。
【図１０】本発明の実施の形態における、モジュール間の呼び出し関係の例を示す図である。
【図１１】本発明の実施の形態における、実行ファイルテーブル１５１の例を示す図である。
【図１２】本発明の実施の形態における、バージョンテーブル１６１の例を示す図である。
【図１３】本発明の実施の形態における、ロードバージョンテーブル１６２の例を示す図である。
【図１４】本発明の実施の形態における、呼び出し関係テーブル１７１の例を示す図である。
【図１５】本発明の実施の形態における、セッションテーブル１８１の例を示す図である。
【図１６】本発明の実施の形態における、ロードモジュール４００間の呼び出し関係の例を示す図である。
【図１７】本発明の実施の形態における、実行ファイルテーブル１５１の他の例を示す図である。
【図１８】本発明の実施の形態における、バージョンテーブル１６１の他の例を示す図である。
【図１９】本発明の実施の形態における、ロードバージョンテーブル１６２の他の例を示す図である。
【図２０】本発明の実施の形態における、呼び出し関係テーブル１７１の他の例を示す図である。
【図２１】本発明の実施の形態における、セッションテーブル１８１の他の例を示す図である。
【図２２】本発明の実施の形態における、ロードモジュール４００間の呼び出し関係の他の例を示す図である。
【図２３】本発明の実施の形態における、実行ファイルテーブル１５１のさらに他の例を示す図である。
【図２４】本発明の実施の形態における、バージョンテーブル１６１のさらに他の例を示す図である。
【図２５】本発明の実施の形態における、ロードバージョンテーブル１６２のさらに他の例を示す図である。
【図２６】本発明の実施の形態における、呼び出し関係テーブル１７１のさらに他の例を示す図である。
【図２７】本発明の実施の形態における、セッションテーブル１８１のさらに他の例を示す図である。
【図２８】本発明の実施の形態における、ロードモジュール４００間の呼び出し関係のさらに他の例を示す図である。
【図２９】一般的な、アプリケーションの動作継続方法の例を示す図である。
【図３０】一般的な、複数のモジュールにより構成されるアプリケーションの動作継続方法の例を示す図である。
【図３１】一般的な、複数のモジュールにより構成されるアプリケーションの動作継続方法の他の例を示す図である。
【図３２】一般的な、複数のモジュールにより構成されるアプリケーションの動作継続方法の他の例を示す図である。
【図３３】一般的な、複数のモジュールにより構成されるアプリケーションの動作継続方法の他の例を示す図である。
【発明を実施するための形態】
【００１８】
はじめに、本発明の実施の形態の構成を説明する。図２は、本発明の実施の形態における、アプリケーションの実行環境の構成を示すブロック図である。図２を参照すると、実行環境は、アプリケーションサーバ１００、管理端末２００、及び、クライアント端末３００を含む。管理端末２００、及び、クライアント端末３００は、ネットワーク等により、アプリケーションサーバ１００と接続される。
【００１９】
管理端末２００は、アプリケーションサーバ１００に対して、アプリケーションを構成する複数のプログラムモジュール（以下、単に、モジュールと記載する）の実行ファイルを送信し、アプリケーションの配備を指示する。
【００２０】
クライアント端末３００は、アプリケーションサーバ１００に、アプリケーションの処理に係るリクエストを送信する。
【００２１】
アプリケーションサーバ１００は、クライアント端末３００からリクエストを受信し、アプリケーションの処理を実行する。アプリケーションサーバ１００は、本発明の情報処理システムの一実施形態である。
【００２２】
アプリケーションサーバ１００は、モジュール受付部１１０、モジュール生成部１２０、モジュール実行部１３０、及び、リクエスト振り分け部１４０を含む。アプリケーションサーバ１００は、さらに、モジュール格納部１５０、バージョン情報格納部１６０、呼び出し関係格納部１７０、及び、セッション情報格納部１８０を含む。
【００２３】
モジュール受付部１１０は、管理端末２００から、アプリケーションを構成する複数のモジュールの各々について、更新された実行ファイルを受信する。
【００２４】
モジュール格納部１５０は、実行ファイルテーブル１５１、及び、実行ファイルの実体を格納する。実行ファイルテーブル１５１は、アプリケーションを構成する複数のモジュールの各々の実行ファイルを示す。
【００２５】
図１１、図１７、及び、図２３は、本発明の実施の形態における、実行ファイルテーブル１５１の例を示す図である。実行ファイルテーブル１５１では、複数のモジュールの各々のモジュール名に、当該モジュールの実行ファイルのバージョン（ファイルバージョン）、及び、ファイル名が関連づけられている。
【００２６】
モジュール生成部１２０は、複数のモジュールの内の第１のモジュールの実行ファイルが更新された場合に、当該第１のモジュールについて、当該更新された実行ファイルを用いた新たなロードモジュール４００を生成し、モジュール実行部１３０にロードする。さらに、モジュール生成部１２０は、当該第１のモジュールに依存する第２のモジュールについて、当該第１のモジュールの新たなロードモジュール４００を呼び出す新たなロードモジュール４００を生成し、モジュール実行部１３０にロードする。
【００２７】
図９は、本発明の実施の形態における、モジュール実行部１３０にロードされるロードモジュール４００の構成を示す図である。ロードモジュール４００は、処理実行部４０１、及び、呼び出し部４０２を含む。
【００２８】
処理実行部４０１は、モジュールの実行ファイルに従って、モジュールに係る処理を実行する。呼び出し部４０２は、モジュールが依存する他のモジュールのロードモジュール４００の処理を呼び出す。モジュールが、複数の他のモジュールに依存する場合、それぞれの他のモジュールに対して、呼び出し部４０２が存在する。
【００２９】
モジュール実行部１３０は、モジュール生成部１２０によりロードされたロードモジュール４００を実行する。
【００３０】
バージョン情報格納部１６０は、バージョンテーブル１６１、及び、ロードバージョンテーブル１６２を格納する。バージョンテーブル１６１は、各モジュールの最新のロードモジュール４００を示す。ロードバージョンテーブル１６２は、モジュール実行部１３０にロードされた各ロードモジュール４００を示す。
【００３１】
図１２、図１８、及び、図２４は、本発明の実施の形態における、バージョンテーブル１６１の例を示す図である。バージョンテーブル１６１では、複数のモジュールの各々のモジュール名に、当該モジュールの最新のロードモジュール４００のバージョン（モジュールバージョン）が関連づけられている。
【００３２】
図１３、図１９、及び、図２５は、本発明の実施の形態における、ロードバージョンテーブル１６２の例を示す図である。ロードバージョンテーブル１６２では、複数のモジュールの各々のモジュール名に、当該モジュールのロードモジュール４００のモジュールバージョン、及び、実行ファイルのファイルバージョンが関連づけられている。
【００３３】
呼び出し関係格納部１７０は、呼び出し関係テーブル１７１を格納する。呼び出し関係テーブル１７１は、モジュール間の呼び出し関係を示す。
【００３４】
図１４、図２０、及び、図２６は、本発明の実施の形態における、呼び出し関係テーブル１７１の例を示す図である。呼び出し関係テーブル１７１では、呼び出し先モジュールのモジュール名とモジュールバージョンの組に、呼び出し元モジュールのモジュール名とモジュールバージョンの組が関連づけられている。
【００３５】
セッション情報格納部１８０は、セッションテーブル１８１を格納する。セッションテーブル１８１は、各セッションの振り分け先のロードモジュール４００を示す。
【００３６】
図１５、図２１、及び、図２７は、本発明の実施の形態における、セッションテーブル１８１の例を示す図である。セッションテーブル１８１では、モジュールのモジュール名に、当該モジュールに対するセッションのセッションＩＤ（Identifier）と振り分け先のロードモジュール４００のモジュールバージョンとが関連づけられている。
【００３７】
リクエスト振り分け部１４０は、セッションテーブル１８１をもとに、クライアント端末３００から受信したリクエストを、適切なロードモジュール４００に振り分ける。
【００３８】
なお、アプリケーションサーバ１００は、ＣＰＵ（Central Processing Unit）とプログラムを記憶した記憶媒体を含み、プログラムに基づく制御によって動作するコンピュータであってもよい。
【００３９】
図３は、本発明の実施の形態における、コンピュータにより実現されたアプリケーションサーバ１００の構成を示すブロック図である。
【００４０】
この場合、アプリケーションサーバ１００は、ＣＰＵ１０１、ハードディスクやメモリ等の記憶デバイス１０２（記憶媒体）、他の装置等と通信を行う通信デバイス１０３、キーボード、ディスプレイ等の入出力デバイス１０４を含む。ＣＰＵ１０１は、モジュール受付部１１０、モジュール生成部１２０、モジュール実行部１３０、及び、リクエスト振り分け部１４０を実現するためのコンピュータプログラムを実行する。記憶デバイス１０２は、モジュール格納部１５０、バージョン情報格納部１６０、呼び出し関係格納部１７０、及び、セッション情報格納部１８０のデータを記憶する。通信デバイス１０３は、管理端末２００からモジュールを受信する。また、通信デバイス１０３は、アプリケーションの処理に係るリクエストのクライアント端末３００からの受信、レスポンスのクライアント端末３００への送信を行う。入出力デバイス１０４は、アプリケーションサーバ１００に係る各種設定等の、ユーザ等からの入力、及び、ユーザ等への出力を行う。
【００４１】
また、アプリケーションサーバ１００の各構成要素は、有線、または、無線により接続された、異なるコンピュータに分散して配置されていてもよい。
【００４２】
また、アプリケーションサーバ１００の各構成要素は、独立した論理回路でもよい。
【００４３】
次に、本発明の実施の形態の動作を説明する。
【００４４】
＜モジュール配備処理＞
はじめに、モジュール配備処理について説明する。モジュール配備処理は、管理端末２００が、アプリケーションサーバ１００に対して、アプリケーションを構成するモジュールの実行ファイルを送信したときに実行される。
【００４５】
図４は、本発明の実施の形態における、モジュール配備処理を示すフローチャートである。
【００４６】
管理端末２００は、アプリケーションを構成するモジュールのモジュール名、当該モジュールの新たな実行ファイルのファイル名、及び、当該実行ファイルの実体をアプリケーションサーバ１００に送信する（ステップＳ１０１）。
【００４７】
アプリケーションサーバ１００のモジュール受付部１１０は、モジュール名Ｍ、ファイル名Ｆ、及び、実行ファイルを管理端末２００から受信する（ステップＳ１０２）。
【００４８】
モジュール受付部１１０は、モジュールＭのロードモジュール４００の新たなモジュールバージョンＶを採番する（ステップＳ１０３）。
【００４９】
ここで、モジュール受付部１１０は、ロードバージョンテーブル１６２に存在するモジュールＭに対するモジュールバージョンの最大値に１を加算した値を、新たなモジュールバージョンＶに設定する。なお、モジュールＭが新たなモジュールの場合、モジュールＭはロードバージョンテーブル１６２に存在しないため、モジュール受付部１１０は、モジュールＭに対する新たなモジュールバージョンＶに「１」を設定する。
【００５０】
採番したモジュールバージョンＶは、モジュールＭの新たな実行ファイルＦのファイルバージョンとしても用いられる。
【００５１】
モジュール受付部１１０は、実行ファイルテーブル１５１に、受信したモジュール名Ｍ、ファイル名Ｆ、ファイルバージョンＶを登録する。また、モジュール受付部１１０は、モジュール格納部１５０に、受信した実行ファイルＦの実体を保存する（ステップＳ１０４）。
【００５２】
モジュール受付部１１０は、モジュール生成部１２０に、モジュール名Ｍ、モジュールバージョンＶ、ファイルバージョンＶを指定して、モジュール生成処理を実行させる（ステップＳ１０５）。
【００５３】
これにより、モジュールＭについて、更新されたファイルバージョンＶの実行ファイルを用いた、新たなロードモジュール４００が生成、ロードされる。
【００５４】
図５、図６は、本発明の実施の形態における、モジュール生成処理（ステップＳ１０５）の詳細を示すフローチャートである。
【００５５】
モジュール生成部１２０は、実行ファイルテーブル１５１を参照して、モジュール格納部１５０から、モジュール名Ｍ、ファイルバージョンＦＶに対応する、実行ファイルＦの実体を取得する（ステップＳ２０１）。
【００５６】
モジュール生成部１２０は、実行ファイルＦを解析し、実行ファイルＦの呼び出し先モジュールＳを特定する（ステップＳ２０２）。ここで、例えばモジュールＭがＪａｖａ  ＥＥのアプリケーションモジュールの場合、当該モジュールに係るＸＭＬ（Extensible Markup Language）ファイルやアノテーションの定義情報を解析して、呼び出し先モジュールＳを特定する。また、モジュール生成部１２０は、予め、ユーザ等により定義された、モジュール間の呼び出し関係を参照して、呼び出し先モジュールＳを特定してもよい。
【００５７】
ステップＳ２０２で、呼び出し先モジュールＳが無い場合（ステップＳ２０３／Ｎ）、モジュール生成部１２０は、実行ファイルＦを用いて処理実行部４０１を生成し、ロードモジュール４００に設定する。モジュール生成部１２０は、生成したロードモジュール４００を、モジュールバージョンＶのロードモジュール４００として、モジュール実行部１３０にロードする（ステップＳ２１０）。
【００５８】
一方、ステップＳ２０２で、呼び出し先モジュールＳがある場合（ステップＳ２０３／Ｙ）、モジュール生成部１２０は、特定した呼び出し先モジュールＳの１つを選択する（ステップＳ２０４）。
【００５９】
モジュール生成部１２０は、バージョンテーブル１６１から、選択した呼び出し先モジュールＳに対する最新モジュールバージョンＳＶを取得する（ステップＳ２０５）。
【００６０】
モジュール生成部１２０は、モジュールＳのバージョンＳＶのロードモジュール４００を呼び出すように、呼び出し部４０２を生成する（ステップＳ２０６）。モジュール生成部１２０は、呼び出し関係テーブル１７１に、呼び出し先モジュールＳとモジュールバージョンＳＶの組、及び、呼び出し元モジュールＭとモジュールバージョンＶの組を対応づけて登録する（ステップＳ２０７）。
【００６１】
モジュール生成部１２０は、特定した呼び出し先モジュールＳの全てについて、ステップＳ２０４からの処理を繰り返す（ステップＳ２０８）。
【００６２】
モジュール生成部１２０は、実行ファイルＦを用いて処理実行部４０１を生成し、生成した呼び出し部４０２とともに、ロードモジュール４００に設定する。モジュール生成部１２０は、生成したロードモジュール４００を、モジュールバージョンＶのロードモジュール４００として、モジュール実行部１３０にロードする（ステップＳ２０９）。
【００６３】
モジュール生成部１２０は、ロードバージョンテーブル１６２に、モジュール名Ｍ、モジュールバージョンＶ、及び、ファイルバージョンＦＶを登録する（ステップＳ２１１）。
【００６４】
次に、モジュール生成部１２０は、バージョンテーブル１６１から、モジュールＭに対するこれまでの最新モジュールバージョンＰＶを取得する（ステップＳ２１２）。
【００６５】
最新モジュールバージョンＰＶが無い場合（新たなモジュールの場合）（ステップＳ２１３／Ｎ）、モジュール生成部１２０は、バージョンテーブル１６１に、モジュール名Ｍ、及び、最新モジュールバージョンＶを登録する（ステップＳ２１４）。そして、モジュール生成部１２０は、モジュール生成処理を終了する。
【００６６】
一方、最新モジュールバージョンＰＶがある場合（ファイル更新の場合）（ステップＳ２１３／Ｙ）、モジュール生成部１２０は、バージョンテーブル１６１のモジュールＭに対する最新モジュールバージョンをＶで更新する（ステップＳ２１５）。
【００６７】
モジュール生成部１２０は、呼び出し関係テーブル１７１を参照し、モジュールＭのモジュールバージョンＰＶのロードモジュール４００を呼び出す他ロードモジュール４００のモジュール名ＴとモジュールバージョンＴＶの組を特定する（ステップＳ２１６）。
【００６８】
ステップＳ２１６で、他のロードモジュール４００が存在しない場合（ステップＳ２１７／Ｎ）、モジュール生成部１２０は、モジュール生成処理を終了する。
【００６９】
ステップＳ２１６で、他のロードモジュール４００が存在する場合（ステップＳ２１７／Ｙ）、モジュール生成部１２０は、特定したモジュール名ＴとモジュールバージョンＴＶの組の１つを選択する（ステップＳ２１８）。
【００７０】
モジュール生成部１２０は、モジュールＴのロードモジュール４００の新たなモジュールバージョンＮＶを採番する（ステップＳ２１９）。
【００７１】
ここで、モジュール生成部１２０は、ロードバージョンテーブル１６２に存在するモジュールＴのモジュールバージョンの最大値に１を加算した値を、モジュールバージョンＮＶに設定する。
【００７２】
モジュール生成部１２０は、ロードバージョンテーブル１６２から、モジュールＴのモジュールバージョンＴＶに対するファイルバージョンＴＦＶを取得する（ステップＳ２２０）。
【００７３】
モジュール生成部１２０は、モジュール名Ｔ、新たなモジュールバージョンＮＶ、ファイルバージョンＴＦＶに対して、モジュール生成処理（ステップＳ２０１〜Ｓ２２２）を、再帰的に実行する（ステップＳ２２１）。
【００７４】
モジュール生成部１２０は、ステップＳ２１６で特定した他のモジュール名ＴとモジュールバージョンＴＶの全ての組について、ステップＳ２１８からの処理を繰り返す（ステップＳ２２２）。
【００７５】
これにより、モジュールＭを呼び出すモジュールＴについて、最新のファイルバージョンＴＦＶの実行ファイルを用い、モジュールＭの最新のロードモジュール４００を呼び出すような、新たなロードモジュール４００が生成、ロードされる。
【００７６】
同様に、モジュールＴを呼び出すモジュールについても、最新のファイルバージョンの実行ファイルを用い、モジュールＴの最新のロードモジュール４００を呼び出すような、新たなロードモジュール４００が生成、ロードされる。
【００７７】
＜リクエスト処理＞
次に、リクエスト処理について説明する。リクエスト処理は、クライアント端末３００が、アプリケーションサーバ１００に対して、アプリケーションの処理に係るリクエストを送信したときに実行される。
【００７８】
図７は、本発明の実施の形態における、リクエスト処理を示すフローチャートである。
【００７９】
クライアント端末３００は、アプリケーションサーバ１００に、モジュールＭに対するリクエストを送信する（ステップＳ３０１）。
【００８０】
アプリケーションサーバ１００のリクエスト振り分け部１４０は、クライアント端末３００から、モジュールＭに対するリクエストを受信する（ステップＳ３０２）。
【００８１】
リクエスト振り分け部１４０は、リクエストからセッションＩＤ  ＳＩＤを取得する（ステップＳ３０３）。
【００８２】
リクエストにセッションＩＤが含まれていない場合（ステップＳ３０４／Ｎ）、リクエスト振り分け部１４０は、新たなセッションＩＤ  ＳＩＤを採番し、リクエストに設定する（ステップＳ３０５）。リクエスト振り分け部１４０は、バージョンテーブル１６１から、モジュールＭの最新のモジュールバージョンＶを取得する（ステップＳ３０６）。リクエスト振り分け部１４０は、セッションテーブル１８１に、セッションＩＤ  ＳＩＤ、モジュール名Ｍ、モジュールバージョンＶを登録する（ステップＳ３０７）。
【００８３】
リクエストにセッションＩＤが含まれていた場合（ステップＳ３０４／Ｙ）、リクエスト振り分け部１４０は、セッションテーブル１８１から、セッションＩＤ  ＳＩＤ、モジュール名Ｍに対応する、モジュールバージョンＶを取得する（ステップＳ３０８）。
【００８４】
リクエスト振り分け部１４０は、モジュールＭのモジュールバージョンＶのロードモジュール４００にリクエストを転送する（ステップＳ３０９）。モジュール実行部１３０は、モジュールＭのモジュールバージョンＶのロードモジュール４００の処理を実行する（ステップＳ３１０）。
【００８５】
モジュール実行部１３０は、モジュールＭのロードモジュール４００の処理の結果をリプライとして、クライアント端末３００に送信する（ステップＳ３１１）。ここで、リプライには、リクエストに設定されていた、セッションＩＤが含まれる。
【００８６】
クライアント端末３００は、アプリケーションサーバ１００からリプライを受信する（ステップＳ３１２）。
【００８７】
図８は、本発明の実施の形態における、モジュール実行処理（ステップＳ３１０）の詳細を示すフローチャートである。
【００８８】
モジュール実行部１３０は、モジュールＭのモジュールバージョンＶのロードモジュール４００に対するリクエストを受信する（ステップＳ４０１）。
【００８９】
モジュール実行部１３０は、モジュールＭのモジュールバージョンＶのロードモジュール４００により、モジュールＭの処理を実行する（ステップＳ４０２）。
【００９０】
ここで、ロードモジュール４００の処理実行部４０１が、モジュールＭの処理を実行する。また、モジュールＭが他のモジュールＴを呼び出す場合、ロードモジュール４００の呼び出し部４０２は、呼び出し先のモジュールＴのモジュールバージョンＴＶのロードモジュール４００を呼び出す。これにより、モジュール実行処理（ステップＳ４０１、Ｓ４０２）は、再帰的に実行される。
【００９１】
なお、上述のリクエスト処理では、リクエストにセッションＩＤが含まれていない場合に、リクエスト振り分け部１４０が新たなセッションＩＤを採番し、リクエストに付与した。しかしながら、これに限らず、クライアント端末３００がセッションＩＤの採番を行ってもよい。この場合、リクエスト振り分け部１４０は、セッションテーブル１８１に登録されていないセッションＩＤを含む、新たなセッションのリクエストを受信した場合、上述のステップＳ３０６、Ｓ３０７の処理を行う。また、リクエスト振り分け部１４０は、セッションテーブル１８１に登録されているセッションＩＤを含むリクエストを受信した場合、上述のステップＳ３０８の処理を行う。
【００９２】
＜具体例＞
次に、本発明の実施の形態の動作の具体例を説明する。
【００９３】
図１０は、本発明の実施の形態における、モジュール間の呼び出し関係の例を示す図である。ここでは、図１０に示すように、アプリケーションが４つのモジュールＡ、Ｂ、Ｃ、及び、Ｄにより構成されていると仮定する。また、図１０に示すように、クライアント端末３００がモジュールＡを呼び出し、モジュールＡがモジュールＢを呼び出し、モジュールＢがモジュールＣを呼び出し、モジュールＣがモジュールＤを呼び出すと仮定する。
【００９４】
また、各モジュールの実行ファイルとして、モジュールＡ：「Ａ．ｗａｒ」、モジュールＢ：「Ｂ．ｊａｒ」、モジュールＣ：「Ｃ．ｊａｒ」、モジュールＤ：「Ｄ．ｊａｒ」が存在すると仮定する。さらに、各モジュールの更新（変更）された実行ファイルとして、モジュールＡ’：「Ａ−ｍｏｄｉｆｉｅｄ．ｗａｒ」、モジュールＣ’：「Ｃ−ｍｏｄｉｆｉｅｄ．ｊａｒ」、モジュールＣ’’：「Ｃ−ｍｏｄｉｆｉｅｄ−２．ｊａｒ」存在すると仮定する。ここで、モジュール名に付与されている「’」は、実行ファイルが変更されたモジュールを示す。
【００９５】
はじめに、ロードモジュール４００が１つもロードされていない状態で、管理端末２００からモジュールＤ、Ｃ、Ｂ、Ａの実行ファイル「Ｄ．ｊａｒ」、「Ｃ．ｊａｒ」、「Ｂ．ｊａｒ」、「Ａ．ｗａｒ」を順番に受信し、アプリケーションが配備されたと仮定する。
【００９６】
この場合、上述のモジュール配備処理により、実行ファイルテーブル１５１、バージョンテーブル１６１、ロードバージョンテーブル１６２、及び、呼び出し関係テーブル１７１は、それぞれ、図１１、図１２、図１３、及び、図１４のように設定される。
【００９７】
図１６、図２２、及び、図２８は、本発明の実施の形態における、ロードモジュール４００間の呼び出し関係の例を示す図である。ロードモジュール４００に付与された「ａ（ｂ，ｃ）」は、モジュールａ、モジュールバージョンｂのロードモジュール４００を示し、当該ロードモジュール４００が、ファイルバージョンｃの実行ファイルを用いていることを示す。
【００９８】
この場合、ロードモジュール４００間の呼び出し関係は、図１６のようになる。
【００９９】
ここで、モジュールＡに対する、新たなセッション（セッションＩＤ「１０１」）のリクエストを受信したと仮定する。
【０１００】
この場合、上述のリクエスト処理により、セッションテーブル１８１は、図１５のように設定される。そして、セッションＩＤ「１０１」のリクエストに対して、図１６における、ロードモジュール４００「Ａ（１，１）」、「Ｂ（１，１）」、「Ｃ（１，１）」、及び、「Ｄ（１，１）」が実行される。
【０１０１】
次に、管理端末２００からモジュールＣ’の実行ファイル「Ｃ−ｍｏｄｉｆｉｅｄ．ｊａｒ」を受信したと仮定する。
【０１０２】
この場合、上述のモジュール配備処理により、実行ファイルテーブル１５１、バージョンテーブル１６１、ロードバージョンテーブル１６２、及び、呼び出し関係テーブル１７１は、それぞれ、図１７、図１８、図１９、及び、図２０のように更新される。また、ロードモジュール４００間の呼び出し関係は、図２２のようになる。
【０１０３】
ここで、モジュールＣの更新後に、モジュールＡに対する、新たなセッション（セッションＩＤ「１０２」）のリクエストを受信したと仮定する。
【０１０４】
この場合、上述のリクエスト処理により、セッションテーブル１８１は、図２１のように設定される。そして、セッションＩＤ「１０２」のリクエストに対して、図２２における、ロードモジュール４００「Ａ（２，１）」、「Ｂ（２，１）」、「Ｃ’（２，２）」、及び、「Ｄ（１，１）」が実行される。また、セッションＩＤ「１０１」のリクエストに対しては、図２２における、ロードモジュール４００「Ａ（１，１）」、「Ｂ（１，１）」、「Ｃ（１，１）」、及び、「Ｄ（１，１）」が実行される。
【０１０５】
さらに、管理端末２００からモジュールＡ’の実行ファイル「Ａ−ｍｏｄｉｆｉｅｄ．ｗａｒ」を受信し、モジュールＣ’’の実行ファイル「Ｃ−ｍｏｄｉｆｉｅｄ−２．ｊａｒ」を受信したと仮定する。
【０１０６】
この場合、上述のモジュール配備処理により、実行ファイルテーブル１５１、バージョンテーブル１６１、ロードバージョンテーブル１６２、及び、呼び出し関係テーブル１７１は、それぞれ、図２３、図２４、図２５、及び、図２６のように更新される。また、ロードモジュール４００間の呼び出し関係は、図２８のようになる。
【０１０７】
ここで、モジュールＡの更新後でモジュールＣ’更新前に、モジュールＡに対する、新たなセッションのリクエスト（セッションＩＤ「１０３」）を受信したと仮定する。さらに、モジュールＣ’更新後に、モジュールＡに対する、新たなセッションのリクエスト（セッションＩＤ「１０４」）を受信したと仮定する。
【０１０８】
この場合、上述のリクエスト処理により、セッションテーブル１８１は、図２７のように設定される。そして、セッションＩＤ「１０４」のリクエストに対して、図２８における、ロードモジュール４００「Ａ’（４，３）」、「Ｂ（３，１）」、「Ｃ’’（３，３）」、及び、「Ｄ（１，１）」が実行される。また、セッションＩＤ「１０３」のリクエストに対して、図２８における、ロードモジュール４００「Ａ’（３，３）」、「Ｂ（２，１）」、「Ｃ’（２，２）」、及び、「Ｄ（１，１）」が実行される。
【０１０９】
以上により、本発明の実施の形態の動作が完了する。
【０１１０】
次に、本発明の実施の形態の特徴的な構成を説明する。図１は、本発明の実施の形態の特徴的な構成を示すブロック図である。
【０１１１】
図１を参照すると、アプリケーションサーバ１００（情報処理システム）は、モジュール受付部１１０、及び、モジュール生成部１２０を含む。
【０１１２】
モジュール受付部１１０は、アプリケーションを構成する複数のモジュールの各々の実行ファイルの更新を受け付ける。
【０１１３】
モジュール生成部１２０は、複数のモジュールの内の第１のモジュールの実行ファイルが更新された場合に、当該第１のモジュールについて、当該更新された実行ファイルを用いた新たなロードモジュール４００を生成する。さらに、モジュール生成部１２０は、当該第１のモジュールを呼び出す第２のモジュールについて、当該第１のモジュールの新たなロードモジュール４００を呼び出す新たなロードモジュール４００を生成する。
【０１１４】
次に、本発明の実施の形態の効果を説明する。
【０１１５】
本発明の実施の形態によれば、複数モジュールにより構成されるアプリケーションの一部のモジュールの更新を、アプリケーションを停止せず、処理の一貫性を保ったまま、低負荷で実現できる。その理由は、第１のモジュールの実行ファイルが更新時に、モジュール生成部１２０が、第１のモジュールを呼び出す第２のモジュールについて、第１のモジュールの新たなロードモジュール４００を呼び出す新たなロードモジュール４００を生成するためである。
【０１１６】
これにより、更新前の実行ファイルを使った、ロードモジュール４００間の呼び出し関係を維持したまま、更新後の実行ファイルを使った、ロードモジュール４００間の呼び出し関係が追加される。したがって、クライアント端末３００からのリクエストを直接受け付けるモジュールのロードモジュール４００をセッションＩＤに応じて選択することで、実行ファイルの更新前、及び、更新後のそれぞれで、アプリケーションの処理の一貫性が保たれる。
【０１１７】
また、これにより、クライアント端末３００からのリクエストを直接受け付けるモジュールのロードモジュール４００を決定すれば、他のモジュールのロードモジュール４００が決定される。したがって、モジュール間では、ロードモジュール４００のモジュールバージョンの選択を行う必要がない。例えば、セッションのＩＤとロードモジュール４００のモジュールバージョンの対応表をモジュール毎に用意し、モジュール間でセッションＩＤを引き渡しながら、呼び出すロードモジュール４００のモジュールバージョンを選択する必要はない。このため、モジュール間でのロードモジュール４００の選択に伴う、処理の負荷の増大を抑えられる。
【０１１８】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０１１９】
例えば、モジュール生成部１２０は、上述のモジュール生成処理における、実行ファイルの呼び出し先モジュールの解析（ステップＳ２０２）の結果を、解析結果格納部（図示せず）等に保存してもよい。この場合、モジュール生成部１２０は、解析結果が既に解析結果格納部に格納されている場合は、当該解析結果を利用する。呼び出し先モジュールのロードモジュール４００が更新された場合の呼び出し元モジュールのモジュール生成処理では、実行ファイルは更新されない。したがって、解析結果格納部に格納されている解析結果を用いることで、実行ファイルの解析を省略できる。
【符号の説明】
【０１２０】
１００    アプリケーションサーバ
１０１    ＣＰＵ
１０２    記憶デバイス
１０３    通信デバイス
１０４    入出力デバイス
１１０    モジュール受付部
１２０    モジュール生成部
１３０    モジュール実行部
１４０    リクエスト振り分け部
１５０    モジュール格納部
１６０    バージョン情報格納部
１７０    呼び出し関係格納部
１８０    セッション情報格納部
１５１    実行ファイルテーブル
１６１    バージョンテーブル
１６２    ロードバージョンテーブル
１７１    呼び出し関係テーブル
１８１    セッションテーブル
２００    管理端末
３００    クライアント端末
４００    ロードモジュール
４０１    処理実行部
４０２    呼び出し部
【図１】
0006540287.tif 000002
【図２】
0006540287.tif 000003
【図３】
0006540287.tif 000004
【図４】
0006540287.tif 000005
【図５】
0006540287.tif 000006
【図６】
0006540287.tif 000007
【図７】
0006540287.tif 000008
【図８】
0006540287.tif 000009
【図９】
0006540287.tif 000010
【図１０】
0006540287.tif 000011
【図１１】
0006540287.tif 000012
【図１２】
0006540287.tif 000013
【図１３】
0006540287.tif 000014
【図１４】
0006540287.tif 000015
【図１５】
0006540287.tif 000016
【図１６】
0006540287.tif 000017
【図１７】
0006540287.tif 000018
【図１８】
0006540287.tif 000019
【図１９】
0006540287.tif 000020
【図２０】
0006540287.tif 000021
【図２１】
0006540287.tif 000022
【図２２】
0006540287.tif 000023
【図２３】
0006540287.tif 000024
【図２４】
0006540287.tif 000025
【図２５】
0006540287.tif 000026
【図２６】
0006540287.tif 000027
【図２７】
0006540287.tif 000028
【図２８】
0006540287.tif 000029
【図２９】
0006540287.tif 000030
【図３０】
0006540287.tif 000031
【図３１】
0006540287.tif 000032
【図３２】
0006540287.tif 000033
【図３３】
0006540287.tif 000034