(57)【要約】      （修正有）【課題】プロセス起動ができない組み込みソフトウェアよりなる処理システムにおいて、ソースを修正することなくスレッド起動或いはプロセス起動を可能にする。【解決手段】Java（登録商標）ＶＭＡ１０はアプリケーション本体が起動する処理である。プロセス起動による処理を実行するためにJavaＶＭＢ２０を起動する。それぞれのJavaＶＭにサービス実装部１３とサービス実装部２１が実装される。この切り分け処理を指示するクライアント１１は処理を起動する際サービスインターフェース１２を呼び出す。サービスインターフェース１２によって実装される要素がサービス実装部１３である場合スレッド起動、リモートインターセプター１４である場合プロセス起動となる。JavaＶＭＡ１０は依存性注入によって起動される。プロセス起動とする場合にはＲＭＩのスタブクラスを注入しリモートインターセプター１４を要素とするシステムを起動する。【選択図】図２
2011170517.tif 000002
【特許請求の範囲】
【請求項１】
組み込みシステムとして、プラットフォームで独立に使う機械語のプログラムを実行することにより処理システムを起動する画像処理装置であって、
前記プログラムがオブジェクト指向言語で記述されたプログラムであり、
前記プログラムをスレッド起動とする場合には該プログラムに通常クラスを注入する一方で、プロセス起動とする場合にはＲＭＩのスタブクラスを注入する、依存性注入を行うための外部設定ファイルを備えたことを特徴とする画像処理装置。
【請求項２】
請求項１に記載された画像処理装置において、
プロセス起動とする場合の依存性注入は、プロセス起動に用いるシステム要素を別途起動するために行う注入であることを特徴とする画像処理装置。
【請求項３】
請求項２に記載された画像処理装置において、
前記外部設定ファイルは、本来のクラス構成あるいはバイナリは同一のままでスレッド起動とプロセス起動とを切り分けるための記述を有することを特徴とする画像処理装置。
【請求項４】
請求項３に記載された画像処理装置において、
前記切り分けを行うためのシステム要素として、スレッド起動とプロセス起動それぞれの実行により別個の処理を実装するサービス実装部を生成することを特徴とする画像処理装置。
【請求項５】
請求項４に記載された画像処理装置において、
前記処理システムが、クライアント、サービスインターフェースをシステム要素として有し、
前記クライアントの呼び出した前記サービスインターフェースの実装部が、前記サービス実装部である場合にスレッド起動とすることを特徴とする画像処理装置。
【請求項６】
コンピュータを請求項１乃至５のいずれかに記載された画像処理装置の前記処理システムとして機能させるためのプログラム。
【請求項７】
請求項６に記載されたプログラムを記録したコンピュータ読取可能な記録媒体。
【請求項８】
組み込みシステムとして、プラットフォームで独立に使う機械語のプログラムを実行することにより処理システムを起動する処理システム起動方法であって、
前記プログラムをオブジェクト指向言語で記述し、
前記プログラムをスレッド起動とする場合には該プログラムに通常クラスを注入する一方で、プロセス起動とする場合にはＲＭＩのスタブクラスを注入する、依存性注入を行うことを特徴とする処理システム起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
複合機（ＭＦＰ）等の画像処理装置内部で動作する、いわゆる組み込みソフトウェアよりなる処理システムに関し、より詳しくは、全ての処理がスレッド起動となる制約がある当該処理システムのもとでも、プロセス起動に用いるソースを修正することなくスレッド起動に用いることを可能にする手段を有する画像処理装置、処理システム起動方法、起動の切り替えを実行するプログラム及び記録媒体に関する。
【背景技術】
【０００２】
ＭＦＰ内部で動作する、いわゆる組み込みソフトウェアよりなる処理システムでは、さまざまな制約により任意にJava（登録商標）プロセスを起動できないため、全ての処理がスレッド起動となることが知られている。他方、ＰＣ（Personal computer）上で動作する場合には比較的自由にJava（登録商標）プロセスを起動（以下「プロセス起動」という）できるため、より効率的にあるいはより安全な動作を実現することができる。このため、画像処理など処理負荷が高くまたネイティブなコードを実行することによりプロセスに影響を与えやすいソースに対する処理はプロセス起動として、ＭＦＰの処理から分けた方がより安全である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
上記のように、ＭＦＰ上の動作ではスレッド起動とする一方で、ＰＣ上の動作ではプロセス起動とし、処理システムを切り分けて使う方法が考えられる。
ただ、この方法をとろうとすると、ソースレベルでこの違いに対応するデータ生成手段を実装する必要があるという問題が生じる。また、上記の切り分けを行った場合、ＰＣ上の動作をＭＦＰ上の動作に変更するためには、やはりソースの修正が必要となる。
本発明は、プロセス起動ができない組み込みソフトウェアよりなる処理システムにおける上述の従来技術の問題に鑑みてなされたもので、その目的は、ソースを修正することなくスレッド起動或いはプロセス起動を可能にする処理システムを構成することにある。
【課題を解決するための手段】
【０００４】
本発明は、組み込みシステムとして、プラットフォームで独立に使う機械語のプログラムを実行することにより処理システムを起動する画像処理装置であって、前記プログラムがオブジェクト指向言語で記述されたプログラムであり、前記プログラムをスレッド起動とする場合には該プログラムに通常クラスを注入する一方で、プロセス起動とする場合にはＲＭＩのスタブクラスを注入する、依存性注入を行うための外部設定ファイルを備えたことを特徴とする。
本発明は、組み込みシステムとして、プラットフォームで独立に使う機械語のプログラムを実行することにより処理システムを起動する処理システム起動方法あって、前記プログラムをオブジェクト指向言語で記述し、前記プログラムをスレッド起動とする場合には該プログラムに通常クラスを注入する一方で、プロセス起動とする場合にはＲＭＩのスタブクラスを注入する、依存性注入を行うことを特徴とする。
【発明の効果】
【０００５】
本発明によって、ソースを修正することなくスレッド起動或いはプロセス起動を可能にする処理システムを構成することができる。
【図面の簡単な説明】
【０００６】
【図１】本発明の画像処理装置の実施形態に係るソフトウェアの構成を示すブロック図である。
【図２】図１のソフトウェアによって起動される処理システムの構成を示すブロック図である。
【図３】スレッド起動、プロセス起動両方を実行できるJava（登録商標）ＶＭＡの実行環境を構築するためのdiconファイルの１例を示す図である。
【図４】スレッド起動、プロセス起動両方を実行できる実行環境におけるクライアントのコードの１例を示す図である。
【図５】スレッド起動のみを実行できるJava（登録商標）ＶＭ Ａの実行環境を構築するためのdiconファイルの１例を示す図である。
【図６】プロセス起動のみを実行できるJava（登録商標）ＶＭ Ａの実行環境を構築するためのdiconファイルの１例を示す図である。
【図７】スレッド起動或いはプロセス起動どちらか一方のみ使用する実行環境におけるクライアントのコードの１例を示す図である。
【図８】スレッド起動、プロセス起動のいずれか一方のみ実行可能な処理システムへ適用する起動時の処理フローの１例を示す図である。
【図９】スレッド起動、プロセス起動両方を実行可能な処理システムへ適用する起動時の処理フローの１例を示す図である。
【発明を実施するための形態】
【０００７】
本発明の実施形態について、添付図面を参照して説明する。
以下に示す実施形態は、組み込みソフトウェアにより処理システムを起動するＭＦＰ等の画像処理装置に好適に実施し得る形態を例示する。この組み込みシステムでは、プラットフォームで独立に使われる機械語としてのオブジェクト指向言語であるJava（登録商標）で記述されたプログラムを実行することにより処理システムを起動する。
この方法で処理システムを起動する理由の１つは、Java（登録商標）ではＤＩ（Dependency Injection；依存性注入）という手法を利用することができるからである。
【０００８】
ＤＩは、本来、アプリケーションが利用する実行環境に依存するリソースをアプリケーションに注入し、依存性注入される複数の実行環境各々に対してこのアプリケーションの実行を可能にする手法として提案されたものである。
ＤＩを利用したシステム（ＤＩシステム）では、依存性（Dependency）という形式の設定を外部から与えることで、アプリケーション側が利用するリソースの結合を行う。ここで、依存性とは、ある依存元のリソースが必要としている依存先のリソースの記述のことである。例えば、あるリソースＡが、リソースＢを必要としている場合、「ＡがＢに依存している」という依存性が記述される（Ａ→Ｂ）。ＤＩシステムは、このような依存性を解釈すると、Ｂというリソースを構築し、コードを挿入したり、setterメソッドを利用したり、コンストラクタからの指定を行う等で、リソースＢをリソースＡに提供する。
【０００９】
この実施形態では、ＤＩを利用することにより、ソースを修正することなく、例えば、ＭＦＰ上の動作ではスレッド起動とする一方で、ＰＣ上の動作ではプロセス起動とし、処理システムを切り分けて使うことを可能にする。つまり、スレッド起動としたい場合は、通常のクラスを注入する一方、プロセス起動としたい場合は、別プロセスと通信するためのＲＭＩ（Remote Method Invocation）のスタブクラスを注入する。こうすることで、本来のクラス構成あるいはバイナリは同一のままでスレッド起動、プロセス起動を切り分けることができる。なお、ＲＭＩは、Java（登録商標）のオブジェクト間のメソッド呼び出し機構を通信用に拡張したものであり、複雑な通信処理を隠蔽した、簡単でかつ強力な通信機構である。ＲＭＩそのものは、既存の技術であり、その詳細は、特許文献１に説明されている。
【００１０】
「ＤＩシステムのソフトウェア構成」
図１は、本実施形態のソフトウェア構成を示すブロック図である。
同図に示すソフトウェア構成は、ＤＩ機能を利用して処理システムを起動するための構成を示す。ＤＩ機能は、Java（登録商標）によるアプリケーションフレームワークとしてSeasar2を搭載することにより実現される。
よって、本実施形態の処理システムは、ソフトウェア構成の要素として、図１に示すように、Seasar2のコンポーネント１−１，１−２，１−３、サービスインターフェース１−５、サービス実装部１−６、サービスを求めるクライアント１−４の各要素を有する。
【００１１】
Seasar2のコンポーネントであるS2Container１−１は、ＤＩを実現するコンテナである。このコンテナにＤＩの設定ファイル（diconファイル）が予め作成され、保存される。
S2Remoting１−２及びS2RMI１−３は、Java（登録商標）のプロセス間通信を実現するためのコンポーネントである。
サービス実装部１−６は、S2Container１−１に保存されるＤＩの設定ファイルを使ってスレッド起動とプロセス起動とに切り分けて実行する処理を実装する。
クライアント１−４は、サービスインターフェース１−５を介して、ＤＩによってスレッド起動とプロセス起動とに切り分けて実行する処理としてサービス実装部１−６に実装される処理を呼び出すことにより処理を実行する。
【００１２】
「ＤＩ処理システムの構成」
図２は、図１のソフトウェアによって起動される処理システムの構成を示すブロック図である。
図１のソフトウェアは、この処理システムの要素として、図２に示すように、Java（登録商標）ＶＭ Ａ１０、Java（登録商標）ＶＭ Ｂ２０及びＳ２ＲＭＩ３０を起動する。
Java（登録商標）ＶＭ Ａ１０は、アプリケーション本体が起動する処理である。プロセス起動による処理を実行するためには、Java（登録商標）ＶＭ Ｂ２０のように、別途Java（登録商標）ＶＭを起動する。スレッド起動とプロセス起動を切り分けて使う処理システムはJava（登録商標）ＶＭ Ａ１０とJava（登録商標）ＶＭ Ｂ２０の両方に処理が実装される。即ち、図２に示すサービス実装部１３及びサービス実装部２１がこれらの処理に相当する。なお、サービス実装部１３とサービス実装部２１に実装する処理は、スレッド起動とプロセス起動の違いはあるが、実行する処理内容自体は同じである。
【００１３】
スレッド起動とプロセス起動を切り分けて使う処理の呼び出し元であるクライアント１１は、処理を起動する際にサービスインターフェース１２を呼び出す。
クライアント１１の指示に従いサービスインターフェース１２によって実装される要素が、サービス実装部１３である場合にはスレッド起動となる一方、リモートインターセプター１４である場合にはプロセス起動となる。
リモートインターセプター１４及びＳ２ＲＭＩ３０は、Seasar2のコンポーネントである。リモートインターセプター１４は、図１のS2Remoting１−２が提供するコンポーネントで、Ｓ２ＲＭＩ３０（図１のS2RMI１−３が提供）をリモート呼び出しするときに使用するものである。
【００１４】
「ＤＩ処理システムの構築」
図２を参照して説明したＤＩ処理システムは、S2Container１−１（図１）に保存されるＤＩの設定ファイル（diconファイル）を使って、この処理システムの実行環境が構築される。つまり、構築する実行環境を外部から注入するための外部設定ファイルとして、ＤＩの設定ファイル（diconファイル）に該実行環境を定義することによって、図２に示したJava（登録商標）ＶＭ Ａ１０を構成する。
以下、設定ファイル（diconファイル）を使って構築される実行環境として、次の実施例、即ち、
〈実施例１〉スレッド起動、プロセス起動両方を実行できる環境
〈実施例２〉スレッド起動のみ実行できる環境
〈実施例３〉プロセス起動のみ実行できる環境
について、それぞれ説明する。
【００１５】
〈実施例１〉
図３は、スレッド起動、プロセス起動両方を実行できるJava（登録商標）ＶＭ Ａの実行環境を構築するためのdiconファイルの１例を示す図である。
このdiconファイルの設定内容について、図３を参照して説明すると、同図中の[1]、[2]及び[3]は、Seasar2のS2Remoting１−２（図１）が提供するコンポーネントであるリモートインターセプター１４の定義である。なお、上記[3]でサービスインターフェース１２が実装するシステム要素としてリモートインターセプター１４を定義している。
図３中の[4]は、Java（登録商標）ＶＭ Ａ１０のサービス実装部１３の定義である。
図３中の[5]で、クライアント１１にサービス実装部１３及びリモートインターセプター１４を注入している。クライアント１１は、Java（登録商標）のMapとして、サービス実装部１３とリモートインターセプター１４を持ち、それぞれ“thread”、“process”というキーでアクセスできる。このアクセスするキーを選ぶことにより、スレッド起動とプロセス起動を切り分けることができる。
【００１６】
図４は、スレッド起動、プロセス起動両方を実行できる実行環境におけるクライアントのコードの１例を示す図である。
クライアント１１は、スレッド起動とプロセス起動を切り分ける際に、サービスインターフェース１２に図４に示すコードによって実装の指示を与えると、この指示に従いサービスインターフェース１２は、スレッド起動又はプロセス起動に必要なシステム要素を実装する。
図４の例では、同図中の[10]のsetServiceメソッドを通して、図３中の[5]で注入された“process”が実行され、プロセス起動に必要なシステム要素であるリモートインターセプター１４を実装する。なお、実装の指示が“thread”であれば、スレッド起動に必要なシステム要素であるサービス実装部１３を実装する。
【００１７】
〈実施例２〉
図５は、スレッド起動のみを実行できるJava（登録商標）ＶＭ Ａの実行環境を構築するためのdiconファイルの１例を示す図である。
このdiconファイルの設定内容について、図５を参照して説明すると、同図中には、クライアント１１にサービス実装部１３を注入している。なお、ここでは、サービスインターフェース１２が実装するシステム要素としてサービス実装部１３を定義している。
図７は、スレッド起動或いはプロセス起動どちらか一方のみ使用する実行環境におけるクライアントのコードの１例を示す図である。
クライアント１１は、サービスインターフェース１２に図７に示すコードによって実装の指示を与えると、この指示に従いサービスインターフェース１２は、図５に定義したシステム要素を実装する。
図７の例では、同図中のsetServiceメソッドを通して、図５で注入されたスレッド起動に必要なシステム要素であるサービス実装部１３を実装する。
【００１８】
〈実施例３〉
図６は、プロセス起動のみを実行できるJava（登録商標）ＶＭ Ａの実行環境を構築するためのdiconファイルの１例を示す図である。
このdiconファイルの設定内容について、図６を参照して説明すると、同図中には、クライアント１１にリモートインターセプター１４を注入している。なお、ここでは、サービスインターフェース１２が実装するシステム要素として、Seasar2のS2Remoting１−２（図１）が提供するコンポーネントであるリモートインターセプター１４を定義している。
図７は、スレッド起動或いはプロセス起動どちらか一方のみ使用する実行環境におけるクライアントのコードの１例を示す図である。
クライアント１１は、サービスインターフェース１２に図７に示すコードによって実装の指示を与えると、この指示に従いサービスインターフェース１２は、図６に定義したシステム要素を実装する。
図７の例では、同図中のsetServiceメソッドを通して、図６で注入されたプロセス起動に必要なシステム要素であるリモートインターセプター１４を実装する。
【００１９】
「処理システム起動時のフロー」
上記「ＤＩ処理システムの構築」で述べたように、図３、図５、図６にそれぞれ示したＤＩの設定ファイル（diconファイル）に実行環境を定義することによって、それぞれ異なる実行環境で動作するＤＩ処理システム（図２）を起動できることを上記で説明した。
ここでは、上記ＤＩ処理システムを起動する時の処理手順を処理フローに従って説明する。なお、ＤＩ処理システムの実行環境として、上記では実施例１〜３を示したが、スレッド起動のみ実行できる環境（実施例２）とプロセス起動のみ実行できる環境（実施例３）とは１つの処理フローにより実施できる。
よって、以下には、次の実施例、即ち、
＜フロー１＞スレッド起動、プロセス起動のいずれか一方のみ実行可能な処理システムへ適用
＜フロー２＞スレッド起動、プロセス起動両方を実行可能な処理システムへ適用
する起動時の処理例について、それぞれ説明する。
【００２０】
＜フロー１＞
図８は、スレッド起動、プロセス起動のいずれか一方のみ実行可能な処理システムヘ適用する起動時の処理フローの１例を示す図である。
図８の処理フローによると、起動時に、先ず、Seasar2は、そのコンポーネントであるＳ2Container１−１に予め保存されたＤＩの設定ファイル（diconファイル）に記述された実行環境の定義に従いJava（登録商標）ＶＭ Ａの実行環境を構築する依存性注入を行うことでシステム要素（サービス実装部１３又はリモートインターセプター１４）を実装し、実行しようとする処理システム（スレッド起動又はプロセス起動のどちらかのシステム）を構成する（ステップＳ１０１）。
【００２１】
次に、前段で行なった依存牲注入の結果、サービス実装部１３が注入されているか否かを確認する（ステップＳ１０２）。
ここで、サービス実装部１３が注入されていれば（ステップＳ１０２−YES）、スレッド起動の処理システムを構成しているので、クライアント１１は、サービスインターフェース１２を介して、実装されたサービス実装部１３に処理を指示し、スレッド起動の実行を開始する（ステップＳ１０３）。この後、この処理フローを終了する。
他方、サービス実装部１３が注入されていなければ（ステップＳ１０２−NO）、次に、リモートインターセプター１４が注入されているか否かを確認する（ステップＳ１０４）。
ここで、リモートインターセプター１４が注入されていれば（ステップＳ１０４−YES）、プロセス起動の処理システムを構成しているので、クライアント１１は、サービスインターフェース１２を介して、実装されたリモートインターセプター１４に処理を指示し、プロセス起動の実行を開始する（ステップＳ１０５）。この後、この処理フローを終了する。
【００２２】
また、ステップＳ１０４でリモートインターセプター１４が注入されていなければ（ステップＳ１０４−NO）、この処理システムが、スレッド起動、プロセス起動のいずれか一方のみ実行可能な処理システムであるから、ＤＩの設定ファイル（diconファイル）の設定エラーとみなし、エラーの発生をユーザーや管理者に通知する等のエラー発生時の処理を行う（ステップＳ１０６）。この後、この処理フローを終了する。
【００２３】
＜フロー２＞
図９は、スレッド起動、プロセス起動両方を実行可能な処理システムへ適用する起動時の処理フローの１例を示す図である。
図９の処理フローによると、起動時に、先ず、Seasar2は、そのコンポーネントであるＳ2Container１−１に予め保存されたＤＩの設定ファイル（diconファイル）に記述された実行環境の定義に従いJava（登録商標）ＶＭ Ａの実行環境を構築する依存性注入を行うことでシステム要素（サービス実装部１３及びリモートインターセプター１４）を実装し、実行しようとする処理システム（スレッド起動、プロセス起動両方を実行可能な処理システム）を構成する（ステップＳ２０１）。
【００２４】
次に前段で行なった依存性注入の結果、実装されたサービス実装部１３が注入及びリモートインターセプター１４両方の利用、即ちスレッド起動、プロセス起動両方の実行が可能になるので、クライアント１１は、どちらの実行が選択されているかを確認する。手順としては、先ずスレッド起動の実行を選択しているか否か確認する（ステップＳ２０２）。なお、上記実行選択の指示は、例えばソースの種類によってシステム側で判断する方法やユーザーの選択操作による方法等でも良く、方法は特に限定されない。
ここで、スレッド起動の実行を選択していれば（ステップＳ２０２−YES）、クライアント１１は、サービスインターフェース１２を介して、選択されたスレッド起動を行うサービス実装部１３に処理を指示し、スレッド起動の実行を開始する（ステップＳ２０３）。この後、この処理フローを終了する。
【００２５】
他方、スレッド起動の実行を選択していなければ（ステップＳ２０２−NO）、次に、プロセス起動の実行を選択しているか否かを確認する（ステッフＳ２０４）。
ここで、プロセス起動の実行を選択していれば（ステップＳ２０４−YES）、クライアント１１は、サービスインターフェース１２を介して、選択されたプロセス起動を行うリモートインターセプター１４に処理を指示し、プロセス起動の実行を開始する（ステップＳ２０５）。この後この処理フローを終了する。
また、ステップＳ２０４でプロセス起動の実行を選択していなければ（ステップＳ２０４−NO）、実行選択の指示エラーとみなし、エラーの発生をユーザーや管理者に通知する等のエラー発生時の処理を行う（ステップＳ２０６）。この後、この処理フローを終了する。
【符号の説明】
【００２６】
１−１・・S2Container、１−２・・S2Remoting、１−３・・S2RMI、１−４・・クライアント、１−５・・サービスインターフェース、１−６・・サービス実装部、１０・・Java（登録商標）ＶＭ Ａ、１１・・クライアント、１２・・サービスインターフェース、１３・・サービス実装部、１４・・リモートインターセプター、２０・・Java（登録商標）ＶＭ Ｂ、２１・・サービス実装部、３０・・S2RMI。
【先行技術文献】
【特許文献】
【００２７】
【特許文献１】特許第３６８８５７１号公報
【図１】
2011170517.tif 000003
【図２】
2011170517.tif 000004
【図３】
2011170517.tif 000005
【図４】
2011170517.tif 000006
【図５】
2011170517.tif 000007
【図６】
2011170517.tif 000008
【図７】
2011170517.tif 000009
【図８】
2011170517.tif 000010
【図９】
2011170517.tif 000011