(57)【要約】【課題】仮想マシン間のＲＭＩ通信対応における通信Ｉ／Ｆの追加・変更の作業負荷を軽減できる画像処理装置、仮想マシン間の動作モジュール実行制御方法、及び動作モジュール実行制御プログラムを提供する。【解決手段】画像処理装置１００は、標準機能と標準機能を利用した拡張機能とが異なる仮想マシン２１１，２１２上で動作する装置であって、標準機能を実現する複数の動作モジュール３０と、各仮想マシン２１上で動作し、複数の動作モジュール３０に対して共通の仮想マシン間通信を行う通信インタフェース部４１１，４１２と、を有し、通信インタフェース部４０が、動作モジュールインタフェース実現部５２を生成する生成手段５１を有し、仮想マシン２１１，２１２それぞれに生成された一対の動作モジュールインタフェース実現部５２１，５２２を介して、仮想マシン間通信により、仮想マシン２１上の動作モジュール３０の実行を制御し、拡張機能を実現することを特徴とする。【選択図】図４
2011107834.tif 000002
【特許請求の範囲】
【請求項１】
当該画像処理装置の標準機能と前記標準機能を利用した拡張機能とが異なる仮想マシン上で動作する画像処理装置であって、
前記標準機能を実現する複数の動作モジュールと、
各仮想マシン上で動作し、前記複数の動作モジュールに対して共通の仮想マシン間通信を行う通信インタフェース部と、を有し、
前記通信インタフェース部が、
前記仮想マシン上での機能実行要求を受け付ける受付手段と、
前記仮想マシン間通信を行う通信手段と、
前記通信手段のインタフェースと前記動作モジュールとの間に介在し、前記動作モジュールのインタフェースを実現する動作モジュールインタフェース実現部を生成する生成手段と、を有し、
前記受付手段により、前記拡張機能の実行要求を受け付けると、
前記通信手段による仮想マシン間通信により、
前記機能実行要求を受け付けた仮想マシン上で、前記生成手段により生成され動作する第１の動作モジュールインタフェース実現部から、他の仮想マシン上で、前記生成手段により生成され動作する第２の動作モジュールインタフェース実現部を呼び出し、他の仮想マシンが有する前記動作モジュールに実行要求を行うことを特徴とする画像処理装置。
【請求項２】
前記生成手段は、
Ｊａｖａ（登録商標）オブジェクトのシリアライズ（直列化）により、
各仮想マシンにおいて、前記仮想マシン間通信による前記動作モジュールのメソッド呼出が可能な同一インスタンスの動作モジュールインタフェース実現部のオブジェクトを生成することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記拡張機能が動作する仮想マシンにおいて、
前記通信インタフェース部は、
仮想マシン上に前記動作モジュールインタフェース実現部が生成されているか否かを判定する判定手段を、有し、
前記受付手段により、前記拡張機能の実行要求を受け付けると、
前記判定手段により、処理の実行が要求された動作モジュールに対応する前記第１の動作モジュールインタフェース実現部の生成有無を判定し、
生成されていないと判定された場合に、
前記生成手段により、他の仮想マシンに対して、処理の実行が要求された動作モジュールに対応する前記第２の動作モジュールインタフェース実現部のオブジェクトの取得を要求し、応答されたオブジェクトを、前記第１の動作モジュールインタフェース実現部のオブジェクトとして生成することを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記標準機能が動作する仮想マシンにおいて、
前記通信インタフェース部は、
前記拡張機能の実行要求を受け付けた仮想マシンから、前記第２の動作モジュールインタフェース実現部のオブジェクトの取得要求を受け付けると、
前記判定手段により、処理の実行が要求された動作モジュールに対応する前記第２の動作モジュールインタフェース実現部の生成有無を判定し、
生成されていないと判定された場合に、
前記生成手段により、前記動作モジュールの登録情報に基づき、処理の実行が要求された動作モジュールに対応する前記第２の動作モジュールインタフェース実現部のオブジェクトを生成し、生成したオブジェクトを、取得要求元である仮想マシンに応答することを特徴とする請求項３に記載の画像処理装置。
【請求項５】
前記標準機能が動作する仮想マシンにおいて、
前記生成手段は、
前記通信インタフェース部の起動時に登録された前記動作モジュールのメソッド名及びメソッドパラメータに基づき、処理の実行が要求された動作モジュールに対応する前記第２の動作モジュールインタフェース実現部のオブジェクトを生成することを特徴とする請求項４に記載の画像処理装置。
【請求項６】
画像処理装置の標準機能と前記標準機能を利用した拡張機能とが異なる仮想マシン上で動作する環境において、前記標準機能を実現する複数の動作モジュールと、各仮想マシン上で動作し、前記複数の動作モジュールに対して共通の仮想マシン間通信を行う通信インタフェース部と、を有する画像処理装置における仮想マシン間の動作モジュール実行制御方法であって、
前記通信インタフェース部が、
前記仮想マシン上での機能実行要求を受け付ける受付手順と、
前記仮想マシン間通信を行う通信手順と、
前記通信手段のインタフェースと前記動作モジュールとの間に介在し、前記動作モジュールのインタフェースを実現する動作モジュールインタフェース実現部を生成する生成手順と、を有し、
前記受付手順により、前記拡張機能の実行要求を受け付けると、
前記通信手順による仮想マシン間通信により、
前記機能実行要求を受け付けた仮想マシン上で、前記生成手順により生成され動作する第１の動作モジュールインタフェース実現部から、他の仮想マシン上で、前記生成手順により生成され動作する第２の動作モジュールインタフェース実現部を呼び出し、他の仮想マシンが有する前記動作モジュールに実行要求を行うことを特徴とする動作モジュール実行制御方法。
【請求項７】
画像処理装置の標準機能と前記標準機能を利用した拡張機能とが異なる仮想マシン上で動作する環境において、前記標準機能を実現する複数の動作モジュールと、各仮想マシン上で動作し、前記複数の動作モジュールに対して共通の仮想マシン間通信を行う通信インタフェース部と、を有する画像処理装置における仮想マシン間の動作モジュール実行制御プログラムであって、
前記通信インタフェース部が動作することにより、
コンピュータを、
前記仮想マシン上での機能実行要求を受け付ける受付手段と、
前記仮想マシン間通信を行う通信手段と、
前記通信手段のインタフェースと前記動作モジュールとの間に介在し、前記動作モジュールのインタフェースを実現する動作モジュールインタフェース実現部を生成する生成手段として機能させ、
前記受付手段により、前記拡張機能の実行要求を受け付けると、
前記通信手段による仮想マシン間通信により、
前記機能実行要求を受け付けた仮想マシン上で、前記生成手段により生成され動作する第１の動作モジュールインタフェース実現部から、他の仮想マシン上で、前記生成手段により生成され動作する第２の動作モジュールインタフェース実現部を呼び出し、他の仮想マシンが有する前記動作モジュールに実行要求を行うように動作させる動作モジュール実行制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の仮想マシンが動作可能な画像処理装置に関し、特に、仮想マシン間で行うデータ通信により動作モジュールの実行を制御する技術に関するものである。
【背景技術】
【０００２】
１台の物理コンピュータ上に、あたかもコンピュータが複数稼働しているかのような疑似システムを構築する仮想化技術は既に知られている。このような仮想化技術により実現される擬似的な情報処理システム環境（論理コンピュータ）を、仮想マシン（ＶＭ：Virtual Machine）と言う。
【０００３】
単体の仮想マシンが構築されたシステムの場合には、何らかの原因で処理が停止してしまうと、システム全体が停止することになる。しかし、複数の仮想マシンが構築されたシステムの場合には、ある仮想マシンにおいて処理が停止したとしても、他の仮想マシンに影響しないため、システム全体が停止することなく、処理を継続できる。
【０００４】
このような利点から、単体の仮想マシンが構築されたシステムを複数の仮想マシンが構築されたシステムに変更したい。そのためには、仮想マシン間でデータ通信が行えるように対応する必要がある。
【０００５】
仮想マシン間でデータ通信を行う手段には、Ｊａｖａ（登録商標：以下略）ＲＭＩ（Java Remote Method Invocation：以下単に「ＲＭＩ」と言う）通信が知られている。しかし、従来のシステムでは、ＲＭＩ通信を行うインタフェース（以下「通信Ｉ／Ｆ」と言う）の追加・変更を行う場合に対応箇所が多く、開発作業が繁雑となる（開発作業負荷が増大する）問題点があった。
【０００６】
そこで、例えば、特許文献１には、開発作業負荷の軽減を目的とし、仮想マシン間通信を行うサーバ再度Ｗｅｂアプリケーション開発において、複数の表示層とコンポーネント群を分離し、通信Ｉ／Ｆを少なくすることで、変更があった場合でも、少ない対応で済む開発支援装置が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来の方法では、既存の通信Ｉ／ＦをＲＭＩ通信対応する場合、通信Ｉ／Ｆ自体の変更を行う必要がある。また、ＲＭＩコンパイラによりコンパイルを行う必要もある。
【０００８】
既存の通信Ｉ／ＦをＲＭＩ通信対応する場合には、メソッドパラメータ（引数）の変更やＥｘｃｅｐｔｉｏｎ（例外）の追加など通信Ｉ／Ｆ自体の変更を行わなければならない。そのため、通信Ｉ／Ｆを利用している箇所（仮想マシン間で呼び出されるメソッド）を変更する必要がある。また、ＲＭＩ通信によりリモートサーバオブジェクト上のメソッドを呼び出すクライアントは、実際にリモートオブジェクトのスタブ又はプロキシをリモートオブジェクトへの通路として利用する。そのため、スタブやプロキシを作成し直し、再度、コンパイル（リコンパイル）を行う必要がある。
【０００９】
このように、従来の方法では、ＲＭＩ通信対応の開発作業において、その負荷を十分に軽減できていなかった。
【００１０】
本発明は上記従来技術の問題点を鑑み提案されたものであり、その目的とするところは、仮想マシン間のＲＭＩ通信対応における通信Ｉ／Ｆの追加・変更の作業負荷を軽減できる画像処理装置、仮想マシン間の動作モジュール実行制御方法、及び動作モジュール実行制御プログラムを提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、本発明に係る画像処理装置は、当該画像処理装置の標準機能と前記標準機能を利用した拡張機能とが異なる仮想マシン上で動作する画像処理装置であって、前記標準機能を実現する複数の動作モジュールと、各仮想マシン上で動作し、前記複数の動作モジュールに対して共通の仮想マシン間通信を行う通信インタフェース部と、を有し、前記通信インタフェース部が、前記仮想マシン上での機能実行要求を受け付ける受付手段と、前記仮想マシン間通信を行う通信手段と、前記通信手段のインタフェースと前記動作モジュールとの間に介在し、前記動作モジュールのインタフェースを実現する動作モジュールインタフェース実現部を生成する生成手段と、を有し、前記受付手段により、前記拡張機能の実行要求を受け付けると、前記通信手段による仮想マシン間通信により、前記機能実行要求を受け付けた仮想マシン上で、前記生成手段により生成され動作する第１の動作モジュールインタフェース実現部から、他の仮想マシン上で、前記生成手段により生成され動作する第２の動作モジュールインタフェース実現部を呼び出し、他の仮想マシンが有する前記動作モジュールに実行要求を行うことを特徴とする。
【００１２】
また、上記目的を達成するため、本発明に係る画像処理装置は、前記生成手段が、Ｊａｖａ（登録商標）オブジェクトのシリアライズ（直列化）により、各仮想マシンにおいて、前記仮想マシン間通信による前記動作モジュールのメソッド呼出が可能な同一インスタンスの動作モジュールインタフェース実現部のオブジェクトを生成することを特徴とする。
【００１３】
このような構成によって、本発明に係る画像処理装置は、各仮想マシンにおいて、仮想マシン間通信を行う通信インタフェース部（サブセットモジュール）を動作させる。サブセットモジュールは、ＲＭＩ通信を行う通信Ｉ／Ｆ（ＲＭＩ通信Ｉ／Ｆ）が仮想マシン間で呼び出される動作モジュールと別途独立した構成となっている。また、サブセットモジュールは、ＲＭＩ通信Ｉ／Ｆと動作モジュールとの間に介在し、動作モジュールのＩ／Ｆを実現する代理オブジェクト（動作モジュールＩ／Ｆ実現部）を管理する機能（代理オブジェクト管理部）を有している。代理オブジェクトは、各仮想マシン上で動作する代理オブジェクト管理部により、各仮想マシンにおいてＲＭＩ通信（リモート）によるメソッド呼出が可能な一対のオブジェクト（異なる仮想マシンで同一インスタンスのオブジェクト）として生成される。画像処理装置は、機能実行要求を受け付けた仮想マシン上で動作する代理オブジェクトから、ＲＭＩ通信Ｉ／Ｆを介して、他の仮想マシン上で動作する代理オブジェクトを呼び出し、他の仮想マシンが有する動作モジュールに実行要求を行う。つまり、画像処理装置では、各仮想マシンに生成された一対の代理オブジェクトを介して、仮想マシン上の動作モジュールの実行を制御し、要求された機能を実現する。
【００１４】
これによって、本発明に係る画像処理装置は、仮想マシン間で呼び出す動作モジュールのＩ／Ｆに変更が生じた場合であっても、ＲＭＩ通信Ｉ／Ｆと動作モジュールとが分離されていることから、ＲＭＩ通信Ｉ／Ｆを変更する必要がない（通信Ｉ／Ｆの隠蔽が可能となる）。また、画像処理装置は、仮想マシン間で呼び出す動作モジュールのＩ／Ｆを新たに追加する場合であっても、動作モジュールのＩ／Ｆを実現する代理オブジェクトを動的に生成する機能を有していることから、既存Ｉ／Ｆを変更する必要がない（リコンパイルを行わなくてもよい）。その結果、画像処理装置では、仮想マシン間のＲＭＩ通信対応における通信Ｉ／Ｆの追加・変更の作業負荷が軽減できる。
【００１５】
上記目的を達成するため、本発明に係る仮想マシン間の動作モジュール実行制御方法は、画像処理装置の標準機能と前記標準機能を利用した拡張機能とが異なる仮想マシン上で動作する環境において、前記標準機能を実現する複数の動作モジュールと、各仮想マシン上で動作し、前記複数の動作モジュールに対して共通の仮想マシン間通信を行う通信インタフェース部と、を有する画像処理装置における仮想マシン間の動作モジュール実行制御方法であって、前記通信インタフェース部が、前記仮想マシン上での機能実行要求を受け付ける受付手順と、前記仮想マシン間通信を行う通信手順と、前記通信手段のインタフェースと前記動作モジュールとの間に介在し、前記動作モジュールのインタフェースを実現する動作モジュールインタフェース実現部を生成する生成手順と、を有し、前記受付手順により、前記拡張機能の実行要求を受け付けると、前記通信手順による仮想マシン間通信により、前記機能実行要求を受け付けた仮想マシン上で、前記生成手順により生成され動作する第１の動作モジュールインタフェース実現部から、他の仮想マシン上で、前記生成手順により生成され動作する第２の動作モジュールインタフェース実現部を呼び出し、他の仮想マシンが有する前記動作モジュールに実行要求を行うことを特徴とする。
【００１６】
このような手順によって、本発明に係る仮想マシン間の動作モジュール実行制御方法は、ＲＭＩ通信Ｉ／Ｆが仮想マシン間で呼び出す動作モジュールと別途独立した構成において、動作モジュールのＩ／Ｆを実現する代理オブジェクト（動作モジュールＩ／Ｆ実現部）を各仮想マシンで動的に生成し、機能実行要求を受け付けた仮想マシン上で動作する代理オブジェクトから、ＲＭＩ通信Ｉ／Ｆを介して、他の仮想マシン上で動作する代理オブジェクトを呼び出し、他の仮想マシンが有する動作モジュールに実行要求を行うと言う動作を実現する。
【００１７】
これによって、本発明に係る仮想マシン間の動作モジュール実行制御方法は、仮想マシン間のＲＭＩ通信対応における通信Ｉ／Ｆの追加・変更の作業負荷を軽減可能な環境を提供できる。
【発明の効果】
【００１８】
本発明によれば、ＲＭＩ通信Ｉ／Ｆが仮想マシン間で呼び出す動作モジュールと別途独立した構成とし、動作モジュールのＩ／Ｆを実現する代理オブジェクトを各仮想マシンで動的に生成し、生成された一対の代理オブジェクトを介して、仮想マシン上の動作モジュールの実行を制御可能とすることで、仮想マシン間のＲＭＩ通信対応における通信Ｉ／Ｆの追加・変更の作業負荷が軽減される画像処理装置、仮想マシン間の動作モジュール実行制御方法、及び動作モジュール実行制御プログラムを提供することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１の実施形態に係る画像処理装置のハードウェア構成例を示す図である。
【図２】本発明の第１の実施形態に係る複数の仮想マシンが構築されたシステム構成例を示す図である。
【図３】本発明の第１の実施形態に係る複数の仮想マシンが構築されたシステムのソフトウェア構成例を示す図である。
【図４】本発明の第１の実施形態に係るサブセットモジュールの機能構成例を示す図である。
【図５】本発明の第１の実施形態に係る第１仮想マシンでサブセットモジュールが起動された場合の処理手順例を示すシーケンス図である。
【図６】本発明の第１の実施形態に係る第２仮想マシンで機能実行指示を受け付けた場合の処理手順例を示すシーケンス図である。
【発明を実施するための形態】
【００２０】
以下、本発明の好適な実施の形態（以下「実施形態」と言う）について、図面を用いて詳細に説明する。
【００２１】
［第１の実施形態］
＜ハードウェア構成＞
図１は、本実施形態に係る画像処理装置１００のハードウェア構成例を示す図である。
図１に示すように、画像処理装置１００は、コントローラ１１０、操作パネル１２０、プロッタ１３０、及びスキャナ１４０などを備え、それぞれが相互にバスＢで接続されている。
【００２２】
操作パネル１２０は、表示部及び入力部を備えており、機器情報などの各種情報をユーザに提供したり、動作設定や動作指示などの各種ユーザ操作を受け付けたりする。プロッタ１３０は、画像形成部を備えており、用紙に出力画像を形成する。例えば、出力画像を形成する方式には、電子写真プロセスやインクジェット方式などがある。スキャナ１４０は、原稿を光学的に読み取り、読み取り画像を生成する。
【００２３】
コントローラ１１０は、ＣＰＵ（Central Processing Unit）１１１、記憶装置１１２、ネットワークＩ／Ｆ１１３、及び外部記憶Ｉ／Ｆ１１４などを備えており、それぞれが相互にバスＢで接続されている。
【００２４】
ＣＰＵ１１１は、プログラムを実行することにより各種機能の実現や装置全体を制御する。また記憶装置１１２は、上記プログラムや各種データ（例えば「画像データ」）を格納し保持する。例えば、記憶装置１１２には、揮発性のメモリであるＲＡＭ（Random Access Memory）、不揮発性のメモリであるＲＯＭ（Read Only Memory）、及び大容量の記憶領域を備えたＨＤＤ（Hard Disk Drive）などがある。ＲＡＭは、ＣＰＵ１１１のワークエリア（プログラムやデータが一時的に読み出される記憶エリア）として機能する。ＲＯＭやＨＤＤは、プログラムや各種データの格納先として用いられる。これにより、画像処理装置１００では、ＣＰＵ１１１がＲＯＭに格納されたプログラムをＲＡＭ上に読み出し、プログラムを実行する。
【００２５】
ネットワークＩ／Ｆ１１３は、画像処理装置１００をネットワークなどの所定のデータ伝送路に接続するためのインタフェースである。外部記憶Ｉ／Ｆ１１４は、外部記憶装置にあたる記録媒体１１４ａを接続するためのインタフェースである。例えば、外部記憶装置には、ＳＤメモリカード（SD Memory Card）やＵＳＢ（Universal Serial Bus）メモリなどがある。これにより、画像処理装置１００は、外部記憶Ｉ／Ｆ１１４を介して、記録媒体１１４ａに格納されたプログラムやデータを読み取る。
【００２６】
画像処理装置１００では、上記ハードウェア構成により、例えば、ＨＤＤやＲＯＭからＲＡＭ上に読み出したプログラムをＣＰＵ１１１により実行することで、１又は複数の仮想マシン環境を動作させることができる。
【００２７】
＜システム及びソフトウェア構成＞
図２は、本実施形態に係る複数の仮想マシンが構築されたシステム構成例を示す図である。図２には、１台の物理コンピュータ上に２つの仮想マシンが動作するシステム構成が示されている。
【００２８】
図２に示すように、仮想マシン環境は、ＯＳ（Operating System）１０上で仮想マシン環境を実現するプログラムを動作させることで実現される。本実施形態では、組み込み型システムの開発環境として使用頻度の高いＪａｖａＶＭ（Java Virtual Machine）２１を動作させることで実現している。なお、ＯＳ１０は、組み込み系の基本ソフトウェアであり、例えば、Ｌｉｎｕｘ（登録商標：以下略）などがある。
【００２９】
複数の仮想マシン環境は、ＯＳ１０上で複数のＪａｖａＶＭ２１を動作させることで実現できる。本実施形態では、ＪａｖａＶＭ２１１及び２１２（２つのＪａｖａＶＭ２１）を動作させることで、第１及び第２仮想マシン環境（２つの仮想マシン環境）を実現している。以降では、ＪａｖａＶＭ２１１及び２１２を「第１仮想マシン２１１及び第２仮想マシン２１２」に置き換え説明する。また、第１仮想マシン２１１及び第２仮想マシン２１２を総称する際には、「仮想マシン２１」とする。同様に、各仮想マシン２１上で動作するソフトウェア（例えば「プログラム」や「データ」）及び使用される記憶領域についても、同じソフトウェア名や記憶領域名を総称する際には、共通する名称と参照符号を用いることとする。
【００３０】
仮想マシン２１は、仮想マシン２１上でＪａｖａコンポーネント２２を動作させるためのヒープメモリ２１１を有している。ヒープメモリ２１１は、仮想マシン２１上で動作するアプリケーションが自由に確保できるメモリ領域である。このように、複数の仮想マシン２１が構築されたシステムでは、仮想マシン２１ごとに独立したヒープメモリ２１１を有することから、処理停止などの障害が発生しても、互いのシステムに影響を及ぼすことがない。
【００３１】
仮想マシン２１上で動作するＪａｖａコンポーネント２２には、プラットフォーム及びアプリケーション（図中のＪａｖａプラットフォーム２２１及びＪａｖａアプリケーション２２２）の各機能を実現するための複数のＪａｖａプログラムが含まれる。Ｊａｖａプラットフォーム２２１は、仮想マシン２１が実現するシステム（動作環境）の標準機能として動作する。またＪａｖａアプリケーション２２２は、上記基本機能を利用し、例えば、ユーザが実行したい作業を実施する機能（仮想マシン環境におけるユーザ提供機能）として動作する。Ｊａｖａアプリケーション２２２は、提供する機能構成に応じてインストール／アンインストールが可能である。
【００３２】
以上のように、本実施形態に係る画像処理装置１００には、複数の仮想マシン２１が動作する環境を構築することができる。
【００３３】
次に、上記システムにおける詳細なソフトウェア構成について説明する。
図３は、本実施形態に係る複数の仮想マシン２１が構築されたシステムのソフトウェア構成例を示す図である。
【００３４】
例えば、上記システムが構築された画像処理装置１００が、ＭＦＰ（Multifunction Peripheral）であった場合、次のようなシステム構築が考えられる。
【００３５】
第１仮想マシン２１１では、プリンタ、スキャナ、ＦＡＸ（ファクシミリ）などの標準機能を動作させる。
【００３６】
第１仮想マシン２１１上で動作するＪａｖａコンポーネント２２１が有するＪａｖａアプリケーション２２２１は、標準アプリケーション２２２ａ１及びＳＤＫ（Software Development Kit）アプリケーション２２２ｂ１を含む。またＪａｖａプラットフォーム２２１１は、Ｊａｖａモジュール群（動作モジュール群）２２１ａ１及びＳＤＫ  ＡＰＩ（Application Program Interface）２２１ｂ１を含む。
【００３７】
標準アプリケーション２２２ａ１は、ＭＦＰ搭載の標準機能を利用したユーザ提供機能を実現するソフトウェアである。標準アプリケーション２２２ａ１は、標準機能として、プラットフォームが有するＪａｖａモジュール群２２１ａ１の動作モジュール３０を利用する。例えば、Ｊａｖａモジュール群２２１ａ１には、プリンタモジュール３０Ｐ、スキャナモジュール３０Ｓ、及びＦＡＸモジュール３０Ｆなどが、標準機能を実現する動作モジュール３０として含まれる。これにより、例えば、標準アプリケーション２２２ａ１は、Ｊａｖａモジュール群２２１ａ１のプリンタモジュール３０Ｐ及びスキャナモジュール３０Ｓを利用してコピー機能（コピーアプリ）を実現する。
【００３８】
ＳＤＫアプリケーション２２２ｂ１は、ソフトウェアを開発する際に使用できる命令や関数の集合であるＳＤＫ  ＡＰＩ２２１ｂ１を用いて開発され、ユーザへの個別対応機能（カスタマイズ機能）などを実現するソフトウェアである。ＳＤＫアプリケーション２２２ｂ１は、ＳＤＫ  ＡＰＩ２２１ｂ１を介して、プラットフォームが有するＪａｖａモジュール群２２１ａ１の動作モジュール３０を利用する。これにより、例えば、ＳＤＫアプリケーション２２２ｂ１は、ＳＤＫ  ＡＰＩ２２１ｂ１を介して、Ｊａｖａモジュール群２２１ａ１のプリンタモジュール３０Ｐを利用し、認証モジュール（非図示）と合わせて印刷の利用認証機能（セキュアプリントアプリ）を実現する。
【００３９】
これに対して、第２仮想マシン２１２では、標準機能を利用する拡張機能（例えば「サードベンダ提供機能」）を動作させる。
【００４０】
第２仮想マシン２１２上で動作するＪａｖａコンポーネント２２２が有するＪａｖａアプリケーション２２２２は、ＳＤＫアプリケーション２２２ｂ２を含み、Ｊａｖａプラットフォーム２２１２は、ＳＤＫ  ＡＰＩ２２１ｂ２を含む。
【００４１】
上述したように、ＳＤＫアプリケーション２２２ｂ２は、プラットフォームが有するＳＤＫ  ＡＰＩ２２１ｂ２を用いれば独自に開発できる。特に拡張機能を実現するＳＤＫアプリケーション２２２ｂ２は、サードベンダにより開発され提供されるソフトウェアである。サードベンダにより開発されたソフトウェアは、どのように設計・プログラミングされ、かつどのような工程を経て動作テストされ、提供されたものなのかを、知ることができない。そのため、動作中のメモリリークなど、予期せぬエラー（障害）が発生する恐れがある。
【００４２】
このような場合、ＳＤＫアプリケーション２２２ｂ２（拡張機能）を、標準アプリケーション２２２ａ１（標準機能）と同じ仮想マシン２１（第１仮想マシン２１１）上で動作させると、障害発生の影響からシステム全体を停止（システムダウン）させてしまう可能性がある。そのため、本実施形態では、ＭＦＰ搭載の標準機能と拡張機能とを異なる仮想マシン２１上で動作させることにより、たとえ拡張機能に何らかの障害が発生したとしても、ユーザに対して、標準機能のサービス提供を継続して行うことができる。
【００４３】
しかし、このようなシステム構成の場合、第２仮想マシン２１２上で動作するＳＤＫアプリケーション２２２ｂ２は、第１仮想マシン２１１上で動作するＪａｖａモジュール群２２１ａ１の動作モジュール３０とデータ通信（仮想マシン間通信）を行う必要がある。なぜなら、第２仮想マシン２１２上で動作するＳＤＫアプリケーション２２２ｂ２は、第１仮想マシン２１１上で動作する動作モジュール３０（標準機能を実現するモジュール）を利用して機能（拡張機能）を実現しているからである。
【００４４】
仮想マシン間通信への対応方法には、第２仮想マシン２１２上で、各動作モジュール３０に対応する通信モジュールを動作させる方法（動作モジュール単位で対応する方法）がある。しかし、システム規模が大きく、かつシステム内で多くの動作モジュール３０が協働する場合には、多くの通信モジュールを用意する必要があり、現実的な対応方法ではない。また、たとえ通信モジュールが用意できたとしても、障害が発生した場合など、その後のシステム管理・保守が煩雑となる。さらに、仮想マシン２１上で多くの通信モジュールを動作させなければならず、リソースを無駄に消費することとなる。
【００４５】
そこで、本実施形態では、各仮想マシン２１に、仮想マシン間のデータ通信機能（仮想マシン間通信機能）を有するシステム全体のインタフェース部が設けられている。このインタフェース部が、各仮想マシン２１上で動作するＪａｖａプラットフォーム２２１が有するＪａｖａモジュール群２２１ａのサブセットモジュール（通信インタフェース部）４１である。各仮想マシン２１上で動作するサブセットモジュール４１は、同一モジュールである。また、各仮想マシン２１上では、１つのサブセットモジュール４１が動作する。
【００４６】
サブセットモジュール４１は、ＳＤＫアプリケーション２２２ｂから受け付けた機能実行要求に基づき、機能を実現するために連係する動作モジュール３０に対して処理の実行を要求する。また、サブセットモジュール４１は、他の仮想マシンと機能実行要求を送受信し、他の仮想マシン上で動作する動作モジュール３０の実行を制御する。例えば、第２仮想マシン２１２上で動作するＳＤＫアプリケーション２２２ｂ２が、第１仮想マシン２１１上で動作する動作モジュール３０と連係する場合には、次のように行われる。ＳＤＫアプリケーション２２２ｂ２は、第２仮想マシン２１２側のサブセットモジュール４１２を介して、第１仮想マシン２１１側のサブセットモジュール４１１に対し、機能実行要求を行う。第１仮想マシン２１１側のサブセットモジュール４１１は、受け付けた機能実行要求に基づき、指定された動作モジュール３０に対して処理の実行を要求する。
【００４７】
このように、サブセットモジュール４１は、複数の動作モジュール３０に対して共通の通信インタフェースとして機能する。
【００４８】
＜仮想マシン間の動作モジュール実行制御機能＞
上記サブセットモジュール４１が有する機能について説明する。
図４は、本実施形態に係るサブセットモジュール４１の機能構成例を示す図である。
本実施形態に係る画像処理装置１００では、各仮想マシン２１において、仮想マシン間通信を行うサブセットモジュール（通信インタフェース部）４１を動作させる。サブセットモジュール４１は、ＲＭＩ通信を行う通信Ｉ／Ｆ（ＲＭＩ通信Ｉ／Ｆ部）が仮想マシン間で呼び出される動作モジュール３０と別途独立した構成となっている。また、サブセットモジュール４１は、ＲＭＩ通信Ｉ／Ｆ部５３と動作モジュール３０との間に介在し、動作モジュール３０のＩ／Ｆを実現する代理オブジェクト（動作モジュールＩ／Ｆ実現部）５２を管理する代理オブジェクト管理部５１を有している。代理オブジェクト５２は、各仮想マシン２１上で動作する代理オブジェクト管理部５１により、各仮想マシン２１においてＲＭＩ通信（リモート）によるメソッド呼出が可能な一対のオブジェクト（異なる仮想マシンで同一インスタンスのオブジェクト）として生成される。
【００４９】
本実施形態に係る画像処理装置１００は、機能実行要求を受け付けた第２仮想マシン２１２上で動作する代理オブジェクト５２２から、ＲＭＩ通信Ｉ／Ｆ部５３を介して、第１仮想マシン２１１上で動作する代理オブジェクト５２１を呼び出し、第１仮想マシン２１１が有する動作モジュール３０に実行要求を行う。つまり、画像処理装置１００では、各仮想マシン２１に生成された一対の代理オブジェクト５２を介して、仮想マシン２１上の動作モジュール３０の実行を制御し、要求された機能を実現する。画像処理装置１００は、各仮想マシン２１上で動作する上記サブセットモジュール４１により、このような仮想マシン間の動作モジュール実行制御機能を有している。
【００５０】
本実施形態に係る画像処理装置１００では、仮想マシン間で呼び出す動作モジュール３０のＩ／Ｆに変更が生じた場合であっても、ＲＭＩ通信Ｉ／Ｆ部５３と動作モジュール３０とが分離されていることから、ＲＭＩ通信Ｉ／Ｆ部５３を変更する必要がない（通信Ｉ／Ｆの隠蔽が可能となる）。
【００５１】
また、本実施形態に係る画像処理装置１００では、仮想マシン間で呼び出す動作モジュール３０のＩ／Ｆを新たに追加する場合であっても、動作モジュール３０のＩ／Ｆを実現する代理オブジェクト５２を動的に生成する代理オブジェクト管理部５１を有していることから、既存Ｉ／Ｆを変更する必要がない（リコンパイルを行わなくてもよい）。
【００５２】
このように、本実施形態に係る画像処理装置１００では、仮想マシン間のＲＭＩ通信対応における通信Ｉ／Ｆの追加・変更の作業負荷が軽減できる。
【００５３】
以下に、上記動作モジュール実行制御機能の構成とその動作について説明する。なお、上述したように、以降で、各仮想マシン２１上で動作するサブセットモジュール４１の機能名を総称する際、共通する名称と参照符号を用いることとする。
【００５４】
図４に示すように、サブセットモジュール４１は、要求受付部４１１、処理要求部４１２、及び仮想マシン間通信部４１３などを有している。
【００５５】
要求受付部４１１は、ＳＤＫ  ＡＰＩ２２１を介して、ＳＤＫアプリケーション２２ｂからの機能動作要求を受け付ける機能部である。
【００５６】
処理要求部４１２は、要求時指定の動作モジュール３０に対して処理の実行を要求する機能部である。よって、処理要求部４１２は、仮想マシン２１が有する動作モジュール３０に対応して構成される。例えば、第１仮想マシン２１１は、プリンタモジュール３０Ｐ、スキャナモジュール３０Ｓ、及びＦＡＸモジュール３０Ｆの基本機能を実現する動作モジュール３０を有している。このようなモジュール構成の場合、第１仮想マシン２１１が有する処理要求部４１２１の構成は、プリンタモジュール３０Ｐに対応する処理要求部４１２Ｐ１、スキャナモジュール３０Ｓに対応する処理要求部４１２Ｓ１、及びＦＡＸモジュール３０Ｆに対応する処理要求部４１２Ｆ１となる。
【００５７】
例えば、第１仮想マシン２１１が有する処理要求部４１２１は、自身の動作する仮想マシン２１が第１仮想マシン２１１であることから（実行環境判定結果から）、仮想マシン２１１上で動作する動作モジュール３０に対して処理の実行を要求する。このとき、サブセットモジュール４１１は、要求受付部４１１１により受け付けた機能動作要求を解析し、解析結果として、動作要求された機能（要求処理）に係る情報を得る。これにより、処理要求部４１２１は、得られた情報（例えば「機能実現のために連係する動作モジュール３０に係る情報」）に基づき、該当する動作モジュール３０を実行する。一方、第２仮想マシン２１２では、サブセットモジュール４１２が、自身の動作する仮想マシン２１が第２仮想マシン２１２であることから、後述する仮想マシン間通信部４１３を介して、要求処理を実行する際に呼び出す仮想マシン２１１上で動作する動作モジュール３０に対して処理の実行を要求する。このように、本実施形態では、第２仮想マシン２１２において、基本機能を使用して機能を実現する拡張機能から動作要求を受け付けると、仮想マシン間通信が行われ、処理の実行に用いられる第１仮想マシン２１１上の動作モジュール３０に対して処理の実行が要求される。
【００５８】
仮想マシン間通信部４１３は、仮想マシン間でデータ通信を行う機能部である。本実施形態では、仮想マシン環境がＪａｖａＶＭにより実現されている。よって、仮想マシン間通信部４１３では、仮想マシン間通信をＲＭＩ通信により実現される。ＲＭＩとは、別ホスト（他のＪａｖａＶＭ）のＪａｖａオブジェクトのメソッドを呼び出すための通信手段であり、ＲＰＣ（Remote Procedure Call）のオブジェクトに相当する機能を果たすためのＡＰＩである。これにより、仮想マシン間通信部４１３では、仮想マシン間のデータ通信（情報送受信）を行う。
【００５９】
例えば、第２仮想マシン２１２が有する仮想マシン間通信部４１３２では、自身の動作する仮想マシン２１が第２仮想マシン２１２であることから、要求受付部４１１２により受け付けた機能動作要求を、第１仮想マシン２１１に送信する。
【００６０】
このように機能する仮想マシン間通信部４１３は、代理オブジェクト管理部５１及びＲＭＩ通信Ｉ／Ｆ部５３を有している。
【００６１】
代理オブジェクト管理部５１は、動作モジュール３０のＩ／Ｆを実現する代理オブジェクト（動作モジュールＩ／Ｆ実現部）５２を管理する機能部である。代理オブジェクト５２とは、後述するＲＭＩ通信Ｉ／Ｆ部５３と動作モジュール３０との間に介在し、各動作モジュール３０のＩ／Ｆを実現するＪａｖａオブジェクトである。代理オブジェクト管理部５１は、この代理オブジェクト５２の生成・削除などを行うことで、代理オブジェクト５２を管理する。
【００６２】
代理オブジェクト管理部５２は、仮想マシン２１が有する動作モジュール３０に対応する代理オブジェクト５２を生成する。なお、ここで言う「オブジェクトの生成」とは、オブジェクト指向言語によりクラスからオブジェクトを生成する工程である。生成工程には、例えば、「オブジェクト変数の宣言（クラス名  オブジェクト変数）」、「オブジェクトの生成（new）」、及び「オブジェクトの初期化（コンストラクタ名（初期化値・・・））」などがある。
【００６３】
例えば、第１仮想マシン２１１は、プリンタモジュール３０Ｐ、スキャナモジュール３０Ｓ、及びＦＡＸモジュール３０Ｆの基本機能を実現する動作モジュール３０を有している。このようなモジュール構成の場合、仮想マシン２１１が有する代理オブジェクト管理部５２１は、動作モジュール３０の登録情報（例えば「メソッド名（関数名）」や「メソッドパラメータ（引数）」）に基づき、プリンタモジュール３０Ｐに対応する代理オブジェクト５２Ｐ１、スキャナモジュール３０Ｓに対応する代理オブジェクト５２Ｓ１、及びＦＡＸモジュール３０Ｆに対応する代理オブジェクト５２Ｆ１を生成する。代理オブジェクト管理部５２１は、上記代理オブジェクト５２１を、仮想マシン２１２からのＲＭＩ通信実行時（機能実行要求時）に生成する。代理オブジェクト管理部５２１は、生成後の代理オブジェクト５２１を所定の管理識別子（例えば「Ｉ／ＦＩＤ」）を用いて管理する。また、代理オブジェクト管理部５２１は、ＲＭＩ通信Ｉ／Ｆ部５３１に生成後の代理オブジェクト５２１を定義する。このとき、代理オブジェクト管理部５２１は、ＲＭＩ通信Ｉ／Ｆ部５３１に、生成後の代理オブジェクト５２１、メソッド名（関数名）、及びメソッドパラメータ（引数）などを渡す。なお、仮想マシン２１１では、サブセットモジュール４１１の起動時に、動作モジュール３０の情報が代理オブジェクト管理部５２１へ登録される。
【００６４】
一方、仮想マシン２１２が有する代理オブジェクト管理部５２２は、ＲＭＩ通信実行（機能実行要求）により、生成後の代理オブジェクト５２１を受け取る（生成後の代理オブジェクト５２１が返却される）。代理オブジェクト管理部５２２は、受け取ったオブジェクト（返却されたオブジェクト）を代理オブジェクト５２２として所定の管理識別子（例えば「Ｉ／ＦＩＤ」）を用いて管理する。また、代理オブジェクト管理部５２２は、ＲＭＩ通信Ｉ／Ｆ部５３２に代理オブジェクト５２２を定義する。
【００６５】
このように、代理オブジェクト管理部５２は、代理オブジェクト５２１と代理オブジェクト５２２を、第１仮想マシン２１１と第２仮想マシン２１２とにおいてＲＭＩ通信（リモート）によるメソッド呼出が可能な一対のオブジェクトとして管理する。これら一対のオブジェクトは、動作モジュール３０の単位（基本機能の単位）で管理される。
【００６６】
Ｊａｖａでは、文字データやバイトデータの入出力以外に、オブジェクトの入出力を行うクラスが用意されている。オブジェクトの入出力は、オブジェクトを再利用するため一時的にオブジェクトを保持する場合や、仮想マシン間などのリモート環境にあるプログラムとソケットを利用してオブジェクトをやり取りする場合などに用いる。
【００６７】
このようなオブジェクトの入出力処理を、オブジェクトのシリアライズ（直列化）と呼ぶ。それは、オブジェクトの書き込み処理を行う場合、読み込み処理に備えオブジェクトを一連のつながりのあるデータとして書き込み、読み込む際、書き込まれた一連のデータの順に読み込み処理を行うと言うものである。
【００６８】
つまり、第１仮想マシン２１１から第２仮想マシン２１２に返却される代理オブジェクト５２１は、オブジェクトがシリアライズ（直列化）されている。そのため、第１仮想マシン２１１で管理する代理オブジェクト５２１と、第２仮想マシン２１２で管理する代理オブジェクト５２２とは、同一インスタンスとなる。
【００６９】
また、代理オブジェクト管理部５１は、例えば、機能実行を要求するＪａｖａアプリケーション２２２の終了時に、管理対象の代理オブジェクト５２を削除する。なお、代理オブジェクト５２の削除タイミングは、Ｊａｖａアプリケーション２２２の終了と必ずしも同期していなくてもよい。
【００７０】
ＲＭＩ通信Ｉ／Ｆ部５３は、ＲＭＩ通信を行う通信Ｉ／Ｆを実現する機能部である。つまり、ＲＭＩ通信Ｉ／Ｆ部５３は、仮想マシン間で直接ＲＭＩ通信を行うためのＩ／Ｆである。また、ＲＭＩ通信Ｉ／Ｆ部５３は、上述した動作モジュール３０の単位で管理される代理オブジェクト５２に対して共通するＩ／Ｆである。
【００７１】
このように、本実施形態に係るサブセットモジュール４１では、ＲＭＩ通信を行う通信Ｉ／Ｆ（ＲＭＩ通信Ｉ／Ｆ部）が仮想マシン間で呼び出す動作モジュール３０と別途独立した構成となっている。
【００７２】
これにより、画像処理装置１００では、動作モジュール３０のＩ／Ｆに変更や追加が生じた場合でも、ＲＭＩ通信を行うＩ／Ｆで対応作業を行う必要がなく、通信Ｉ／Ｆに影響がない。
【００７３】
また、ＲＭＩ通信Ｉ／Ｆ部５３には、上述したように、代理オブジェクト管理部５１により、代理オブジェクト５２、メソッド名（関数名）、及びメソッドパラメータ（引数）が定義される。よって、ＲＭＩ通信Ｉ／Ｆ部５３は、実際のＲＭＩ通信を行う際に、上記定義情報をキーに実行される。
【００７４】
本実施形態に係る仮想マシン間の動作モジュール実行制御機能は、上記各機能部が次のように連係動作することにより実現される。画像処理装置１００は、機能実行要求を受け付けた第２仮想マシン２１２上で動作する代理オブジェクト５２２から、ＲＭＩ通信Ｉ／Ｆ部５３を介して、第１仮想マシン２１１上で動作する代理オブジェクト５２１を呼び出し、第１仮想マシン２１１が有する動作モジュール３０に実行要求を行う。
【００７５】
このように、本実施形態に係る画像処理装置１００では、上記機能構成により、動作モジュール３０のＩ／Ｆに変更や追加が生じた場合、代理オブジェクト管理部５１のみで対応することができる。つまり、本実施形態では、従来に比べて、より限定した範囲での作業で仮想マシン間のＲＭＩ通信対応が行える。
【００７６】
次に、動作モジュール実行制御機能の詳細な動作（機能部群の連係動作）について、処理手順を示すシーケンス図を用いて説明する。
【００７７】
動作モジュール実行制御機能は、各仮想マシン２１上でサブセットモジュール４１が動作することで実現される機能である。仮想マシン環境は、画像処理装置１００に搭載（インストール）されるＪａｖａＶＭ（仮想マシン環境を実現するプログラム）が、ＣＰＵ１１１により、格納先（例えば「ＲＯＭ」）からＲＡＭ上に読み出され、実行されることで構築される。サブセットモジュール４１は、この環境下において、Ｊａｖａプラットフォーム２２１が有するＪａｖａモジュール群２２１ａの１つのモジュールとして起動される。
【００７８】
なお、以下の説明では、第１仮想マシン２１１でサブセットモジュール４１１が起動された場合の処理（処理１）と、第２仮想マシン２１２で機能実行要求を受け付けた場合の処理（処理２）に分けて説明する。
【００７９】
《処理１》
図５は、本実施形態に係る第１仮想マシン２１１でサブセットモジュール４１１が起動された場合の処理手順例を示すシーケンス図である。
【００８０】
図５に示すように、画像処理装置１００は、第１仮想マシン２１１上でサブセットモジュール４１１が起動されると、要求受付部４１１１、処理要求部４１２１、及び仮想マシン間通信部４１３１の各機能実現オブジェクトが生成され動作する（ステップＳ１１）。このとき、第１仮想マシン２１１が有する動作モジュール３０に対応して生成された処理要求部４１２１は、対応する動作モジュール３０がＲＭＩ通信を行う必要のあるモジュールであった場合、仮想マシン間通信部４１３１が有する代理オブジェクト管理部５１１に、自身のオブジェクトを管理対象として登録要求する（ステップＳ１２）。なお、動作モジュール３０がＲＭＩ通信を行う必要のあるモジュールであるか否かの判定は、例えば、設計・開発段階で予め決定しておいた機能単位におけるＲＭＩ通信の要否設定に基づいて行う。
【００８１】
代理オブジェクト管理部５１１は、要求に応じて、処理要求部４１２１のオブジェクトを、管理対象として登録する（ステップＳ１３）。
【００８２】
これにより、画像処理装置１００では、代理オブジェクト管理部５１１が、第２仮想マシン２１２とＲＭＩ通信を行う動作モジュール３０に対応する代理オブジェクト５２１（動作モジュールＩ／Ｆ実現部）を、第１仮想マシン２１１上に生成できる。
【００８３】
《処理２》
図６は、本実施形態に係る第２仮想マシン２１２で機能実行指示を受け付けた場合の処理手順例を示すシーケンス図である。なお、図６には、第２仮想マシン２１２上で動作する拡張機能が、仮想マシン間通信により、第１仮想マシン２１１上で動作する動作モジュール３０を利用して動作する場合の処理手順例が示されている。
【００８４】
図６に示すように、画像処理装置１００は、ユーザから拡張機能実行の指示を受け付けると、第２仮想マシン２１２上でＪａｖａアプリケーション２２２２が動作する（ステップＳ２１）。動作中のＪａｖａアプリケーション２２２２からは、機能実現のために動作モジュール３０の関数（アプリが使用するメソッド）が呼び出される（ステップＳ２２）。このとき、Ｊａｖａアプリケーション２２２２では、通常と異なるインスタンスにより関数呼出を行うことで、内部的に代理オブジェクト管理部５１２に動作モジュール３０の実行要求が通知される仕組みとなっている。具体的には、次のような処理が行われる。
【００８５】
サブセットモジュール４１２では、要求受付部４１１２により、Ｊａｖａアプリケーション２２２２からの動作モジュール３０の実行要求を受け付けて（ステップＳ２３）、受け付けた要求が代理オブジェクト管理部５１２に通知される（ステップＳ２４）。
【００８６】
代理オブジェクト管理部５１２は、代理オブジェクト５２２を管理する機能であることから、要求された動作モジュール３０に対応する代理オブジェクト５２２が第２仮想マシン２１２上に既に生成されているか否かを確認する（ステップＳ２５）。
【００８７】
代理オブジェクト管理部５１２は、第２仮想マシン２１２上に、まだ、要求された動作モジュール３０に対応する代理オブジェクト５２２が生成されていなければ（生成後の代理オブジェクト５２２が未登録の場合）、第１仮想マシン２１１に対して、要求された動作モジュール３０に対応する代理オブジェクト５２２の取得を要求する（ステップＳ２６）。このとき、代理オブジェクト管理部５１２は、要求された動作モジュール３０のメソッド名（関数名）及びメソッドパラメータ（引数）を、ＲＭＩ通信Ｉ／Ｆ部５３２を介して（ＲＭＩ通信により）、第１仮想マシン２１１に送信し、代理オブジェクト５２２の取得を要求する。
【００８８】
第１仮想マシン２１１では、サブセットモジュール４１１が有する代理オブジェクト管理部５１１により、取得要求を受け付けて、要求された代理オブジェクト５２１が第１仮想マシン２１１上に既に生成されているか否かを確認する（ステップＳ３１）。
【００８９】
代理オブジェクト管理部５１１は、第１仮想マシン２１１上に、まだ、要求された代理オブジェクト５２１が生成されていなければ（生成後の代理オブジェクト５２１が未登録の場合）、代理オブジェクト５２１を生成する（ステップＳ３２）。このとき、代理オブジェクト管理部５１１は、サブセットモジュール４１１の起動時に登録された動作モジュール３０に対応する処理要求部４１２１の登録情報、及び取得要求時に受信した動作モジュール３０のメソッド名（関数名）及びメソッドパラメータ（引数）などに基づき、動作モジュール３０のＩ／Ｆを実現するＪａｖａオブジェクトを生成する。
【００９０】
代理オブジェクト管理部５１１は、生成された代理オブジェクト５２１に対して、管理識別子を発行し、管理対象の代理オブジェクト５２として登録する（ステップＳ３３）。このとき、代理オブジェクト管理部５１１は、生成後のＩ／ＦをＲＭＩ通信Ｉ／Ｆ部５３１に定義する。ＲＭＩ通信Ｉ／Ｆ部５３１には、生成後の代理オブジェクト５２１、メソッド名（関数名）、及びメソッドパラメータ（引数）が定義される。
【００９１】
代理オブジェクト管理部５１１は、生成後の代理オブジェクト５２１を、ＲＭＩ通信Ｉ／Ｆ部５３１を介して（ＲＭＩ通信により）、第２仮想マシン２１２に転送し、取得要求に応答する（ステップＳ３４）。
【００９２】
第２仮想マシン２１２では、代理オブジェクト５２１が転送されたことにより、サブセットモジュール４１２が有する代理オブジェクト管理部５１２により、代理オブジェクト５２２が生成される（ステップＳ４１）。これにより、各仮想マシン２１では、ＲＭＩ通信（リモート）によるメソッド呼出が可能な一対のオブジェクト（異なる仮想マシンで同一インスタンスのオブジェクト）が生成される。
【００９３】
代理オブジェクト管理部５１２は、生成した代理オブジェクト５２２に対して、管理識別子を発行し、管理対象の代理オブジェクト５２として登録する（ステップＳ４２）。このとき、代理オブジェクト管理部５１２は、生成後のＩ／ＦをＲＭＩ通信Ｉ／Ｆ部５３２に定義する。
【００９４】
生成後、登録された代理オブジェクト５２２は、代理オブジェクト管理部５１２に対して、第１仮想マシン２１１上で動作する要求動作モジュール３０の代理呼出を要求する（ステップＳ４３）。
【００９５】
代理オブジェクト管理部５１２は、要求に応じて、第１仮想マシン２１１上で動作する要求動作モジュール３０を呼び出し、処理の実行を要求する（ステップＳ４４）。つまり、代理オブジェクト管理部５１２は、ＲＭＩ通信（リモート）によるメソッド呼出が可能な一対の代理オブジェクト５２を介して、要求された動作モジュール３０に対応する関数（外部メソッド）を呼び出す。このとき、代理オブジェクト５２２からは、動作モジュール３０が処理を実行する際に必要なメソッドパラメータ値（引数値）が、ＲＭＩ通信により代理オブジェクト５２１に渡される。
【００９６】
第１仮想マシン２１１では、サブセットモジュール４１１が有する代理オブジェクト管理部５１１により、代理オブジェクト５２１の動作モジュールＩ／Ｆを介して（ステップＳ５１）、サブセットモジュール４１１の起動時に登録された動作モジュール３０に対応する処理要求部４１２１に、処理の実行を要求する（ステップＳ５２）。このとき、代理オブジェクト５２１からは、動作モジュール３０が処理を実行する際に必要なメソッドパラメータ値（引数値）が、ＲＭＩ通信により処理要求部４１２１に渡される。
【００９７】
処理要求部４１２１は、上記メソッドパラメータ値（引数値）に基づき、対応する動作モジュール３０を実行し、処理を行う（ステップＳ５３）。
【００９８】
その結果、処理要求部４１２１からは、処理の実行結果が要求元に応答される。これにより、第１仮想マシン２１２では、一対の代理オブジェクト５２を介して、ＲＭＩ通信により、第１仮想マシン２１１からの実行結果を受け取る。この実行結果は、要求受付部４１１２を介して、Ｊａｖａアプリケーション２２２２へと渡される。
【００９９】
本実施形態に係る画像処理装置１００では、一対の代理オブジェクト５２を介して、仮想マシン間通信を擬似的に実現することで、第２仮想マシン２１２から第１仮想マシン２１１が有する動作モジュール３０を利用し、第２仮想マシン２１２が有する機能を実現することができる。
【０１００】
＜まとめ＞
以上のように、本実施形態に係る画像処理装置１００によれば、各仮想マシン２１において、仮想マシン間通信を行うサブセットモジュール（通信インタフェース部）４１を動作させる。サブセットモジュール４１は、ＲＭＩ通信を行う通信Ｉ／Ｆ（ＲＭＩ通信Ｉ／Ｆ部）が仮想マシン間で呼び出される動作モジュール３０と別途独立した構成となっている。また、サブセットモジュール４１は、ＲＭＩ通信Ｉ／Ｆ部５３と動作モジュール３０との間に介在し、動作モジュール３０のＩ／Ｆを実現する代理オブジェクト（動作モジュールＩ／Ｆ実現部）５２を管理する代理オブジェクト管理部５１を有している。代理オブジェクト５２は、各仮想マシン２１上で動作する代理オブジェクト管理部５１により、各仮想マシン２１においてＲＭＩ通信（リモート）によるメソッド呼出が可能な一対のオブジェクト（異なる仮想マシンで同一インスタンスのオブジェクト）として生成される。
【０１０１】
本実施形態に係る画像処理装置１００は、機能実行要求を受け付けた第２仮想マシン２１２上で動作する代理オブジェクト５２２から、ＲＭＩ通信Ｉ／Ｆ部５３を介して、第１仮想マシン２１１上で動作する代理オブジェクト５２１を呼び出し、第１仮想マシン２１１が有する動作モジュール３０に実行要求を行う。つまり、画像処理装置１００では、各仮想マシン２１に生成された一対の代理オブジェクト５２を介して、仮想マシン２１上の動作モジュール３０の実行を制御し、要求された機能を実現する。
【０１０２】
これによって、画像処理装置１００は、仮想マシン間のＲＭＩ通信対応における通信Ｉ／Ｆの追加・変更の作業負荷が軽減できる。
【０１０３】
なぜなら、本実施形態に係る画像処理装置１００では、仮想マシン間で呼び出す動作モジュール３０のＩ／Ｆに変更が生じた場合であっても、ＲＭＩ通信Ｉ／Ｆ部５３と動作モジュール３０とが分離されていることから、ＲＭＩ通信Ｉ／Ｆ部５３を変更する必要がない（通信Ｉ／Ｆの隠蔽が可能となる）からである。
【０１０４】
また、本実施形態に係る画像処理装置１００では、仮想マシン間で呼び出す動作モジュール３０のＩ／Ｆを新たに追加する場合であっても、動作モジュール３０のＩ／Ｆを実現する代理オブジェクト５２を動的に生成する代理オブジェクト管理部５１を有していることから、既存Ｉ／Ｆを変更する必要がない（リコンパイルを行わなくてもよい）からである。
【０１０５】
ここまで、上記実施形態の説明を行ってきたが、実施形態に係る画像処理装置１００が有する「動作モジュール実行制御機能」は、図を用いて説明を行った各処理手順を動作環境（プラットフォーム）にあったプログラミング言語でコード化したプログラムが、ＣＰＵ１１１により実行されることで実現される。
【０１０６】
上記プログラムは、コンピュータが読み取り可能な記録媒体１１４ａに格納することができる。上記記録媒体１１４ａには、例えば、ＳＤメモリカード及びＵＳＢメモリなどがある。
【０１０７】
よって、上記プログラムは、上記記録媒体１１４ａに記憶させることで、記録媒体１１４ａを読み取り可能な外部記憶Ｉ／Ｆ１１４などを介して画像処理装置１００にインストールすることができる。また画像処理装置１００は、ネットワークＩ／Ｆ１１３を備えていることから、インターネットなどの電気通信回線を用いて上記プログラムをダウンロードし、インストールすることもできる。
【０１０８】
最後に、上記実施形態に挙げた形状や構成に、その他の要素との組み合わせなど、ここで示した要件に、本発明が限定されるものではない。これらの点に関しては、本発明の主旨をそこなわない範囲で変更することが可能であり、その応用形態に応じて適切に定めることができる。
【符号の説明】
【０１０９】
１０      ＯＳ
２１      ＪａｖａＶＭ（１：第１仮想マシン側、２：第２仮想マシン側）
２１１    ヒープメモリ
２２      Ｊａｖａコンポーネント
２２１    Ｊａｖａプラットフォーム
２２１ａ  Ｊａｖａモジュール群
２２１ｂ  ＳＤＫ  ＡＰＩ
２２２    Ｊａｖａアプリケーション
２２２ａ  標準アプリケーション（１：第１仮想マシン側）
２２２ｂ  ＳＤＫアプリケーション
３０      動作モジュール（Ｐ：プリンタ、Ｓ：スキャナ、Ｆ：ＦＡＸ）
４１      サブセットモジュール
４１１    要求受付部
４１２    処理要求部（Ｐ：プリンタ，Ｓ：スキャナ，Ｆ：ＦＡＸ）
４１３    仮想マシン間通信部
５１      代理オブジェクト管理部
５２      代理オブジェクト（Ｐ：プリンタ，Ｓ：スキャナ，Ｆ：ＦＡＸ）
５３      ＲＭＩ通信Ｉ／Ｆ部
１００  画像処理装置
１１０  コントローラ
１１１  ＣＰＵ（中央処理装置）
１１２  記憶装置
１１３  ネットワークＩ／Ｆ
１１４  外部記憶Ｉ／Ｆ（ａ：記録媒体）
１２０  操作パネル
１３０  プロッタ（画像形成部）
１４０  スキャナ（読み取り部）
【先行技術文献】
【特許文献】
【０１１０】
【特許文献１】特開２００３−１５８７０号公報
【図１】
2011107834.tif 000003
【図２】
2011107834.tif 000004
【図３】
2011107834.tif 000005
【図４】
2011107834.tif 000006
【図５】
2011107834.tif 000007
【図６】
2011107834.tif 000008