(57)【要約】【課題】ソフトウェア部品の再利用を容易にする。【解決手段】仮想マシン１３が実行するサーバプロセス１３ａにより受信された、アドレス１５ａとパラメータ１５ｂとを含む要求メッセージ１５を取得する。要求メッセージ１５から、アドレス１５ａに対応付けられたアドレス１６ａとパラメータ１５ｂに応じたパラメータ１６ｂとを含む要求メッセージ１６を生成し、要求メッセージ１６を、仮想マシン１３の中に含まれる仮想マシン１４が実行するサーバプロセス１４ａに対して送信する。サーバプロセス１４ａから、アドレス１６ａおよびパラメータ１６ｂに応じたデータ１８ａを含む応答メッセージ１８を受信する。応答メッセージ１８から、データ１８ａに応じたデータ１７ａを含む応答メッセージ１７を生成して、要求メッセージ１５に対する応答として出力する。【選択図】図１
2019160105.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
第１の仮想マシンが実行する第１のサーバプロセスにより受信された、第１のアドレスと第１のパラメータとを含む第１の要求メッセージを取得し、
前記第１の要求メッセージから、前記第１のアドレスに対応付けられた第２のアドレスと前記第１のパラメータに応じた第２のパラメータとを含む第２の要求メッセージを生成し、前記第２の要求メッセージを、前記第１の仮想マシンの中に含まれる第２の仮想マシンが実行する第２のサーバプロセスに対して送信し、
前記第２のサーバプロセスから、前記第２のアドレスおよび前記第２のパラメータに応じた第２のデータを含む第２の応答メッセージを受信し、
前記第２の応答メッセージから、前記第２のデータに応じた第１のデータを含む第１の応答メッセージを生成して、前記第１の要求メッセージに対する応答として出力する、
処理を実行させるインタフェース変換プログラム。
【請求項２】
前記コンピュータに更に、
前記第１のアドレス、前記第１のパラメータ、前記第２のアドレスおよび前記第２のパラメータの対応関係を示すインタフェース定義情報を取得し、
前記インタフェース定義情報に基づいて、前記第１の要求メッセージから前記第２の要求メッセージを生成し前記第２の応答メッセージから前記第１の応答メッセージを生成するための中継プログラムを生成する、
処理を実行させる請求項１記載のインタフェース変換プログラム。
【請求項３】
前記第１の仮想マシンは、第１のオペレーティングシステムを含み、前記第２の仮想マシンは、前記第１のオペレーティングシステムと異なる種類の第２のオペレーティングシステムを含む、
請求項１記載のインタフェース変換プログラム。
【請求項４】
前記第１の仮想マシンは、第３の仮想マシンを更に含み、前記第２の仮想マシンと前記第３の仮想マシンとは、異なる種類のオペレーティングシステムを含む、
請求項１記載のインタフェース変換プログラム。
【請求項５】
前記第１のアドレスは、前記第１のサーバプロセスが受け付け可能な第１のＵＲＬ（Uniform Resource Locator）であり、前記第２のアドレスは、前記第２のサーバプロセスが受け付け可能であり前記第１のＵＲＬと異なる第２のＵＲＬである、
請求項１記載のインタフェース変換プログラム。
【請求項６】
前記第１のデータは、前記第２のデータのうちの全部または一部分である、
請求項１記載のインタフェース変換プログラム。
【請求項７】
前記コンピュータに更に、
前記第１のサーバプロセスにより受信された、第３のアドレスと第３のパラメータとを含む第３の要求メッセージを取得し、
前記第３の要求メッセージから、前記第３のパラメータに応じたクエリを生成し、前記クエリに基づいて、前記第１の仮想マシンの中に含まれる第３の仮想マシンが生成した第４のデータを記憶するストレージから前記第４のデータを取得し、
前記第４のデータに応じた第３のデータを含む第３の応答メッセージを生成して、前記第３の要求メッセージに対する応答として出力する、
処理を実行させる請求項１記載のインタフェース変換プログラム。
【請求項８】
コンピュータが実行するインタフェース変換方法であって、
前記コンピュータ上の第１の仮想マシンが実行する第１のサーバプロセスを介して、第１のアドレスと第１のパラメータとを含む第１の要求メッセージを受信し、
前記第１の要求メッセージから、前記第１のアドレスに対応付けられた第２のアドレスと前記第１のパラメータに応じた第２のパラメータとを含む第２の要求メッセージを生成し、前記第２の要求メッセージを、前記第１の仮想マシンの中に含まれる第２の仮想マシンが実行する第２のサーバプロセスに対して送信し、
前記第２のサーバプロセスから、前記第２のアドレスおよび前記第２のパラメータに応じた第２のデータを含む第２の応答メッセージを受信し、
前記第２の応答メッセージから、前記第２のデータに応じた第１のデータを含む第１の応答メッセージを生成して、前記第１の要求メッセージに対する応答として送信する、
インタフェース変換方法。
【請求項９】
第１のアドレスと第１のパラメータとを含む第１の要求メッセージを受信し、前記第１の要求メッセージに対する応答として第１の応答メッセージを送信する通信部と、
第１のサーバプロセスを実行する第１の仮想マシンの中に、第２のサーバプロセスを実行する第２の仮想マシンが含まれて動作するよう制御する処理部と、
を有し、前記処理部は、
前記第１のサーバプロセスによって前記第１の要求メッセージが受け付けられると、前記第１の要求メッセージから、前記第１のアドレスに対応付けられた第２のアドレスと前記第１のパラメータに応じた第２のパラメータとを含む第２の要求メッセージを生成し、前記第２の要求メッセージを前記第２のサーバプロセスに対して送信し、
前記第２のサーバプロセスから、前記第２のアドレスおよび前記第２のパラメータに応じた第２のデータを含む第２の応答メッセージを受信し、
前記第２の応答メッセージから、前記第２のデータに応じた第１のデータを含むように前記第１の応答メッセージを生成する、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はインタフェース変換プログラム、インタフェース変換方法および情報処理装置に関する。
【背景技術】
【０００２】
情報処理システムの構築を継続的に行う者は、過去に構築した情報処理システムと類似の機能をもつ別の情報処理システムを構築することがある。その際、過去の情報処理システムのために作成したプログラム群をソフトウェア部品として抽出し、ソフトウェア部品を再利用して新たな情報処理システムを構築できることが好ましい。
【０００３】
例えば、既存のサービス部品の組み合わせを選択するサービス部品選択支援方法が提案されている。提案のサービス部品選択支援方法は、各業務の入出力データの定義と各業務で利用可能なサービス部品の定義と業務間のフローの定義から、業務毎の入力画面および出力画面を生成する。サービス部品選択支援方法は、業務間のフローを画面間のフローに変換して画面遷移プログラムを生成し、対話的システムを構築する。
【０００４】
また、例えば、デスクトップアプリケーションをＷｅｂアプリケーションに変換する変換システムが提案されている。提案の変換システムでは、希望するデスクトップアプリケーションのＵＲＬ（Uniform Resource Locator）をクライアントがサーバに送信する。変換システムは、デスクトップアプリケーションからインタフェース情報を抽出してＸＭＬ（Extensible Markup Language）データとしてラッピングし、ＸＭＬデータをＨＴＭＬ（HyperText Markup Language）データに変換する。
【０００５】
また、例えば、部品化された標準機能を示すサービスを組み合わせてユーザ毎のＷｅｂアプリケーションを構築するＷｅｂアプリケーション構築システムが提案されている。提案のＷｅｂアプリケーション構築システムが生成するＷｅｂアプリケーションは、組み合わせたサービスを１つの仮想マシン上で動作させてトランザクションを制御する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−１８５１６６号公報
【特許文献２】特開２０１１−７０６４０号公報
【特許文献３】国際公開第２０１１／１１８００３号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、実際にはソフトウェア部品は、実行環境の相違によりそのままでは再利用することが難しいことが多い。例えば、オペレーティングシステム、プログラミング言語、データベースなどのミドルウェア、ポート設定などの通信方式といった動作条件が異なるために、そのままでは複数のソフトウェア部品を組み合わせられないことがある。そのため、ソフトウェア部品の再利用が促進されないという問題がある。
【０００８】
１つの側面では、本発明はソフトウェア部品の再利用を容易にするインタフェース変換プログラム、インタフェース変換方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、コンピュータに以下の処理を実行させるインタフェース変換プログラムが提供される。第１の仮想マシンが実行する第１のサーバプロセスにより受信された、第１のアドレスと第１のパラメータとを含む第１の要求メッセージを取得する。第１の要求メッセージから、第１のアドレスに対応付けられた第２のアドレスと第１のパラメータに応じた第２のパラメータとを含む第２の要求メッセージを生成し、第２の要求メッセージを、第１の仮想マシンの中に含まれる第２の仮想マシンが実行する第２のサーバプロセスに対して送信する。第２のサーバプロセスから、第２のアドレスおよび第２のパラメータに応じた第２のデータを含む第２の応答メッセージを受信する。第２の応答メッセージから、第２のデータに応じた第１のデータを含む第１の応答メッセージを生成して、第１の要求メッセージに対する応答として出力する。
【００１０】
１つの態様では、コンピュータが実行するインタフェース変換方法が提供される。
１つの態様では、通信部と処理部とを有する情報処理装置が提供される。
【発明の効果】
【００１１】
１つの側面では、ソフトウェア部品の再利用が容易になる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態の情報処理装置の例を説明する図である。
【図２】第２の実施の形態の情報処理システムの例を示す図である。
【図３】サーバ装置のハードウェア例を示すブロック図である。
【図４】仮想マシンの構築例を示す図である。
【図５】サーバ装置の機能例を示すブロック図である。
【図６】中継ＩＦ定義の第１の例を示す図である。
【図７】第１のメッセージ変換例を示す図である。
【図８】中継ＩＦ定義の第２の例を示す図である。
【図９】第２のメッセージ変換例を示す図である。
【図１０】中継ＩＦ定義の第３の例を示す図である。
【図１１】第３のメッセージ変換例を示す図である。
【図１２】システム構築の手順例を示すフローチャートである。
【図１３】システム実行の第１の手順例を示すフローチャートである。
【図１４】システム実行の第２の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１４】
図１は、第１の実施の形態の情報処理装置の例を説明する図である。
第１の実施の形態の情報処理装置１０は、ある機能を実現するために過去に作成されたプログラム群を部品化して再利用することを促進する。情報処理装置１０は、例えば、他の情報処理装置からの要求に応じてデータ処理を行うサーバコンピュータである。
【００１５】
情報処理装置１０は、通信部１１および処理部１２を有する。
通信部１１は、ネットワークに接続される通信インタフェースである。ネットワークには、有線ネットワークが含まれてもよいし無線ネットワークが含まれてもよい。通信部１１は、スイッチやルータなどの有線通信装置に接続される有線インタフェースでもよいし、アクセスポイントなどの無線通信装置に接続される無線インタフェースでもよい。
【００１６】
処理部１２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、処理部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭ（Random Access Memory）などのメモリに記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００１７】
通信部１１は、要求メッセージ１５（第１の要求メッセージ）を受信し、要求メッセージ１５に対する応答として応答メッセージ１７（第１の応答メッセージ）を送信する。処理部１２は、仮想マシン１３（第１の仮想マシン）を稼働させる。仮想マシン１３は、要求メッセージ１５を受け取って応答メッセージ１７を生成する。処理部１２は、仮想マシン１３以外の他の仮想マシンを更に稼働させてもよい。処理部１２は、仮想マシン１３を制御するために仮想化ソフトウェアを実行する。処理部１２は、ホストＯＳ（Operating System）を実行してもよいしハイパーバイザを実行してもよい。
【００１８】
仮想マシン１３は、仮想マシン１４（第２の仮想マシン）を含む。すなわち、仮想マシン１３と仮想マシン１４は階層化されている。仮想マシン１３は、仮想マシン１４以外の他の仮想マシンを更に含んでもよい。仮想マシン１３は、仮想マシン１４を制御するためにホストＯＳおよび仮想化ソフトウェアを実行する。また、仮想マシン１３は、サーバプロセス１３ａを実行する。サーバプロセス１３ａは、Ｗｅｂサーバのように、要求メッセージの受信を待ち、受信した要求メッセージに含まれるアドレスに応じたデータ処理を行って応答メッセージを送信するものである。サーバプロセス１３ａは、要求メッセージに含まれるアドレスに応じてデータ処理用のプログラムを呼び出すことがある。
【００１９】
仮想マシン１４は、ゲストＯＳを実行する。仮想マシン１４が実行するゲストＯＳの種類は、仮想マシン１３が実行するホストＯＳの種類と異なってもよく、仮想マシン１３に含まれる他の仮想マシンが実行するゲストＯＳの種類と異なってもよい。ＯＳの種類が異なるとは、ＯＳの作成者（ベンダ）が異なることを含んでもよいし、ＯＳのバージョンが異なることを含んでもよい。また、仮想マシン１４は、サーバプロセス１４ａを実行する。サーバプロセス１４ａは、Ｗｅｂサーバのように、要求メッセージの受信を待ち、受信した要求メッセージに含まれるアドレスに応じたデータ処理を行って応答メッセージを送信するものである。サーバプロセス１４ａは、要求メッセージに含まれるアドレスに応じてデータ処理用のプログラムを呼び出すことがある。
【００２０】
サーバプロセス１３ａ，１４ａは、要求メッセージを受け付ける入り口であるため、ソフトウェアインタフェースまたは単にインタフェースと言うこともできる。サーバプロセス１３ａ，１４ａがＷｅｂサーバである場合、サーバプロセス１３ａ，１４ａをＷｅｂインタフェースと言うこともできる。サーバプロセス１３ａ，１４ａは、ＲＥＳＴ（Representational State Transfer）に基づいて実装することが可能である。
【００２１】
サーバプロセス１３ａは、仮想マシン１３の外部とサーバプロセス１４ａとの間でメッセージを中継する。サーバプロセス１４ａは、要求メッセージに含まれるアドレスに応じて特定のアプリケーションソフトウェアを起動することが可能である。よって、過去に作成されたアプリケーションソフトウェアを、ミドルウェアや設定情報などの実行環境と合わせて仮想マシン１４を用いてカプセル化することができる。
【００２２】
ここで、サーバプロセス１３ａは、要求メッセージ１５を受け付ける。要求メッセージ１５は、例えば、ＨＴＴＰ（Hypertext Transfer Protocol）リクエストである。要求メッセージ１５は、アドレス１５ａ（第１のアドレス）およびパラメータ１５ｂ（第１のパラメータ）を含む。アドレス１５ａは、サーバプロセス１３ａが受け付け可能なＵＲＬなど、サーバプロセス１３ａが外部に対して公開しているデータ処理サービスを識別する。アドレス１５ａは、アプリケーションレベルの宛先アドレスと言うこともできる。要求メッセージ１５の送信は、遠隔メソッド呼び出しと言うこともできる。アドレス１５ａは、仮想マシン１３のホスト名またはＩＰ（Internet Protocol）アドレスを含むことがある。パラメータ１５ｂは、データ処理サービスで使用される引数である。
【００２３】
仮想マシン１３は、要求メッセージ１５から要求メッセージ１６を生成する。要求メッセージ１６は、例えば、ＨＴＴＰリクエストである。要求メッセージ１６は、アドレス１６ａ（第２のアドレス）およびパラメータ１６ｂ（第２のパラメータ）を含む。アドレス１６ａは、サーバプロセス１４ａが受け付け可能なＵＲＬなど、サーバプロセス１４ａが外部に対して公開しているデータ処理サービスを識別する。アドレス１６ａは、仮想マシン１４のホスト名またはＩＰアドレスを含むことがある。アドレス１５ａとアドレス１６ａとは予め対応付けられている。パラメータ１６ｂはパラメータ１５ｂに応じて決定される。例えば、パラメータ１５ｂのパラメータ名が変換される。パラメータ１５ｂとパラメータ１６ｂとの対応関係は予め仮想マシン１３に登録されている。
【００２４】
仮想マシン１３は、要求メッセージ１６をサーバプロセス１４ａに対して送信する。例えば、仮想マシン１３のホストＯＳや仮想化ソフトウェアなどを介して、仮想マシン１３の中で要求メッセージ１６が仮想マシン１４に転送される。
【００２５】
サーバプロセス１４ａは、要求メッセージ１６を受け付ける。仮想マシン１４は、要求メッセージ１６に含まれるアドレス１６ａに応じたアプリケーションソフトウェアを呼び出し、パラメータ１６ｂを用いて応答メッセージ１８（第２の応答メッセージ）を生成する。応答メッセージ１８は、例えば、ＨＴＴＰレスポンスである。応答メッセージ１８は、データ処理結果を示すデータ１８ａ（第２のデータ）を含む。データ１８ａは、要求メッセージ１６に含まれるアドレス１６ａおよびパラメータ１６ｂに依存する。
【００２６】
サーバプロセス１４ａは、要求メッセージ１６に対する応答として応答メッセージ１８を送信する。例えば、仮想マシン１３のホストＯＳや仮想化ソフトウェアなどを介して、仮想マシン１３の中で応答メッセージ１８が転送される。
【００２７】
仮想マシン１３は、応答メッセージ１８をサーバプロセス１４ａから受信する。仮想マシン１３は、応答メッセージ１８から応答メッセージ１７（第１の応答メッセージ）を生成する。応答メッセージ１７は、例えば、ＨＴＴＰレスポンスである。応答メッセージ１７は、データ１７ａ（第１のデータ）を含む。データ１７ａはデータ１８ａに応じて決定される。例えば、データ１８ａ全体またはデータ１８ａに含まれる一部のデータ項目をデータ１７ａとする。また、例えば、データ１８ａのデータ項目名やデータ構造を変換する。データ１８ａとデータ１７ａとの対応関係は予め仮想マシン１３に登録されている。
【００２８】
サーバプロセス１３ａは、要求メッセージ１５に対する応答として応答メッセージ１７を送信する。応答メッセージ１７は通信部１１から送信される。
第１の実施の形態の情報処理装置１０によれば、仮想マシン１３の中に仮想マシン１４が配備され、過去に作成されたアプリケーションソフトウェアが仮想マシン１４の中に配備される。仮想マシン１４にデータ処理を要求するための要求メッセージ１６の書式であるインタフェースは隠蔽され、代わりに仮想マシン１３にデータ処理を要求するための要求メッセージ１５の書式であるインタフェースが公開される。そして、仮想マシン１３によって要求メッセージ１５から要求メッセージ１６への変換、応答メッセージ１８から応答メッセージ１７への変換およびそれらメッセージの転送が行われる。
【００２９】
よって、過去に作成されたアプリケーションソフトウェアを、ＯＳやミドルウェアや設定情報などの実行環境と合わせて仮想マシン１４として部品化することが可能となる。また、仮想マシン１４を取り込んだ仮想マシン１３によって、データ処理を要求するための要求メッセージ１５の書式であるインタフェースが統合される。これにより、使用するＯＳの違いやプログラミング言語の違いや使用するミドルウェアの違いなど、実行環境に関して動作条件が衝突するソフトウェア部品同士を組み合わせることが容易となる。そのため、ソフトウェア部品の再利用が促進され情報処理システムの開発が効率化される。
【００３０】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の情報処理システムの例を示す図である。
【００３１】
第２の実施の形態の情報処理システムは、過去に作成したアプリケーションソフトウェアの再利用を促進してシステム開発を効率化する。第２の実施の形態の情報処理システムは、クライアント装置２０、開発装置３０およびサーバ装置１００を含む。クライアント装置２０、開発装置３０およびサーバ装置１００は、ネットワーク４０に接続されている。サーバ装置１００は、第１の実施の形態の情報処理装置１０に対応する。
【００３２】
クライアント装置２０は、クライアントアプリケーションを実行し、サーバ装置１００で実行されるサーバアプリケーションと連携して情報処理を行う。クライアント装置２０は、ユーザが操作する端末装置でもよいしサーバコンピュータでもよい。クライアント装置２０は、ネットワーク４０を介してＨＴＴＰリクエストをサーバ装置１００に送信し、ＨＴＴＰレスポンスをサーバ装置１００から受信する。クライアント装置２０とサーバ装置１００の間のソフトウェアインタフェース、すなわち、クライアントアプリケーションとサーバアプリケーションの連携方法は、ＲＥＳＴによるＷｅｂインタフェースである。
【００３３】
開発装置３０は、情報処理システムの開発者が使用する端末装置である。開発装置３０は、アプリケーションソフトウェアをサーバ装置１００に配備する。サーバ装置１００に配備されるアプリケーションソフトウェアの中には、過去に作成されたものが含まれる。すなわち、過去に作成されたアプリケーションソフトウェアが部品化されて再利用される。なお、第２の実施の形態の情報処理システムは複数のサーバ装置を含んでもよく、異なるアプリケーションソフトウェアを異なるサーバ装置に配備することも可能である。
【００３４】
サーバ装置１００は、サーバアプリケーションを実行し、クライアント装置２０で実行されるクライアントアプリケーションと連携して情報処理を行う。サーバ装置１００は、ネットワーク４０を介してＨＴＴＰリクエストをクライアント装置２０から受信し、ＨＴＴＰレスポンスをクライアント装置２０に送信する。
【００３５】
アプリケーションソフトウェアを部品化して再利用することを容易にするため、サーバ装置１００は、階層化された仮想マシンを実行する。子仮想マシン（子ＶＭ（Virtual Machine））は、アプリケーションソフトウェアをカプセル化し、アプリケーションソフトウェアを呼び出すためのＷｅｂインタフェースを子ＶＭの外部に対して提供する。親仮想マシン（親ＶＭ）は、子ＶＭを包含し、子ＶＭにＨＴＴＰリクエストを転送する中継用のＷｅｂインタフェースを親ＶＭの外部に対して提供する。子ＶＭのＷｅｂインタフェースは親ＶＭの外部に対しては直接公開されず、親ＶＭによって秘匿化される。サーバ装置１００が実行する仮想マシンの詳細は後述する。
【００３６】
図３は、サーバ装置のハードウェア例を示すブロック図である。
サーバ装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ（Hard Disk Drive）１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７は、バス１０８に接続されている。なお、ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。通信インタフェース１０７は、第１の実施の形態の通信部１１に対応する。クライアント装置２０および開発装置３０も、同様のハードウェアを用いて実現できる。
【００３７】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、サーバ装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または「プロセッサ」と言うことがある。
【００３８】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、サーバ装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３９】
ＨＤＤ１０３は、ＯＳやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、サーバ装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）など他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４０】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、サーバ装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００４１】
入力信号処理部１０５は、サーバ装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、サーバ装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４２】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４３】
通信インタフェース１０７は、ネットワーク４０に接続され、ネットワーク４０を介してクライアント装置２０や開発装置３０と通信を行うインタフェースである。通信インタフェース１０７は、スイッチやルータなどの有線通信装置に接続される有線インタフェースでもよいし、アクセスポイントに接続される無線インタフェースでもよい。
【００４４】
図４は、仮想マシンの構築例を示す図である。
サーバ装置１００は、親ＶＭとして仮想マシン１３０を有する。仮想マシン１３０は、Ｗｅｂサーバ１３２、データベースサーバ１３５、アプリケーションソフトウェア１３６および子ＶＭとしての仮想マシン１４０，１５０を有する。なお、仮想マシン１３０，１４０は、それぞれ第１の実施の形態の仮想マシン１３，１４に対応する。Ｗｅｂサーバ１３２は、第１の実施の形態のサーバプロセス１３ａに対応する。
【００４５】
Ｗｅｂサーバ１３２は、ＲＥＳＴおよびＨＴＴＰに基づく通信を行うサーバソフトウェアである。Ｗｅｂサーバ１３２は、仮想マシン１３０の外部に対してＷｅｂ  ＡＰＩ（Application Programming Interface）を提供していると言うことができる。Ｗｅｂサーバ１３２は、ＨＴＴＰリクエストの到着を待ち、ＨＴＴＰリクエストを受信すると当該ＨＴＴＰリクエストに含まれるＵＲＬに応じたデータ処理を実行し、ＨＴＴＰリクエストに対する応答としてＨＴＴＰレスポンスを送信する。
【００４６】
Ｗｅｂサーバ１３２上には中継インタフェース（中継ＩＦ）１３４ａ，１３４ｂ，１３４ｃが配備される。中継ＩＦ１３４ａ，１３４ｂ，１３４ｃはそれぞれ、特定のＵＲＬを含むＨＴＴＰリクエストが受信されたときに起動されるプログラムとして実装される。
【００４７】
中継ＩＦ１３４ａは、ＨＴＴＰリクエストを仮想マシン１４０に転送し、ＨＴＴＰリクエストに対応するＨＴＴレスポンスを仮想マシン１３０の外部に転送する。ただし、中継ＩＦ１３４ａは、外部から受信したＨＴＴＰリクエストをそのまま仮想マシン１４０に転送するのではなく、仮想マシン１４０が提供するＷｅｂ  ＡＰＩに合わせて書き換えて転送する。また、中継ＩＦ１３４ａは、仮想マシン１４０から受信したＨＴＴＰレスポンスを、元のＨＴＴＰリクエストに合わせて書き換えて転送する。このように、中継ＩＦ１３４ａは、特定のＵＲＬについてＨＴＴＰメッセージの中継を行う。
【００４８】
中継ＩＦ１３４ｂは、ＨＴＴＰリクエストに基づいて検索用のデータベースクエリを生成してデータベースサーバ１３５に送信し、検索されたデータを含むデータベースレスポンスをデータベースサーバ１３５から受信する。中継ＩＦ１３４ｂは、データベースレスポンスをＨＴＴＰレスポンスに変換して仮想マシン１３０の外部に送信する。このように、中継ＩＦ１３４ｂは、特定のＵＲＬについてデータベースの検索を行う。なお、第２の実施の形態ではデータベースサーバ１３５が仮想マシン１３０の内部に存在するが、仮想マシン１３０の外部に存在してもよい。また、データベースからデータを抽出する代わりに、階層的なディレクトリ構造をもつファイルシステムからデータを抽出してもよい。
【００４９】
中継ＩＦ１３４ｃは、ＨＴＴＰリクエストに基づいて、子ＶＭによってカプセル化されておらず仮想マシン１３０で直接実行されるアプリケーションソフトウェア１３６を呼び出し、アプリケーションソフトウェア１３６から戻り値を取得する。中継ＩＦ１３４ｃとアプリケーションソフトウェア１３６の間のソフトウェアインタフェースは、アプリケーションソフトウェア１３６に合わせて個別に選択される。中継ＩＦ１３４ｃは、戻り値からＨＴＴＰレスポンスを生成して仮想マシン１３０の外部に送信する。
【００５０】
データベースサーバ１３５は、関係データベースなどのデータベースを管理するサーバソフトウェアである。データベースサーバ１３５は、ＳＱＬなどのクエリ言語を用いて記述されたデータベースクエリの到着を待ち、データベースクエリを受信すると当該データベースクエリを実行してデータベースの検索や更新を行う。
【００５１】
アプリケーションソフトウェア１３６は、過去に作成されたプログラム群を再利用したものである。アプリケーションソフトウェア１３６を実行するために要する動作条件としてのＯＳやミドルウェアや設定情報などは、仮想マシン１３０が具備している。
【００５２】
仮想マシン１４０は、仮想マシン１３０の内部に存在する子ＶＭである。仮想マシン１４０は、Ｗｅｂサーバ１４２およびアプリケーションソフトウェア１４３を有する。なお、Ｗｅｂサーバ１４２は、第１の実施の形態のサーバプロセス１４ａに対応する。仮想マシン１３０は、仮想マシン１４０と同様の他の仮想マシンを更に有していてもよい。
【００５３】
Ｗｅｂサーバ１４２は、ＲＥＳＴおよびＨＴＴＰに基づく通信を行うサーバソフトウェアである。Ｗｅｂサーバ１４２は、仮想マシン１４０の外部に対してＷｅｂ  ＡＰＩを提供していると言うことができる。Ｗｅｂサーバ１４２は、ＨＴＴＰリクエストの到着を待ち、ＨＴＴＰリクエストを受信するとアプリケーションソフトウェア１４３を呼び出す。Ｗｅｂサーバ１４２は、アプリケーションソフトウェア１４３からの戻り値を用いてＨＴＴＰレスポンスを生成して仮想マシン１４０の外部に送信する。
【００５４】
アプリケーションソフトウェア１４３は、過去に作成されたプログラム群を再利用したものである。仮想マシン１４０は、アプリケーションソフトウェア１４３と併せて、アプリケーションソフトウェア１４３を実行するために要する動作条件としてのＯＳやミドルウェアや設定情報などを更に含んでいる。
【００５５】
再利用すべきソフトウェアがＷｅｂアプリケーションである場合、Ｗｅｂ  ＡＰＩも含めて当該ソフトウェアを仮想マシン１４０に挿入して部品化すればよい。再利用すべきソフトウェアがＷｅｂアプリケーションでない場合、当該ソフトウェアに加えて当該ソフトウェアを呼び出すＷｅｂ  ＡＰＩも仮想マシン１４０に挿入して部品化すればよい。ソフトウェア部品として仮想マシン１４０を１度作成すれば、仮想マシン１４０のイメージデータをコピーすることで他の情報処理システムにおいても当該ソフトウェア部品を再利用することが可能となる。仮想マシン１４０には、アプリケーションソフトウェア１４３と動作条件が共通する他のアプリケーションソフトウェアを更に挿入してもよい。
【００５６】
仮想マシン１５０は、仮想マシン１３０の内部に存在する子ＶＭである。仮想マシン１５０は、アプリケーションソフトウェア１５２を有する。アプリケーションソフトウェア１５２は、仮想マシン１５０の外部からの要求に応じて実行されるのではなく、所定のスケジュールに従って実行される。よって、仮想マシン１５０はＷｅｂサーバを有しなくてもよい。仮想マシン１５０は、更新用のデータベースクエリを生成してデータベースサーバ１３５に送信し、データベースにデータを格納させる。
【００５７】
アプリケーションソフトウェア１５２は、過去に作成されたプログラム群を再利用したものである。仮想マシン１５０は、アプリケーションソフトウェア１５２と併せて、アプリケーションソフトウェア１５２を実行するために要する動作条件としてのＯＳやミドルウェアや設定情報などを更に含んでいる。アプリケーションソフトウェア１５２が仮想マシン１５０に挿入されて部品化されている。ソフトウェア部品として仮想マシン１５０を１度作成すれば、仮想マシン１５０のイメージデータをコピーすることで他の情報処理システムにおいても当該ソフトウェア部品を再利用することが可能となる。
【００５８】
仮想マシン１３０は、仮想マシン１５０と同様の他の仮想マシンを更に有していてもよい。また、仮想マシン１５０には、アプリケーションソフトウェア１５２と動作条件が共通する他のアプリケーションソフトウェアを更に挿入してもよい。
【００５９】
なお、Ｗｅｂサーバ１３２と仮想マシン１４０の結合は、Ｗｅｂサーバ１３２によるＨＴＴＰリクエストの受信を契機として仮想マシン１４０による情報処理が実行される点で、密結合であると言うことができる。一方、Ｗｅｂサーバ１３２と仮想マシン１５０の結合は、Ｗｅｂサーバ１３２によるＨＴＴＰリクエストの受信とは独立して仮想マシン１５０による情報処理が実行される点で、疎結合であると言うことができる。
【００６０】
ＯＳなどの実行環境は、仮想マシン１４０と仮想マシン１５０とで異なってもよい。また、ＯＳなどの実行環境は、仮想マシン１３０と仮想マシン１４０とで異なってもよく、仮想マシン１３０と仮想マシン１５０とで異なってもよい。また、仮想マシン１４０に相当する仮想マシンが複数ある場合、ＯＳなどの実行環境はそれら複数の仮想マシンの間で異なってもよい。仮想マシン１５０に相当する仮想マシンが複数ある場合、ＯＳなどの実行環境はそれら複数の仮想マシンの間で異なってもよい。
【００６１】
よって、アプリケーションソフトウェア１３６，１４３，１５２の動作条件が互いに異なっても、親ＶＭである仮想マシン１３０の中に子ＶＭである仮想マシン１４０，１５０を挿入することでアプリケーションソフトウェア１３６，１４３，１５２を再利用できる。仮想マシン１４０，１５０を１度作成すれば、アプリケーションソフトウェア１４３，１５２を更に他の情報処理装置で再利用することも容易となる。また、仮想マシン１３０のイメージデータをコピーすることで、アプリケーションソフトウェア１３６，１４３，１５２の組み合わせを再利用することも可能である。後述するように、仮想マシン１３０は、中継ＩＦ１３４ａ，１３４ｂ，１３４ｃの生成を支援する機能をもつ。
【００６２】
図５は、サーバ装置の機能例を示すブロック図である。
サーバ装置１００は、オペレーティングシステム１２１および仮想マシン１３０を有する。仮想マシン１３０は、オペレーティングシステム１３１、Ｗｅｂサーバ１３２、中継ＩＦ生成部１３３、中継ＩＦ記憶部１３４、データベースサーバ１３５および仮想マシン１４０，１５０を有する。仮想マシン１４０は、オペレーティングシステム１４１、Ｗｅｂサーバ１４２およびアプリケーションソフトウェア１４３を有する。仮想マシン１５０は、オペレーティングシステム１５１およびアプリケーションソフトウェア１５２を有する。図４と同じ構成要素については説明を省略する。
【００６３】
オペレーティングシステム１２１は、仮想マシン１３０に対するホストＯＳとして機能する。サーバ装置１００は、オペレーティングシステム１２１上で仮想化ソフトウェアを実行して仮想マシン１３０を制御する。サーバ装置１００は、仮想マシン１３０と同様の他の仮想マシンを更に有していてもよい。また、サーバ装置１００は、オペレーティングシステム１２１に代えてハイパーバイザを有していてもよい。
【００６４】
オペレーティングシステム１３１は、子ＶＭである仮想マシン１４０，１５０に対するホストＯＳとして機能する。親ＶＭである仮想マシン１３０は、オペレーティングシステム１３１上で仮想化ソフトウェアを実行して仮想マシン１４０，１５０を制御する。
【００６５】
中継インタフェース（ＩＦ）生成部１３３は、Ｗｅｂサーバ１３２を介して開発装置３０から、後述する中継インタフェース（ＩＦ）定義を取得する。開発装置３０は、アップロード用の所定のＵＲＬを含むＨＴＴＰリクエストをＷｅｂサーバ１３２に送信することで、中継ＩＦ定義をアップロードすることができる。中継ＩＦ生成部１３３は、Ｗｅｂサーバ１３２が当該所定のＵＲＬを含むＨＴＴＰリクエストを受信したときにＷｅｂサーバ１３２上で起動されるプログラムとして実装することができる。
【００６６】
中継ＩＦ生成部１３３は、取得した中継ＩＦ定義に基づいて、前述の中継ＩＦ１３４ａ，１３４ｂ，１３４ｃのような中継ＩＦを実現するソースコードを生成する。中継ＩＦ生成部１３３は、生成したソースコードをコンパイルして実行可能なプログラムを生成し、生成したプログラムを中継ＩＦ記憶部１３４に格納する。中継ＩＦ生成部１３３は、生成したプログラムをＷｅｂサーバ１３２に配備する。すなわち、中継ＩＦ生成部１３３は、中継ＩＦ定義に記載された外向き用のＵＲＬを含むＨＴＴＰリクエストがＷｅｂサーバ１３２によって受信されたときに、当該プログラムが起動されるように設定する。
【００６７】
ただし、中継ＩＦ生成部１３３は、生成したソースコードを開発装置３０に提供し、開発装置３０にソースコードを編集させ、編集されたソースコードを開発装置３０から取得するようにしてもよい。また、中継ＩＦ生成部１３３は、生成したソースコードを開発装置３０に提供し、開発装置３０にソースコードをコンパイルさせ、コンパイルされたプログラムを開発装置３０から取得するようにしてもよい。
【００６８】
中継ＩＦ記憶部１３４は、中継ＩＦ生成部１３３によって生成された中継ＩＦ用のプログラムを記憶する。Ｗｅｂサーバ１３２が特定のＵＲＬを含むＨＴＴＰリクエストを受信したことを契機として、中継ＩＦ記憶部１３４に記憶された当該特定のＵＲＬに対応するプログラムがＷｅｂサーバ１３２上で実行される。
【００６９】
なお、１つの中継ＩＦ定義は、何れかの子ＶＭが受け付け可能な１つのＵＲＬに対応する。１つの中継ＩＦ定義からは、外向きの１つのＵＲＬに反応する中継ＩＦ用の１つのプログラムが生成される。開発装置３０は、子ＶＭを仮想マシン１３０に追加した後に、当該子ＶＭに関する中継ＩＦ定義をＷｅｂサーバ１３２にアップロードする。子ＶＭの追加は、仮想マシン１３０に子ＶＭのイメージデータをアップロードし、仮想マシン１３０の仮想化ソフトウェアに対して当該子ＶＭの起動を指示することで行うことができる。ただし、Ｗｅｂサーバ１３２に、子ＶＭのイメージデータをアップロードするための所定のＵＲＬを設定しておいてもよい。その場合、開発装置３０は、ＨＴＴＰを用いてＷｅｂサーバ１３２に対して子ＶＭのイメージデータを送信すればよい。
【００７０】
オペレーティングシステム１４１は、子ＶＭである仮想マシン１４０に含まれておりゲストＯＳとして機能する。オペレーティングシステム１５１は、子ＶＭである仮想マシン１５０に含まれておりゲストＯＳとして機能する。
【００７１】
なお、オペレーティングシステム１２１とオペレーティングシステム１３１は異なる種類であってもよい。オペレーティングシステム１３１とオペレーティングシステム１４１は異なる種類であってもよい。オペレーティングシステム１３１とオペレーティングシステム１５１は異なる種類であってもよい。オペレーティングシステム１４１とオペレーティングシステム１５１は異なる種類であってもよい。種類が異なるとは、作成者（ベンダ）が異なることやバージョンが異なることを含む。
【００７２】
図６は、中継ＩＦ定義の第１の例を示す図である。
中継ＩＦ定義１６１は、中継ＩＦ生成部１３３がＷｅｂサーバ１３２を介して開発装置３０から取得する中継ＩＦ定義の一例である。中継ＩＦ定義１６１は、開発装置３０を使用する開発者によって記述される。中継ＩＦ定義１６１は、仮想マシン１４０にＨＴＴＰリクエストを転送する中継ＩＦ１３４ａを生成するためのものである。
【００７３】
中継ＩＦ定義１６１は、子ＶＭのＵＲＬ、当該子ＶＭが受信すべきパラメータの構造、子ＶＭが返信するデータの構造、親ＶＭのＵＲＬ、当該親ＶＭが受信すべきパラメータの構造および親ＶＭが返信するデータの構造を定義する。
【００７４】
子ＶＭが受信すべきパラメータは、親ＶＭが受信すべきパラメータを用いて定義される。親ＶＭのパラメータから子ＶＭのパラメータへの変換には、パラメータ名の変更が含まれることがある。通常、親ＶＭのパラメータの全体が子ＶＭのパラメータのために使用される。親ＶＭのパラメータに含まれていない所定の値が、子ＶＭのパラメータとしてＨＴＴＰリクエストに挿入されることもある。親ＶＭが返信するデータは、子ＶＭが返信するデータを用いて定義される。子ＶＭの返信データから親ＶＭの返信データへの変換には、データ項目名の変更が含まれることがある。通常、親ＶＭの返信データは、子ＶＭの返信データの全部または一部分である。ただし、子ＶＭの返信データに含まれていない所定の値が、親ＶＭの返信データとしてＨＴＴＰレスポンスに挿入されることもある。
【００７５】
ここでは、親ＶＭのＵＲＬは「http://eee.fff.ggg/hhh」であり、親ＶＭが受信するパラメータは「if-param1」，「if-param2」である。当該親ＶＭのＵＲＬが子ＶＭのＵＲＬである「http://aaa.bbb.ccc/ddd」に変換され、パラメータ名が「if-param1」，「if-param2」から「param1」，「param2」に変換される。
【００７６】
子ＶＭのデータ処理が成功した場合、すなわち、ＨＴＴＰレスポンスのステータスコードが２００番である場合、子ＶＭの返信データは「child-data1」，「child-data2」，「child-data3」であり、「child-data3」は「child-data4」，「child-data5」を含む。この場合、親ＶＭの返信データは「result」，「data-all」である。データ項目「result」はステータスコードを表し、データ項目「data-all」は子ＶＭの返信データ全体を表す。
【００７７】
一方、子ＶＭのデータ処理が失敗した場合、すなわち、ＨＴＴＰレスポンスのステータスコードが４００番以降である場合、子ＶＭの返信データはエラーメッセージである。この場合、親ＶＭの返信データは「result」，「data-all」である。データ項目「result」はステータスコードを表し、データ項目「data-all」は子ＶＭの返信データ全体を表す。
【００７８】
図７は、第１のメッセージ変換例を示す図である。
中継ＩＦ定義１６１から中継ＩＦ１３４ａが生成された場合、ＵＲＬ「http://eee.fff.ggg/hhh」とパラメータ「if-param1」，「if-param2」を含むＨＴＴＰリクエスト１７１をＷｅｂサーバ１３２が受信する。ＨＴＴＰリクエスト１７１から、ＵＲＬ「http://aaa.bbb.ccc/ddd」とパラメータ「param1」，「param2」を含むＨＴＴＰリクエスト１７２が生成され、ＨＴＴＰリクエスト１７２がＷｅｂサーバ１４２に送信される。
【００７９】
ＨＴＴＰリクエスト１７２に対する応答として、データ項目「child-data1」，「child-data2」，「child-data3」，「child-data4」，「child-data5」を含むＨＴＴＰレスポンス１７３をＷｅｂサーバ１４２が送信する。ＨＴＴＰレスポンス１７３から、ステータスコードを示すデータ項目「result」と元の返信データそのものを示すデータ項目「data-all」を含むＨＴＴＰレスポンス１７４が生成され、ＨＴＴＰリクエスト１７１に対する応答としてＷｅｂサーバ１３２が送信する。
【００８０】
図８は、中継ＩＦ定義の第２の例を示す図である。
中継ＩＦ定義１６２は、中継ＩＦ生成部１３３がＷｅｂサーバ１３２を介して開発装置３０から取得する中継ＩＦ定義の一例である。中継ＩＦ定義１６２は、開発装置３０を使用する開発者によって記述される。中継ＩＦ定義１６２は、仮想マシン１４０にＨＴＴＰリクエストを転送する中継ＩＦ１３４ａを生成するためのものである。ただし、親ＶＭが返信するデータの構造が中継ＩＦ定義１６１と異なる。
【００８１】
子ＶＭのデータ処理が成功した場合、すなわち、ＨＴＴＰレスポンスのステータスコードが２００番である場合、子ＶＭの返信データは「child-data1」，「child-data2」，「child-data3」であり、「child-data3」は「child-data4」，「child-data5」を含む。この場合、親ＶＭの返信データは「result」，「data1」，「data2」である。データ項目「result」はステータスコードを表し、データ項目「data1」は子ＶＭの返信データの中の「child-data4」を表し、データ項目「data2」は子ＶＭの返信データの中の「child-data5」を表す。すなわち、子ＶＭの返信データの中の一部のデータ項目のみが親ＶＭの返信データの中に含まれ、子ＶＭの返信データの中の他のデータ項目は削除される。
【００８２】
図９は、第２のメッセージ変換例を示す図である。
中継ＩＦ定義１６２から中継ＩＦ１３４ａが生成された場合、ＨＴＴＰリクエスト１８１をＷｅｂサーバ１３２が受信し、ＨＴＴＰリクエスト１８１からＨＴＴＰリクエスト１８２が生成され、ＨＴＴＰリクエスト１８２がＷｅｂサーバ１４２に送信される。ＨＴＴＰリクエスト１８２に対する応答として、ＨＴＴＰレスポンス１８３をＷｅｂサーバ１４２が送信し、ＨＴＴＰレスポンス１８３からＨＴＴＰレスポンス１８４が生成され、ＨＴＴＰリクエスト１８１に対する応答としてＷｅｂサーバ１３２が送信する。
【００８３】
ＨＴＴＰリクエスト１８１，１８２およびＨＴＴＰレスポンス１８３は、それぞれ前述のＨＴＴＰリクエスト１７１，１７２およびＨＴＴＰレスポンス１７３と同じである。一方、ＨＴＴＰレスポンス１８４は、ステータスコードを示すデータ項目「result」と、元の返信データの「child-data4」に相当するデータ項目「data1」と、元の返信データの「child-data5」に相当するデータ項目「data2」を含む。ＨＴＴＰレスポンス１８４は、元の返信データの「child-data1」，「child-data2」に相当するデータ項目を含まない。
【００８４】
図１０は、中継ＩＦ定義の第３の例を示す図である。
中継ＩＦ定義１６３は、中継ＩＦ生成部１３３がＷｅｂサーバ１３２を介して開発装置３０から取得する中継ＩＦ定義の一例である。中継ＩＦ定義１６３は、開発装置３０を使用する開発者によって記述される。中継ＩＦ定義１６３は、データベースサーバ１３５からデータを取得する中継ＩＦ１３４ｂを生成するためのものである。
【００８５】
中継ＩＦ定義１６３は、接続するデータベースサーバのホスト名およびポート番号、データベースサーバに送信するデータベースクエリ、親ＶＭのＵＲＬ、当該親ＶＭが受信すべきパラメータの構造および親ＶＭが返信するデータの構造を定義する。
【００８６】
データベースクエリは、親ＶＭが受信すべきパラメータを用いて定義される。親ＶＭのパラメータは、例えば、データベースクエリの中の検索条件として使用される。親ＶＭが返信するデータは、データベースクエリに記載された出力データ項目を用いて定義される。ただし、データベースクエリに記載されていない所定の値が、親ＶＭの返信データとしてＨＴＴＰレスポンスに挿入されることもある。
【００８７】
ここでは、親ＶＭのＵＲＬは「http://eee.fff.ggg/hhh」であり、親ＶＭが受信するパラメータは「if-date」である。データベースクエリは、パラメータ「if-date」を検索条件として用いてテーブル「data-table」からレコードを検索するものであり、出力データ項目を「ddate」，「dname」，「dvalue」と定義している。
【００８８】
データベース検索に成功した場合、親ＶＭの返信データは「date」，「name」，「value」である。データ項目「date」は検索結果の「ddate」を表し、データ項目「name」は検索結果の「dname」を表し、データ項目「value」は検索結果の「dvalue」を表す。該当するデータが見つからなかった場合、親ＶＭの返信データは、データが無い旨を表す「message」である。このときのステータスコードは４０４番である。データベース検索でエラーが発生した場合、親ＶＭの返信データは、データベースアクセスに失敗した旨を表す「message」である。このときのステータスコードは５００番である。
【００８９】
図１１は、第３のメッセージ変換例を示す図である。
中継ＩＦ定義１６３から中継ＩＦ１３４ｂが生成された場合、ＵＲＬ「http://eee.fff.ggg/hhh」とパラメータ「if-date」を含むＨＴＴＰリクエスト１９１をＷｅｂサーバ１３２が受信する。ＨＴＴＰリクエスト１９１から、パラメータ「if-date」を用いて検索条件を定義したデータベースクエリ１９２が生成され、データベースクエリ１９２がデータベースサーバ１３５に送信されて実行される。
【００９０】
データベースクエリ１９２に対する応答として、出力データ項目「ddate」，「dname」，「dvalue」を含むデータベースレスポンス１９３をデータベースサーバ１３５が送信する。データベースレスポンス１９３の３つの出力データ項目に対応するデータ項目「date」，「name」，「value」を含むＨＴＴＰレスポンス１９４が生成され、ＨＴＴＰリクエスト１９１に対する応答としてＷｅｂサーバ１３２が送信する。
【００９１】
次に、仮想マシン１３０の動作について説明する。
まず、中継ＩＦ定義に基づいて中継ＩＦをＷｅｂサーバに配備する手順を説明する。
図１２は、システム構築の手順例を示すフローチャートである。
【００９２】
（Ｓ１０）仮想マシン１３０は、開発装置３０から子ＶＭのイメージデータを取得し、仮想マシン１３０の中で子ＶＭが起動されるように子ＶＭを登録する。
（Ｓ１１）Ｗｅｂサーバ１３２は、中継ＩＦ定義を受信する。
【００９３】
（Ｓ１２）中継ＩＦ生成部１３３は、受信された中継ＩＦ定義を分析して、中継ＩＦのアクセス先がＷｅｂサーバであるか判断する。中継ＩＦ定義に子ＶＭのＵＲＬが記載されている場合、アクセス先はＷｅｂサーバである。アクセス先がＷｅｂサーバである場合はステップＳ１３に進み、それ以外の場合はステップＳ１４に進む。
【００９４】
（Ｓ１３）中継ＩＦ生成部１３３は、中継ＩＦ定義に基づいて、Ｗｅｂサーバ１３２へのアクセスを子ＶＭのＷｅｂサーバへのアクセスに変換する中継ＩＦのソースコードを生成する。生成されるソースコードには、中継ＩＦ定義に記載された子ＶＭのＵＲＬが含まれる。また、生成されるソースコードには、Ｗｅｂサーバ１３２が受信するパラメータを子ＶＭのパラメータに変換する変換方法や、子ＶＭの返信データをＷｅｂサーバ１３２の返信データに変換する変換方法が記載される。そして、ステップＳ１７に進む。
【００９５】
（Ｓ１４）中継ＩＦ生成部１３３は、中継ＩＦのアクセス先がストレージであるか判断する。ストレージには、データベースサーバ１３５やファイルシステムが含まれる。中継ＩＦ定義にデータベースサーバの接続情報が記載されている場合、アクセス先はストレージである。アクセス先がストレージである場合はステップＳ１５に進み、それ以外の場合はステップＳ１６に進む。アクセス先がＷｅｂサーバでもストレージでもない場合、アクセス先は仮想マシン１３０のローカルのアプリケーションソフトウェアである。
【００９６】
（Ｓ１５）中継ＩＦ生成部１３３は、中継ＩＦ定義に基づいて、Ｗｅｂサーバ１３２へのアクセスをストレージへのアクセスに変換する中継ＩＦのソースコードを生成する。生成されるソースコードには、中継ＩＦ定義に記載されたデータベースサーバのホスト名やポート番号などストレージの接続情報が含まれる。また、生成されるソースコードには、Ｗｅｂサーバ１３２が受信するパラメータをストレージに対するクエリに変換する変換方法や、ストレージの出力データをＷｅｂサーバ１３２の返信データに変換する変換方法が記載される。そして、ステップＳ１７に進む。
【００９７】
（Ｓ１６）中継ＩＦ生成部１３３は、中継ＩＦ定義に基づいて、Ｗｅｂサーバ１３２へのアクセスをアプリケーションソフトウェアの呼び出しに変換する中継ＩＦのソースコードを生成する。生成されるソースコードには、Ｗｅｂサーバ１３２が受信するパラメータをアプリケーションソフトウェアの引数に変換する変換方法や、アプリケーションソフトウェアの戻り値をＷｅｂサーバ１３２の返信データに変換する変換方法が記載される。
【００９８】
（Ｓ１７）中継ＩＦ生成部１３３は、ステップＳ１３，Ｓ１５，Ｓ１６で生成したソースコードをコンパイル（ビルド）して実行可能なプログラムを生成する。
（Ｓ１８）中継ＩＦ生成部１３３は、中継ＩＦ定義に基づいて、中継ＩＦのプログラムを仮想マシン１３０のＷｅｂサーバ１３２に配備する。このとき、中継ＩＦ生成部１３３は、中継ＩＦ定義に記載された親ＶＭのＵＲＬに反応してＷｅｂサーバ１３２が中継ＩＦのプログラムを実行するように、Ｗｅｂサーバ１３２を設定する。
【００９９】
次に、中継ＩＦのアクセス先がＷｅｂサーバである場合の動作を説明する。
図１３は、システム実行の第１の手順例を示すフローチャートである。
（Ｓ２０）Ｗｅｂサーバ１３２は、ＨＴＴＰリクエストを受信する。Ｗｅｂサーバ１３２は、ＨＴＴＰリクエストに含まれるＵＲＬに対応するプログラムを起動する。
【０１００】
（Ｓ２１）Ｗｅｂサーバ１３２は、ＨＴＴＰリクエストからパラメータを抽出し、上記プログラムに従って当該パラメータを用いて子ＶＭ用のＨＴＴＰリクエストを生成する。
（Ｓ２２）Ｗｅｂサーバ１３２は、子ＶＭ用のＨＴＴＰリクエストを送信する。送信したＨＴＴＰリクエストは、ＨＴＴＰリクエストに含まれるＵＲＬに従って、仮想マシン１３０の仮想化ソフトウェアを介して仮想マシン１３０の中の適切な子ＶＭに転送される。例えば、仮想化ソフトウェアは、仮想マシン１３０の中の各子ＶＭのホスト名やＩＰアドレスなどのネットワーク情報を管理しており、ＨＴＴＰリクエストを適切な子ＶＭに転送する。ＨＴＴＰリクエストは、当該子ＶＭのＷｅｂサーバによって受信される。
【０１０１】
（Ｓ２３）Ｗｅｂサーバ１３２は、子ＶＭ用のＨＴＴＰリクエストに対する応答として子ＶＭからＨＴＴＰレスポンスを受信する。
（Ｓ２４）Ｗｅｂサーバ１３２は、子ＶＭのＨＴＴＰレスポンスからデータを抽出し、上記プログラムに従って当該データを用いて外部用のＨＴＴＰレスポンスを生成する。
【０１０２】
（Ｓ２５）Ｗｅｂサーバ１３２は、外部から受信したＨＴＴＰリクエストに対する応答として、外部用のＨＴＴＰレスポンスを送信する。
次に、中継ＩＦのアクセス先がデータベースサーバである場合の動作を説明する。
【０１０３】
図１４は、システム実行の第２の手順例を示すフローチャートである。
（Ｓ３０）Ｗｅｂサーバ１３２は、ＨＴＴＰリクエストを受信する。Ｗｅｂサーバ１３２は、ＨＴＴＰリクエストに含まれるＵＲＬに対応するプログラムを起動する。
【０１０４】
（Ｓ３１）Ｗｅｂサーバ１３２は、ＨＴＴＰリクエストからパラメータを抽出し、上記プログラムに従って当該パラメータを用いてデータベースクエリを生成する。
（Ｓ３２）Ｗｅｂサーバ１３２は、上記プログラムに従って所定のデータベースサーバに接続し、データベースサーバにデータベースクエリを送信する。
【０１０５】
（Ｓ３３）Ｗｅｂサーバ１３２は、データベースサーバからデータベースクエリに対する応答としてデータベースレスポンスを受信する。
（Ｓ３４）Ｗｅｂサーバ１３２は、データベースレスポンスからデータを抽出し、上記プログラムに従って当該データを用いて外部用のＨＴＴＰレスポンスを生成する。
【０１０６】
（Ｓ３５）Ｗｅｂサーバ１３２は、外部から受信したＨＴＴＰリクエストに対する応答として、外部用のＨＴＴＰレスポンスを送信する。
第２の実施の形態の情報処理システムによれば、親ＶＭの中に子ＶＭが配置され、過去に作成されたアプリケーションソフトウェアが子ＶＭの中に配備される。子ＶＭにデータ処理を要求するためのＷｅｂ  ＡＰＩや子ＶＭの出力データに直接アクセスするためのＡＰＩは隠蔽され、代わりに親ＶＭにデータ処理を要求するためのＷｅｂ  ＡＰＩが公開される。そして、親ＶＭのＷｅｂ  ＡＰＩを介して、子ＶＭのＷｅｂ  ＡＰＩへのＨＴＴＰリクエストの転送やストレージアクセスへの変換が行われる。
【０１０７】
よって、過去に作成されたアプリケーションソフトウェアを、ＯＳやミドルウェアや設定情報などの実行環境と合わせて子ＶＭとして部品化することが可能となる。また、子ＶＭを取り込んだ親ＶＭによって、ソフトウェアインタフェースがＷｅｂ  ＡＰＩとして統合される。これにより、実行環境に関して動作条件が衝突するアプリケーションソフトウェア同士を組み合わせることが容易となる。また、動作条件が異なるアプリケーションソフトウェアを異なる子ＶＭに配備して部品化することで、同一の親ＶＭ内に共存させることができ、また、同一のサーバ装置上に共存させることができる。そのため、ソフトウェア部品の再利用が促進され情報処理システムの開発が効率化される。
【符号の説明】
【０１０８】
１０  情報処理装置
１１  通信部
１２  処理部
１３，１４  仮想マシン
１３ａ，１４ａ  サーバプロセス
１５，１６  要求メッセージ
１５ａ，１６ａ  アドレス
１５ｂ，１６ｂ  パラメータ
１７，１８  応答メッセージ
１７ａ，１８ａ  データ
【図１】
2019160105.tif 000003
【図２】
2019160105.tif 000004
【図３】
2019160105.tif 000005
【図４】
2019160105.tif 000006
【図５】
2019160105.tif 000007
【図６】
2019160105.tif 000008
【図７】
2019160105.tif 000009
【図８】
2019160105.tif 000010
【図９】
2019160105.tif 000011
【図１０】
2019160105.tif 000012
【図１１】
2019160105.tif 000013
【図１２】
2019160105.tif 000014
【図１３】
2019160105.tif 000015
【図１４】
2019160105.tif 000016