(57)【特許請求の範囲】
【請求項１】
通信回線を介して第一のジョブ処理装置と第二のジョブ処理装置とが接続されているジョブ処理システムであって、
第一のジョブ処理装置は、
第一のジョブ処理装置において処理対象のジョブが発生した場合に、第一のジョブ処理装置で処理を実行した場合の完了予測時刻を算出する算出手段、
少なくとも処理対象のジョブと完了予測時刻とを第二のジョブ処理装置に対して送信する送信手段、を有し、
第二のジョブ処理装置は、
第一のジョブ処理装置からジョブと完了予測時刻とを受信する受信手段、
受信したジョブを第二のジョブ処理装置で処理を行った場合の完了予測時刻を算出する算出手段、
第一のジョブ処理装置における完了予測時刻が第二のジョブ処理装置における完了予測時刻より早い場合は、受信したジョブを破棄する破棄手段、
第一のジョブ処理装置における完了予測時刻が第二のジョブ処理装置における完了予測時刻より遅い場合は、受信したジョブの処理を開始するとともに、受信したジョブの処理を開始したことを第一のジョブ処理装置に通知する通知手段、
受信したジョブの処理が完了した場合に、処理済みのジョブを第一のジョブ処理装置に送信する処理済みジョブ送信手段、
を有するジョブ処理システム。
【請求項２】
第二のジョブ処理装置は処理を開始した場合に、第一のジョブ処理装置に対して完了予測時刻も通知し、
第一のジョブ処理装置は第一のジョブ処理装置で処理を実行した場合の完了予測時刻を、第二のジョブ処理装置から完了予測時刻の通知を受けた時点又はそれ以降に、再度算出して、第二のジョブ処理装置の完了予測時刻と比較する、
請求項１に記載のジョブ処理システム。
【請求項３】
再度算出した第一のジョブ処理装置の完了予測時刻が第二のジョブ処理装置の完了予測時刻より早い場合は、第一のジョブ処理装置は第二のジョブ処理装置に対して、第二のジョブ処理装置が開始した処理の中止を送信する、
請求項２に記載のジョブ処理システム。
【請求項４】
前記第一のジョブ処理装置において、処理対象のジョブが発生した場合に、ジョブを構成する文書データのサイズを抽出し、文書データのサイズが予め定められた値未満又は以下の場合に、前記算出手段による処理を行う、
請求項１に記載のジョブ処理システム。
【請求項５】
他のジョブ処理装置からジョブと完了予測時刻とを受信する受信手段、
受信したジョブをジョブ処理装置で処理を行った場合の完了予測時刻を算出する算出手段、
他のジョブ処理装置における完了予測時刻がジョブ処理装置における完了予測時刻より早い場合は、受信したジョブを破棄する破棄手段、
他のジョブ処理装置における完了予測時刻がジョブ処理装置における完了予測時刻より遅い場合は、受信したジョブの処理を開始するとともに、受信したジョブの処理を開始したことを他のジョブ処理装置に通知する通知手段、
受信したジョブの処理が完了した場合に、処理済みのジョブを他のジョブ処理装置に送信する処理済みジョブ送信手段、
を有するジョブ処理装置。
【請求項６】
ジョブ処理装置は処理を開始した場合に、他のジョブ処理装置に対して完了予測時刻も通知する、
請求項５に記載のジョブ処理装置。
【請求項７】
コンピュータを、
他のジョブ処理装置からジョブと完了予測時刻とを受信する受信手段、
受信したジョブを前記コンピュータであるジョブ処理装置で処理を行った場合の完了予測時刻を算出する算出手段、
他のジョブ処理装置における完了予測時刻がジョブ処理装置における完了予測時刻より早い場合は、受信したジョブを破棄する破棄手段、
他のジョブ処理装置における完了予測時刻がジョブ処理装置における完了予測時刻より遅い場合は、受信したジョブの処理を開始するとともに、受信したジョブの処理を開始したことを他のジョブ処理装置に通知する通知手段、
受信したジョブの処理が完了した場合に、処理済みのジョブを他のジョブ処理装置に送信する処理済みジョブ送信手段、
として機能させるためのジョブ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ジョブ処理システム、ジョブ処理装置及びジョブ処理プログラムに関する。
【背景技術】
【０００２】
特許文献１には、少ない待ち時間で印刷出力を行うことができるし、負荷を管理する装置の故障によりシステム全体が稼働しなくなってしまう問題を解消することができる出力ジョブ分散方法を提供することを課題とし、複数のプリンタサーバと複数の情報処理装置とを備えたネットワークシステムの出力ジョブ分散方法において、１つのプリンタサーバが情報処理装置から出力ジョブを受信したとき、他の複数のプリンタサーバへ出力ジョブ到着通知を送信し、それを受信したプリンタサーバからそのプリンタサーバの管理している出力ジョブ処理時間を受信すると、自らの管理する出力ジョブ処理時間と受信した出力ジョブ処理時間とを比較して最も出力ジョブ処理時間の短いプリンタを選択し、そのプリンタが他のプリンタサーバにより管理されているならば、出力ジョブを上記他のプリンタサーバへ転送する方法が開示されている。つまり、このネットワークシステムは、それぞれ複数の出力装置を管理している複数の出力制御装置がネットワークを介して接続されているネットワークシステムであって、ある出力制御装置がジョブを受け付けると、他のすべての出力制御装置にジョブ到着通知を送信し、ジョブ到着通知を受信した、他の出力制御装置は、自身の管理している複数の出力装置の予測処理時間を返し、ジョブ到着を通知した出力制御装置は、他の出力制御装置から送られてきた出力装置の処理時間状況と、自身の管理している出力装置の予測処理時間を比較し、最も短い時間でジョブが出力できる装置を見つけだし、ジョブをその出力制御装置に送り、管理下の出力装置から出力するものである。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−２３１４６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のジョブ処理装置のうち、いずれかのジョブ処理装置でジョブが発生した場合に、処理速度が最も速い装置を選択してジョブ処理を実行することが行われている。例えば、特許文献１には、前述したネットワークシステムの構成が開示されている。
しかし、この構成では、すべての外部装置からの返信を待ってから最も処理時間が短い装置に対してジョブを転送するため、タイムラグが発生する。そのため、返信した時点とは状況が変わってしまい、ジョブの処理に要する時間が予測処理時間より長くかかる場合が発生する。
本発明は、複数のジョブ処理装置のいずれかで処理が必要なジョブが発生した際に、ジョブが発生したジョブ処理装置から他のジョブ処理装置に処理時間の問い合わせを行い、その結果を受けて最も処理時間の短いジョブ処理装置にジョブを転送してジョブ処理を実行する場合に比べて、より短い時間で処理を実行するようにしたジョブ処理システム、ジョブ処理装置及びジョブ処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００５】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項１の発明は、通信回線を介して第一のジョブ処理装置と第二のジョブ処理装置とが接続されているジョブ処理システムであって、第一のジョブ処理装置は、第一のジョブ処理装置において処理対象のジョブが発生した場合に、第一のジョブ処理装置で処理を実行した場合の完了予測時刻を算出する算出手段、少なくとも処理対象のジョブと完了予測時刻とを第二のジョブ処理装置に対して送信する送信手段、を有し、第二のジョブ処理装置は、第一のジョブ処理装置からジョブと完了予測時刻とを受信する受信手段、受信したジョブを第二のジョブ処理装置で処理を行った場合の完了予測時刻を算出する算出手段、第一のジョブ処理装置における完了予測時刻が第二のジョブ処理装置における完了予測時刻より早い場合は、受信したジョブを破棄する破棄手段、第一のジョブ処理装置における完了予測時刻が第二のジョブ処理装置における完了予測時刻より遅い場合は、受信したジョブの処理を開始するとともに、受信したジョブの処理を開始したことを第一のジョブ処理装置に通知する通知手段、受信したジョブの処理が完了した場合に、処理済みのジョブを第一のジョブ処理装置に送信する処理済みジョブ送信手段、を有するジョブ処理システムである。
【０００６】
請求項２の発明は、第二のジョブ処理装置は処理を開始した場合に、第一のジョブ処理装置に対して完了予測時刻も通知し、第一のジョブ処理装置は第一のジョブ処理装置で処理を実行した場合の完了予測時刻を、第二のジョブ処理装置から完了予測時刻の通知を受けた時点又はそれ以降に、再度算出して、第二のジョブ処理装置の完了予測時刻と比較する、請求項１に記載のジョブ処理システムである。
【０００７】
請求項３の発明は、再度算出した第一のジョブ処理装置の完了予測時刻が第二のジョブ処理装置の完了予測時刻より早い場合は、第一のジョブ処理装置は第二のジョブ処理装置に対して、第二のジョブ処理装置が開始した処理の中止を送信する、請求項２に記載のジョブ処理システムである。
【０００８】
請求項４の発明は、前記第一のジョブ処理装置において、処理対象のジョブが発生した場合に、ジョブを構成する文書データのサイズを抽出し、文書データのサイズが予め定められた値未満又は以下の場合に、前記算出手段による処理を行う、請求項１に記載のジョブ処理システムである。
【００１０】
請求項５の発明は、他のジョブ処理装置からジョブと完了予測時刻とを受信する受信手段、受信したジョブをジョブ処理装置で処理を行った場合の完了予測時刻を算出する算出手段、他のジョブ処理装置における完了予測時刻がジョブ処理装置における完了予測時刻より早い場合は、受信したジョブを破棄する破棄手段、他のジョブ処理装置における完了予測時刻がジョブ処理装置における完了予測時刻より遅い場合は、受信したジョブの処理を開始するとともに、受信したジョブの処理を開始したことを他のジョブ処理装置に通知する通知手段、受信したジョブの処理が完了した場合に、処理済みのジョブを他のジョブ処理装置に送信する処理済みジョブ送信手段、を有するジョブ処理装置である。
【００１１】
請求項６の発明は、ジョブ処理装置は処理を開始した場合に、他のジョブ処理装置に対して完了予測時刻も通知する、請求項５に記載のジョブ処理装置である。
【００１３】
請求項７の発明は、コンピュータを、他のジョブ処理装置からジョブと完了予測時刻とを受信する受信手段、受信したジョブを前記コンピュータであるジョブ処理装置で処理を行った場合の完了予測時刻を算出する算出手段、他のジョブ処理装置における完了予測時刻がジョブ処理装置における完了予測時刻より早い場合は、受信したジョブを破棄する破棄手段、他のジョブ処理装置における完了予測時刻がジョブ処理装置における完了予測時刻より遅い場合は、受信したジョブの処理を開始するとともに、受信したジョブの処理を開始したことを他のジョブ処理装置に通知する通知手段、受信したジョブの処理が完了した場合に、処理済みのジョブを他のジョブ処理装置に送信する処理済みジョブ送信手段、として機能させるためのジョブ処理プログラムである。
【発明の効果】
【００１４】
請求項１のジョブ処理システムによれば、複数のジョブ処理装置のいずれかで処理が必要なジョブが発生した際に、ジョブが発生したジョブ処理装置から他のジョブ処理装置に処理時間の問い合わせを行い、その結果を受けて最も処理時間の短いジョブ処理装置にジョブを転送してジョブ処理を実行する場合に比べて、より短い時間での処理の実行が可能となる。
【００１５】
請求項２のジョブ処理システムによれば、第二のジョブ処理装置の完了予測時刻を受信した後に、第一のジョブ処理装置は第一のジョブ処理装置で処理を実行した場合の完了予測時刻を再度算出して、第二のジョブ処理装置の完了予測時刻と比較することができる。
【００１６】
請求項３のジョブ処理システムによれば、再度算出した第一のジョブ処理装置の完了予測時刻が第二のジョブ処理装置の完了予測時刻より早い場合は、第一のジョブ処理装置は第二のジョブ処理装置に対して処理の中止を送信することができる。
【００１７】
請求項４のジョブ処理装置によれば、通信回線への高負荷を回避しながら、短い時間での処理の実行が可能となる。
【００１９】
請求項５のジョブ処理装置によれば、複数のジョブ処理装置のいずれかで処理が必要なジョブが発生した際に、ジョブが発生したジョブ処理装置から他のジョブ処理装置に処理時間の問い合わせを行い、その結果を受けて最も処理時間の短いジョブ処理装置にジョブを転送してジョブ処理を実行する場合に比べて、より短い時間での処理の実行が可能となる。
【００２０】
請求項６のジョブ処理装置によれば、ジョブ処理装置はジョブ処理を開始した場合に、他のジョブ処理装置に対して完了予測時刻も通知することができる。
【００２２】
請求項７のジョブ処理プログラムによれば、複数のジョブ処理装置のいずれかで処理が必要なジョブが発生した際に、ジョブが発生したジョブ処理装置から他のジョブ処理装置に処理時間の問い合わせを行い、その結果を受けて最も処理時間の短いジョブ処理装置にジョブを転送してジョブ処理を実行する場合に比べて、より短い時間での処理の実行が可能となる。
【図面の簡単な説明】
【００２３】
【図１】本実施の形態の構成例についての概念的なモジュール構成図である。
【図２】本実施の形態を利用したシステム構成例を示す説明図である。
【図３】本実施の形態による処理例を示すフローチャートである。
【図４】本実施の形態による処理例を示すフローチャートである。
【図５】本実施の形態による処理例を示すフローチャートである。
【図６】本実施の形態による処理例を示すフローチャートである。
【図７】本実施の形態による処理例を示すフローチャートである。
【図８】本実施の形態による処理例を示す説明図である。
【図９】本実施の形態による処理例を示すフローチャートである。
【図１０】プラグインＩＤリストのデータ構造例を示す説明図である。
【図１１】プラグイン処理能力管理テーブルのデータ構造例を示す説明図である。
【図１２】ジョブ管理テーブルのデータ構造例を示す説明図である。
【図１３】プラグイン処理能力管理テーブルのデータ構造例を示す説明図である。
【図１４】本実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【００２４】
以下、図面に基づき本発明を実現するにあたっての好適な一実施の形態の例を説明する。
図１は、本実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア（コンピュータ・プログラム）、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、それらのモジュールとして機能させるためのコンピュータ・プログラム（コンピュータにそれぞれの手順を実行させるためのプログラム、コンピュータをそれぞれの手段として機能させるためのプログラム、コンピュータにそれぞれの機能を実現させるためのプログラム）、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するという意味である。また、モジュールは機能に一対一に対応していてもよいが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。なお、１つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続（データの授受、指示、データ間の参照関係等）の場合にも用いる。「予め定められた」とは、対象としている処理の前に定まっていることをいい、本実施の形態による処理が始まる前はもちろんのこと、本実施の形態による処理が始まった後であっても、対象としている処理の前であれば、そのときの状況・状態に応じて、又はそれまでの状況・状態に応じて定まることの意を含めて用いる。「予め定められた値」が複数ある場合は、それぞれ異なった値であってもよいし、２以上の値（もちろんのことながら、すべての値も含む）が同じであってもよい。また、「Ａである場合、Ｂをする」という意味を有する記載は、「Ａであるか否かを判断し、Ａであると判断した場合はＢをする」の意味で用いる。ただし、Ａであるか否かの判断が不要である場合を除く。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク（一対一対応の通信接続を含む）等の通信手段で接続されて構成されるほか、１つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。もちろんのことながら、「システム」には、人為的な取り決めである社会的な「仕組み」（社会システム）にすぎないものは含まない。
また、各モジュールによる処理ごとに又はモジュール内で複数の処理を行う場合はその処理ごとに、対象となる情報を記憶装置から読み込み、その処理を行った後に、処理結果を記憶装置に書き出すものである。したがって、処理前の記憶装置からの読み込み、処理後の記憶装置への書き出しについては、説明を省略する場合がある。なお、ここでの記憶装置としては、ハードディスク、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、外部記憶媒体、通信回線を介した記憶装置、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）内のレジスタ等を含んでいてもよい。
【００２５】
本実施の形態であるジョブ処理システムは、図１の例に示すように、通信回線１９０を介して接続された情報処理装置１００、サーバ１５０を有している。なお、１つの情報処理装置１００に対して、サーバ１５０は複数あってもよい。図１の例に示すサーバ１５０Ｂ、サーバ１５０Ｃ、サーバ１５０Ｄは、サーバ１５０Ａと同等の構成を有している。なお、以下の説明では、サーバ１５０として説明する。
ジョブ処理システムは、提供されている複数のプラグイン機能を組み合わせて、予め１つの処理フローとして定義しておき、取り込んだ文書を、その処理フローにしたがってジョブ処理していくシステムである。このようなジョブ処理システムにおいて、１台のサーバでは、各プラグイン機能を同時に処理できるプロセス数に限りがあるため、一度に大量の文書が投入されると、各プラグインの実行で、処理待ちのジョブが発生し、全体のパフォーマンスが低下することが起こりえる。
そこで、各プラグイン機能（例えば、イメージ変換処理、文字認識処理など）で発生した待ちジョブを、外部のサーバ（以下、外部サーバともいう）に処理を委託し、自身（以下、メインサーバともいう）と外部サーバとで同時に処理できるジョブ数を増やすことで、全体のパフォーマンスを向上させる方法が考えられる。
メインサーバと外部サーバを連携させ、同時に処理できるジョブ数を増やすためには、メインサーバの各プラグイン処理で発生した待ちジョブを、自分より早く処理結果を返してくれる外部サーバを、いち早く見つけ、処理を依頼することが必要である。
外部サーバを見つけだす技術としては、例えば特許文献１に開示されているような技術がある。
しかし、特許文献１に開示されている技術では、外部サーバの状況を判断してから処理依頼するため、実際にジョブが届いた時点で、外部サーバの状況が変わっており、処理結果が予測より遅く返ってきてしまう可能性がある。これを回避する方法として、依頼時に外部サーバのリソースを予約してから処理する技術もあるが、複雑なスケジューリング処理が必要となる。
本実施の形態は、サーバ（メインサーバ、外部サーバ）の時々刻々と変化する処理状況に対応するものである。
【００２６】
なお、フローファイルは、ジョブ処理システムに投入された処理対象データを、どのように処理するか定義したファイルである。複数のプラグイン機能の組み合わせで定義される。処理対象データとして、例えば、文書等がある。以下、処理対象データとして文書を例示して説明する
ジョブは、投入された文書を、フローファイルにしたがって処理していくときの実行単位である。ジョブを一意に定義する「ジョブＩＤ」と、投入された文書が各プラグイン機能によって処理された結果の「文書データ」と、その「文書データサイズ」と、各プラグイン機能の処理によって生成される「ジョブ属性」から構成される。なお「ジョブＩＤ」は重複しないＩＤで定義されている。例えば、ＧＵＩＤ（Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  ＩＤｅｎｔｉｆｉｅｒ）等を用いればよい。
【００２７】
本実施の形態における情報処理装置１００は前述のメインサーバに該当し、サーバ１５０は前述の外部サーバに該当する。サーバ１５０に依頼する処理を、情報処理装置１００でも処理可能である。
情報処理装置１００は、サーバ情報登録モジュール１０５、サーバ情報管理モジュール１１０、プラグイン処理能力管理モジュール１１５、ジョブ処理／ジョブ情報管理モジュール１２０、サーバ処理管理モジュール１２５、フローファイル登録モジュール１３０、フローファイル管理モジュール１３５を有している。
サーバ１５０は、プラグイン処理能力管理モジュール１５５、ジョブ処理／ジョブ情報管理モジュール１６０、情報処理装置処理管理モジュール１６５を有している。
【００２８】
情報処理装置１００は、入力された文書を、ジョブの処理対象データとして管理し、予め登録されているフローファイルに定義されたプラグイン機能を順番に呼び出し、ジョブ処理する。
サーバ情報登録モジュール１０５は、サーバ情報管理モジュール１１０と接続されている。サーバ情報登録モジュール１０５は、サーバ１５０の情報を登録する。サーバ１５０の情報は、ユーザーの操作によって入力されたものであってもよいし、そのサーバ１５０から送信されてきたものであってもよい。
サーバ情報管理モジュール１１０は、サーバ情報登録モジュール１０５、サーバ処理管理モジュール１２５と接続されている。サーバ情報管理モジュール１１０は、サーバ１５０を一意に判別でき、サーバ１５０のサービスにアクセスできるＩＤ情報（例えば、サービスＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ））を管理する。
【００２９】
サーバ処理管理モジュール１２５は、サーバ情報管理モジュール１１０、ジョブ処理／ジョブ情報管理モジュール１２０と接続されており、また、通信回線１９０を介して、サーバ１５０Ａの情報処理装置処理管理モジュール１６５、サーバ１５０Ｂ、サーバ１５０Ｃ、サーバ１５０Ｄと接続されている。サーバ処理管理モジュール１２５は、情報処理装置１００とサーバ１５０とのやり取りを管理する。少なくとも処理対象のジョブと完了予測時刻とをサーバ１５０（サーバ１５０Ａ、サーバ１５０Ｂ、サーバ１５０Ｃ、サーバ１５０Ｄ）に対して送信する。
【００３０】
プラグイン処理能力管理モジュール１１５は、ジョブ処理／ジョブ情報管理モジュール１２０と接続されている。プラグイン処理能力管理モジュール１１５は、プラグイン機能ごとに、下記情報を管理する。
（１）プラグインＩＤ
（２）処理の完了予測時刻
具体的には、情報処理装置１００で、処理中のジョブと、処理予約されているジョブ（待ちジョブ）、各々の処理が完了する完了予測時刻を管理している。例えば、ジョブＩＤとそのジョブＩＤで示されるジョブにおける完了予測時刻の組み合わせであり、具体的には、［（ｊｏｂｉｄ１，ｔｉｍｅ１），（ｊｏｂｉｄ２，ｔｉｍｅ２），・・・，（ｊｏｂｉｄＮ，ｔｉｍｅＮ）］と表記されるデータを管理する。
（３）単位データあたりの処理時間
【００３１】
ジョブ処理／ジョブ情報管理モジュール１２０は、プラグイン処理能力管理モジュール１１５、サーバ処理管理モジュール１２５、フローファイル管理モジュール１３５と接続されている。ジョブ処理／ジョブ情報管理モジュール１２０は、投入された文書を処理するために「ジョブＩＤ」を発行し、ジョブを生成して管理する。生成されたジョブを、フローファイルに定義された「プラグインＩＤ」をもとに、各プラグイン機能を、順に呼び出し、処理していく。
ジョブ処理／ジョブ情報管理モジュール１２０は、情報処理装置１００において処理対象のジョブが発生した場合に、情報処理装置１００で処理を実行した場合の完了予測時刻を算出する。
フローファイル登録モジュール１３０は、フローファイル管理モジュール１３５と接続されている。フローファイル登録モジュール１３０は、情報処理装置１００から投入された文書を処理するためのフローファイルを作成、登録する。フローファイルは、複数のプラグインを指定することで定義する。
フローファイル管理モジュール１３５は、ジョブ処理／ジョブ情報管理モジュール１２０、フローファイル登録モジュール１３０と接続されている。フローファイル管理モジュール１３５は、フローファイル登録モジュール１３０で登録されたフローファイルを管理する。
【００３２】
サーバ１５０は、フローファイル中の特定のプラグイン機能の処理を実行可能である。
情報処理装置処理管理モジュール１６５は、ジョブ処理／ジョブ情報管理モジュール１６０と接続されており、また、通信回線１９０を介して、情報処理装置１００のサーバ処理管理モジュール１２５、サーバ１５０Ｂ、サーバ１５０Ｃ、サーバ１５０Ｄと接続されている。情報処理装置処理管理モジュール１６５は、情報処理装置１００とのやり取りを管理する。少なくとも情報処理装置１００からジョブと情報処理装置１００における完了予測時刻とを受信する。
【００３３】
プラグイン処理能力管理モジュール１５５は、ジョブ処理／ジョブ情報管理モジュール１６０と接続されている。プラグイン処理能力管理モジュール１５５は、プラグイン機能ごとに、下記情報を管理する。
（１）プラグインＩＤ
（２）処理の完了予測時刻
具体的には、現在サーバ１５０で処理しているジョブと、処理予約されているジョブ、のすべての処理が完了する完了予測時刻を管理する。例えば、ジョブＩＤとそのジョブＩＤで示されるジョブにおける完了予測時刻の組み合わせであり、具体的には、［（ｊｏｂｉｄ１，ｔｉｍｅ１），（ｊｏｂｉｄ２，ｔｉｍｅ２），・・・，（ｊｏｂｉｄＮ，ｔｉｍｅＮ）］と表記されるデータを管理する。
（３）単位データあたりの処理時間
【００３４】
ジョブ処理／ジョブ情報管理モジュール１６０は、プラグイン処理能力管理モジュール１５５、情報処理装置処理管理モジュール１６５と接続されている。ジョブ処理／ジョブ情報管理モジュール１６０は、情報処理装置処理管理モジュール１６５によって受信されたジョブをサーバ１５０自身のプラグイン機能で処理した方が早く処理が完了するかどうかを判断する。
ジョブ処理／ジョブ情報管理モジュール１６０は、情報処理装置処理管理モジュール１６５によって受信されたジョブをサーバ１５０で処理を行った場合の完了予測時刻を算出する。
そして、情報処理装置１００における完了予測時刻がサーバ１５０における完了予測時刻より早い場合はジョブを破棄する。
また、情報処理装置１００における完了予測時刻がサーバ１５０における完了予測時刻より遅い場合はジョブ処理を開始するとともにジョブ処理を開始したことを情報処理装置１００に通知する。
そして、ジョブ処理が完了した場合に、処理済みのジョブを情報処理装置１００に送信する。
【００３５】
また、ジョブ処理／ジョブ情報管理モジュール１６０は、ジョブ処理を開始した場合に、情報処理装置１００に対して完了予測時刻も通知するようにしてもよい。
この場合、情報処理装置１００のジョブ処理／ジョブ情報管理モジュール１２０は、情報処理装置１００で処理を実行した場合の完了予測時刻を再度算出して、サーバ１５０の完了予測時刻と比較する。
そして、情報処理装置１００のジョブ処理／ジョブ情報管理モジュール１２０は、再度算出した情報処理装置１００の完了予測時刻がサーバ１５０の完了予測時刻より早い場合は、情報処理装置１００はサーバ１５０に対して処理の中止を送信する。これに応じて、サーバ１５０のジョブ処理／ジョブ情報管理モジュール１６０は、開始していた処理を中止する。
【００３６】
図２は、本実施の形態を利用したシステム構成例を示す説明図である。
フローの処理対象データを受け付ける画像処理装置２１０、フローのジョブ処理を行う複数のサーバ１５０と、サーバ１５０へのジョブの振り分けとフローのジョブ処理を行う情報処理装置１００によって構成されているシステムである例を示す。
図２（Ａ）に示す例では、情報処理装置１００Ａは、画像処理装置２１０Ａ、画像処理装置２１０Ｂ、画像処理装置２１０Ｃ、サーバ１５０Ａ、サーバ１５０Ｆ、サーバ１５０Ｇ、サーバ１５０Ｈと接続されている。情報処理装置１００Ｂは、画像処理装置２１０Ｄ、画像処理装置２１０Ｅ、画像処理装置２１０Ｆ、サーバ１５０Ｄ、サーバ１５０Ｅ、サーバ１５０Ｆ、サーバ１５０Ｇと接続されている。ユーザーの操作によって、画像処理装置２１０で文書が読み込まれ、フローの選択が行われ、画像処理装置２１０から情報処理装置１００に対して指示が行われる。そして、情報処理装置１００では、そのフローを分割して、分割後の処理群を複数のサーバ１５０又は情報処理装置１００に割り振る。割り振られたサーバ１５０、情報処理装置１００で処理が行われる。画像処理装置２１０は、例えば、具体的には、スキャナ、ファックス、複合機（スキャナ、プリンタ、複写機、ファックス等のいずれか２つ以上の機能を有している画像処理装置）等である。また、カメラ機能を有している携帯端末（例えば、携帯電話、スマートフォン等を含む）等であってもよい。
図２（Ｂ）に示す例では、情報処理装置１００Ａ、情報処理装置１００Ｂ、サーバ１５０Ａ、サーバ１５０Ｂ、サーバ１５０Ｃ、画像処理装置２１０Ａ、画像処理装置２１０Ｂ、画像処理装置２１０Ｃは、通信回線２９０を介してそれぞれ接続されている。通信回線２９０は、無線、有線、これらの組み合わせであってもよく、例えば、通信インフラとしてのインターネット、イントラネット等であってもよい。また、情報処理装置１００、サーバ１５０による機能は、クラウドサービスとして実現してもよい。
【００３７】
図３、図４は、本実施の形態（情報処理装置１００）による処理例を示すフローチャートである。情報処理装置１００に待ちジョブが発生すると、以下の処理を行う。
ステップＳ３０２では、情報処理装置１００自身で待ちジョブの処理をした場合の「完了予測時刻＿１」を算出する。
ステップＳ３０４では、各サーバ１５０に対して、「外部サーバＩＤ」、「ジョブＩＤ」、「プラグインＩＤ」、「文書データ」、「ジョブ属性」、「完了予測時刻＿１」を送信する。
ステップＳ３０６では、情報処理装置１００自身で待ちジョブの処理を開始するまでに、サーバ１５０から返信があったか否かを判断し、あった場合はステップＳ３１２へ進み、それ以外の場合はステップＳ３０８へ進む。
【００３８】
ステップＳ３０８では、各サーバ１５０に対して、「処理キャンセル通知」を送信する。
ステップＳ３１０では、情報処理装置１００自身が待ちジョブの処理を開始する。
ステップＳ３１２では、情報処理装置１００自身で待ちジョブの処理をした場合の「完了予測時刻＿１’」を算出する。
【００３９】
ステップＳ３１４では、「完了予測時刻＿１’≦完了予測時刻＿２」であるか否かを判断し、「完了予測時刻＿１’≦完了予測時刻＿２」である場合はステップＳ３１６へ進み、それ以外の場合はステップＳ３２０へ進む。
ステップＳ３１６では、「完了予測時刻＿２」を返信してきたサーバ１５０に対して、「処理キャンセル通知」を送信する。
ステップＳ３１８では、すべてのサーバ１５０に「処理キャンセル通知」を送信したか否かを判断し、送信した場合はステップＳ３１０へ戻り、それ以外の場合はステップＳ３０６へ戻る。
【００４０】
ステップＳ３２０では、「完了予測時刻＿２」を返信してきたサーバ１５０以外のサーバ１５０に対して、「処理キャンセル通知」を送信する。
ステップＳ３２２では、情報処理装置１００自身の待ちジョブを削除する。
ステップＳ３２４では、「完了予測時刻＿２」を返信してきたサーバ１５０からの処理結果を待つ。
【００４１】
ステップＳ３２６では、「完了予測時刻＿２」を返信してきたサーバ１５０からの処理結果を受信したか否かを判断し、受信した場合はステップＳ３２８へ進み、それ以外の場合はステップＳ３２４へ戻る。
ステップＳ３２８では、ジョブ情報を更新し、次の処理を行う。
【００４２】
なお、ステップＳ３０８、ステップＳ３１０の処理は、いずれの処理を先に行ってもよいし、又は、並列的に行ってもよい。同様に、ステップＳ３２０、ステップＳ３２２の処理は、いずれの処理を先に行ってもよいし、又は、並列的に行ってもよい。
【００４３】
図５は、本実施の形態（サーバ１５０）による処理例を示すフローチャートである。
ステップＳ５０２では、情報処理装置１００から、「外部サーバＩＤ」、「ジョブＩＤ」、「プラグインＩＤ」、「文書データ」、「ジョブ属性」、「完了予測時刻＿１」を受信する。
ステップＳ５０４では、「完了予測時刻＿２」を算出する。
ステップＳ５０６では、「完了予測時刻＿１≦完了予測時刻＿２」であるか否かを判断し、「完了予測時刻＿１≦完了予測時刻＿２」である場合はステップＳ５０８へ進み、それ以外の場合はステップＳ５１０へ進む。
【００４４】
ステップＳ５０８では、情報処理装置１００から受信したデータを削除する。
ステップＳ５１０では、「完了予測時刻＿２」を情報処理装置１００に返信する。
ステップＳ５１２では、情報処理装置１００から受信したジョブの処理を開始する。
ステップＳ５１４では、処理の結果を情報処理装置１００に返信する。
なお、ステップＳ５１０、ステップＳ５１２の処理は、いずれの処理を先に行ってもよいし、又は、並列的に行ってもよい。
【００４５】
図６は、本実施の形態（サーバ１５０）による処理例を示すフローチャートである。
ステップＳ６０２では、情報処理装置１００から「処理キャンセル通知」を受信したか否かを判断し、受信した場合はステップＳ６０４へ進み、それ以外の場合は受信するまで待機する。
ステップＳ６０４では、その「処理キャンセル通知」に対応する処理を行っているか否かを判断し、行っている場合はステップＳ６０６へ進み、それ以外の場合はステップＳ６０８へ進む。
ステップＳ６０６では、その処理を中止する。
ステップＳ６０８では、情報処理装置１００から受信したデータを破棄する。
なお、ステップＳ６０６、ステップＳ６０８の処理は、いずれの処理を先に行ってもよいし、又は、並列的に行ってもよい。
【００４６】
より詳細に説明する。
情報処理装置１００は、各プラグイン機能の処理で、待ちジョブが発生すると、その待ちジョブを自分で処理した場合の「完了予測時刻＿１」を算出する（ステップＳ３０２）。
そして、待ちジョブは残したまま、すべてのサーバ１５０に対し、「外部サーバＩＤ」「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」「完了予測時刻＿１」を送る（ステップＳ３０４）。
【００４７】
サーバ１５０は、情報処理装置１００より、それらの情報を受け取る（ステップＳ５０２）と、
Ｓｔｅｐ１１）受け取った「文書データ」を、受け取った「プラグインＩＤ」のプラグイン機能で、処理した場合の「完了予測時刻＿２」を算出する（ステップＳ５０４）。
Ｓｔｅｐ１２）算出した「完了予測時刻＿２」と、情報処理装置１００より受け取った「完了予測時刻＿１」と比較する（ステップＳ５０６）。
・「完了予測時刻＿１」＜＝「完了予測時刻＿２」の場合（ステップＳ５０６でＹｅｓ）
情報処理装置１００より受け取ったデータをすべて破棄する（ステップＳ５０８）。
・「完了予測時刻＿１」＞「完了予測時刻＿２」の場合（ステップＳ５０６でＮｏ）
送られてきた「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」を授受し、「処理開始通知」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」を情報処理装置１００に返す（ステップＳ５１０）。
【００４８】
Ｓｔｅｐ１３）授受した「文書データ」「ジョブ属性」は、「プラグインＩＤ」のプラグイン機能で処理し、「外部サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」を、情報処理装置１００へ返す。
そして、処理の途中で「処理キャンセル通知」を受け取り（ステップＳ６０２でＹｅｓ）、キャンセル通知されたジョブが存在する場合（ステップＳ６０４でＹｅｓ）は、授受したデータをすべて破棄し、処理を中止し（ステップＳ６０６、６０８）、次のジョブの処理を開始する。
【００４９】
情報処理装置１００は、以下の処理を行う。
Ｓｔｅｐ２１）情報処理装置１００自身でその待ちジョブの処理開始するまで、いずれかのサーバ１５０より「処理開始通知」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」が送られてくるのを待つ（ステップＳ３０６）。
いずれかのサーバ１５０より「処理開始通知」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」が送られてくると、Ｓｔｅｐ２２）に進む（ステップＳ３１２）。
また、待ちジョブの処理開始まで、情報処理装置１００自身より早く処理結果を返してくれるサーバ１５０が見つからなかった場合（ステップＳ３０６でＹｅｓ）、すべてのサーバ１５０に対して「処理キャンセル通知」を送付し、自分（情報処理装置１００）でジョブ処理を開始する（ステップＳ３０８、Ｓ３１０）。
【００５０】
Ｓｔｅｐ２２）「ジョブＩＤ」に合致するジョブの「完了予測時刻＿１’」を再度抽出し（ステップＳ３１２）、受け取った「完了予測時刻＿２」と再度比較する（ステップＳ３１４）。
つまり、サーバ１５０での見積もりが返ってくるまでの間で、情報処理装置１００の処理状況に変化があった場合を考慮し、それをここでチェックする。
【００５１】
・「完了予測時刻＿１’」＜＝「完了予測時刻＿２」の場合（ステップＳ３１４でＹｅｓ）
「完了予測時刻＿２」を送ってきたサーバ１５０に「外部サーバＩＤ」「ジョブＩＤ」「処理キャンセル通知」を送付する（ステップＳ３１６）。
Ｓｔｅｐ２１に戻る。
【００５２】
・「完了予測時刻＿１’」＞「完了予測時刻＿２」の場合（ステップＳ３１４でＮｏ）
「外部サーバＩＤ」以外のサーバ１５０に「ジョブＩＤ」「処理キャンセル通知」を送付する（ステップＳ３２０）。
そして、情報処理装置１００自身の抱えていた待ちジョブを削除し（ステップＳ３２２）、「外部サーバＩＤ」のサーバ１５０からのジョブ処理結果を待つ（ステップＳ３２４）。
【００５３】
Ｓｔｅｐ２３）「処理開始通知」を送ってきたサーバ１５０から「外部サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」を受け取ると（ステップＳ３２６でＹｅｓ）、自分（情報処理装置１００）が管理しているジョブの情報を更新し、次のプラグイン機能の処理を開始する（ステップＳ３２８）。
【００５４】
情報処理装置１００のジョブ処理／ジョブ情報管理モジュール１２０の処理について、より詳細に説明する。
ジョブ処理／ジョブ情報管理モジュール１２０は、投入された文書を処理するために「ジョブＩＤ」を発行し、ジョブを生成して管理する。生成されたジョブを、フローファイルに定義された「プラグインＩＤ」をもとに、各プラグイン機能を、順に呼び出し、処理していく。
各プラグイン機能の処理で待ちジョブが発生すると、そのジョブを情報処理装置１００で処理を行うか、サーバ１５０で処理を行うか判断する。なお、すぐにジョブ処理を開始できる場合は、情報処理装置１００で処理する。その場合、ジョブ処理終了後、後述のＳｔｅｐ３２−１）、Ｓｔｅｐ３２−２）の処理だけを実施する。
【００５５】
Ｓｔｅｐ３１）その待ちジョブを情報処理装置１００自身で処理した場合の「完了予測時刻＿１」を算出する。
「完了予測時刻＿１」は、例えば、下記のように算出する。
「完了予測時刻＿１」＝「処理完了予測時刻」で管理されている最後のジョブの処理完了予測時刻＋「単位データあたりの処理時間」×文書データサイズ
そして、待ちジョブとして登録したまま、そのジョブを処理するために必要な情報（「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」「完了予測時刻＿１」）を、サーバ処理管理モジュール１２５に送る。
【００５６】
Ｓｔｅｐ３２）情報処理装置１００自身でその待ちジョブを開始するまで、サーバ処理管理モジュール１２５より「処理開始通知」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」が渡されるのを待つ。つまり、Ｓｔｅｐ３１）でデータを送付したいずれかのサーバ１５０から「処理開始通知」が送られてくるのを待つ。
サーバ処理管理モジュール１２５より「処理開始通知」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」が送られてくると、Ｓｔｅｐ３３）に進む。
待ちジョブの処理を開始時まで、Ｓｔｅｐ３３）で自身より早く処理結果を返してくれるサーバ１５０が見つからなかった場合、すべてのサーバ１５０に対して「処理キャンセル通知」を送付するよう、サーバ処理管理モジュール１２５に依頼し、情報処理装置１００自身でジョブ処理を開始する。
【００５７】
ジョブ処理が完了すると、次の処理を行う。
Ｓｔｅｐ３２−１）ジョブの開始時刻と終了時刻、処理した文書データサイズから、単位データあたりの処理時間を算出し、プラグイン処理能力管理モジュール１１５の「単位データあたりの処理時間」を更新する。
Ｓｔｅｐ３２−２）次に、更新した「単位データあたりの処理時間」と、各々のジョブの文書データサイズから、処理完了予測時刻を算出し、プラグイン処理能力管理モジュール１１５の「処理完了予測時刻」を更新する。例えば、「処理完了予測時刻」で管理されている各ジョブに関し、以下のように算出して、更新する。
あるジョブの［処理完了予測時刻］＝直前の実行中／待ちジョブの処理完了予測時刻＋「単位データあたりの処理時間」×文書データサイズ
そして、次のジョブ処理を開始する。
【００５８】
Ｓｔｅｐ３３）プラグイン処理能力管理モジュール１１５の「処理完了予測時刻」より、「ジョブＩＤ」に該当する処理完了予測時刻を抽出して、「完了予測時刻＿１’」とし、受け取った「完了予測時刻＿２」と比較する。
「完了予測時刻＿１’」＜＝「完了予測時刻＿２」の場合
サーバ処理管理モジュール１２５に「外部サーバＩＤ」「ジョブＩＤ」「特定外部サーバの処理キャンセル通知依頼」を送る。「完了予測時刻＿２」を送ってきたサーバ１５０に「処理キャンセル通知」を送付するよう、サーバ処理管理モジュール１２５に依頼する。
そして、Ｓｔｅｐ３１）に戻る。
【００５９】
「完了予測時刻＿１’」＞「完了予測時刻＿２」の場合
サーバ処理管理モジュール１２５に「外部サーバＩＤ」「ジョブＩＤ」「全サーバの処理キャンセル通知依頼」を送る。「外部サーバＩＤ」以外のサーバ１５０に「処理キャンセル通知」を送付するよう、サーバ処理管理モジュール１２５に依頼する。
そして、情報処理装置１００自身の抱えていた待ちジョブを削除し、「外部サーバＩＤ」のサーバ１５０からのジョブ処理結果を待つ。
同時に、プラグイン処理能力管理モジュール１１５の「処理完了予測時刻」から、[ジョブＩＤ]に合致するデータを削除し、それ以降のジョブに対して、前述のＳｔｅｐ３３−２）の処理を行う。
【００６０】
Ｓｔｅｐ３４）「処理開始通知」を送ってきたサーバ１５０から「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」を受け取ると、自分（情報処理装置１００）が管理しているジョブの情報を更新し、次のプラグイン機能の処理を開始する。
【００６１】
情報処理装置１００のサーバ処理管理モジュール１２５の処理について、より詳細に説明する。
サーバ処理管理モジュール１２５は、サーバ１５０とのやり取りを管理する。
ジョブ処理／ジョブ情報管理モジュール１２０より、「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」「完了予測時刻＿１」が渡された場合は、サーバ情報管理モジュール１１０より抽出したすべての「外部サーバＩＤ」に対し、自身の「メインサーバＩＤ」と、「外部サーバＩＤ」「ジョブＩＤ」「文書データ」「プラグインＩＤ」「ジョブ属性」「完了予測時刻＿１」を送る。
そして、送った「外部サーバＩＤ」のリストと、「ジョブＩＤ」と「プラグイン」を関連付けて、“送付リスト”として保持しておく。
【００６２】
サーバ１５０より「処理開始通知」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」が送られてきた場合、ジョブ処理／ジョブ情報管理モジュール１２０に、「処理開始通知」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」を渡す。
ジョブ処理／ジョブ情報管理モジュール１２０より、「外部サーバＩＤ」「ジョブＩＤ」「特定外部サーバの処理キャンセル通知依頼」が渡された場合、「外部サーバＩＤ」に「処理キャンセル通知」「ジョブＩＤ」を送付する。
同時に“送付リスト”中の「外部サーバＩＤ」のリストから、該当する外部サーバＩＤを削除する。
【００６３】
ジョブ処理／ジョブ情報管理モジュール１２０より、「外部サーバＩＤ」「ジョブＩＤ」「全外部サーバの処理キャンセル通知依頼」が渡された場合、「外部サーバＩＤ」に「処理キャンセル通知」「ジョブＩＤ」を送付する。
同時に“送付リスト” 中の「外部サーバＩＤ」のリストから、該当する外部サーバＩＤ以外の「外部サーバＩＤ」に「処理キャンセル通知」「ジョブＩＤ」を送付する。
「処理キャンセル通知」を送付した「外部サーバＩＤ」を、“送付リスト” の「外部サーバＩＤ」のリストから削除する。
【００６４】
サーバ１５０より「外部サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」が送られてきた場合、“送付リスト”を参照し、ジョブ処理／ジョブ情報管理モジュール１２０に、「ジョブＩＤ」「プラグインＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」を送り、「外部サーバＩＤ」「ジョブＩＤ」に該当する“送付リスト”を削除する。
【００６５】
サーバ１５０の情報処理装置処理管理モジュール１６５の処理について、より詳細に説明する。
情報処理装置処理管理モジュール１６５は、情報処理装置１００とのやり取りを管理する。
情報処理装置１００のサーバ処理管理モジュール１２５から送られてきた「メインサーバＩＤ」「外部サーバＩＤ」「ジョブＩＤ」「文書データ」「ジョブ属性」「プラグインＩＤ」「完了予測時刻＿１」を受け取ると、それらすべての情報を、ジョブ処理／ジョブ情報管理モジュール１６０に送る。
【００６６】
ジョブ処理／ジョブ情報管理モジュール１６０より「処理開始通知依頼」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」が渡されると、「メインサーバＩＤ」に、「処理開始通知」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」を送る。
同時に、「メインサーバＩＤ」「外部サーバＩＤ」「ジョブＩＤ」を“送付リスト”として保持しておく。
【００６７】
ジョブ処理／ジョブ情報管理モジュール１６０より、「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性値」が送られてきた場合、保持しておいた「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」のデータの中から、「ジョブＩＤ」が合致する情報を抽出し、情報処理装置１００の「サーバ処理管理モジュール１２５のサービスＵＲＬ」に、「サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性値」を送る。
【００６８】
情報処理装置１００のサーバ処理管理モジュール１２５から「処理キャンセル通知」「ジョブＩＤ」が送られてきた場合、「ジョブＩＤ」に該当する送付リスト（「メインサーバＩＤ」「外部サーバＩＤ」「ジョブＩＤ」）を破棄し、ジョブ処理／ジョブ情報管理モジュール１６０に「処理キャンセル通知」「ジョブＩＤ」を送る。
【００６９】
ジョブ処理／ジョブ情報管理モジュール１６０より、「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」が送られてくると、「ジョブＩＤ」に該当する送付リストの「メインサーバＩＤ」に、「外部サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」を送る。
【００７０】
サーバ１５０のジョブ処理／ジョブ情報管理モジュール１６０の処理について、より詳細に説明する。
ジョブ処理／ジョブ情報管理モジュール１６０は、情報処理装置処理管理モジュール１６５から「メインサーバＩＤ」「外部サーバＩＤ」「ジョブＩＤ」「文書データ」「ジョブ属性」「プラグインＩＤ」「完了予測時刻＿１」を受け取ると、そのジョブをサーバ１５０自身のプラグイン機能で処理した方が早く処理が完了するかどうかを判断する。
【００７１】
Ｓｔｅｐ４１）受け取った「文書データ」を、受け取った「プラグインＩＤ」のプラグイン機能で、処理した場合の「完了予測時刻＿２」を算出する。
「完了予測時刻＿２」は、例えば、下記のように算出する。
「完了予測時刻＿２」＝「処理完了予測時刻」で管理されている最後のジョブの処理完了予測時刻＋「単位データあたりの処理時間」×文書データサイズ
【００７２】
Ｓｔｅｐ４２）算出した「完了予測時刻＿２」と、情報処理装置１００より受け取った「完了予測時刻＿１」と比較する。
「完了予測時刻＿１」＜＝「完了予測時刻＿２」の場合
情報処理装置１００より受け取ったデータ（「メインサーバＩＤ」「外部サーバＩＤ」「ジョブＩＤ」「文書データ」「ジョブ属性」「プラグインＩＤ」「完了予測時刻＿１」）をすべて破棄する。
【００７３】
「完了予測時刻＿１」＞「完了予測時刻＿２」の場合
送られてきた「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」を授受する。
続いて、「処理開始通知依頼」「メインサーバＩＤ」「外部サーバＩＤ」「ジョブＩＤ」「完了予測時刻＿２」を情報処理装置処理管理モジュール１６５に送る。
【００７４】
Ｓｔｅｐ４３）授受した「文書データ」「ジョブ属性」は、「プラグインＩＤ」のプラグイン機能で処理し、「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」を、情報処理装置処理管理モジュール１６５に送る。
ジョブ処理が完了すると、サーバ１５０でも、情報処理装置１００における前述のＳｔｅｐ３２−１）、Ｓｔｅｐ３２−２）の処理を実施する。
そして、次のジョブ処理を開始する。
【００７５】
情報処理装置処理管理モジュール１６５より、「処理キャンセル通知」「ジョブＩＤ」が送られてきた場合、「ジョブＩＤ」に該当する、待ちジョブがあればそれを削除、あるいは、処理中のジョブであれば、処理を終了してからジョブを削除する。
同時に、プラグイン処理能力管理モジュール１１５の「処理完了予測時刻」から、[ジョブＩＤ]に合致するデータを削除し、それ以降のジョブに対して、前述のＳｔｅｐ３２−２）の処理を行う。
そして、次のジョブの処理を開始する。
【００７６】
図７は、本実施の形態による処理例を示すフローチャートである。具体的に、サーバ１５０Ｂに処理を依頼する場合の処理例を示すものである。
情報処理装置１００において、プラグインＡの処理で待ちジョブが発生したとする（ステップＳ７００）。
ステップＳ７０２では、情報処理装置１００が、「完了予測時刻＿１」を算出する。
ステップＳ７０４では、情報処理装置１００は、サーバ１５０Ａ、サーバ１５０Ｂ、サーバ１５０Ｃ、サーバ１５０Ｄ、サーバ１５０Ｅに対して、「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」「完了予測時刻＿１」を送付する。
【００７７】
ステップＳ７０６Ａでは、サーバ１５０Ａが、「完了予測時刻＿２」を算出する。
ステップＳ７０８Ａでは、サーバ１５０Ａが、「完了予測時刻＿１」＞「完了予測時刻＿２」であれば、ジョブを授受する。
ステップＳ７１０Ａでは、サーバ１５０Ａが、情報処理装置１００に対して、「完了予測時刻＿２」を送付する。
ステップＳ７２０では、情報処理装置１００が、「完了予測時刻＿１’」＜「完了予測時刻＿２」であれば、特定サーバ１５０のみ処理キャンセルを依頼する。
ステップＳ７２２では、情報処理装置１００がサーバ１５０Ａに対して、処理キャンセルを依頼する。
ステップＳ７２４Ａでは、サーバ１５０Ａがジョブを削除する。
【００７８】
ステップＳ７０６Ｂでは、サーバ１５０Ｂが、「完了予測時刻＿２」を算出する。
ステップＳ７０８Ｂでは、サーバ１５０Ｂが、「完了予測時刻＿１」＞「完了予測時刻＿２」であれば、ジョブを授受する。
ステップＳ７１０Ｂでは、サーバ１５０Ｂが、情報処理装置１００に対して、「完了予測時刻＿２」を送付する。
ステップＳ７２６では、情報処理装置１００が、「完了予測時刻＿１’’」＞「完了予測時刻＿２」であれば、（待ち）ジョブ削除し、他のすべてのサーバ１５０に処理キャンセルを依頼し、サーバ１５０Ｂでの処理結果を待つ。
【００７９】
ステップＳ７０６Ｅでは、サーバ１５０Ｅが、「完了予測時刻＿２」を算出する。
ステップＳ７０８Ｅでは、サーバ１５０Ｅが、「完了予測時刻＿１」＜「完了予測時刻＿２」であれば、送られてきたジョブを削除する。
【００８０】
ステップＳ７２８では、情報処理装置１００は、サーバ１５０Ｃ、サーバ１５０Ｄ、サーバ１５０Ｅに対して、処理キャンセルを依頼する。
ステップＳ７３０Ｃでは、サーバ１５０Ｃがジョブを削除する。
ステップＳ７３０Ｄでは、サーバ１５０Ｄがジョブを削除する。
ステップＳ７３０Ｅでは、サーバ１５０Ｅがジョブを削除する。
【００８１】
ステップＳ７１２Ｂでは、サーバ１５０Ｂが、送付されたジョブのプラグイン処理を実行する。
ステップＳ７１４Ｂでは、サーバ１５０Ｂが、情報処理装置１００に対して、「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」を送付する。
ステップＳ７３２では、情報処理装置１００が、ジョブ情報を更新し、次のプラグイン処理へ進む。
【００８２】
なお、サーバＡの「完了予測時刻＿２」７５２Ａは、情報処理装置１００の「完了予測時刻＿１」７５０よりも早いが、情報処理装置１００の「完了予測時刻＿１’」７５４よりも遅い。したがって、サーバ１５０Ａでジョブを授受する（ジョブ開始する）が、キャンセルされることとなる。
サーバＢの「完了予測時刻＿２」７５２Ｂは、情報処理装置１００の「完了予測時刻＿１」７５０よりも早く、情報処理装置１００の「完了予測時刻＿１’’」７５６よりも早い。したがって、サーバ１５０Ｂでジョブを授受して、処理が行われ、情報処理装置１００での待ちジョブは削除されることとなる。
【００８３】
図８は、本実施の形態による処理例を示す説明図である。情報処理装置１００でのジョブの待ち行列（ｑｕｅｕｅ）が時々刻々と変化すること、そして、それにともなって、完了予測時刻が変化することを説明する。
図８（Ａ）の例に示す時刻ｔ１（例えば、ステップＳ７００）では、ジョブ１を実行中であり、待ちジョブに、ジョブ２、ジョブ３、ジョブ４がある状態で、待ちジョブ５が発生したことを示している。待ちジョブ５の「完了予測時刻＿１」を算出し、サーバ１５０に送付する。
【００８４】
図８（Ｂ）の例に示す時刻ｔ２（例えば、ステップＳ７２６：サーバ１５０Ｂより、「完了予測時刻＿２」が送られてきたとき）では、ジョブ１の処理が終了し（又は削除となり）、ジョブ２の処理が開始された状態である。そして、待ちジョブは、ジョブ３、ジョブ４、ジョブ５である。この時点での待ちジョブ５の「完了予測時刻＿１’」を算出（情報処理装置１００にとっては、２回目の完了予測時刻の算出）し、サーバ１５０Ｂの「完了予測時刻＿２」と比較する。
【００８５】
図８（Ｃ）の例に示す時刻ｔ３（例えば、サーバ１５０Ｃより、「完了予測時刻＿２」が送られてきたとき）では、ジョブ２は、まだ処理中である。ただし、待ちジョブ３がサーバ１５０Ｘに処理委託され、削除された状態である。したがって、待ちジョブは、ジョブ４、ジョブ５である。この時点での待ちジョブ５の「処理完了予測時刻＿１’’」を算出（情報処理装置１００にとっては、３回目の完了予測時刻の算出）し、サーバ１５０Ｃの「完了予測時刻＿２」と比較する。
なお、情報処理装置１００でのジョブの待ち行列が時々刻々と変化するのは、情報処理装置１００の処理状況にもよるが、図８（Ｃ）の例に示したように、サーバ１５０での処理状況にも影響を受ける。
【００８６】
図９は、本実施の形態による処理例を示すフローチャートである。
情報処理装置１００において、プラグインＡの処理で待ちジョブが発生したとする（ステップＳ９００）。
ステップＳ９０２では、情報処理装置１００が、「完了予測時刻＿１」を算出する。
ステップＳ９０４では、情報処理装置１００は、サーバ１５０Ａ、サーバ１５０Ｂ、サーバ１５０Ｃ、サーバ１５０Ｄ、サーバ１５０Ｅに対して、「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」「完了予測時刻＿１」を送付する。
【００８７】
ステップＳ９０６Ａでは、サーバ１５０Ａが、「完了予測時刻＿２」を算出する。
ステップＳ９０８Ａでは、サーバ１５０Ａが、「完了予測時刻＿１」＞「完了予測時刻＿２」であれば、ジョブを授受する。
ステップＳ９１０Ａでは、サーバ１５０Ａが、情報処理装置１００に対して、「完了予測時刻＿２」を送付する。
ステップＳ９２０では、情報処理装置１００が、「完了予測時刻＿１’」＜「完了予測時刻＿２」であれば、特定サーバ１５０のみ処理キャンセルを依頼する。
ステップＳ９２２では、情報処理装置１００がサーバ１５０Ａに対して、処理キャンセルを依頼する。
ステップＳ９２４Ａでは、サーバ１５０Ａがジョブを削除する。
【００８８】
ステップＳ９０６Ｂでは、サーバ１５０Ｂが、「完了予測時刻＿２」を算出する。
ステップＳ９０８Ｂでは、サーバ１５０Ｂが、「完了予測時刻＿１」＞「完了予測時刻＿２」であれば、ジョブを授受する。
ステップＳ９１０Ｂでは、サーバ１５０Ｂが、情報処理装置１００に対して、「完了予測時刻＿２」を送付する。しかし、情報処理装置１００が、サーバ１５０Ｂからの「完了予測時刻＿２」を受信する際には、ステップＳ９２６で示しているように、待ちジョブが実行できる状態になっていたとする。
【００８９】
ステップＳ９０６Ｅでは、サーバ１５０Ｅが、「完了予測時刻＿２」を算出する。
ステップＳ９０８Ｅでは、サーバ１５０Ｅが、「完了予測時刻＿１」＜「完了予測時刻＿２」であれば、送られてきたジョブを削除する。
【００９０】
ステップＳ９２６では、待ちジョブが実行できる状態になったら、情報処理装置１００が、ジョブ処理を開始し、他のすべてのサーバ１５０に処理キャンセルを依頼する。
ステップＳ９２８では、情報処理装置１００が、サーバ１５０Ｂ、サーバ１５０Ｃ、サーバ１５０Ｄ、サーバ１５０Ｅに対して、処理キャンセルを依頼する。なお、サーバ１５０Ａには、ステップＳ９２２で処理キャンセルを依頼しているので、再度、処理キャンセルを依頼する必要はない。ただし、サーバ１５０Ａに対しても処理キャンセルを依頼してもよい。
ステップＳ９３０Ｂでは、サーバ１５０Ｂがジョブを削除する。
ステップＳ９３０Ｃでは、サーバ１５０Ｃがジョブを削除する。
ステップＳ９３０Ｄでは、サーバ１５０Ｄがジョブを削除する。
ステップＳ９３０Ｅでは、サーバ１５０Ｅがジョブを削除する。
ステップＳ９３２では、情報処理装置１００が、ジョブ処理を終了し、ジョブ情報を更新し、次のプラグイン処理へ進む。
【００９１】
なお、サーバＡの「完了予測時刻＿２」９５２は、情報処理装置１００の「完了予測時刻＿１」９５０よりも早いが、情報処理装置１００の「完了予測時刻＿１’」９５４よりも遅い。したがって、サーバ１５０Ａでジョブを授受する（ジョブ開始する）が、キャンセルされることとなる。
【００９２】
前述の実施の形態では、各プラグイン処理で待ちジョブが発生すると、すべてのサーバ１５０に文書データを送付するため、通信回線に負荷がかかることとなる。
そこで、待ちジョブが発生した場合、そのジョブ処理を、どのサーバ１５０で処理するかを判断（判断処理Ａ）する前に、その処理そのものを実施するか否かを判断する機能を追加してもよい。なお、判断処理Ａには、前述した情報処理装置１００での処理全体を含んでいてもよい。つまり、以下に示す判断は、待ちジョブが発生した直後に行うようにしてもよい。
判断する機能は、例えば、次のものがある。
（１）文書データのサイズを用いて、判断する。
対象としている文書データ（ジョブを構成する文書データ）のサイズを抽出し、その文書データのサイズが、予め定められた閾値未満又は以下である場合に、判断処理Ａを実施する。
（２）完了予測時間を用いて、判断する。
待ちジョブの完了予測時間を、「文書データのサイズ×単位データあたりの処理時間」で算出し、その値が、予め定められた時間より大きい又は以上である場合に、判断処理Ａを実施する。
予め定められた時間として、例えば以下の値である。
・ユーザーの指定値（閾値）。
・サーバ１５０で処理した場合の平均処理時間。なお、平均処理時間については後述する。
また、送付するデータサイズを小さくするために、そのプラグイン機能で使用するデータだけ抽出してから、文書データとして送付してもよい。例えば、プラグイン機能が領域を対象とする文字認識処理の場合、文字認識処理する領域のデータを切り出し、それを文書データとして送付するようにしてもよい。
【００９３】
また、情報処理装置１００のサーバ処理管理モジュール１２５に、サーバ１５０より「処理開始通知」が送られてくる前に、ジョブ処理結果（「外部サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性値」）が送られてきた場合は、最初に返ってきたジョブ処理結果のみ、ジョブ処理／ジョブ情報管理モジュール１２０に送付するようにしてもよい。
そして、保持していた“送付リスト”を参照し、送られてきた「外部サーバＩＤ」以外のサーバ１５０の「サーバＩＤ」に「処理キャンセル通知」「ジョブＩＤ」を送付し、保持していた“送付リスト”をすべて削除する。
その後、送られてきたジョブ処理結果は、すべて破棄する。例えば、送付リストに存在しない「外部サーバＩＤ」「ジョブＩＤ」の処理結果が送られてきた場合は、それらデータを破棄するようにすればよい。
【００９４】
次に、より具体的な処理内容を説明する。
情報処理装置１００のフローファイル登録モジュール１３０は、投入された文書を処理するためのフローファイルを作成、登録する。フローファイルは、複数のプラグインを指定することで定義する。
フローファイル管理モジュール１３５は、フローファイル登録モジュール１３０で登録されたフローファイルを管理する。フローＩＤ、プラグインＩＤのリストで管理する。プラグインＩＤのリストは、処理順に並べて管理されている。例えば、プラグインＩＤリスト１０００を用いる。図１０は、プラグインＩＤリスト１０００のデータ構造例を示す説明図である。プラグインＩＤリスト１０００は、フローＩＤ欄１００５、１番目に処理されるプラグイン機能のプラグインＩＤ欄１０１０、２番目に処理されるプラグイン機能のプラグインＩＤ欄１０２０、３番目に処理されるプラグイン機能のプラグインＩＤ欄１０３０を有している。フローＩＤ欄１００５は、本実施の形態において、フローを一意に識別するための情報（フローＩＤ：ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）を記憶している。１番目に処理されるプラグイン機能のプラグインＩＤ欄１０１０は、１番目に処理されるプラグイン機能のプラグインＩＤを記憶している。２番目に処理されるプラグイン機能のプラグインＩＤ欄１０２０は、２番目に処理されるプラグイン機能のプラグインＩＤを記憶している。３番目に処理されるプラグイン機能のプラグインＩＤ欄１０３０は、３番目に処理されるプラグイン機能のプラグインＩＤを記憶している。ｎ番目に処理されるプラグイン機能のプラグインＩＤ欄１０Ｎ０は、ｎ番目に処理されるプラグイン機能のプラグインＩＤを記憶している。
【００９５】
サーバ情報登録モジュール１０５は、サーバ１５０の情報を登録する。サーバ１５０の情報は、ユーザーの操作によって入力されたものであってもよいし、そのサーバ１５０から送信されてきたものであってもよい。
サーバ情報管理モジュール１１０は、サーバ１５０を一意に判別でき、サーバ１５０のサービスにアクセスできるＩＤ情報（例えば、サービスＵＲＬ）を管理する。
【００９６】
プラグイン処理能力管理モジュール１１５は、プラグイン機能ごとに、プラグイン処理能力管理テーブル１１００のように情報を管理する。図１１は、プラグイン処理能力管理テーブル１１００のデータ構造例を示す説明図である。
プラグイン処理能力管理テーブル１１００は、プラグインＩＤ欄１１０５、処理完了予測時刻欄１１１０、メインサーバの単位データあたりの処理時間（Ｓｅｃ／ＫＢ）欄１１２０、外部サーバの単位データあたりの処理時間（Ｓｅｃ／ＫＢ）欄１１３０を有している。プラグインＩＤ欄１１０５は、本実施の形態において、プラグインを一意に識別するための情報（プラグインＩＤ）を記憶している。処理完了予測時刻欄１１１０は、処理完了予測時刻を記憶している。メインサーバの単位データあたりの処理時間（Ｓｅｃ／ＫＢ）欄１１２０は、情報処理装置１００の単位データあたりの処理時間（Ｓｅｃ／ＫＢ）を記憶している。外部サーバの単位データあたりの処理時間（Ｓｅｃ／ＫＢ）欄１１３０は、サーバ１５０の単位データあたりの処理時間（Ｓｅｃ／ＫＢ）を記憶している。なお、処理完了予測時刻欄１１１０は、情報処理装置１００で現在処理しているジョブと、処理予約されているジョブ、のすべての処理が完了する予測時刻を管理している。
【００９７】
ジョブ処理／ジョブ情報管理モジュール１２０は、投入された文書を処理するためにジョブを生成し、管理する。ジョブは、ジョブ管理テーブル１２００のように、ジョブを一意に表すＩＤと、そのジョブを処理した最後のプラグイン機能のプラグインＩＤ、文書データ（バイナリデータ）、属性と属性値のリスト、を関連付けて管理する。図１２は、ジョブ管理テーブル１２００のデータ構造例を示す説明図である。ジョブ管理テーブル１２００は、ジョブＩＤ欄１２０５、処理済みのプラグインＩＤ欄１２１０、文書データ欄１２２０、文書データサイズ欄１２３０、ジョブ属性欄１２４０を有している。ジョブＩＤ欄１２０５は、本実施の形態において、ジョブを一意に識別するための情報（ジョブＩＤ）を記憶している。処理済みのプラグインＩＤ欄１２１０は、処理済みのプラグインＩＤを記憶している。文書データ欄１２２０は、文書データを記憶している。文書データサイズ欄１２３０は、文書データサイズを記憶している。ジョブ属性欄１２４０は、ジョブ属性を記憶している。
【００９８】
そして、ジョブ処理／ジョブ情報管理モジュール１２０は、生成されたジョブを、フローファイルに定義された各プラグイン機能を、順に呼び出し、処理していく。
文書が投入されてから、ジョブ処理が完了するまでの処理は、後述する「処理フローＤ」のとおりである。
「処理フローＤ」のＳｔｅｐＤ３）で、各プラグイン機能を実行する際、情報処理装置１００で処理を行うか、サーバ１５０で処理を行うか判断する。
処理がすぐ開始できる場合は、情報処理装置１００で処理を行うと判断する。
処理がすぐ開始できない場合（待ち状態になる場合）は、後述の「処理フローＡ」で判断を行う。
情報処理装置１００で処理を行うと判断した場合は、後述の「処理フローＢ」で処理を行う。
サーバ１５０で処理を行うと判断した場合は、次の式によって「完了予測時刻＿１」を算出し、
「完了予測時刻１」＝現在時刻＋文書データサイズ＊メインサーバの単位データあたりの処理時間
サーバ処理管理モジュール１２５に、「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」「完了予測時刻＿１」を渡す。
【００９９】
また、ジョブ処理／ジョブ情報管理モジュール１２０は、サーバ処理管理モジュール１２５より、サーバ１５０での処理結果（「ジョブＩＤ」「プラグインＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」「処理時間」）が渡された場合は、「ジョブＩＤ」をキーにして、情報処理装置１００自身が管理しているジョブの「処理済みのプラグインＩＤ」「文書データ」「文書データサイズ」「ジョブ属性値」を更新する。
同時に、
「サーバ１５０の単位データあたりの処理時間」＝「処理時間」／「処理済みの文書データのデータサイズ」
を算出し、プラグイン処理能力管理モジュール１１５の該当するプラグインＩＤの「サーバ１５０の単位データあたりの平均処理時間」を更新する。
【０１００】
サーバ処理管理モジュール１２５は、サーバ１５０とのやり取りを管理する。
ジョブ処理／ジョブ情報管理モジュール１２０より「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ属性」「完了予測時刻＿１」が渡された場合は、サーバ情報管理モジュール１１０より抽出したすべての「サーバＩＤ」に、情報処理装置１００自身の「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」「文書データ」「プラグインＩＤ」「ジョブ属性」「完了予測時刻＿１」を送る。
そして、送った「ジョブＩＤ」と「プラグインＩＤ」と（「サーバＩＤ」、「送付時刻」）リストを、保持しておく。
サーバ１５０より「処理開始通知」と「サーバＩＤ」が送られてきた場合、保持しておいた「ジョブＩＤ」と「プラグインＩＤ」と（「サーバＩＤ」,「送付時刻」）リストをもとに、以下の処理を行う。
１）「処理開始通知」を送ってきたサーバ１５０の（「サーバＩＤ」、「送付時刻」）と「プラグインＩＤ」と「ジョブＩＤ」を保持しておく。
２）同時に、１）で保持した「サーバＩＤ」以外のサーバ１５０の「サーバＩＤ」に、「処理キャンセル通知」と「ジョブＩＤ」を送付する。
「処理開始通知」を送ってきたサーバ１５０から、「サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性値」が送られてきた場合、保持していた（「サーバＩＤ」、「送付時刻」）と「プラグインＩＤ」と「ジョブＩＤ」と受信時刻から、
「処理時間」＝「受信時刻」−「送付時刻」
を算出して、ジョブ処理管理手段（ジョブ処理／ジョブ情報管理モジュール１２０）に、処理結果（「ジョブＩＤ」「プラグインＩＤ」「処理済みの文書データ」「処理済みのジョブ属性」「処理時間」）を渡す。
【０１０１】
なお、サーバ１５０に「処理開始通知」が送られてくる前に、ジョブ処理結果（「サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性値」）が返ってきた場合は、最初に返ってきたジョブ処理結果のみ、ジョブ処理管理手段（ジョブ処理／ジョブ情報管理モジュール１２０）に送付する。
【０１０２】
そして、送られてきた「サーバＩＤ」以外のサーバ１５０の「サーバＩＤ」に「処理キャンセル通知」と「ジョブＩＤ」を送付し、管理していたサーバ１５０の（「サーバＩＤ」、「送付時刻」）と「プラグインＩＤ」と「ジョブＩＤ」をすべて削除する。
その後、送られてきたジョブ処理結果は、すべて破棄する。例えば、保持している「サーバＩＤ」と「プラグインＩＤ」と「ジョブＩＤ」には存在しないジョブ処理結果であれば破棄するようにしてもよい。
【０１０３】
サーバ１５０のプラグイン処理能力管理モジュール１５５は、プラグイン機能ごとに、プラグイン処理能力管理テーブル１３００を管理する。図１３は、プラグイン処理能力管理テーブル１３００のデータ構造例を示す説明図である。プラグイン処理能力管理テーブル１３００は、プラグインＩＤ欄１３０５、処理完了予測時刻欄１３１０、単位データあたりの処理時間（Ｓｅｃ／ＫＢ）欄１３２０を有している。プラグインＩＤ欄１３０５は、プラグインＩＤを記憶している。処理完了予測時刻欄１３１０は、処理完了予測時刻を記憶している。単位データあたりの処理時間（Ｓｅｃ／ＫＢ）欄１３２０は、単位データあたりの処理時間（Ｓｅｃ／ＫＢ）を記憶している。なお、処理完了予測時刻欄１３１０は、サーバ１５０で現在処理しているジョブと、処理予約されているジョブ、のすべての処理が完了する予測時刻を管理している。
【０１０４】
情報処理装置処理管理モジュール１６５は、情報処理装置１００とのやり取りを管理する。
具体的には、情報処理装置１００のサーバ処理管理モジュール１２５から送られてきた「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」「文書データ」「ジョブ属性」「プラグインＩＤ」「完了予測時刻＿１」を受け取ると、それらすべての情報を、ジョブ処理／ジョブ情報管理モジュール１６０に送る。
【０１０５】
そして、ジョブ処理／ジョブ情報管理モジュール１６０より、「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」が送られてきた場合、情報処理装置１００の「サーバ処理管理モジュール１２５のサービスＵＲＬ」に、「処理開始通知」「サーバＩＤ」を送り、「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」を保持しておく。
【０１０６】
また、ジョブ処理／ジョブ情報管理モジュール１６０より、「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性値」が送られてきた場合、保持しておいた「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」のデータの中から、「ジョブＩＤ」が合致する情報を抽出し、情報処理装置１００の「サーバ処理管理モジュール１２５のサービスＵＲＬ」に、「サーバＩＤ」「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性値」を送る。
【０１０７】
また、情報処理装置１００のサーバ処理管理モジュール１２５から「処理キャンセル通知」「ジョブＩＤ」が送られてきた場合、ジョブ処理／ジョブ情報管理モジュール１６０に、「処理キャンセル通知」「ジョブＩＤ」を送る。
【０１０８】
ジョブ処理／ジョブ情報管理モジュール１６０は、情報処理装置処理管理モジュール１６５から「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」「文書データ」「ジョブ属性」「プラグインＩＤ」「完了予測時刻＿１」を受け取ると、プラグイン処理能力管理モジュール１５５より、「処理完了予測時刻」「単位データあたりの処理時間」を取得し、次の式により「完了予測時刻＿２」を算出する。
「完了予測時刻＿２」＝「処理完了予測時刻」＋「処理サーバの単位データあたりの処理時間」＊文書データサイズ
【０１０９】
そして「完了予測時刻＿１」と「完了予測時刻＿２」を比較し、
「完了予測時刻＿１」＜＝「完了予測時刻＿２」ならば、情報処理装置１００で処理を行うと判断する。
「完了予測時刻＿１」＞「完了予測時刻＿２」ならば、サーバ１５０で処理を行うと判断する。
【０１１０】
情報処理装置１００で処理を行うと判断した場合は、取得した「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」「プラグインＩＤ」「文書データ」「ジョブ履歴」「完了予測時刻＿１」をすべて削除する。
【０１１１】
サーバ１５０で処理を行うと判断した場合は、「サーバ処理管理モジュール１２５のサービスＵＲＬ」「サーバＩＤ」「ジョブＩＤ」を情報処理装置処理管理モジュール１６５に返すとともに、「プラグインＩＤ」に該当するプラグイン機能を呼び出し、「処理フローＣ」の処理を行う。
【０１１２】
情報処理装置処理管理モジュール１６５より、「処理キャンセル通知」「ジョブＩＤ」が送られてきた場合、「ジョブＩＤ」に該当する、待ちジョブがあればそれを削除、あるいは、処理中のジョブであれば、処理を終了してからジョブを削除する。
【０１１３】
「処理フローＡ」
情報処理装置１００のジョブ処理／ジョブ情報管理モジュール１２０で、情報処理装置１００で処理を行うか、サーバ１５０で処理を行うかの判断処理フローである。
ＳｔｅｐＡ１）プラグイン処理能力管理モジュール１１５より、該当するプラグイン機能の情報（「プラグインＩＤ」「処理完了予測時刻」「情報処理装置１００の単位データあたりの処理時間」「サーバ１５０に処理を委託するかどうかを判断する閾値」）を取得する。
ＳｔｅｐＡ２）情報処理装置１００で処理を行う場合の「完了予測時刻＿１」を、次式を用いて算出する。
完了予測時刻＿１＝（処理完了予測時刻−現在時刻）＋文書データサイズ＊メインサーバの単位データあたりの処理時間
【０１１４】
ＳｔｅｐＡ３）サーバ１５０で処理を行う場合の「完了予測時刻＿２」を、次式を用いて算出する。
完了予測時刻＿２＝文書データサイズ＊外部サーバの単位データあたりの処理時間
算出した「完了予測時刻」と、取得した閾値を比較する。
ＳｔｅｐＡ４）「完了予測時刻＿１」と「完了予測時刻＿２」を比較する。
「完了予測時刻＿１」＞「完了予測時刻＿２」ならば、サーバ１５０で処理を行うと判断する。
「完了予測時刻＿１」＜＝「完了予測時刻＿２」ならば、情報処理装置１００で処理を行うと判断する。
【０１１５】
「処理フローＢ」
情報処理装置１００のジョブ処理／ジョブ情報管理モジュール１２０で、ジョブ処理を行う場合のフローである。
ＳｔｅｐＢ１）プラグイン処理能力管理モジュール１１５から「メインサーバの単位データあたりの処理時間」と「処理完了予測時刻」のリストを取得し、
各ジョブの「処理完了予測時刻」＝現在時刻＋「メインサーバの単位データあたりの処理時間」＊各ジョブの文書データサイズ
を算出して、プラグイン処理能力管理モジュール１１５の「処理完了予測時刻」のリストを更新する。
ＳｔｅｐＢ２）ジョブ処理を開始する。
【０１１６】
ＳｔｅｐＢ３）ジョブ処理が完了すると、
「単位データあたりの処理時間」＝ジョブ処理時間／文書データサイズ
を算出し、例えば次の式で算出した値を使って、プラグイン処理能力管理モジュール１１５の「メインサーバの単位データあたりの処理時間」を更新する。
「メインサーバの単位データあたりの処理時間」＝（「メインサーバの単位データあたりの処理時間」＋「単位データあたりの処理時間」）／２
ＳｔｅｐＢ４） ＳｔｅｐＢ１）と同じ処理を実施し、プラグイン処理能力管理モジュール１１５の「処理完了予測時刻」のリストを更新する。
【０１１７】
「処理フローＣ」
サーバ１５０で、特定のプラグイン機能の処理を行う場合のフローである。
ＳｔｅｐＣ１）プラグイン処理能力管理モジュール１５５から「単位データあたりの処理時間」と「処理完了予測時刻」のリストを取得し、
各ジョブの「処理完了予測時刻」＝現在時刻＋「単位データあたりの処理時間」＊各ジョブの「文書データ」のデータサイズ
を算出して、プラグイン処理能力管理モジュール１５５の「処理完了予測時刻」のリストを更新する。
ＳｔｅｐＣ２）ジョブ処理を開始する。
【０１１８】
ＳｔｅｐＣ３）ジョブ処理が完了すると、「ジョブＩＤ」「処理済みの文書データ」「処理済みのジョブ属性値」を情報処理装置処理管理モジュール１６５に送る。
次に、
「単位データあたりの処理時間」＝ジョブ処理時間／「文書データ」のデータサイズ
を算出し、例えば次の式で算出した値を使って、プラグイン処理能力管理モジュール１５５の「単位データあたりの処理時間」を更新する。
「単位データあたりの処理時間」＝（プラグイン処理能力管理モジュール１５５で保持していた「単位データあたりの処理時間」＋算出した「単位データあたりの処理時間」）／２
ＳｔｅｐＣ４）  Ｓｔｅｐ１）と同じ処理を実施し、プラグイン処理能力管理モジュール１５５の「処理完了予測時刻」のリストを更新する。
【０１１９】
「処理フローＤ」
情報処理装置１００で、投入された文書をジョブとして管理し、処理するフローである。
ＳｔｅｐＤ１）文書が投入されると、投入された文書をジョブ管理テーブル１２００の文書データ欄１２２０に、データサイズを文書データサイズ欄１２３０に保存し、ＩＤ情報を発行してジョブＩＤ欄１２０５に保存する。なお、このとき、投入された文書の属性情報などがあれば、ジョブ属性欄１２４０に登録する。
【０１２０】
ＳｔｅｐＤ２）投入された文書を処理するフローデータを、フローファイル管理モジュール１３５より抽出し、１番目に処理するプラグイン機能のプラグインＩＤを抽出する。
投入された文書を、どのフローデータで処理するかは、例えば、どの手段で文書が投入されたかなどで判断すればよい。具体例を用いて説明すると、「フォルダＡに投入」ならば「フロー００１」、「共有フォルダＢに投入」ならば「フロー００２」、「ＦＴＰ転送」ならば「フロー００９」、「ファックス処理」ならば「フロー００３」、「親展フォルダ投入」ならば「フロー００４」、「メール処理」ならば「フロー００６」等のように、文書投入に該当する処理の数だけフローを用意しておけばよい。
以降、ＳｔｅｐＤ３）とＳｔｅｐＤ４）の処理を、フローデータに定義されたプラグイン機能分だけ実行していく。
【０１２１】
ＳｔｅｐＤ３）プラグインＩＤに該当するプラグイン機能を呼び出し、ジョブ管理テーブル１２００の文書データ欄１２２０、ジョブ属性欄１２４０に対して処理を行う。
ここで、本実施の形態を用いて、情報処理装置１００／サーバ１５０のいずれかでプラグイン処理を行う。
ＳｔｅｐＤ４）ジョブ管理テーブル１２００の文書データ欄１２２０、文書データサイズ欄１２３０、ジョブ属性欄１２４０を、ＳｔｅｐＤ３）で処理された結果の文書データ、ジョブ属性に更新する。
そして、ジョブ管理テーブル１２００の処理済みのプラグインＩＤ欄１２１０を、処理が完了したプラグインＩＤに更新する。
【０１２２】
図１４を参照して、本実施の形態の情報処理装置のハードウェア構成例について説明する。図１４に示す構成は、例えばパーソナルコンピュータ（ＰＣ）等によって構成されるものであり、スキャナ等のデータ読み取り部１４１７と、プリンタ等のデータ出力部１４１８を備えたハードウェア構成例を示している。
【０１２３】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１４０１は、前述の実施の形態において説明した各種のモジュール、すなわち、サーバ情報登録モジュール１０５、サーバ情報管理モジュール１１０、プラグイン処理能力管理モジュール１１５、ジョブ処理／ジョブ情報管理モジュール１２０、サーバ処理管理モジュール１２５、プラグイン処理能力管理モジュール１５５、ジョブ処理／ジョブ情報管理モジュール１６０、情報処理装置処理管理モジュール１６５等の各モジュールの実行シーケンスを記述したコンピュータ・プログラムにしたがった処理を実行する制御部である。
【０１２４】
ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１４０２は、ＣＰＵ１４０１が使用するプログラムや演算パラメータ等を格納する。ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１４０３は、ＣＰＵ１４０１の実行において使用するプログラムや、その実行において適宜変化するパラメータ等を格納する。これらはＣＰＵバス等から構成されるホストバス１４０４により相互に接続されている。
【０１２５】
ホストバス１４０４は、ブリッジ１４０５を介して、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ／Ｉｎｔｅｒｆａｃｅ）バス等の外部バス１４０６に接続されている。
【０１２６】
キーボード１４０８、マウス等のポインティングデバイス１４０９は、操作者により操作される入力デバイスである。ディスプレイ１４１０は、液晶表示装置又はＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）等があり、各種情報をテキストやイメージ情報として表示する。
【０１２７】
ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１４１１は、ハードディスク（フラッシュメモリ等であってもよい）を内蔵し、ハードディスクを駆動し、ＣＰＵ１４０１によって実行するプログラムや情報を記録又は再生させる。ハードディスクには、処理対象の文書データ、プラグインＩＤリスト１０００、プラグイン処理能力管理テーブル１１００、ジョブ管理テーブル１２００、プラグイン処理能力管理テーブル１３００等が格納される。さらに、その他の各種データ、各種コンピュータ・プログラム等が格納される。
【０１２８】
ドライブ１４１２は、装着されている磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリ等のリムーバブル記録媒体１４１３に記録されているデータ又はプログラムを読み出して、そのデータ又はプログラムを、インタフェース１４０７、外部バス１４０６、ブリッジ１４０５、及びホストバス１４０４を介して接続されているＲＡＭ１４０３に供給する。リムーバブル記録媒体１４１３も、ハードディスクと同様のデータ記録領域として利用可能である。
【０１２９】
接続ポート１４１４は、外部接続機器１４１５を接続するポートであり、ＵＳＢ、ＩＥＥＥ１３９４等の接続部を持つ。接続ポート１４１４は、インタフェース１４０７、及び外部バス１４０６、ブリッジ１４０５、ホストバス１４０４等を介してＣＰＵ１４０１等に接続されている。通信部１４１６は、通信回線に接続され、外部とのデータ通信処理を実行する。データ読み取り部１４１７は、例えばスキャナであり、ドキュメントの読み取り処理を実行する。データ出力部１４１８は、例えばプリンタであり、ドキュメントデータの出力処理を実行する。
【０１３０】
なお、図１４に示す情報処理装置のハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図１４に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えば特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）等）で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、さらに図１４に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、携帯情報通信機器（携帯電話、スマートフォン、モバイル機器、ウェアラブルコンピュータ等を含む）、情報家電、ロボット、複写機、ファックス、スキャナ、プリンタ、複合機などに組み込まれていてもよい。
【０１３１】
また、前述の実施の形態の説明において、予め定められた値との比較において、「以上」、「以下」、「より大きい」、「より小さい（未満）」としたものは、その組み合わせに矛盾が生じない限り、それぞれ「より大きい」、「より小さい（未満）」、「以上」、「以下」としてもよい。「早い」、「遅い」についても同様である。
【０１３２】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通等のために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、ブルーレイ・ディスク（Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ）、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去及び書換可能な読出し専用メモリ（ＥＥＰＲＯＭ（登録商標））、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）、ＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリーカード等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、又は無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分であってもよく、又は別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化等、復元可能であればどのような態様で記録されていてもよい。
【符号の説明】
【０１３３】
１００…情報処理装置
１０５…サーバ情報登録モジュール
１１０…サーバ情報管理モジュール
１１５…プラグイン処理能力管理モジュール
１２０…ジョブ処理／ジョブ情報管理モジュール
１２５…サーバ処理管理モジュール
１３０…フローファイル登録モジュール
１３５…フローファイル管理モジュール
１５０…サーバ
１５５…プラグイン処理能力管理モジュール
１６０…ジョブ処理／ジョブ情報管理モジュール
１６５…情報処理装置処理管理モジュール
１９０…通信回線
２１０…画像処理装置
２９０…通信回線
【図１】
0006500668.tif 000002
【図２】
0006500668.tif 000003
【図３】
0006500668.tif 000004
【図４】
0006500668.tif 000005
【図５】
0006500668.tif 000006
【図６】
0006500668.tif 000007
【図７】
0006500668.tif 000008
【図８】
0006500668.tif 000009
【図９】
0006500668.tif 000010
【図１０】
0006500668.tif 000011
【図１１】
0006500668.tif 000012
【図１２】
0006500668.tif 000013
【図１３】
0006500668.tif 000014
【図１４】
0006500668.tif 000015