(57)【特許請求の範囲】
【請求項１】
互いに通信可能なジョブ起動制御装置及びジョブ実行装置を備えたジョブ実行システムであって、
前記ジョブ起動制御装置は、
前記各ジョブを識別するジョブＩＤが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブの実行順序を定義するジョブネット定義情報を記憶する定義情報記憶手段と、
前記各ジョブの間での依存関係を記憶する依存内容記憶手段と、
前記ジョブＩＤと、当該ジョブＩＤのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて記憶するジョブ補正情報記憶手段と、
前記ジョブＩＤと、当該ジョブＩＤのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスＩＤと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて記憶する実行状態記憶手段と、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうち、当該定義情報記憶手段内で最後の実行順序のジョブＩＤを抽出し、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択し、この選択したジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤを指定し、当該選択したジョブＩＤ及び当該指定したジョブインスタンスＩＤを含む第１の起動指示を前記ジョブ実行装置に送信する第１の起動指示送信手段と、
前記第１の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第１の起動指示内のジョブＩＤに関連付けて前記実行状態記憶手段に書き込む手段と、
前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブＩＤとは異なるジョブＩＤであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブＩＤを先読み実行候補のジョブＩＤとして選択する先読み候補選択手段と、
前記選択された先読み実行候補のジョブＩＤのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブＩＤを選択し、この選択したジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうちで最先の実行順序に配列されたジョブＩＤと、このジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤと、このジョブＩＤに一致する前記ジョブ補正情報記憶手段内のジョブＩＤに関連付けられた引数のデフォルト値と、を含む第２の起動指示を前記ジョブ実行装置に送信する第２の起動指示送信手段と、
前記第２の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第２の起動指示内のジョブＩＤに関連付けて前記実行状態記憶手段に書き込む手段と、
前記ジョブ実行装置からジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果を受けると、この実行結果内のジョブＩＤ及びジョブインスタンスＩＤに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブＩＤ及びジョブインスタンスＩＤに関連付けられた実行状態を完了に更新する手段と、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうち、当該定義情報記憶手段内で最後の実行順序のジョブＩＤを抽出し、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択し、当該次の実行順序のジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブＩＤに一致する前記ジョブ補正情報記憶手段内のジョブＩＤに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する手段と、
この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブＩＤと、このジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに関連付けられたジョブインスタンスＩＤと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する手段と、
前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信するロールバック指示送信手段と、
を備え、
前記ジョブ実行装置は、
前記第１又は第２の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブＩＤ及びジョブインスタンスＩＤに基づいて、ジョブを起動するジョブ起動手段と、
前記起動されたジョブの実行結果を前記ジョブ起動制御装置に返信する手段と、
前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行するロールバック実行手段と、
前記ロールバックによる再度の実行結果をジョブ起動制御装置に返信する手段と、
を備えたことを特徴とするジョブ実行システム。
【請求項２】
請求項１に記載のジョブ実行システムにおいて、
前記ジョブ起動制御装置は、
前記判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブＩＤと、このジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに関連付けられたジョブインスタンスＩＤと、当該判定に用いた返却値を示す引数と、を含む補正要求を送出する手段と、
前記送出された補正要求を補正指示として前記ジョブ実行装置に送信する補正指示送信手段と、
を更に備え、
前記ジョブ実行装置は、
前記送信された補正指示を受けると、当該補正指示内のジョブＩＤ、ジョブインスタンスＩＤ及び引数に基づいて、ジョブの実行結果を補正するジョブ実行結果補正手段と、
前記補正された実行結果を前記ジョブ起動制御装置に返信する手段と、
を更に備えたことを特徴とするジョブ実行システム。
【請求項３】
ジョブ実行装置に通信可能であり、且つ定義情報記憶手段、依存内容記憶手段、ジョブ補正情報記憶手段及び実行状態記憶手段を備えたジョブ起動制御装置に用いられるプログラムであって、
前記ジョブ起動制御装置を、
前記各ジョブを識別するジョブＩＤが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブＩＤに関連付けて前記分岐の条件が更に記述されているジョブネット定義情報を前記定義情報記憶手段に書き込む手段、
前記ジョブＩＤと、当該ジョブＩＤのジョブが依存する依存元のジョブを識別する依存元のジョブＩＤと、前記依存する内容が前記依存元のジョブの実行過程又は返却値である旨を示す依存内容と、を関連付けて前記依存内容記憶手段に書き込む手段、
前記ジョブＩＤと、当該ジョブＩＤのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて前記ジョブ補正情報記憶手段に書き込む手段、
前記ジョブＩＤと、当該ジョブＩＤのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスＩＤと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて前記実行状態記憶手段に書き込む手段、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうち、当該定義情報記憶手段内で最後の実行順序のジョブＩＤを抽出し、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択し、この選択したジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤを指定し、当該選択したジョブＩＤ及び当該指定したジョブインスタンスＩＤを含む第１の起動指示を前記ジョブ実行装置に送信する第１の起動指示送信手段、
前記第１の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第１の起動指示内のジョブＩＤに関連付けて前記実行状態記憶手段に書き込む手段、
前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブＩＤとは異なるジョブＩＤであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブＩＤを先読み実行候補のジョブＩＤとして選択する先読み候補選択手段、
前記選択された先読み実行候補のジョブＩＤのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブＩＤを選択し、この選択したジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうちで最先の実行順序に配列されたジョブＩＤと、このジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤと、このジョブＩＤに一致する前記ジョブ補正情報記憶手段内のジョブＩＤに関連付けられた引数のデフォルト値と、を含む第２の起動指示を前記ジョブ実行装置に送信する第２の起動指示送信手段、
前記第２の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第２の起動指示内のジョブＩＤに関連付けて前記実行状態記憶手段に書き込む手段、
前記ジョブ実行装置からジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果を受けると、この実行結果内のジョブＩＤ及びジョブインスタンスＩＤに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブＩＤ及びジョブインスタンスＩＤに関連付けられた実行状態を完了に更新する手段、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうち、当該定義情報記憶手段内で最後の実行順序のジョブＩＤを抽出し、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択し、当該次の実行順序のジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブＩＤに一致する前記ジョブ補正情報記憶手段内のジョブＩＤに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する手段、
この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブＩＤと、このジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに関連付けられたジョブインスタンスＩＤと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する手段、
前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信するロールバック指示送信手段、
として機能させ、
前記ジョブ実行装置としては、
前記第１又は第２の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブＩＤ及びジョブインスタンスＩＤに基づいて、ジョブを起動して当該ジョブの実行結果を前記ジョブ起動制御装置に返信し、
前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行し、当該ロールバックによる再度の実行結果をジョブ起動制御装置に返信するプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ジョブ実行システム及びプログラムに関する。
【背景技術】
【０００２】
一般に、コンピュータが処理する仕事の単位をジョブと呼ぶ。例えばデータを収集する処理、収集したデータを分析してレポートを作成する処理、そのレポートを印刷する処理などがジョブの単位である。この例では、３種類のジョブの実行順序に依存関係があるため、依存関係に従ってジョブの実行順序を制御する必要がある。
【０００３】
複数のジョブに依存関係がなければ、処理効率を上げるために各ジョブを並行して実行することもある。例えば、複数種類のデータを独立して収集する場合には、データリソースごとにデータ収集ジョブを並行して実行することがある。
【０００４】
複数のコンピューティングリソース（ＣＰＵ、データなど）と複数のジョブがある場合、使用するコンピューティングリソースとジョブの実行順序とを適切にスケジューリングする必要が生じる。通常は、限られたコンピューティングリソースを効率的に使用する制約の下で、ジョブの実行順序がスケジューリングされる。
【０００５】
一般に、複数のジョブの実行順序をコンピュータに指示する技術としてジョブネットが用いられている。ジョブネットでは、依存関係のないジョブの「逐次実行」や、「並列実行」や、「条件分岐」などを定義できる。また、個々のジョブをロールバック可能に実装しておき、あるジョブの実行に失敗したら、やり直すなどの制御も実行されている。
【０００６】
図２１及び図２２はジョブネット定義情報の図表現とデータ構造の例を示す模式図であり、図２３は条件分岐で２番目の条件にヒットした場合のジョブの実行例を示す模式図である。
【０００７】
始めに、図２２に示すジョブネット定義情報１に従い、先頭ジョブjob0が実行される。先頭ジョブjob0の実行が完了すると、第１〜第３ジョブjob1, job2, job3が並行して実行される。第１〜第３ジョブjob1, job2, job3の実行が完了すると、次の条件分岐に進む。
【０００８】
条件分岐では、条件にヒットしたジョブが選択的に実行される。図２２に示すジョブネット定義情報１では、第２ジョブjob2の返却値が１の場合に第４ジョブjob4が実行され、第２ジョブjob2の返却値が２の場合に第５ジョブjob5が実行され、他の場合に第６ジョブjob6が実行される。
【０００９】
この例では、第２ジョブjob2の返却値が２となり、第５ジョブjob5が実行されるとする。第５ジョブjob5の実行が完了すると、最終ジョブjob7が実行される。最終ジョブjob7の実行が完了すると、ジョブネット全体の実行が完了する。
【００１０】
なお、第１〜第３ジョブjob1, job2, job3は、同一コンピュータリソース上で実行される場合に限らず、複数のコンピュータリソース上で並列に実行される場合もある。
【００１１】
また、上記の例では「逐次実行」、「並列実行」、「条件分岐」といった３種類の実行順序を表現するジョブネットを使っているが、必ずしもこれらに限定されるわけではない。例えば、「逐次実行」と「並列実行」の２種類だけであっても良いし、または、「逐次実行」／「並列実行」／「条件分岐」の他に、繰り返しループがあっても良い。
【００１２】
このような並列／分散処理としては、ジョブネットなどで明示的に並列実行を指示する技術に加え、例えば、ロードバランサを用いた負荷分散技術や、MapReduceによる分散処理技術などを用いてもよい。
【００１３】
一方、ＣＰＵの内部でも、命令列の並列処理が実行されている。例えば、投機実行により、先行命令が完了する前に、先行命令の結果を予測しながら後続命令を仮実行し、予測が異なっていたら後続命令をやり直すといったスケジューリングがなされている。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開平９−２１８８６１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
以上説明したように、通常は、限られたコンピューティングリソースを効率的に使用する制約の下で、ジョブの実行順序がスケジューリングされている。
【００１６】
ここで、本発明者の検討によれば、仮想化技術やクラウドコンピューティング技術の普及により、余剰リソースを柔軟に使用できる環境になり得ると共に、余剰リソースを十分に用いて処理時間を短縮させるジョブ実行スケジューリングが要請される可能性がある。
【００１７】
このようなジョブ実行スケジューリングにおいては、例えば、ＣＰＵ／マシン語レベルの投機実行のように、ジョブネット実行時にも先読みしてジョブを実行し、ジョブネット全体（実行順序に制約のあるジョブの集まり）の処理にかかる時間を短縮できるとよい。
【００１８】
しかしながら、本発明者の検討によれば、ジョブネットの下でジョブを先読み実行するには、次の不都合がある。すなわち、前述したジョブネット定義情報では、ジョブ間の依存関係の有無を表現し切れない。このため、ジョブネット定義情報に基づくジョブスケジューリングでは、ジョブを先読み実行できるか否かを判断できない不都合がある。
【００１９】
本明細書に開示した実施形態は、ジョブを先読み実行できるか否かを判断でき、ジョブネット全体の実行にかかる時間を短縮し得るジョブ実行システム及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２０】
実施形態のジョブ実行システムは、互いに通信可能なジョブ起動制御装置及びジョブ実行装置を備えている。
【００２１】
前記ジョブ起動制御装置の定義情報記憶手段は、前記各ジョブを識別するジョブＩＤが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブＩＤに関連付けて前記分岐の条件が更に記述されているジョブネット定義情報を記憶する。
【００２２】
前記ジョブ起動制御装置の依存内容記憶手段は、前記ジョブＩＤと、当該ジョブＩＤのジョブが依存する依存元のジョブを識別する依存元のジョブＩＤと、前記依存する内容が前記依存元のジョブの実行過程又は返却値である旨を示す依存内容と、を関連付けて記憶する。
【００２３】
前記ジョブ起動制御装置のジョブ補正情報記憶手段は、前記ジョブＩＤと、当該ジョブＩＤのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて記憶する。
【００２４】
前記ジョブ起動制御装置の実行状態記憶手段は、前記ジョブＩＤと、当該ジョブＩＤのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスＩＤと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて記憶する。
【００２５】
前記ジョブ起動制御装置の第１の起動指示送信手段は、前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうち、当該定義情報記憶手段内で最後の実行順序のジョブＩＤを抽出する。
【００２６】
前記ジョブ起動制御装置の第１の起動指示送信手段は、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択する。
【００２７】
前記ジョブ起動制御装置の第１の起動指示送信手段は、この選択したジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤを指定する。
【００２８】
前記ジョブ起動制御装置の第１の起動指示送信手段は、当該選択したジョブＩＤ及び当該指定したジョブインスタンスＩＤを含む第１の起動指示を前記ジョブ実行装置に送信する。
【００２９】
前記ジョブ起動制御装置は、前記第１の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第１の起動指示内のジョブＩＤに関連付けて前記実行状態記憶手段に書き込む。
【００３０】
前記ジョブ起動制御装置の先読み候補選択手段は、前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブＩＤとは異なるジョブＩＤであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブＩＤを先読み実行候補のジョブＩＤとして選択する。
【００３１】
前記ジョブ起動制御装置の第２の起動指示送信手段は、前記選択された先読み実行候補のジョブＩＤのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブＩＤを選択する。
【００３２】
前記ジョブ起動制御装置の第２の起動指示送信手段は、この選択したジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうちで最先の実行順序に配列されたジョブＩＤと、このジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤと、このジョブＩＤに一致する前記ジョブ補正情報記憶手段内のジョブＩＤに関連付けられた引数のデフォルト値と、を含む第２の起動指示を前記ジョブ実行装置に送信する。
【００３３】
前記ジョブ起動制御装置は、前記第２の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第２の起動指示内のジョブＩＤに関連付けて前記実行状態記憶手段に書き込む。
【００３４】
前記ジョブ起動制御装置は、前記ジョブ実行装置からジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果を受けると、この実行結果内のジョブＩＤ及びジョブインスタンスＩＤに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブＩＤ及びジョブインスタンスＩＤに関連付けられた実行状態を完了に更新する。
【００３５】
前記ジョブ起動制御装置は、前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致する前記定義情報記憶手段内のジョブＩＤのうち、当該定義情報記憶手段内で最後の実行順序のジョブＩＤを抽出する。
【００３６】
前記ジョブ起動制御装置は、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択し、当該次の実行順序のジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブＩＤに一致する前記ジョブ補正情報記憶手段内のジョブＩＤに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する。
【００３７】
前記ジョブ起動制御装置は、この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブＩＤと、このジョブＩＤに一致する前記実行状態記憶手段内のジョブＩＤに関連付けられたジョブインスタンスＩＤと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する。
【００３８】
前記ジョブ起動制御装置のロールバック指示送信手段は、前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信する。
【００３９】
前記ジョブ実行装置のジョブ起動手段は、前記第１又は第２の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブＩＤ及びジョブインスタンスＩＤに基づいて、ジョブを起動する。
【００４０】
前記ジョブ実行装置は、前記起動されたジョブの実行結果を前記ジョブ起動制御装置に返信する。
【００４１】
前記ジョブ実行装置のロールバック実行手段は、前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行する。
【００４２】
前記ジョブ実行装置は、前記ロールバックによる再度の実行結果をジョブ起動制御装置に返信する。
【図面の簡単な説明】
【００４３】
【図１】各実施形態に共通の概要説明のためのジョブ依存関係情報の一例を示す模式図である。
【図２】各実施形態に共通の概要説明のためのジョブ先読み実行情報の一例を示す模式図である。
【図３】各実施形態に共通の概要説明のための先読み実行例を示すタイムチャートである。
【図４】各実施形態に共通の概要説明のための先読み実行例を従来のジョブ実行例と比較して示すタイムチャートである。
【図５】第１の実施形態に係るジョブ実行システムの構成例を示す模式図である。
【図６】同実施形態におけるジョブ依存関係情報の図表現の一例を示す模式図である。
【図７】同実施形態におけるジョブ依存関係情報のデータ構造の一例を示す模式図である。
【図８】同実施形態におけるジョブ先読み実行情報のデータ構造の一例を示す模式図である。
【図９】同実施形態におけるジョブ実行状態テーブルのデータ構造の一例を示す模式図である。
【図１０】同実施形態における動作を説明するための模式図である。
【図１１】同実施形態におけるジョブネット解析部とジョブ起動部によるジョブ起動の動作を説明するための模式図である。
【図１２】同実施形態におけるジョブ先読み実行の動作を説明するための模式図である。
【図１３】同実施形態におけるステップＳＴ１１の詳細動作を説明するためのフローチャートである。
【図１４】同実施形態におけるステップＳＴ１１の詳細動作を説明するための模式図である。
【図１５】同実施形態におけるステップＳＴ１１の詳細動作を説明するための模式図である。
【図１６】同実施形態における先読み実行したジョブの補正の動作を説明するためのフローチャートである。
【図１７】第２の実施形態に係るジョブ実行システムに用いられるジョブネット定義情報の図表現の一例を示す模式図である。
【図１８】同実施形態におけるジョブ依存関係情報のデータ構造の一例を示す模式図である。
【図１９】同実施形態におけるジョブ先読み実行情報のデータ構造の一例を示す模式図である。
【図２０】同実施形態における先読み実行例を従来のジョブ実行例と比較して示すタイムチャートである。
【図２１】一般的なジョブネット定義情報の図表現の一例を示す模式図である。
【図２２】一般的なジョブネット定義情報のデータ構造の一例を示す模式図である。
【図２３】従来のジョブ実行例を示すタイムチャートである。
【発明を実施するための形態】
【００４４】
以下、各実施形態について図面を用いて説明するが、その前に各実施形態に共通する概要を述べる。
【００４５】
共通する概要としては、ジョブ実行順序を定義するための情報として、図２２に示したジョブネット定義情報１に加え、ジョブ先読み実行に関するジョブ依存関係情報及びジョブ先読み実行情報を用いている。図１及び図２にジョブ依存関係情報２及びジョブ先読み実行情報３の例を示す。
【００４６】
ジョブ依存関係情報２では、あるジョブの実行が他のジョブの実行結果に依存するか否かが定義される。図２に示す例では、第２ジョブjob2の実行は、先頭ジョブjob0の実行結果に依存する。これは、先頭ジョブjob0と、第２ジョブjob2が同じデータリソースにアクセスしていて、先頭ジョブjob0がそのデータを更新する可能性がある場合などが該当する。第３ジョブjob3の実行も先頭ジョブjob0の実行結果に依存するが、第３ジョブjob3は、先頭ジョブjob0の返却値のみに依存する。なお、上記の例ではjob0の実行結果およびjob3の返却値に依存しているが、必ずしもこれらへの依存に限定されるわけではない。例えば、「先頭ジョブjob0が１度以上実行された後でないと、別の第３ジョブjob3を実行できない」などの例も考えられる。また、ジョブ依存関係情報２は、ジョブ間依存関係グラフと呼んでもよい。
【００４７】
ジョブ先読み実行情報３は、各ジョブを先読み実行できるか否かを判断するための情報が記述される。例えば、第４ジョブjob4はロールバック可能であり、第３ジョブjob3は補正可能である。補正可能な第３ジョブjob3は、具体的には引数のデフォルト値で実行し、引数値が変われば補正すればよい。
【００４８】
ジョブ依存関係情報２とジョブ先読み実行情報３を用いて先読み実行例のタイムチャートを図３に示す。この例は、図２３と同じく、条件分岐で２番目の条件にヒットした場合を示している。
【００４９】
ジョブネット定義情報１に従い、最初に先頭ジョブjob0が実行される。この先頭ジョブjob0の実行と並行して、第１ジョブjob1と第３ジョブjob3も実行される。第１ジョブjob1と第３ジョブjob3は、先頭ジョブjob0からの返却値を使うが、返却値の代わりに引数のデフォルト値で実行しておき、返却値を受けた後に補正可能なためである。一方、第２ジョブjob2は、返却値以外にも先頭ジョブjob0の実行結果に依存するため、先頭ジョブjob0が完了するまで開始されない。
【００５０】
さらに、条件分岐の選択肢に含まれる第５ジョブjob5も並行して実行される。条件分岐の選択肢の第４〜第６ジョブjob4, job5, job6は、ジョブネットが開始された直後には条件分岐の条件が定まっておらず、どのジョブを実行すべきか未確定である。しかし第５ジョブjob5はそれ以前のジョブに依存しないため、ジョブネット開始直後から投機的に実行される。第４及び第６ジョブjob4, job6は、個別に第１及び第２ジョブjob1, job2に依存しているため、最初の時点では実行されない。先頭ジョブjob0が完了すると第２ジョブjob2が開始され、第２ジョブjob2が完了すると第６ジョブjob6が開始される。
【００５１】
先頭ジョブjob0が完了すると、先頭ジョブjob0の実行結果に応じて、先読み実行されていたジョブのロールバック又は補正を実行する。例えば、先頭ジョブjob0の実行結果が“１”の場合、引数のデフォルト値“０”で先読み実行された第１ジョブjob1がロールバックされて引数値“１”で再実行される。第３ジョブjob3は、引数のデフォルト値“１”で先読み実行されたので、この例では補正されない。
【００５２】
第１〜第３ジョブjob1, job2, job3の実行が完了した時点で、条件分岐の条件が確定する。この例では２番目の条件がヒットし、第５ジョブjob5が実行されることになる。但し、第５ジョブjob5は先読み実行により完了している。よって、すぐに最終ジョブjob7が実行されることになる。
【００５３】
ここで、図２３に示した従来のジョブ実行例のタイムチャートと、図３に示した先読み実行例のタイムチャートとを並べて図４（ａ）及び図４（ｂ）に示す。
【００５４】
先読み実行例の場合、ジョブネット全体の実行時間が、先頭ジョブjob0の実行時間と、第１ジョブjob1のロールバック及び再実行の時間と、最終ジョブjob7の実行時間との合計時間（ｔjob0＋ｔjob1-rollback＋ｔjob1＋ｔjob7）となる。
【００５５】
一方、従来の実行例の場合、ジョブネット全体の実行時間が、先頭ジョブjob0の実行時間と、第３、第５及び第７ジョブjob3, job5, job7の実行時間との合計時間（ｔjob0＋ｔjob3＋ｔjob5＋ｔjob7）となる。
【００５６】
従って、先読み実行例の場合、従来の実行例に比べ、両者の差分（ｔjob3＋ｔjob5−（ｔjob1-rollback＋ｔjob1））だけジョブネット全体の実行時間を短縮することができる。
【００５７】
＜第１の実施形態＞
図５は第１の実施形態に係るジョブ実行システムの構成例を示す模式図であり、図６乃至図９は同システムで用いられる情報の一例を示す模式図である。このジョブ実行システムは、互いに通信可能なジョブ起動制御装置１０及びジョブ実行装置２０を備えている。各装置１０，２０は、装置１０，２０毎に、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体から対応する装置１０，２０のコンピュータにインストールされ、対応する装置１０，２０の機能を実現させるためのプログラムが用いられる。
【００５８】
ここで、ジョブ起動制御装置１０は、記憶部１１及びジョブ起動制御部１２を備えている。
【００５９】
記憶部１１は、各部１２〜１４から読出／書込可能な記憶装置であり、例えば、ジョブネット定義情報１、ジョブ依存関係情報２、ジョブ先読み実行情報３及びジョブ実行状態テーブル４を記憶している。なお、各情報１〜３は、予めユーザによるジョブネットエディタ等のユーザ端末（図示せず）の操作に応じて、図示しないＣＰＵにより書き込まれている。
【００６０】
ジョブネット定義情報１は、例えば図２２に示したように、各ジョブを識別するジョブＩＤが当該各ジョブの実行順序の順に配列して記述されており、各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブＩＤに関連付けて分岐の条件が更に記述されている。
【００６１】
ジョブ依存関係情報２は、ジョブＩＤと、当該ジョブＩＤのジョブが依存する依存元のジョブを識別する依存元のジョブＩＤと、当該依存する内容が当該依存元のジョブの実行過程又は返却値である旨を示す依存内容と、が関連付けて記述されている。
【００６２】
ジョブ依存関係情報２の図表現とデータ構造の例を図６及び図７に示す。グラフ表記ではジョブ間の矢印で依存関係を表現し、システム内部では表形式で依存関係を格納する。
【００６３】
ジョブ依存関係情報２は、例えば、次の２通りの依存関係（２−１）〜（２−２）を定義している。
【００６４】
（２−１）あるジョブの実行は別のジョブの実行過程に依存する。
【００６５】
（２−２）あるジョブの実行は別のジョブの返却値のみに依存する。
【００６６】
但し、ジョブ依存関係情報２は、これら２通りの依存関係（２−１）〜（２−２）に限定されるわけではない。
【００６７】
図７の例では、第１ジョブjob1は先頭ジョブjob0の返却値のみに依存している。例えば先頭ジョブjob0が更新するデータリソースを第１ジョブjob1は参照しないが、先頭ジョブjob0の実行の結果得られる返却値を第１ジョブjob1が使う場合などが該当する。図表記では破線矢印、データ構造の表中では「返却値」として定義されている。第２ジョブjob2は先頭ジョブjob0の実行過程に依存している。例えば、先頭ジョブjob0があるデータリソースを更新し、第２ジョブjob2がそのデータリソースを参照する場合などが該当する。図表記では実線矢印、データ構造の表中では「実行過程」として定義されている。
【００６８】
ジョブ先読み実行情報３は、図８に一例を示すように、ジョブＩＤと、当該ジョブＩＤのジョブのロールバックの可否及び負荷を示すロールバック情報と、当該ジョブの引数補正の可否及び負荷と引数のデフォルト値とを示す引数補正情報と、が関連付けて表形式で記述されている。なお、ロールバックの負荷と引数補正の負荷はそれぞれ省略してもよい。なお、ジョブ先読み実行情報３は、これらロールバック情報及び引数補正情報に限定されるわけではない。
【００６９】
図８の例では、第３ジョブjob3は実行を開始した後で不要になれば、実行結果をロールバックすることができる。それにかかる負荷は“４０”である。ロールバックにおいては、負荷の単位をアプリケーションごとに決めてよく、また、値は定数でなく、関数でも構わない。また第３ジョブjob3はデフォルト値を引数として実行しておき、後から実際の引数値が変わったら実行結果を補正できる。それにかかる負荷は“１０”である。引数補正の負荷の単位は、アプリケーションごとに決めてよく、また、値は定数でなく、関数でも構わない。
【００７０】
ジョブ実行状態テーブル４は、図９に一例を示すように、ジョブＩＤと、当該ジョブＩＤのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスＩＤと、ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、ジョブインスタンスの実行が実行順序通りの本実行か又は本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、実行状態が完了を示す場合のジョブインスタンスの返却値と、が関連付けて表形式で記述されている。
【００７１】
但し、ジョブ実行状態テーブル４は、（４−１）実際に実行されたジョブインスタンスのＩＤ、（４−２）ジョブの実行状態（実行中、完了、失敗など）、（４−３）ジョブネット定義情報１に基づく本実行か、ジョブ先読み実行かという区別、（４−４）ジョブ実行結果の返却値、といった４通りの情報に限定されるわけではない。
【００７２】
図９の例では、先頭ジョブjob0は本実行が完了し、その返却値は“３”である。第１〜第３ジョブjob1, job2, job3は本実行として実行中である。第５ジョブjob5は先読み実行として実行中である。第４、第６及び最終ジョブjob4, job6, job7は、開始されていない。
【００７３】
ジョブ起動制御部１２は、ジョブ実行スケジューリングの中核を担うものであり、ジョブネット解析部１３及びジョブ先読み実行解析部１４を備えている。
【００７４】
ジョブネット解析部１３は、以下の各機能(f13-1)〜(f13-6)をもっている。
【００７５】
(f13-1)  ジョブ実行状態テーブル４内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致するジョブネット定義情報１内のジョブＩＤのうち、当該ジョブネット定義情報１内で最後の実行順序のジョブＩＤを抽出し、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択し、この選択したジョブＩＤに一致するジョブ実行状態テーブル４内のジョブＩＤに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤを指定し、当該選択したジョブＩＤ及び当該指定したジョブインスタンスＩＤを含む第１の起動指示をジョブ実行装置２０に送信する第１の起動指示送信機能。
【００７６】
(f13-2)  第１の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第１の起動指示内のジョブＩＤに関連付けてジョブ実行状態テーブル４に書き込む機能。
【００７７】
(f13-3)  ジョブ実行装置２０からジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果を受けると、この実行結果内のジョブＩＤ及びジョブインスタンスＩＤに関連付けて当該返却値をジョブ実行状態テーブル４に書き込むと共に、当該ジョブＩＤ及びジョブインスタンスＩＤに関連付けられた実行状態を完了に更新する機能。
【００７８】
(f13-4)  ジョブ実行状態テーブル４内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致するジョブネット定義情報１内のジョブＩＤのうち、当該ジョブネット定義情報１内で最後の実行順序のジョブＩＤを抽出し、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択し、当該次の実行順序のジョブＩＤに一致するジョブ実行状態テーブル４内のジョブＩＤに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブＩＤに一致するジョブ先読み実行情報３内のジョブＩＤに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する機能。
【００７９】
(f13-5)  この判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値にジョブ先読み実行情報３内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報にジョブ先読み実行情報３内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブＩＤと、このジョブＩＤに一致するジョブ実行状態テーブル４内のジョブＩＤに関連付けられたジョブインスタンスＩＤと、当該判定に用いた返却値を示す引数と、を含むロールバック要求をジョブ先読み実行解析部１４に送出する機能。
【００８０】
(f13-6)  判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブＩＤと、このジョブＩＤに一致するジョブ実行状態テーブル４内のジョブＩＤに関連付けられたジョブインスタンスＩＤと、当該判定に用いた返却値を示す引数と、を含む補正要求をジョブ先読み実行解析部１４に送出する機能。
【００８１】
ジョブ先読み実行解析部１４は、以下の各機能(f14-1)〜(f14-6)をもっている。
【００８２】
(f14-1)  ジョブ実行状態テーブル４内で実行中又は完了を示す実行状態に関連付けられたジョブＩＤとは異なるジョブＩＤであり、且つジョブ依存関係情報２内で実行過程である旨を示す依存内容に関連付けられていないジョブＩＤを先読み実行候補のジョブＩＤとして選択する先読み候補選択機能。
【００８３】
(f14-2)  選択された先読み実行候補のジョブＩＤのうち、ジョブ先読み実行情報３内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブＩＤを選択し、この選択したジョブＩＤに一致するジョブネット定義情報１内のジョブＩＤのうちで最先の実行順序に配列されたジョブＩＤと、このジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤと、このジョブＩＤに一致するジョブ先読み実行情報３内のジョブＩＤに関連付けられた引数のデフォルト値と、を含む第２の起動指示をジョブ実行装置２０に送信する第２の起動指示送信機能。
【００８４】
(f14-3)  第２の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第２の起動指示内のジョブＩＤに関連付けてジョブ実行状態テーブル４に書き込む機能。
【００８５】
(f14-4)  ジョブ実行装置ｊ２０からジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果を受けると、この実行結果内のジョブＩＤ及びジョブインスタンスＩＤに関連付けて当該返却値をジョブ実行状態テーブル４に書き込むと共に、当該ジョブＩＤ及びジョブインスタンスＩＤに関連付けられた実行状態を完了に更新する機能。
【００８６】
(f14-5)  送出されたロールバック要求をロールバック指示としてジョブ実行装置２０に送信するロールバック指示送信機能。
【００８７】
(f14-6)  送出された補正要求を補正指示としてジョブ実行装置２０に送信する補正指示送信機能。
【００８８】
一方、ジョブ実行装置２０は、記憶部２１及びジョブ実行部２２を備えている。
【００８９】
記憶部２１は、各ジョブに対応するジョブプログラムが予め記憶されている。各ジョブは、各ジョブに対応するジョブプログラムを実行するＣＰＵ（図示せず）の一機能からなり、起動指示を受けたＣＰＵがジョブプログラムを実行することにより、実行される。
【００９０】
ジョブ実行部２２は、ジョブ起動部２３及びジョブ実行結果補正部２４を備えている。
【００９１】
ジョブ起動部２３は、以下の各機能(f23-1)〜(f23-2)をもっている。
【００９２】
(f23-1)  第１又は第２の起動指示をジョブ起動制御装置１０から受信すると、当該起動指示内のジョブＩＤ及びジョブインスタンスＩＤに基づいて、ジョブを起動するジョブ起動機能。
【００９３】
(f23-2)  起動されたジョブの実行結果をジョブ起動制御装置１０に返信する機能。
【００９４】
ジョブ実行結果補正部２４は、以下の各機能(f24-1)〜(f24-4)をもっている。
【００９５】
(f24-1)  ロールバック指示をジョブ起動制御装置１０から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行するロールバック実行機能。
【００９６】
(f24-2)  ロールバックによる再度の実行結果をジョブ起動制御装置１０に返信する機能。
【００９７】
(f24-3)  ジョブ起動制御装置１０から送信された補正指示を受けると、当該補正指示内のジョブＩＤ、ジョブインスタンスＩＤ及び引数に基づいて、ジョブの実行結果を補正するジョブ実行結果補正機能。
【００９８】
(f24-4)  補正された実行結果をジョブ起動制御装置１０に返信する機能。
【００９９】
次に、以上のように構成されたジョブ実行システムの動作について図１０乃至図１６を参照しながら説明する。なお、参照する図面においては、例えば図１０に示すように、記憶部１１，２１の図示を省略している。
【０１００】
従来通り、ジョブネット定義情報１に沿ってジョブを実行するには、ジョブ起動制御部１２のジョブネット解析部１３と、ジョブ実行部２２のジョブ起動部２３だけがあればよい。先読み実行を行うためには、ジョブ起動制御部１２のジョブ先読み実行解析部１４と、ジョブ実行部２２のジョブ実行結果補正部２４が必要となる。
【０１０１】
図１１はジョブネット解析部１３とジョブ起動部２３によるジョブ起動の動作を説明するための模式図である。
【０１０２】
ジョブネット解析部１３は、ジョブネット定義情報１を参照し、次に起動すべきジョブを選択する（ＳＴ１）。具体的にはジョブネット解析部１３は、ジョブ実行状態テーブル４内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブＩＤに一致するジョブネット定義情報１内のジョブＩＤのうち、ジョブネット定義情報１内で最後の実行順序のジョブＩＤを抽出し、この抽出したジョブＩＤの実行順序の次の実行順序に配列されたジョブＩＤを選択する。
【０１０３】
ジョブネット解析部１３は、ジョブ実行状態テーブル４を参照し、そのジョブの実行状態を確認する（ＳＴ２）。具体的にはジョブネット解析部１３は、ステップＳＴ１で選択したジョブＩＤに一致するジョブ実行状態テーブル４内のジョブＩＤには実行中を示す実行状態が関連付けられていない旨を確認する。
【０１０４】
そのジョブがまだ起動されていなければ、ジョブネット解析部１３は、ジョブ起動部２３にそのジョブの起動指示を送信すると共に（ＳＴ３）、起動指示を送信した旨をジョブ実行状態テーブル４に記録する。具体的にはジョブネット解析部１３は、ステップＳＴ２の確認の後、ステップＳＴ１で選択したジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤを指定し、当該選択したジョブＩＤ及び当該指定したジョブインスタンスＩＤを含む第１の起動指示をジョブ実行装置２０に送信する。また、ジョブネット解析部１３は、第１の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第１の起動指示内のジョブＩＤに関連付けてジョブ実行状態テーブル４に書き込む。
【０１０５】
一方、ジョブ実行部２２は、第１の起動指示をジョブ起動制御装置１０から受信すると、第１の起動指示内のジョブＩＤ及びジョブインスタンスＩＤに基づいて、ジョブを起動する（ＳＴ４）。
【０１０６】
ジョブの実行が完了すると、ジョブは、ジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果をジョブ実行部２２に返す（ＳＴ５）。
【０１０７】
ジョブ実行部２２は、この実行結果をジョブネット解析部１３に送信する（ＳＴ６）。
【０１０８】
ジョブネット解析部１３はジョブ実行状態テーブル４に実行結果を記録する（ＳＴ７）。具体的には、ジョブネット解析部１３は、ジョブ実行装置２０からジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果を受けると、この実行結果内のジョブＩＤ及びジョブインスタンスＩＤに関連付けて当該返却値をジョブ実行状態テーブル４に書き込むと共に、当該ジョブＩＤ及びジョブインスタンスＩＤに関連付けられた実行状態を完了に更新する。
【０１０９】
図１２はジョブ先読み実行解析部１４とジョブ実行結果補正部２４を追加したジョブ先読み実行の動作を説明するための模式図である。
【０１１０】
ジョブ先読み実行解析部１４はジョブ実行状態テーブル４、ジョブ依存関係情報２、ジョブ先読み実行情報３を参照し、先読み実行できるジョブを抽出する（ＳＴ１１）。例えば、ジョブ先読み実行解析部１４は、ジョブ実行状態テーブル４内で実行中又は完了を示す実行状態に関連付けられたジョブＩＤとは異なるジョブＩＤであり、且つジョブ依存関係情報２内で実行過程である旨を示す依存内容に関連付けられていないジョブＩＤを先読み実行候補のジョブＩＤとして選択する。次に、ジョブ先読み実行解析部１４は、当該選択した先読み実行候補のジョブＩＤのうち、ジョブ先読み実行情報４内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブＩＤを選択し、この選択したジョブＩＤに一致するジョブネット定義情報１内のジョブＩＤのうちで最先の実行順序に配列されたジョブＩＤを抽出する。
【０１１１】
なお、具体例によるステップＳＴ１１の詳細は後述する。
【０１１２】
ジョブ先読み実行解析部１４はジョブ実行状態テーブル４を参照し、先読み実行できるジョブの実行状態を確認する（ＳＴ１２）。
【０１１３】
そのジョブがまだ起動されていなければ、ジョブ先読み実行解析部１４は、先読み実行するジョブの起動指示をジョブ起動部２３に送信すると共に（ＳＴ１３）、起動指示を送信した旨をジョブ実行状態テーブル４に記録する。記録の際には、正規の起動指示ではなく、先読み実行の起動指示であることを明示する。具体的には、ジョブ先読み実行解析部１４は、ステップＳＴ１２の確認の後、ステップＳＴ１１で抽出したジョブＩＤと、このジョブＩＤのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスＩＤと、このジョブＩＤに一致するジョブ先読み実行情報３内のジョブＩＤに関連付けられた引数のデフォルト値と、を含む第２の起動指示をジョブ実行装置２０に送信する。また、ジョブ先読み実行解析部１４は、第２の起動指示内のジョブインスタンスＩＤと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第２の起動指示内のジョブＩＤに関連付けてジョブ実行状態テーブル４に書き込む。
【０１１４】
一方、ジョブ実行部２２は、第２の起動指示をジョブ起動制御装置１０から受信すると、第２の起動指示内のジョブＩＤ、ジョブインスタンスＩＤ、及び引数のデフォルト値に基づいて、ジョブを起動する（ＳＴ１４）。
【０１１５】
ジョブの実行が完了すると、ジョブは、ジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果をジョブ実行部２２に返す（ＳＴ１５）。
【０１１６】
ジョブ実行部２２は、この実行結果をジョブ先読み実行解析部１４に送信する（ＳＴ１６）。
【０１１７】
ジョブ先読み実行解析部１４はジョブ実行状態テーブル４に実行結果を記録する（ＳＴ１７）。具体的にはジョブ先読み実行解析部１４は、ジョブ実行装置２０からジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果を受けると、この実行結果内のジョブＩＤ及びジョブインスタンスＩＤに関連付けて当該返却値をジョブ実行状態テーブル４に書き込むと共に、当該ジョブＩＤ及びジョブインスタンスＩＤに関連付けられた実行状態を完了に更新する。なお、この実行結果の記録は、正規の実行結果ではなく、先読み実行の実行結果であることがステップＳＴ１３の後に書き込まれた実行種別により明示されている。
【０１１８】
次に、前述したステップＳＴ１１の詳細を図１３乃至図１５に沿って説明する。
【０１１９】
始めに、図１３及び図１４に示すように、ジョブ実行状態テーブル４を参照して、実行中または完了したジョブを抽出する（ＳＴ１１−１）。この例では、先頭ジョブjob0が実行中である。
【０１２０】
次に、ジョブ依存関係情報２を参照し、先読み実行可能なジョブの候補を抽出する（ＳＴ１１−２）。この例では第１、第３及び第５ジョブjob1, job3, job5が先読み実行の候補となる。第２、第４、第６及び最終ジョブjob2, job4, job6, job7はまだ完了していない他ジョブjob1, job2, job5の実行過程に依存するため、先読み実行の候補とはならない。
【０１２１】
最後に、図１５に示すように、ジョブ先読み実行情報３を参照し、先読み実行可否を決定し、先読み実行可のジョブを抽出する（ＳＴ１１−３）。この例では、第１、第３及び第５ジョブjob1, job3, job5はすべて先読み実行可となる。例えば第３ジョブjob3はロールバックも補正も「可」なので、先読み実行できる。第１ジョブjob1はロールバックが「不可」、補正は「可」だが、ジョブネット定義情報１から第１ジョブjob1は並列実行の中にあり実行自体が取り消されることはないため、先読み実行可となる。
【０１２２】
以上がステップＳＴ１１の詳細な説明である。
【０１２３】
次に、図１６は先読み実行したジョブの補正の動作を説明するための模式図である。補足すると、図１１と図１２で説明したジョブネット解析部１３とジョブ先読み実行解析部１４によるジョブ起動指示は、通常は独立して作用する。しかしジョブネット解析部１３がジョブの起動指示を送信しようとしたときに、既にジョブ先読み実行解析部１４から先読み実行の起動指示が送信されていた場合、ジョブ実行の補正が必要となる。その際のジョブネット解析部１３とジョブ先読み実行解析部１４の間のインタラクションについて図１６を用いて説明する。
【０１２４】
ジョブネット解析部１３は、ステップＳＴ１と同様に、ジョブネット定義情報１を参照し、次に起動すべきジョブを選択する（ＳＴ２１）。
【０１２５】
ジョブネット解析部１３は、ステップＳＴ２と同様に、ジョブ実行状態テーブル４を参照し、そのジョブの実行状態を確認する（ＳＴ２２）。
【０１２６】
ステップＳＴ２２の結果、そのジョブが先読み実行されていた場合、ジョブネット解析部１３は、ジョブ先読み実行解析部１４にそのジョブの補正要求を出し（ＳＴ２３）、そのジョブが本実行となった旨をジョブ実行状態テーブル４に記録する。
【０１２７】
具体的にはステップＳＴ２２の結果、ステップＳＴ２１で選択したジョブＩＤに一致するジョブ実行状態テーブル４内のジョブＩＤに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、ジョブネット解析部１３は、当該選択したジョブＩＤに一致するジョブ先読み実行情報３内のジョブＩＤに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する。ジョブネット解析部１３は、この判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブＩＤと、このジョブＩＤに一致するジョブ実行状態テーブル内のジョブＩＤに関連付けられたジョブインスタンスＩＤと、当該判定に用いた返却値を示す引数と、を含む補正要求をジョブ先読み実行解析部１４に送出する。また、ジョブネット解析部１３は、補正要求内のジョブインスタンスＩＤと、実行中を示す実行状態と、本実行を示す実行種別と、を当該補正要求内のジョブＩＤに関連付けてジョブ実行状態テーブル４に書き込む。
【０１２８】
ジョブ先読み実行解析部１４は、ステップＳＴ２３で受けた補正要求を補正指示としてジョブ実行結果補正部２４に送信する（ＳＴ２４）。
【０１２９】
ジョブ実行結果補正部２４は、送信された補正指示を受けると、当該補正指示内のジョブＩＤ、ジョブインスタンスＩＤ及び引数に基づいて、ジョブの実行結果を補正する（ＳＴ２５）。
【０１３０】
ジョブの実行結果の補正が完了すると、ジョブは、補正された実行結果をジョブ実行結果補正部２４に返す（ＳＴ２６）。
【０１３１】
ジョブ実行結果補正部２４は、実行結果をジョブ先読み実行解析部１４に送信する（ＳＴ２７）。
【０１３２】
ジョブ先読み実行解析部１４はジョブ実行状態テーブル４に実行結果を記録する（ＳＴ２８）。
【０１３３】
前述したステップＳＴ２５におけるジョブ実行の補正では、引数のデフォルト値で先読み実行されていたジョブに対して、その引数値を実際に確定した値に置き換える。引数値をデフォルト値から実際に確定した値に置き換える方法は、個々のジョブの実装に依存する。例えば、引数のデフォルト値をそのままＤＢに格納しているだけのジョブであれば、ＤＢの値を実際に確定した値に置き換えるだけで済む場合もある。引数のデフォルト値に基づいて計算処理をしているジョブであれば、確定した引数の値に基づいて再計算が必要になる場合もある。
【０１３４】
なお、補正指示に代えて、ロールバック指示を送信する場合は、前述したステップＳＴ２３乃至ＳＴ２８は、以下のステップＳＴ２３’〜ＳＴ２８’のように実行される。
【０１３５】
ステップＳＴ２２の結果、そのジョブが先読み実行されていた場合、ジョブネット解析部１３は、ジョブ先読み実行解析部１４にそのジョブのロールバック要求を送出し（ＳＴ２３’）、そのジョブが本実行となった旨をジョブ実行状態テーブル４に記録する。具体的にはジョブネット解析部１３は、前述した判定を実行し、この判定の結果、当該判定に用いた引数のデフォルト値にジョブ先読み実行情報３内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報にジョブ先読み実行情報３内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブＩＤと、このジョブＩＤに一致するジョブ実行状態テーブル４内のジョブＩＤに関連付けられたジョブインスタンスＩＤと、当該判定に用いた返却値を示す引数と、を含むロールバック要求をジョブ先読み実行解析部１４に送出する（ＳＴ２３’）。また、ジョブネット解析部１３は、ロールバック要求内のジョブインスタンスＩＤと、実行中を示す実行状態と、本実行を示す実行種別と、を当該ロールバック要求内のジョブＩＤに関連付けてジョブ実行状態テーブル４に書き込む。
【０１３６】
ジョブ先読み実行解析部１４は、ステップＳＴ２３’で受けたロールバック要求をロールバック指示としてジョブ実行結果補正部２４に送信する（ＳＴ２４’）。
【０１３７】
ジョブ実行結果補正部２４は、送信されたロールバック指示を受けると、当該ロールバック指示に基づいて、ジョブのロールバックを実行する（ＳＴ２５’）。
【０１３８】
ジョブのロールバックによる再実行が完了すると、ジョブは、ジョブＩＤ、ジョブインスタンスＩＤ及び返却値を含む実行結果をジョブ実行結果補正部２４に返す（ＳＴ２６’）。
【０１３９】
ジョブ実行結果補正部２４は、この実行結果をジョブ先読み実行解析部１４に送信する（ＳＴ２７’）。
【０１４０】
ジョブ先読み実行解析部１４はジョブ実行状態テーブル４に実行結果を記録する（ＳＴ２８’）。
【０１４１】
上述したように本実施形態によれば、ジョブ先読み実行解析部１４が、ジョブ実行状態テーブル４内で実行中又は完了を示す実行状態に関連付けられたジョブＩＤとは異なるジョブＩＤであり、且つジョブ依存関係情報２内で実行過程である旨を示す依存内容に関連付けられていないジョブＩＤを先読み実行候補として選択し、先読み実行候補のジョブＩＤのうち、ジョブ先読み実行情報３内でロールバックの可又は引数補正の可に関連付けられたジョブＩＤを選択し、この選択したジョブＩＤのうちで最先のジョブＩＤと、ジョブインスタンスＩＤと、引数のデフォルト値と、を含む第２の起動指示をジョブ実行装置２０に送信する構成により、ジョブネット実行時にジョブ間の依存関係を考慮してジョブを先読み実行し、余剰リソースを有効活用してジョブネット全体（実行順序に制約のあるジョブの集まり）の実行にかかる時間を短縮することができる。
【０１４２】
＜第２の実施形態＞
次に、第２の実施形態に係るジョブ実行システムについて説明する。
【０１４３】
第２の実施形態は、第１の実施形態の具体例であり、「多数のデータを正常／異常に仕分けして、正常なデータと異常なデータを別々に処理する」という業務を用いて、ジョブ先読み実行によりジョブネット全体の処理時間が短くなる例を示している。
【０１４４】
図１７乃至図１９にこの例のジョブネット定義情報１、ジョブ依存関係情報２、ジョブ先読み実行情報３を示す。この例では、ジョブ依存関係情報２とジョブ先読み実行情報３をシステム開発時に開発者が設定し、ジョブネット定義情報１はシステム運用時にシステム運用担当部門が随時、作成／更新するという運用を想定している。
【０１４５】
ジョブネット定義情報１には、図１７に示すように、「多数のデータを正常／異常に仕分けして、正常なデータと異常なデータを別々に処理」する一連のジョブの定義が記述されている。最初に先頭ジョブjob0により、処理対象の全データを正常データと異常データに仕分ける。この先頭ジョブjob0の実行結果として、正常データ一覧と異常データ一覧が出力される。
【０１４６】
次に、正常データ一覧内の正常データ数と異常データ一覧内の異常データ数とを合わせた全データに占める異常データ数の割合に応じて条件分岐される。異常データ数が全データの５％以内であれば、第１及び第２ジョブjob1, job2からなる通常の処理に進む。異常データの割合が５％を超えていたら、第３ジョブjob3の例外処理に進む。
【０１４７】
通常の処理では、第１ジョブjob1による正常データの処理と、第２ジョブjob2による異常データの処理とを並行して実行する。
【０１４８】
ジョブ依存関係情報２には、図１８に示すように、第１〜第３ジョブjob1, job2, job3が、先頭ジョブjob0の返却値に依存することが記述されている。
【０１４９】
ジョブ先読み実行情報３には、図１９に示すように、第２〜第３ジョブjob2, job3がロールバックと引数補正の両方とも不可であることが記述されている。すなわち、第２〜第３ジョブjob2, job3は、先読み実行できない処理である。
【０１５０】
ジョブの実行例を図２０に示す。この例は異常データの割合が５％以下で、第１及び第２ジョブjob1, job2を通常通りに処理する場合である。
【０１５１】
左側の図２０（ａ）はジョブネット定義情報１に従った従来のジョブ実行例を示し、右側の図２０（ｂ）はジョブ依存関係情報２を考慮した先読み実行例を示している。
【０１５２】
従来のジョブ実行例では、最初に先頭ジョブjob0で正常／異常データを仕分ける。次に第１ジョブjob1による正常データの処理と、第２ジョブjob2による異常データの処理とを並行して実行する。この場合、先頭ジョブjob0の実行と第１ジョブjob1の実行が「逐次並行」でなされ、これがジョブネット全体の実行時間（ｔjob0＋ｔjob1）となる。
【０１５３】
右側の先読み実行例では、先頭ジョブjob0の仕分け処理と並行して、第１ジョブjob1による正常データの処理を開始する。引数のデフォルト値として全データを受け取り、全データを対象に第１ジョブjob1を実行する。その後、先頭ジョブjob0の仕分け処理が完了した時点で、第１ジョブjob1の補正処理と第２ジョブjob2の異常データ処理を実行する。このため、先読み実行例におけるジョブネット全体の実行時間は、先頭ジョブjob0の実行時間と、第２ジョブjob2の実行時間との合計時間（ｔjob0＋ｔjob2）となる。
【０１５４】
ここで、先読み実行例では異常データの割合が少なく、第１ジョブjob1の補正処理や第２ジョブjob2の異常データ処理が短い。そのため、先読み実行例の実行時間は、従来の実行例の実行時間に比べ、両者の差分（ｔjob1−ｔjob2）だけジョブネット全体の実行時間を短縮することができる。
【０１５５】
上述したように本実施形態によれば、第１の実施形態のジョブを具体化した構成においても、第１の実施形態と同様の効果を得ることができる。
【０１５６】
以上説明した各実施形態によれば、ジョブネット定義情報１に加え、ジョブ依存関係情報２及びジョブ先読み実行情報３を備えた構成により、ジョブを先読み実行できるか否かを判断でき、ジョブネット全体の実行にかかる時間を短縮することができる。
【０１５７】
なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フロッピー（登録商標）ディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、光磁気ディスク（ＭＯ）、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【０１５８】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【０１５９】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているＯＳ（オペレーティングシステム）や、データベース管理ソフト、ネットワークソフト等のＭＷ（ミドルウェア）等が上記実施形態を実現するための各処理の一部を実行しても良い。
【０１６０】
さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、ＬＡＮやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【０１６１】
また、記憶媒体は１つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【０１６２】
なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パソコン等の１つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【０１６３】
また、各実施形態におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【０１６４】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１６５】
１…ジョブネット定義情報、２…ジョブ依存関係情報、３…ジョブ先読み実行情報、４…ジョブネット定義情報、１０…ジョブ起動制御装置、１１，２１…記憶部、１２…ジョブ起動制御部、１３…ジョブネット解析部、１４…ジョブ先読み実行解析部、２０…ジョブ実行装置、２２…ジョブ実行部、２３…ジョブ起動部、２４…ジョブ実行結果補正部。
【図１】
0005566936.tif 000002
【図２】
0005566936.tif 000003
【図３】
0005566936.tif 000004
【図４】
0005566936.tif 000005
【図５】
0005566936.tif 000006
【図６】
0005566936.tif 000007
【図７】
0005566936.tif 000008
【図８】
0005566936.tif 000009
【図９】
0005566936.tif 000010
【図１０】
0005566936.tif 000011
【図１１】
0005566936.tif 000012
【図１２】
0005566936.tif 000013
【図１３】
0005566936.tif 000014
【図１４】
0005566936.tif 000015
【図１５】
0005566936.tif 000016
【図１６】
0005566936.tif 000017
【図１７】
0005566936.tif 000018
【図１８】
0005566936.tif 000019
【図１９】
0005566936.tif 000020
【図２０】
0005566936.tif 000021
【図２１】
0005566936.tif 000022
【図２２】
0005566936.tif 000023
【図２３】
0005566936.tif 000024