ジョブ実行システム及びプログラム
【課題】 ジョブを先読み実行できるか否かを判断でき、ジョブネット全体の実行にかかる時間を短縮する。
【解決手段】 前記ジョブ起動制御装置の先読み候補選択手段は、前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補として選択する。前記ジョブ起動制御装置の第2の起動指示送信手段は、前記先読み実行候補のジョブIDのうち、前記ジョブ補正情報記憶手段内でロールバックの可又は引数補正の可に関連付けられたジョブIDを選択し、この選択したジョブIDのうちで最先のジョブIDと、ジョブインスタンスIDと、引数のデフォルト値と、を含む第2の起動指示を前記ジョブ実行装置に送信する。
【解決手段】 前記ジョブ起動制御装置の先読み候補選択手段は、前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補として選択する。前記ジョブ起動制御装置の第2の起動指示送信手段は、前記先読み実行候補のジョブIDのうち、前記ジョブ補正情報記憶手段内でロールバックの可又は引数補正の可に関連付けられたジョブIDを選択し、この選択したジョブIDのうちで最先のジョブIDと、ジョブインスタンスIDと、引数のデフォルト値と、を含む第2の起動指示を前記ジョブ実行装置に送信する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、ジョブ実行システム及びプログラムに関する。
【背景技術】
【0002】
一般に、コンピュータが処理する仕事の単位をジョブと呼ぶ。例えばデータを収集する処理、収集したデータを分析してレポートを作成する処理、そのレポートを印刷する処理などがジョブの単位である。この例では、3種類のジョブの実行順序に依存関係があるため、依存関係に従ってジョブの実行順序を制御する必要がある。
【0003】
複数のジョブに依存関係がなければ、処理効率を上げるために各ジョブを並行して実行することもある。例えば、複数種類のデータを独立して収集する場合には、データリソースごとにデータ収集ジョブを並行して実行することがある。
【0004】
複数のコンピューティングリソース(CPU、データなど)と複数のジョブがある場合、使用するコンピューティングリソースとジョブの実行順序とを適切にスケジューリングする必要が生じる。通常は、限られたコンピューティングリソースを効率的に使用する制約の下で、ジョブの実行順序がスケジューリングされる。
【0005】
一般に、複数のジョブの実行順序をコンピュータに指示する技術としてジョブネットが用いられている。ジョブネットでは、依存関係のないジョブの「逐次実行」や、「並列実行」や、「条件分岐」などを定義できる。また、個々のジョブをロールバック可能に実装しておき、あるジョブの実行に失敗したら、やり直すなどの制御も実行されている。
【0006】
図21及び図22はジョブネット定義情報の図表現とデータ構造の例を示す模式図であり、図23は条件分岐で2番目の条件にヒットした場合のジョブの実行例を示す模式図である。
【0007】
始めに、図22に示すジョブネット定義情報1に従い、先頭ジョブjob0が実行される。先頭ジョブjob0の実行が完了すると、第1〜第3ジョブjob1, job2, job3が並行して実行される。第1〜第3ジョブjob1, job2, job3の実行が完了すると、次の条件分岐に進む。
【0008】
条件分岐では、条件にヒットしたジョブが選択的に実行される。図22に示すジョブネット定義情報1では、第2ジョブjob2の返却値が1の場合に第4ジョブjob4が実行され、第2ジョブjob2の返却値が2の場合に第5ジョブjob5が実行され、他の場合に第6ジョブjob6が実行される。
【0009】
この例では、第2ジョブjob2の返却値が2となり、第5ジョブjob5が実行されるとする。第5ジョブjob5の実行が完了すると、最終ジョブjob7が実行される。最終ジョブjob7の実行が完了すると、ジョブネット全体の実行が完了する。
【0010】
なお、第1〜第3ジョブjob1, job2, job3は、同一コンピュータリソース上で実行される場合に限らず、複数のコンピュータリソース上で並列に実行される場合もある。
【0011】
また、上記の例では「逐次実行」、「並列実行」、「条件分岐」といった3種類の実行順序を表現するジョブネットを使っているが、必ずしもこれらに限定されるわけではない。例えば、「逐次実行」と「並列実行」の2種類だけであっても良いし、または、「逐次実行」/「並列実行」/「条件分岐」の他に、繰り返しループがあっても良い。
【0012】
このような並列/分散処理としては、ジョブネットなどで明示的に並列実行を指示する技術に加え、例えば、ロードバランサを用いた負荷分散技術や、MapReduceによる分散処理技術などを用いてもよい。
【0013】
一方、CPUの内部でも、命令列の並列処理が実行されている。例えば、投機実行により、先行命令が完了する前に、先行命令の結果を予測しながら後続命令を仮実行し、予測が異なっていたら後続命令をやり直すといったスケジューリングがなされている。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】特開平9−218861号公報
【発明の概要】
【発明が解決しようとする課題】
【0015】
以上説明したように、通常は、限られたコンピューティングリソースを効率的に使用する制約の下で、ジョブの実行順序がスケジューリングされている。
【0016】
ここで、本発明者の検討によれば、仮想化技術やクラウドコンピューティング技術の普及により、余剰リソースを柔軟に使用できる環境になり得ると共に、余剰リソースを十分に用いて処理時間を短縮させるジョブ実行スケジューリングが要請される可能性がある。
【0017】
このようなジョブ実行スケジューリングにおいては、例えば、CPU/マシン語レベルの投機実行のように、ジョブネット実行時にも先読みしてジョブを実行し、ジョブネット全体(実行順序に制約のあるジョブの集まり)の処理にかかる時間を短縮できるとよい。
【0018】
しかしながら、本発明者の検討によれば、ジョブネットの下でジョブを先読み実行するには、次の不都合がある。すなわち、前述したジョブネット定義情報では、ジョブ間の依存関係の有無を表現し切れない。このため、ジョブネット定義情報に基づくジョブスケジューリングでは、ジョブを先読み実行できるか否かを判断できない不都合がある。
【0019】
本明細書に開示した実施形態は、ジョブを先読み実行できるか否かを判断でき、ジョブネット全体の実行にかかる時間を短縮し得るジョブ実行システム及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0020】
実施形態のジョブ実行システムは、互いに通信可能なジョブ起動制御装置及びジョブ実行装置を備えている。
【0021】
前記ジョブ起動制御装置の定義情報記憶手段は、前記各ジョブを識別するジョブIDが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブIDに関連付けて前記分岐の条件が更に記述されているジョブネット定義情報を記憶する。
【0022】
前記ジョブ起動制御装置の依存内容記憶手段は、前記ジョブIDと、当該ジョブIDのジョブが依存する依存元のジョブを識別する依存元のジョブIDと、前記依存する内容が前記依存元のジョブの実行過程又は返却値である旨を示す依存内容と、を関連付けて記憶する。
【0023】
前記ジョブ起動制御装置のジョブ補正情報記憶手段は、前記ジョブIDと、当該ジョブIDのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて記憶する。
【0024】
前記ジョブ起動制御装置の実行状態記憶手段は、前記ジョブIDと、当該ジョブIDのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスIDと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて記憶する。
【0025】
前記ジョブ起動制御装置の第1の起動指示送信手段は、前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出する。
【0026】
前記ジョブ起動制御装置の第1の起動指示送信手段は、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択する。
【0027】
前記ジョブ起動制御装置の第1の起動指示送信手段は、この選択したジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定する。
【0028】
前記ジョブ起動制御装置の第1の起動指示送信手段は、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示を前記ジョブ実行装置に送信する。
【0029】
前記ジョブ起動制御装置は、前記第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む。
【0030】
前記ジョブ起動制御装置の先読み候補選択手段は、前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する。
【0031】
前記ジョブ起動制御装置の第2の起動指示送信手段は、前記選択された先読み実行候補のジョブIDのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択する。
【0032】
前記ジョブ起動制御装置の第2の起動指示送信手段は、この選択したジョブIDに一致する前記定義情報記憶手段内のジョブIDのうちで最先の実行順序に配列されたジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示を前記ジョブ実行装置に送信する。
【0033】
前記ジョブ起動制御装置は、前記第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む。
【0034】
前記ジョブ起動制御装置は、前記ジョブ実行装置からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する。
【0035】
前記ジョブ起動制御装置は、前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出する。
【0036】
前記ジョブ起動制御装置は、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、当該次の実行順序のジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する。
【0037】
前記ジョブ起動制御装置は、この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致する前記実行状態記憶手段内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する。
【0038】
前記ジョブ起動制御装置のロールバック指示送信手段は、前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信する。
【0039】
前記ジョブ実行装置のジョブ起動手段は、前記第1又は第2の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動する。
【0040】
前記ジョブ実行装置は、前記起動されたジョブの実行結果を前記ジョブ起動制御装置に返信する。
【0041】
前記ジョブ実行装置のロールバック実行手段は、前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行する。
【0042】
前記ジョブ実行装置は、前記ロールバックによる再度の実行結果をジョブ起動制御装置に返信する。
【図面の簡単な説明】
【0043】
【図1】各実施形態に共通の概要説明のためのジョブ依存関係情報の一例を示す模式図である。
【図2】各実施形態に共通の概要説明のためのジョブ先読み実行情報の一例を示す模式図である。
【図3】各実施形態に共通の概要説明のための先読み実行例を示すタイムチャートである。
【図4】各実施形態に共通の概要説明のための先読み実行例を従来のジョブ実行例と比較して示すタイムチャートである。
【図5】第1の実施形態に係るジョブ実行システムの構成例を示す模式図である。
【図6】同実施形態におけるジョブ依存関係情報の図表現の一例を示す模式図である。
【図7】同実施形態におけるジョブ依存関係情報のデータ構造の一例を示す模式図である。
【図8】同実施形態におけるジョブ先読み実行情報のデータ構造の一例を示す模式図である。
【図9】同実施形態におけるジョブ実行状態テーブルのデータ構造の一例を示す模式図である。
【図10】同実施形態における動作を説明するための模式図である。
【図11】同実施形態におけるジョブネット解析部とジョブ起動部によるジョブ起動の動作を説明するための模式図である。
【図12】同実施形態におけるジョブ先読み実行の動作を説明するための模式図である。
【図13】同実施形態におけるステップST11の詳細動作を説明するためのフローチャートである。
【図14】同実施形態におけるステップST11の詳細動作を説明するための模式図である。
【図15】同実施形態におけるステップST11の詳細動作を説明するための模式図である。
【図16】同実施形態における先読み実行したジョブの補正の動作を説明するためのフローチャートである。
【図17】第2の実施形態に係るジョブ実行システムに用いられるジョブネット定義情報の図表現の一例を示す模式図である。
【図18】同実施形態におけるジョブ依存関係情報のデータ構造の一例を示す模式図である。
【図19】同実施形態におけるジョブ先読み実行情報のデータ構造の一例を示す模式図である。
【図20】同実施形態における先読み実行例を従来のジョブ実行例と比較して示すタイムチャートである。
【図21】一般的なジョブネット定義情報の図表現の一例を示す模式図である。
【図22】一般的なジョブネット定義情報のデータ構造の一例を示す模式図である。
【図23】従来のジョブ実行例を示すタイムチャートである。
【発明を実施するための形態】
【0044】
以下、各実施形態について図面を用いて説明するが、その前に各実施形態に共通する概要を述べる。
【0045】
共通する概要としては、ジョブ実行順序を定義するための情報として、図22に示したジョブネット定義情報1に加え、ジョブ先読み実行に関するジョブ依存関係情報及びジョブ先読み実行情報を用いている。図1及び図2にジョブ依存関係情報2及びジョブ先読み実行情報3の例を示す。
【0046】
ジョブ依存関係情報2では、あるジョブの実行が他のジョブの実行結果に依存するか否かが定義される。図2に示す例では、第2ジョブjob2の実行は、先頭ジョブjob0の実行結果に依存する。これは、先頭ジョブjob0と、第2ジョブjob2が同じデータリソースにアクセスしていて、先頭ジョブjob0がそのデータを更新する可能性がある場合などが該当する。第3ジョブjob3の実行も先頭ジョブjob0の実行結果に依存するが、第3ジョブjob3は、先頭ジョブjob0の返却値のみに依存する。なお、上記の例ではjob0の実行結果およびjob3の返却値に依存しているが、必ずしもこれらへの依存に限定されるわけではない。例えば、「先頭ジョブjob0が1度以上実行された後でないと、別の第3ジョブjob3を実行できない」などの例も考えられる。また、ジョブ依存関係情報2は、ジョブ間依存関係グラフと呼んでもよい。
【0047】
ジョブ先読み実行情報3は、各ジョブを先読み実行できるか否かを判断するための情報が記述される。例えば、第4ジョブjob4はロールバック可能であり、第3ジョブjob3は補正可能である。補正可能な第3ジョブjob3は、具体的には引数のデフォルト値で実行し、引数値が変われば補正すればよい。
【0048】
ジョブ依存関係情報2とジョブ先読み実行情報3を用いて先読み実行例のタイムチャートを図3に示す。この例は、図23と同じく、条件分岐で2番目の条件にヒットした場合を示している。
【0049】
ジョブネット定義情報1に従い、最初に先頭ジョブjob0が実行される。この先頭ジョブjob0の実行と並行して、第1ジョブjob1と第3ジョブjob3も実行される。第1ジョブjob1と第3ジョブjob3は、先頭ジョブjob0からの返却値を使うが、返却値の代わりに引数のデフォルト値で実行しておき、返却値を受けた後に補正可能なためである。一方、第2ジョブjob2は、返却値以外にも先頭ジョブjob0の実行結果に依存するため、先頭ジョブjob0が完了するまで開始されない。
【0050】
さらに、条件分岐の選択肢に含まれる第5ジョブjob5も並行して実行される。条件分岐の選択肢の第4〜第6ジョブjob4, job5, job6は、ジョブネットが開始された直後には条件分岐の条件が定まっておらず、どのジョブを実行すべきか未確定である。しかし第5ジョブjob5はそれ以前のジョブに依存しないため、ジョブネット開始直後から投機的に実行される。第4及び第6ジョブjob4, job6は、個別に第1及び第2ジョブjob1, job2に依存しているため、最初の時点では実行されない。先頭ジョブjob0が完了すると第2ジョブjob2が開始され、第2ジョブjob2が完了すると第6ジョブjob6が開始される。
【0051】
先頭ジョブjob0が完了すると、先頭ジョブjob0の実行結果に応じて、先読み実行されていたジョブのロールバック又は補正を実行する。例えば、先頭ジョブjob0の実行結果が“1”の場合、引数のデフォルト値“0”で先読み実行された第1ジョブjob1がロールバックされて引数値“1”で再実行される。第3ジョブjob3は、引数のデフォルト値“1”で先読み実行されたので、この例では補正されない。
【0052】
第1〜第3ジョブjob1, job2, job3の実行が完了した時点で、条件分岐の条件が確定する。この例では2番目の条件がヒットし、第5ジョブjob5が実行されることになる。但し、第5ジョブjob5は先読み実行により完了している。よって、すぐに最終ジョブjob7が実行されることになる。
【0053】
ここで、図23に示した従来のジョブ実行例のタイムチャートと、図3に示した先読み実行例のタイムチャートとを並べて図4(a)及び図4(b)に示す。
【0054】
先読み実行例の場合、ジョブネット全体の実行時間が、先頭ジョブjob0の実行時間と、第1ジョブjob1のロールバック及び再実行の時間と、最終ジョブjob7の実行時間との合計時間(tjob0+tjob1-rollback+tjob1+tjob7)となる。
【0055】
一方、従来の実行例の場合、ジョブネット全体の実行時間が、先頭ジョブjob0の実行時間と、第3、第5及び第7ジョブjob3, job5, job7の実行時間との合計時間(tjob0+tjob3+tjob5+tjob7)となる。
【0056】
従って、先読み実行例の場合、従来の実行例に比べ、両者の差分(tjob3+tjob5−(tjob1-rollback+tjob1))だけジョブネット全体の実行時間を短縮することができる。
【0057】
<第1の実施形態>
図5は第1の実施形態に係るジョブ実行システムの構成例を示す模式図であり、図6乃至図9は同システムで用いられる情報の一例を示す模式図である。このジョブ実行システムは、互いに通信可能なジョブ起動制御装置10及びジョブ実行装置20を備えている。各装置10,20は、装置10,20毎に、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体から対応する装置10,20のコンピュータにインストールされ、対応する装置10,20の機能を実現させるためのプログラムが用いられる。
【0058】
ここで、ジョブ起動制御装置10は、記憶部11及びジョブ起動制御部12を備えている。
【0059】
記憶部11は、各部12〜14から読出/書込可能な記憶装置であり、例えば、ジョブネット定義情報1、ジョブ依存関係情報2、ジョブ先読み実行情報3及びジョブ実行状態テーブル4を記憶している。なお、各情報1〜3は、予めユーザによるジョブネットエディタ等のユーザ端末(図示せず)の操作に応じて、図示しないCPUにより書き込まれている。
【0060】
ジョブネット定義情報1は、例えば図22に示したように、各ジョブを識別するジョブIDが当該各ジョブの実行順序の順に配列して記述されており、各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブIDに関連付けて分岐の条件が更に記述されている。
【0061】
ジョブ依存関係情報2は、ジョブIDと、当該ジョブIDのジョブが依存する依存元のジョブを識別する依存元のジョブIDと、当該依存する内容が当該依存元のジョブの実行過程又は返却値である旨を示す依存内容と、が関連付けて記述されている。
【0062】
ジョブ依存関係情報2の図表現とデータ構造の例を図6及び図7に示す。グラフ表記ではジョブ間の矢印で依存関係を表現し、システム内部では表形式で依存関係を格納する。
【0063】
ジョブ依存関係情報2は、例えば、次の2通りの依存関係(2−1)〜(2−2)を定義している。
【0064】
(2−1)あるジョブの実行は別のジョブの実行過程に依存する。
【0065】
(2−2)あるジョブの実行は別のジョブの返却値のみに依存する。
【0066】
但し、ジョブ依存関係情報2は、これら2通りの依存関係(2−1)〜(2−2)に限定されるわけではない。
【0067】
図7の例では、第1ジョブjob1は先頭ジョブjob0の返却値のみに依存している。例えば先頭ジョブjob0が更新するデータリソースを第1ジョブjob1は参照しないが、先頭ジョブjob0の実行の結果得られる返却値を第1ジョブjob1が使う場合などが該当する。図表記では破線矢印、データ構造の表中では「返却値」として定義されている。第2ジョブjob2は先頭ジョブjob0の実行過程に依存している。例えば、先頭ジョブjob0があるデータリソースを更新し、第2ジョブjob2がそのデータリソースを参照する場合などが該当する。図表記では実線矢印、データ構造の表中では「実行過程」として定義されている。
【0068】
ジョブ先読み実行情報3は、図8に一例を示すように、ジョブIDと、当該ジョブIDのジョブのロールバックの可否及び負荷を示すロールバック情報と、当該ジョブの引数補正の可否及び負荷と引数のデフォルト値とを示す引数補正情報と、が関連付けて表形式で記述されている。なお、ロールバックの負荷と引数補正の負荷はそれぞれ省略してもよい。なお、ジョブ先読み実行情報3は、これらロールバック情報及び引数補正情報に限定されるわけではない。
【0069】
図8の例では、第3ジョブjob3は実行を開始した後で不要になれば、実行結果をロールバックすることができる。それにかかる負荷は“40”である。ロールバックにおいては、負荷の単位をアプリケーションごとに決めてよく、また、値は定数でなく、関数でも構わない。また第3ジョブjob3はデフォルト値を引数として実行しておき、後から実際の引数値が変わったら実行結果を補正できる。それにかかる負荷は“10”である。引数補正の負荷の単位は、アプリケーションごとに決めてよく、また、値は定数でなく、関数でも構わない。
【0070】
ジョブ実行状態テーブル4は、図9に一例を示すように、ジョブIDと、当該ジョブIDのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスIDと、ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、ジョブインスタンスの実行が実行順序通りの本実行か又は本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、実行状態が完了を示す場合のジョブインスタンスの返却値と、が関連付けて表形式で記述されている。
【0071】
但し、ジョブ実行状態テーブル4は、(4−1)実際に実行されたジョブインスタンスのID、(4−2)ジョブの実行状態(実行中、完了、失敗など)、(4−3)ジョブネット定義情報1に基づく本実行か、ジョブ先読み実行かという区別、(4−4)ジョブ実行結果の返却値、といった4通りの情報に限定されるわけではない。
【0072】
図9の例では、先頭ジョブjob0は本実行が完了し、その返却値は“3”である。第1〜第3ジョブjob1, job2, job3は本実行として実行中である。第5ジョブjob5は先読み実行として実行中である。第4、第6及び最終ジョブjob4, job6, job7は、開始されていない。
【0073】
ジョブ起動制御部12は、ジョブ実行スケジューリングの中核を担うものであり、ジョブネット解析部13及びジョブ先読み実行解析部14を備えている。
【0074】
ジョブネット解析部13は、以下の各機能(f13-1)〜(f13-6)をもっている。
【0075】
(f13-1) ジョブ実行状態テーブル4内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致するジョブネット定義情報1内のジョブIDのうち、当該ジョブネット定義情報1内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、この選択したジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定し、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示をジョブ実行装置20に送信する第1の起動指示送信機能。
【0076】
(f13-2) 第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む機能。
【0077】
(f13-3) ジョブ実行装置20からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値をジョブ実行状態テーブル4に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する機能。
【0078】
(f13-4) ジョブ実行状態テーブル4内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致するジョブネット定義情報1内のジョブIDのうち、当該ジョブネット定義情報1内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、当該次の実行順序のジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブIDに一致するジョブ先読み実行情報3内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する機能。
【0079】
(f13-5) この判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値にジョブ先読み実行情報3内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報にジョブ先読み実行情報3内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求をジョブ先読み実行解析部14に送出する機能。
【0080】
(f13-6) 判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブIDと、このジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含む補正要求をジョブ先読み実行解析部14に送出する機能。
【0081】
ジョブ先読み実行解析部14は、以下の各機能(f14-1)〜(f14-6)をもっている。
【0082】
(f14-1) ジョブ実行状態テーブル4内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つジョブ依存関係情報2内で実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する先読み候補選択機能。
【0083】
(f14-2) 選択された先読み実行候補のジョブIDのうち、ジョブ先読み実行情報3内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択し、この選択したジョブIDに一致するジョブネット定義情報1内のジョブIDのうちで最先の実行順序に配列されたジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致するジョブ先読み実行情報3内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示をジョブ実行装置20に送信する第2の起動指示送信機能。
【0084】
(f14-3) 第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む機能。
【0085】
(f14-4) ジョブ実行装置j20からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値をジョブ実行状態テーブル4に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する機能。
【0086】
(f14-5) 送出されたロールバック要求をロールバック指示としてジョブ実行装置20に送信するロールバック指示送信機能。
【0087】
(f14-6) 送出された補正要求を補正指示としてジョブ実行装置20に送信する補正指示送信機能。
【0088】
一方、ジョブ実行装置20は、記憶部21及びジョブ実行部22を備えている。
【0089】
記憶部21は、各ジョブに対応するジョブプログラムが予め記憶されている。各ジョブは、各ジョブに対応するジョブプログラムを実行するCPU(図示せず)の一機能からなり、起動指示を受けたCPUがジョブプログラムを実行することにより、実行される。
【0090】
ジョブ実行部22は、ジョブ起動部23及びジョブ実行結果補正部24を備えている。
【0091】
ジョブ起動部23は、以下の各機能(f23-1)〜(f23-2)をもっている。
【0092】
(f23-1) 第1又は第2の起動指示をジョブ起動制御装置10から受信すると、当該起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動するジョブ起動機能。
【0093】
(f23-2) 起動されたジョブの実行結果をジョブ起動制御装置10に返信する機能。
【0094】
ジョブ実行結果補正部24は、以下の各機能(f24-1)〜(f24-4)をもっている。
【0095】
(f24-1) ロールバック指示をジョブ起動制御装置10から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行するロールバック実行機能。
【0096】
(f24-2) ロールバックによる再度の実行結果をジョブ起動制御装置10に返信する機能。
【0097】
(f24-3) ジョブ起動制御装置10から送信された補正指示を受けると、当該補正指示内のジョブID、ジョブインスタンスID及び引数に基づいて、ジョブの実行結果を補正するジョブ実行結果補正機能。
【0098】
(f24-4) 補正された実行結果をジョブ起動制御装置10に返信する機能。
【0099】
次に、以上のように構成されたジョブ実行システムの動作について図10乃至図16を参照しながら説明する。なお、参照する図面においては、例えば図10に示すように、記憶部11,21の図示を省略している。
【0100】
従来通り、ジョブネット定義情報1に沿ってジョブを実行するには、ジョブ起動制御部12のジョブネット解析部13と、ジョブ実行部22のジョブ起動部23だけがあればよい。先読み実行を行うためには、ジョブ起動制御部12のジョブ先読み実行解析部14と、ジョブ実行部22のジョブ実行結果補正部24が必要となる。
【0101】
図11はジョブネット解析部13とジョブ起動部23によるジョブ起動の動作を説明するための模式図である。
【0102】
ジョブネット解析部13は、ジョブネット定義情報1を参照し、次に起動すべきジョブを選択する(ST1)。具体的にはジョブネット解析部13は、ジョブ実行状態テーブル4内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致するジョブネット定義情報1内のジョブIDのうち、ジョブネット定義情報1内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択する。
【0103】
ジョブネット解析部13は、ジョブ実行状態テーブル4を参照し、そのジョブの実行状態を確認する(ST2)。具体的にはジョブネット解析部13は、ステップST1で選択したジョブIDに一致するジョブ実行状態テーブル4内のジョブIDには実行中を示す実行状態が関連付けられていない旨を確認する。
【0104】
そのジョブがまだ起動されていなければ、ジョブネット解析部13は、ジョブ起動部23にそのジョブの起動指示を送信すると共に(ST3)、起動指示を送信した旨をジョブ実行状態テーブル4に記録する。具体的にはジョブネット解析部13は、ステップST2の確認の後、ステップST1で選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定し、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示をジョブ実行装置20に送信する。また、ジョブネット解析部13は、第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む。
【0105】
一方、ジョブ実行部22は、第1の起動指示をジョブ起動制御装置10から受信すると、第1の起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動する(ST4)。
【0106】
ジョブの実行が完了すると、ジョブは、ジョブID、ジョブインスタンスID及び返却値を含む実行結果をジョブ実行部22に返す(ST5)。
【0107】
ジョブ実行部22は、この実行結果をジョブネット解析部13に送信する(ST6)。
【0108】
ジョブネット解析部13はジョブ実行状態テーブル4に実行結果を記録する(ST7)。具体的には、ジョブネット解析部13は、ジョブ実行装置20からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値をジョブ実行状態テーブル4に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する。
【0109】
図12はジョブ先読み実行解析部14とジョブ実行結果補正部24を追加したジョブ先読み実行の動作を説明するための模式図である。
【0110】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4、ジョブ依存関係情報2、ジョブ先読み実行情報3を参照し、先読み実行できるジョブを抽出する(ST11)。例えば、ジョブ先読み実行解析部14は、ジョブ実行状態テーブル4内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つジョブ依存関係情報2内で実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する。次に、ジョブ先読み実行解析部14は、当該選択した先読み実行候補のジョブIDのうち、ジョブ先読み実行情報4内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択し、この選択したジョブIDに一致するジョブネット定義情報1内のジョブIDのうちで最先の実行順序に配列されたジョブIDを抽出する。
【0111】
なお、具体例によるステップST11の詳細は後述する。
【0112】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4を参照し、先読み実行できるジョブの実行状態を確認する(ST12)。
【0113】
そのジョブがまだ起動されていなければ、ジョブ先読み実行解析部14は、先読み実行するジョブの起動指示をジョブ起動部23に送信すると共に(ST13)、起動指示を送信した旨をジョブ実行状態テーブル4に記録する。記録の際には、正規の起動指示ではなく、先読み実行の起動指示であることを明示する。具体的には、ジョブ先読み実行解析部14は、ステップST12の確認の後、ステップST11で抽出したジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致するジョブ先読み実行情報3内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示をジョブ実行装置20に送信する。また、ジョブ先読み実行解析部14は、第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む。
【0114】
一方、ジョブ実行部22は、第2の起動指示をジョブ起動制御装置10から受信すると、第2の起動指示内のジョブID、ジョブインスタンスID、及び引数のデフォルト値に基づいて、ジョブを起動する(ST14)。
【0115】
ジョブの実行が完了すると、ジョブは、ジョブID、ジョブインスタンスID及び返却値を含む実行結果をジョブ実行部22に返す(ST15)。
【0116】
ジョブ実行部22は、この実行結果をジョブ先読み実行解析部14に送信する(ST16)。
【0117】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4に実行結果を記録する(ST17)。具体的にはジョブ先読み実行解析部14は、ジョブ実行装置20からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値をジョブ実行状態テーブル4に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する。なお、この実行結果の記録は、正規の実行結果ではなく、先読み実行の実行結果であることがステップST13の後に書き込まれた実行種別により明示されている。
【0118】
次に、前述したステップST11の詳細を図13乃至図15に沿って説明する。
【0119】
始めに、図13及び図14に示すように、ジョブ実行状態テーブル4を参照して、実行中または完了したジョブを抽出する(ST11−1)。この例では、先頭ジョブjob0が実行中である。
【0120】
次に、ジョブ依存関係情報2を参照し、先読み実行可能なジョブの候補を抽出する(ST11−2)。この例では第1、第3及び第5ジョブjob1, job3, job5が先読み実行の候補となる。第2、第4、第6及び最終ジョブjob2, job4, job6, job7はまだ完了していない他ジョブjob1, job2, job5の実行過程に依存するため、先読み実行の候補とはならない。
【0121】
最後に、図15に示すように、ジョブ先読み実行情報3を参照し、先読み実行可否を決定し、先読み実行可のジョブを抽出する(ST11−3)。この例では、第1、第3及び第5ジョブjob1, job3, job5はすべて先読み実行可となる。例えば第3ジョブjob3はロールバックも補正も「可」なので、先読み実行できる。第1ジョブjob1はロールバックが「不可」、補正は「可」だが、ジョブネット定義情報1から第1ジョブjob1は並列実行の中にあり実行自体が取り消されることはないため、先読み実行可となる。
【0122】
以上がステップST11の詳細な説明である。
【0123】
次に、図16は先読み実行したジョブの補正の動作を説明するための模式図である。補足すると、図11と図12で説明したジョブネット解析部13とジョブ先読み実行解析部14によるジョブ起動指示は、通常は独立して作用する。しかしジョブネット解析部13がジョブの起動指示を送信しようとしたときに、既にジョブ先読み実行解析部14から先読み実行の起動指示が送信されていた場合、ジョブ実行の補正が必要となる。その際のジョブネット解析部13とジョブ先読み実行解析部14の間のインタラクションについて図16を用いて説明する。
【0124】
ジョブネット解析部13は、ステップST1と同様に、ジョブネット定義情報1を参照し、次に起動すべきジョブを選択する(ST21)。
【0125】
ジョブネット解析部13は、ステップST2と同様に、ジョブ実行状態テーブル4を参照し、そのジョブの実行状態を確認する(ST22)。
【0126】
ステップST22の結果、そのジョブが先読み実行されていた場合、ジョブネット解析部13は、ジョブ先読み実行解析部14にそのジョブの補正要求を出し(ST23)、そのジョブが本実行となった旨をジョブ実行状態テーブル4に記録する。
【0127】
具体的にはステップST22の結果、ステップST21で選択したジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、ジョブネット解析部13は、当該選択したジョブIDに一致するジョブ先読み実行情報3内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する。ジョブネット解析部13は、この判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブIDと、このジョブIDに一致するジョブ実行状態テーブル内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含む補正要求をジョブ先読み実行解析部14に送出する。また、ジョブネット解析部13は、補正要求内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該補正要求内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む。
【0128】
ジョブ先読み実行解析部14は、ステップST23で受けた補正要求を補正指示としてジョブ実行結果補正部24に送信する(ST24)。
【0129】
ジョブ実行結果補正部24は、送信された補正指示を受けると、当該補正指示内のジョブID、ジョブインスタンスID及び引数に基づいて、ジョブの実行結果を補正する(ST25)。
【0130】
ジョブの実行結果の補正が完了すると、ジョブは、補正された実行結果をジョブ実行結果補正部24に返す(ST26)。
【0131】
ジョブ実行結果補正部24は、実行結果をジョブ先読み実行解析部14に送信する(ST27)。
【0132】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4に実行結果を記録する(ST28)。
【0133】
前述したステップST25におけるジョブ実行の補正では、引数のデフォルト値で先読み実行されていたジョブに対して、その引数値を実際に確定した値に置き換える。引数値をデフォルト値から実際に確定した値に置き換える方法は、個々のジョブの実装に依存する。例えば、引数のデフォルト値をそのままDBに格納しているだけのジョブであれば、DBの値を実際に確定した値に置き換えるだけで済む場合もある。引数のデフォルト値に基づいて計算処理をしているジョブであれば、確定した引数の値に基づいて再計算が必要になる場合もある。
【0134】
なお、補正指示に代えて、ロールバック指示を送信する場合は、前述したステップST23乃至ST28は、以下のステップST23’〜ST28’のように実行される。
【0135】
ステップST22の結果、そのジョブが先読み実行されていた場合、ジョブネット解析部13は、ジョブ先読み実行解析部14にそのジョブのロールバック要求を送出し(ST23’)、そのジョブが本実行となった旨をジョブ実行状態テーブル4に記録する。具体的にはジョブネット解析部13は、前述した判定を実行し、この判定の結果、当該判定に用いた引数のデフォルト値にジョブ先読み実行情報3内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報にジョブ先読み実行情報3内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求をジョブ先読み実行解析部14に送出する(ST23’)。また、ジョブネット解析部13は、ロールバック要求内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該ロールバック要求内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む。
【0136】
ジョブ先読み実行解析部14は、ステップST23’で受けたロールバック要求をロールバック指示としてジョブ実行結果補正部24に送信する(ST24’)。
【0137】
ジョブ実行結果補正部24は、送信されたロールバック指示を受けると、当該ロールバック指示に基づいて、ジョブのロールバックを実行する(ST25’)。
【0138】
ジョブのロールバックによる再実行が完了すると、ジョブは、ジョブID、ジョブインスタンスID及び返却値を含む実行結果をジョブ実行結果補正部24に返す(ST26’)。
【0139】
ジョブ実行結果補正部24は、この実行結果をジョブ先読み実行解析部14に送信する(ST27’)。
【0140】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4に実行結果を記録する(ST28’)。
【0141】
上述したように本実施形態によれば、ジョブ先読み実行解析部14が、ジョブ実行状態テーブル4内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つジョブ依存関係情報2内で実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補として選択し、先読み実行候補のジョブIDのうち、ジョブ先読み実行情報3内でロールバックの可又は引数補正の可に関連付けられたジョブIDを選択し、この選択したジョブIDのうちで最先のジョブIDと、ジョブインスタンスIDと、引数のデフォルト値と、を含む第2の起動指示をジョブ実行装置20に送信する構成により、ジョブネット実行時にジョブ間の依存関係を考慮してジョブを先読み実行し、余剰リソースを有効活用してジョブネット全体(実行順序に制約のあるジョブの集まり)の実行にかかる時間を短縮することができる。
【0142】
<第2の実施形態>
次に、第2の実施形態に係るジョブ実行システムについて説明する。
【0143】
第2の実施形態は、第1の実施形態の具体例であり、「多数のデータを正常/異常に仕分けして、正常なデータと異常なデータを別々に処理する」という業務を用いて、ジョブ先読み実行によりジョブネット全体の処理時間が短くなる例を示している。
【0144】
図17乃至図19にこの例のジョブネット定義情報1、ジョブ依存関係情報2、ジョブ先読み実行情報3を示す。この例では、ジョブ依存関係情報2とジョブ先読み実行情報3をシステム開発時に開発者が設定し、ジョブネット定義情報1はシステム運用時にシステム運用担当部門が随時、作成/更新するという運用を想定している。
【0145】
ジョブネット定義情報1には、図17に示すように、「多数のデータを正常/異常に仕分けして、正常なデータと異常なデータを別々に処理」する一連のジョブの定義が記述されている。最初に先頭ジョブjob0により、処理対象の全データを正常データと異常データに仕分ける。この先頭ジョブjob0の実行結果として、正常データ一覧と異常データ一覧が出力される。
【0146】
次に、正常データ一覧内の正常データ数と異常データ一覧内の異常データ数とを合わせた全データに占める異常データ数の割合に応じて条件分岐される。異常データ数が全データの5%以内であれば、第1及び第2ジョブjob1, job2からなる通常の処理に進む。異常データの割合が5%を超えていたら、第3ジョブjob3の例外処理に進む。
【0147】
通常の処理では、第1ジョブjob1による正常データの処理と、第2ジョブjob2による異常データの処理とを並行して実行する。
【0148】
ジョブ依存関係情報2には、図18に示すように、第1〜第3ジョブjob1, job2, job3が、先頭ジョブjob0の返却値に依存することが記述されている。
【0149】
ジョブ先読み実行情報3には、図19に示すように、第2〜第3ジョブjob2, job3がロールバックと引数補正の両方とも不可であることが記述されている。すなわち、第2〜第3ジョブjob2, job3は、先読み実行できない処理である。
【0150】
ジョブの実行例を図20に示す。この例は異常データの割合が5%以下で、第1及び第2ジョブjob1, job2を通常通りに処理する場合である。
【0151】
左側の図20(a)はジョブネット定義情報1に従った従来のジョブ実行例を示し、右側の図20(b)はジョブ依存関係情報2を考慮した先読み実行例を示している。
【0152】
従来のジョブ実行例では、最初に先頭ジョブjob0で正常/異常データを仕分ける。次に第1ジョブjob1による正常データの処理と、第2ジョブjob2による異常データの処理とを並行して実行する。この場合、先頭ジョブjob0の実行と第1ジョブjob1の実行が「逐次並行」でなされ、これがジョブネット全体の実行時間(tjob0+tjob1)となる。
【0153】
右側の先読み実行例では、先頭ジョブjob0の仕分け処理と並行して、第1ジョブjob1による正常データの処理を開始する。引数のデフォルト値として全データを受け取り、全データを対象に第1ジョブjob1を実行する。その後、先頭ジョブjob0の仕分け処理が完了した時点で、第1ジョブjob1の補正処理と第2ジョブjob2の異常データ処理を実行する。このため、先読み実行例におけるジョブネット全体の実行時間は、先頭ジョブjob0の実行時間と、第2ジョブjob2の実行時間との合計時間(tjob0+tjob2)となる。
【0154】
ここで、先読み実行例では異常データの割合が少なく、第1ジョブjob1の補正処理や第2ジョブjob2の異常データ処理が短い。そのため、先読み実行例の実行時間は、従来の実行例の実行時間に比べ、両者の差分(tjob1−tjob2)だけジョブネット全体の実行時間を短縮することができる。
【0155】
上述したように本実施形態によれば、第1の実施形態のジョブを具体化した構成においても、第1の実施形態と同様の効果を得ることができる。
【0156】
以上説明した各実施形態によれば、ジョブネット定義情報1に加え、ジョブ依存関係情報2及びジョブ先読み実行情報3を備えた構成により、ジョブを先読み実行できるか否かを判断でき、ジョブネット全体の実行にかかる時間を短縮することができる。
【0157】
なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0158】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0159】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0160】
さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0161】
また、記憶媒体は1つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0162】
なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0163】
また、各実施形態におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0164】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0165】
1…ジョブネット定義情報、2…ジョブ依存関係情報、3…ジョブ先読み実行情報、4…ジョブネット定義情報、10…ジョブ起動制御装置、11,21…記憶部、12…ジョブ起動制御部、13…ジョブネット解析部、14…ジョブ先読み実行解析部、20…ジョブ実行装置、22…ジョブ実行部、23…ジョブ起動部、24…ジョブ実行結果補正部。
【技術分野】
【0001】
本発明の実施形態は、ジョブ実行システム及びプログラムに関する。
【背景技術】
【0002】
一般に、コンピュータが処理する仕事の単位をジョブと呼ぶ。例えばデータを収集する処理、収集したデータを分析してレポートを作成する処理、そのレポートを印刷する処理などがジョブの単位である。この例では、3種類のジョブの実行順序に依存関係があるため、依存関係に従ってジョブの実行順序を制御する必要がある。
【0003】
複数のジョブに依存関係がなければ、処理効率を上げるために各ジョブを並行して実行することもある。例えば、複数種類のデータを独立して収集する場合には、データリソースごとにデータ収集ジョブを並行して実行することがある。
【0004】
複数のコンピューティングリソース(CPU、データなど)と複数のジョブがある場合、使用するコンピューティングリソースとジョブの実行順序とを適切にスケジューリングする必要が生じる。通常は、限られたコンピューティングリソースを効率的に使用する制約の下で、ジョブの実行順序がスケジューリングされる。
【0005】
一般に、複数のジョブの実行順序をコンピュータに指示する技術としてジョブネットが用いられている。ジョブネットでは、依存関係のないジョブの「逐次実行」や、「並列実行」や、「条件分岐」などを定義できる。また、個々のジョブをロールバック可能に実装しておき、あるジョブの実行に失敗したら、やり直すなどの制御も実行されている。
【0006】
図21及び図22はジョブネット定義情報の図表現とデータ構造の例を示す模式図であり、図23は条件分岐で2番目の条件にヒットした場合のジョブの実行例を示す模式図である。
【0007】
始めに、図22に示すジョブネット定義情報1に従い、先頭ジョブjob0が実行される。先頭ジョブjob0の実行が完了すると、第1〜第3ジョブjob1, job2, job3が並行して実行される。第1〜第3ジョブjob1, job2, job3の実行が完了すると、次の条件分岐に進む。
【0008】
条件分岐では、条件にヒットしたジョブが選択的に実行される。図22に示すジョブネット定義情報1では、第2ジョブjob2の返却値が1の場合に第4ジョブjob4が実行され、第2ジョブjob2の返却値が2の場合に第5ジョブjob5が実行され、他の場合に第6ジョブjob6が実行される。
【0009】
この例では、第2ジョブjob2の返却値が2となり、第5ジョブjob5が実行されるとする。第5ジョブjob5の実行が完了すると、最終ジョブjob7が実行される。最終ジョブjob7の実行が完了すると、ジョブネット全体の実行が完了する。
【0010】
なお、第1〜第3ジョブjob1, job2, job3は、同一コンピュータリソース上で実行される場合に限らず、複数のコンピュータリソース上で並列に実行される場合もある。
【0011】
また、上記の例では「逐次実行」、「並列実行」、「条件分岐」といった3種類の実行順序を表現するジョブネットを使っているが、必ずしもこれらに限定されるわけではない。例えば、「逐次実行」と「並列実行」の2種類だけであっても良いし、または、「逐次実行」/「並列実行」/「条件分岐」の他に、繰り返しループがあっても良い。
【0012】
このような並列/分散処理としては、ジョブネットなどで明示的に並列実行を指示する技術に加え、例えば、ロードバランサを用いた負荷分散技術や、MapReduceによる分散処理技術などを用いてもよい。
【0013】
一方、CPUの内部でも、命令列の並列処理が実行されている。例えば、投機実行により、先行命令が完了する前に、先行命令の結果を予測しながら後続命令を仮実行し、予測が異なっていたら後続命令をやり直すといったスケジューリングがなされている。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】特開平9−218861号公報
【発明の概要】
【発明が解決しようとする課題】
【0015】
以上説明したように、通常は、限られたコンピューティングリソースを効率的に使用する制約の下で、ジョブの実行順序がスケジューリングされている。
【0016】
ここで、本発明者の検討によれば、仮想化技術やクラウドコンピューティング技術の普及により、余剰リソースを柔軟に使用できる環境になり得ると共に、余剰リソースを十分に用いて処理時間を短縮させるジョブ実行スケジューリングが要請される可能性がある。
【0017】
このようなジョブ実行スケジューリングにおいては、例えば、CPU/マシン語レベルの投機実行のように、ジョブネット実行時にも先読みしてジョブを実行し、ジョブネット全体(実行順序に制約のあるジョブの集まり)の処理にかかる時間を短縮できるとよい。
【0018】
しかしながら、本発明者の検討によれば、ジョブネットの下でジョブを先読み実行するには、次の不都合がある。すなわち、前述したジョブネット定義情報では、ジョブ間の依存関係の有無を表現し切れない。このため、ジョブネット定義情報に基づくジョブスケジューリングでは、ジョブを先読み実行できるか否かを判断できない不都合がある。
【0019】
本明細書に開示した実施形態は、ジョブを先読み実行できるか否かを判断でき、ジョブネット全体の実行にかかる時間を短縮し得るジョブ実行システム及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0020】
実施形態のジョブ実行システムは、互いに通信可能なジョブ起動制御装置及びジョブ実行装置を備えている。
【0021】
前記ジョブ起動制御装置の定義情報記憶手段は、前記各ジョブを識別するジョブIDが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブIDに関連付けて前記分岐の条件が更に記述されているジョブネット定義情報を記憶する。
【0022】
前記ジョブ起動制御装置の依存内容記憶手段は、前記ジョブIDと、当該ジョブIDのジョブが依存する依存元のジョブを識別する依存元のジョブIDと、前記依存する内容が前記依存元のジョブの実行過程又は返却値である旨を示す依存内容と、を関連付けて記憶する。
【0023】
前記ジョブ起動制御装置のジョブ補正情報記憶手段は、前記ジョブIDと、当該ジョブIDのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて記憶する。
【0024】
前記ジョブ起動制御装置の実行状態記憶手段は、前記ジョブIDと、当該ジョブIDのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスIDと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて記憶する。
【0025】
前記ジョブ起動制御装置の第1の起動指示送信手段は、前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出する。
【0026】
前記ジョブ起動制御装置の第1の起動指示送信手段は、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択する。
【0027】
前記ジョブ起動制御装置の第1の起動指示送信手段は、この選択したジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定する。
【0028】
前記ジョブ起動制御装置の第1の起動指示送信手段は、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示を前記ジョブ実行装置に送信する。
【0029】
前記ジョブ起動制御装置は、前記第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む。
【0030】
前記ジョブ起動制御装置の先読み候補選択手段は、前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する。
【0031】
前記ジョブ起動制御装置の第2の起動指示送信手段は、前記選択された先読み実行候補のジョブIDのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択する。
【0032】
前記ジョブ起動制御装置の第2の起動指示送信手段は、この選択したジョブIDに一致する前記定義情報記憶手段内のジョブIDのうちで最先の実行順序に配列されたジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示を前記ジョブ実行装置に送信する。
【0033】
前記ジョブ起動制御装置は、前記第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む。
【0034】
前記ジョブ起動制御装置は、前記ジョブ実行装置からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する。
【0035】
前記ジョブ起動制御装置は、前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出する。
【0036】
前記ジョブ起動制御装置は、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、当該次の実行順序のジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する。
【0037】
前記ジョブ起動制御装置は、この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致する前記実行状態記憶手段内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する。
【0038】
前記ジョブ起動制御装置のロールバック指示送信手段は、前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信する。
【0039】
前記ジョブ実行装置のジョブ起動手段は、前記第1又は第2の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動する。
【0040】
前記ジョブ実行装置は、前記起動されたジョブの実行結果を前記ジョブ起動制御装置に返信する。
【0041】
前記ジョブ実行装置のロールバック実行手段は、前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行する。
【0042】
前記ジョブ実行装置は、前記ロールバックによる再度の実行結果をジョブ起動制御装置に返信する。
【図面の簡単な説明】
【0043】
【図1】各実施形態に共通の概要説明のためのジョブ依存関係情報の一例を示す模式図である。
【図2】各実施形態に共通の概要説明のためのジョブ先読み実行情報の一例を示す模式図である。
【図3】各実施形態に共通の概要説明のための先読み実行例を示すタイムチャートである。
【図4】各実施形態に共通の概要説明のための先読み実行例を従来のジョブ実行例と比較して示すタイムチャートである。
【図5】第1の実施形態に係るジョブ実行システムの構成例を示す模式図である。
【図6】同実施形態におけるジョブ依存関係情報の図表現の一例を示す模式図である。
【図7】同実施形態におけるジョブ依存関係情報のデータ構造の一例を示す模式図である。
【図8】同実施形態におけるジョブ先読み実行情報のデータ構造の一例を示す模式図である。
【図9】同実施形態におけるジョブ実行状態テーブルのデータ構造の一例を示す模式図である。
【図10】同実施形態における動作を説明するための模式図である。
【図11】同実施形態におけるジョブネット解析部とジョブ起動部によるジョブ起動の動作を説明するための模式図である。
【図12】同実施形態におけるジョブ先読み実行の動作を説明するための模式図である。
【図13】同実施形態におけるステップST11の詳細動作を説明するためのフローチャートである。
【図14】同実施形態におけるステップST11の詳細動作を説明するための模式図である。
【図15】同実施形態におけるステップST11の詳細動作を説明するための模式図である。
【図16】同実施形態における先読み実行したジョブの補正の動作を説明するためのフローチャートである。
【図17】第2の実施形態に係るジョブ実行システムに用いられるジョブネット定義情報の図表現の一例を示す模式図である。
【図18】同実施形態におけるジョブ依存関係情報のデータ構造の一例を示す模式図である。
【図19】同実施形態におけるジョブ先読み実行情報のデータ構造の一例を示す模式図である。
【図20】同実施形態における先読み実行例を従来のジョブ実行例と比較して示すタイムチャートである。
【図21】一般的なジョブネット定義情報の図表現の一例を示す模式図である。
【図22】一般的なジョブネット定義情報のデータ構造の一例を示す模式図である。
【図23】従来のジョブ実行例を示すタイムチャートである。
【発明を実施するための形態】
【0044】
以下、各実施形態について図面を用いて説明するが、その前に各実施形態に共通する概要を述べる。
【0045】
共通する概要としては、ジョブ実行順序を定義するための情報として、図22に示したジョブネット定義情報1に加え、ジョブ先読み実行に関するジョブ依存関係情報及びジョブ先読み実行情報を用いている。図1及び図2にジョブ依存関係情報2及びジョブ先読み実行情報3の例を示す。
【0046】
ジョブ依存関係情報2では、あるジョブの実行が他のジョブの実行結果に依存するか否かが定義される。図2に示す例では、第2ジョブjob2の実行は、先頭ジョブjob0の実行結果に依存する。これは、先頭ジョブjob0と、第2ジョブjob2が同じデータリソースにアクセスしていて、先頭ジョブjob0がそのデータを更新する可能性がある場合などが該当する。第3ジョブjob3の実行も先頭ジョブjob0の実行結果に依存するが、第3ジョブjob3は、先頭ジョブjob0の返却値のみに依存する。なお、上記の例ではjob0の実行結果およびjob3の返却値に依存しているが、必ずしもこれらへの依存に限定されるわけではない。例えば、「先頭ジョブjob0が1度以上実行された後でないと、別の第3ジョブjob3を実行できない」などの例も考えられる。また、ジョブ依存関係情報2は、ジョブ間依存関係グラフと呼んでもよい。
【0047】
ジョブ先読み実行情報3は、各ジョブを先読み実行できるか否かを判断するための情報が記述される。例えば、第4ジョブjob4はロールバック可能であり、第3ジョブjob3は補正可能である。補正可能な第3ジョブjob3は、具体的には引数のデフォルト値で実行し、引数値が変われば補正すればよい。
【0048】
ジョブ依存関係情報2とジョブ先読み実行情報3を用いて先読み実行例のタイムチャートを図3に示す。この例は、図23と同じく、条件分岐で2番目の条件にヒットした場合を示している。
【0049】
ジョブネット定義情報1に従い、最初に先頭ジョブjob0が実行される。この先頭ジョブjob0の実行と並行して、第1ジョブjob1と第3ジョブjob3も実行される。第1ジョブjob1と第3ジョブjob3は、先頭ジョブjob0からの返却値を使うが、返却値の代わりに引数のデフォルト値で実行しておき、返却値を受けた後に補正可能なためである。一方、第2ジョブjob2は、返却値以外にも先頭ジョブjob0の実行結果に依存するため、先頭ジョブjob0が完了するまで開始されない。
【0050】
さらに、条件分岐の選択肢に含まれる第5ジョブjob5も並行して実行される。条件分岐の選択肢の第4〜第6ジョブjob4, job5, job6は、ジョブネットが開始された直後には条件分岐の条件が定まっておらず、どのジョブを実行すべきか未確定である。しかし第5ジョブjob5はそれ以前のジョブに依存しないため、ジョブネット開始直後から投機的に実行される。第4及び第6ジョブjob4, job6は、個別に第1及び第2ジョブjob1, job2に依存しているため、最初の時点では実行されない。先頭ジョブjob0が完了すると第2ジョブjob2が開始され、第2ジョブjob2が完了すると第6ジョブjob6が開始される。
【0051】
先頭ジョブjob0が完了すると、先頭ジョブjob0の実行結果に応じて、先読み実行されていたジョブのロールバック又は補正を実行する。例えば、先頭ジョブjob0の実行結果が“1”の場合、引数のデフォルト値“0”で先読み実行された第1ジョブjob1がロールバックされて引数値“1”で再実行される。第3ジョブjob3は、引数のデフォルト値“1”で先読み実行されたので、この例では補正されない。
【0052】
第1〜第3ジョブjob1, job2, job3の実行が完了した時点で、条件分岐の条件が確定する。この例では2番目の条件がヒットし、第5ジョブjob5が実行されることになる。但し、第5ジョブjob5は先読み実行により完了している。よって、すぐに最終ジョブjob7が実行されることになる。
【0053】
ここで、図23に示した従来のジョブ実行例のタイムチャートと、図3に示した先読み実行例のタイムチャートとを並べて図4(a)及び図4(b)に示す。
【0054】
先読み実行例の場合、ジョブネット全体の実行時間が、先頭ジョブjob0の実行時間と、第1ジョブjob1のロールバック及び再実行の時間と、最終ジョブjob7の実行時間との合計時間(tjob0+tjob1-rollback+tjob1+tjob7)となる。
【0055】
一方、従来の実行例の場合、ジョブネット全体の実行時間が、先頭ジョブjob0の実行時間と、第3、第5及び第7ジョブjob3, job5, job7の実行時間との合計時間(tjob0+tjob3+tjob5+tjob7)となる。
【0056】
従って、先読み実行例の場合、従来の実行例に比べ、両者の差分(tjob3+tjob5−(tjob1-rollback+tjob1))だけジョブネット全体の実行時間を短縮することができる。
【0057】
<第1の実施形態>
図5は第1の実施形態に係るジョブ実行システムの構成例を示す模式図であり、図6乃至図9は同システムで用いられる情報の一例を示す模式図である。このジョブ実行システムは、互いに通信可能なジョブ起動制御装置10及びジョブ実行装置20を備えている。各装置10,20は、装置10,20毎に、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体から対応する装置10,20のコンピュータにインストールされ、対応する装置10,20の機能を実現させるためのプログラムが用いられる。
【0058】
ここで、ジョブ起動制御装置10は、記憶部11及びジョブ起動制御部12を備えている。
【0059】
記憶部11は、各部12〜14から読出/書込可能な記憶装置であり、例えば、ジョブネット定義情報1、ジョブ依存関係情報2、ジョブ先読み実行情報3及びジョブ実行状態テーブル4を記憶している。なお、各情報1〜3は、予めユーザによるジョブネットエディタ等のユーザ端末(図示せず)の操作に応じて、図示しないCPUにより書き込まれている。
【0060】
ジョブネット定義情報1は、例えば図22に示したように、各ジョブを識別するジョブIDが当該各ジョブの実行順序の順に配列して記述されており、各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブIDに関連付けて分岐の条件が更に記述されている。
【0061】
ジョブ依存関係情報2は、ジョブIDと、当該ジョブIDのジョブが依存する依存元のジョブを識別する依存元のジョブIDと、当該依存する内容が当該依存元のジョブの実行過程又は返却値である旨を示す依存内容と、が関連付けて記述されている。
【0062】
ジョブ依存関係情報2の図表現とデータ構造の例を図6及び図7に示す。グラフ表記ではジョブ間の矢印で依存関係を表現し、システム内部では表形式で依存関係を格納する。
【0063】
ジョブ依存関係情報2は、例えば、次の2通りの依存関係(2−1)〜(2−2)を定義している。
【0064】
(2−1)あるジョブの実行は別のジョブの実行過程に依存する。
【0065】
(2−2)あるジョブの実行は別のジョブの返却値のみに依存する。
【0066】
但し、ジョブ依存関係情報2は、これら2通りの依存関係(2−1)〜(2−2)に限定されるわけではない。
【0067】
図7の例では、第1ジョブjob1は先頭ジョブjob0の返却値のみに依存している。例えば先頭ジョブjob0が更新するデータリソースを第1ジョブjob1は参照しないが、先頭ジョブjob0の実行の結果得られる返却値を第1ジョブjob1が使う場合などが該当する。図表記では破線矢印、データ構造の表中では「返却値」として定義されている。第2ジョブjob2は先頭ジョブjob0の実行過程に依存している。例えば、先頭ジョブjob0があるデータリソースを更新し、第2ジョブjob2がそのデータリソースを参照する場合などが該当する。図表記では実線矢印、データ構造の表中では「実行過程」として定義されている。
【0068】
ジョブ先読み実行情報3は、図8に一例を示すように、ジョブIDと、当該ジョブIDのジョブのロールバックの可否及び負荷を示すロールバック情報と、当該ジョブの引数補正の可否及び負荷と引数のデフォルト値とを示す引数補正情報と、が関連付けて表形式で記述されている。なお、ロールバックの負荷と引数補正の負荷はそれぞれ省略してもよい。なお、ジョブ先読み実行情報3は、これらロールバック情報及び引数補正情報に限定されるわけではない。
【0069】
図8の例では、第3ジョブjob3は実行を開始した後で不要になれば、実行結果をロールバックすることができる。それにかかる負荷は“40”である。ロールバックにおいては、負荷の単位をアプリケーションごとに決めてよく、また、値は定数でなく、関数でも構わない。また第3ジョブjob3はデフォルト値を引数として実行しておき、後から実際の引数値が変わったら実行結果を補正できる。それにかかる負荷は“10”である。引数補正の負荷の単位は、アプリケーションごとに決めてよく、また、値は定数でなく、関数でも構わない。
【0070】
ジョブ実行状態テーブル4は、図9に一例を示すように、ジョブIDと、当該ジョブIDのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスIDと、ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、ジョブインスタンスの実行が実行順序通りの本実行か又は本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、実行状態が完了を示す場合のジョブインスタンスの返却値と、が関連付けて表形式で記述されている。
【0071】
但し、ジョブ実行状態テーブル4は、(4−1)実際に実行されたジョブインスタンスのID、(4−2)ジョブの実行状態(実行中、完了、失敗など)、(4−3)ジョブネット定義情報1に基づく本実行か、ジョブ先読み実行かという区別、(4−4)ジョブ実行結果の返却値、といった4通りの情報に限定されるわけではない。
【0072】
図9の例では、先頭ジョブjob0は本実行が完了し、その返却値は“3”である。第1〜第3ジョブjob1, job2, job3は本実行として実行中である。第5ジョブjob5は先読み実行として実行中である。第4、第6及び最終ジョブjob4, job6, job7は、開始されていない。
【0073】
ジョブ起動制御部12は、ジョブ実行スケジューリングの中核を担うものであり、ジョブネット解析部13及びジョブ先読み実行解析部14を備えている。
【0074】
ジョブネット解析部13は、以下の各機能(f13-1)〜(f13-6)をもっている。
【0075】
(f13-1) ジョブ実行状態テーブル4内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致するジョブネット定義情報1内のジョブIDのうち、当該ジョブネット定義情報1内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、この選択したジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定し、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示をジョブ実行装置20に送信する第1の起動指示送信機能。
【0076】
(f13-2) 第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む機能。
【0077】
(f13-3) ジョブ実行装置20からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値をジョブ実行状態テーブル4に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する機能。
【0078】
(f13-4) ジョブ実行状態テーブル4内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致するジョブネット定義情報1内のジョブIDのうち、当該ジョブネット定義情報1内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、当該次の実行順序のジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブIDに一致するジョブ先読み実行情報3内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する機能。
【0079】
(f13-5) この判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値にジョブ先読み実行情報3内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報にジョブ先読み実行情報3内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求をジョブ先読み実行解析部14に送出する機能。
【0080】
(f13-6) 判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブIDと、このジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含む補正要求をジョブ先読み実行解析部14に送出する機能。
【0081】
ジョブ先読み実行解析部14は、以下の各機能(f14-1)〜(f14-6)をもっている。
【0082】
(f14-1) ジョブ実行状態テーブル4内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つジョブ依存関係情報2内で実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する先読み候補選択機能。
【0083】
(f14-2) 選択された先読み実行候補のジョブIDのうち、ジョブ先読み実行情報3内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択し、この選択したジョブIDに一致するジョブネット定義情報1内のジョブIDのうちで最先の実行順序に配列されたジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致するジョブ先読み実行情報3内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示をジョブ実行装置20に送信する第2の起動指示送信機能。
【0084】
(f14-3) 第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む機能。
【0085】
(f14-4) ジョブ実行装置j20からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値をジョブ実行状態テーブル4に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する機能。
【0086】
(f14-5) 送出されたロールバック要求をロールバック指示としてジョブ実行装置20に送信するロールバック指示送信機能。
【0087】
(f14-6) 送出された補正要求を補正指示としてジョブ実行装置20に送信する補正指示送信機能。
【0088】
一方、ジョブ実行装置20は、記憶部21及びジョブ実行部22を備えている。
【0089】
記憶部21は、各ジョブに対応するジョブプログラムが予め記憶されている。各ジョブは、各ジョブに対応するジョブプログラムを実行するCPU(図示せず)の一機能からなり、起動指示を受けたCPUがジョブプログラムを実行することにより、実行される。
【0090】
ジョブ実行部22は、ジョブ起動部23及びジョブ実行結果補正部24を備えている。
【0091】
ジョブ起動部23は、以下の各機能(f23-1)〜(f23-2)をもっている。
【0092】
(f23-1) 第1又は第2の起動指示をジョブ起動制御装置10から受信すると、当該起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動するジョブ起動機能。
【0093】
(f23-2) 起動されたジョブの実行結果をジョブ起動制御装置10に返信する機能。
【0094】
ジョブ実行結果補正部24は、以下の各機能(f24-1)〜(f24-4)をもっている。
【0095】
(f24-1) ロールバック指示をジョブ起動制御装置10から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行するロールバック実行機能。
【0096】
(f24-2) ロールバックによる再度の実行結果をジョブ起動制御装置10に返信する機能。
【0097】
(f24-3) ジョブ起動制御装置10から送信された補正指示を受けると、当該補正指示内のジョブID、ジョブインスタンスID及び引数に基づいて、ジョブの実行結果を補正するジョブ実行結果補正機能。
【0098】
(f24-4) 補正された実行結果をジョブ起動制御装置10に返信する機能。
【0099】
次に、以上のように構成されたジョブ実行システムの動作について図10乃至図16を参照しながら説明する。なお、参照する図面においては、例えば図10に示すように、記憶部11,21の図示を省略している。
【0100】
従来通り、ジョブネット定義情報1に沿ってジョブを実行するには、ジョブ起動制御部12のジョブネット解析部13と、ジョブ実行部22のジョブ起動部23だけがあればよい。先読み実行を行うためには、ジョブ起動制御部12のジョブ先読み実行解析部14と、ジョブ実行部22のジョブ実行結果補正部24が必要となる。
【0101】
図11はジョブネット解析部13とジョブ起動部23によるジョブ起動の動作を説明するための模式図である。
【0102】
ジョブネット解析部13は、ジョブネット定義情報1を参照し、次に起動すべきジョブを選択する(ST1)。具体的にはジョブネット解析部13は、ジョブ実行状態テーブル4内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致するジョブネット定義情報1内のジョブIDのうち、ジョブネット定義情報1内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択する。
【0103】
ジョブネット解析部13は、ジョブ実行状態テーブル4を参照し、そのジョブの実行状態を確認する(ST2)。具体的にはジョブネット解析部13は、ステップST1で選択したジョブIDに一致するジョブ実行状態テーブル4内のジョブIDには実行中を示す実行状態が関連付けられていない旨を確認する。
【0104】
そのジョブがまだ起動されていなければ、ジョブネット解析部13は、ジョブ起動部23にそのジョブの起動指示を送信すると共に(ST3)、起動指示を送信した旨をジョブ実行状態テーブル4に記録する。具体的にはジョブネット解析部13は、ステップST2の確認の後、ステップST1で選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定し、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示をジョブ実行装置20に送信する。また、ジョブネット解析部13は、第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む。
【0105】
一方、ジョブ実行部22は、第1の起動指示をジョブ起動制御装置10から受信すると、第1の起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動する(ST4)。
【0106】
ジョブの実行が完了すると、ジョブは、ジョブID、ジョブインスタンスID及び返却値を含む実行結果をジョブ実行部22に返す(ST5)。
【0107】
ジョブ実行部22は、この実行結果をジョブネット解析部13に送信する(ST6)。
【0108】
ジョブネット解析部13はジョブ実行状態テーブル4に実行結果を記録する(ST7)。具体的には、ジョブネット解析部13は、ジョブ実行装置20からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値をジョブ実行状態テーブル4に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する。
【0109】
図12はジョブ先読み実行解析部14とジョブ実行結果補正部24を追加したジョブ先読み実行の動作を説明するための模式図である。
【0110】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4、ジョブ依存関係情報2、ジョブ先読み実行情報3を参照し、先読み実行できるジョブを抽出する(ST11)。例えば、ジョブ先読み実行解析部14は、ジョブ実行状態テーブル4内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つジョブ依存関係情報2内で実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する。次に、ジョブ先読み実行解析部14は、当該選択した先読み実行候補のジョブIDのうち、ジョブ先読み実行情報4内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択し、この選択したジョブIDに一致するジョブネット定義情報1内のジョブIDのうちで最先の実行順序に配列されたジョブIDを抽出する。
【0111】
なお、具体例によるステップST11の詳細は後述する。
【0112】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4を参照し、先読み実行できるジョブの実行状態を確認する(ST12)。
【0113】
そのジョブがまだ起動されていなければ、ジョブ先読み実行解析部14は、先読み実行するジョブの起動指示をジョブ起動部23に送信すると共に(ST13)、起動指示を送信した旨をジョブ実行状態テーブル4に記録する。記録の際には、正規の起動指示ではなく、先読み実行の起動指示であることを明示する。具体的には、ジョブ先読み実行解析部14は、ステップST12の確認の後、ステップST11で抽出したジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致するジョブ先読み実行情報3内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示をジョブ実行装置20に送信する。また、ジョブ先読み実行解析部14は、第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む。
【0114】
一方、ジョブ実行部22は、第2の起動指示をジョブ起動制御装置10から受信すると、第2の起動指示内のジョブID、ジョブインスタンスID、及び引数のデフォルト値に基づいて、ジョブを起動する(ST14)。
【0115】
ジョブの実行が完了すると、ジョブは、ジョブID、ジョブインスタンスID及び返却値を含む実行結果をジョブ実行部22に返す(ST15)。
【0116】
ジョブ実行部22は、この実行結果をジョブ先読み実行解析部14に送信する(ST16)。
【0117】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4に実行結果を記録する(ST17)。具体的にはジョブ先読み実行解析部14は、ジョブ実行装置20からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値をジョブ実行状態テーブル4に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する。なお、この実行結果の記録は、正規の実行結果ではなく、先読み実行の実行結果であることがステップST13の後に書き込まれた実行種別により明示されている。
【0118】
次に、前述したステップST11の詳細を図13乃至図15に沿って説明する。
【0119】
始めに、図13及び図14に示すように、ジョブ実行状態テーブル4を参照して、実行中または完了したジョブを抽出する(ST11−1)。この例では、先頭ジョブjob0が実行中である。
【0120】
次に、ジョブ依存関係情報2を参照し、先読み実行可能なジョブの候補を抽出する(ST11−2)。この例では第1、第3及び第5ジョブjob1, job3, job5が先読み実行の候補となる。第2、第4、第6及び最終ジョブjob2, job4, job6, job7はまだ完了していない他ジョブjob1, job2, job5の実行過程に依存するため、先読み実行の候補とはならない。
【0121】
最後に、図15に示すように、ジョブ先読み実行情報3を参照し、先読み実行可否を決定し、先読み実行可のジョブを抽出する(ST11−3)。この例では、第1、第3及び第5ジョブjob1, job3, job5はすべて先読み実行可となる。例えば第3ジョブjob3はロールバックも補正も「可」なので、先読み実行できる。第1ジョブjob1はロールバックが「不可」、補正は「可」だが、ジョブネット定義情報1から第1ジョブjob1は並列実行の中にあり実行自体が取り消されることはないため、先読み実行可となる。
【0122】
以上がステップST11の詳細な説明である。
【0123】
次に、図16は先読み実行したジョブの補正の動作を説明するための模式図である。補足すると、図11と図12で説明したジョブネット解析部13とジョブ先読み実行解析部14によるジョブ起動指示は、通常は独立して作用する。しかしジョブネット解析部13がジョブの起動指示を送信しようとしたときに、既にジョブ先読み実行解析部14から先読み実行の起動指示が送信されていた場合、ジョブ実行の補正が必要となる。その際のジョブネット解析部13とジョブ先読み実行解析部14の間のインタラクションについて図16を用いて説明する。
【0124】
ジョブネット解析部13は、ステップST1と同様に、ジョブネット定義情報1を参照し、次に起動すべきジョブを選択する(ST21)。
【0125】
ジョブネット解析部13は、ステップST2と同様に、ジョブ実行状態テーブル4を参照し、そのジョブの実行状態を確認する(ST22)。
【0126】
ステップST22の結果、そのジョブが先読み実行されていた場合、ジョブネット解析部13は、ジョブ先読み実行解析部14にそのジョブの補正要求を出し(ST23)、そのジョブが本実行となった旨をジョブ実行状態テーブル4に記録する。
【0127】
具体的にはステップST22の結果、ステップST21で選択したジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、ジョブネット解析部13は、当該選択したジョブIDに一致するジョブ先読み実行情報3内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する。ジョブネット解析部13は、この判定の結果、両者が不一致のとき、当該判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブIDと、このジョブIDに一致するジョブ実行状態テーブル内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含む補正要求をジョブ先読み実行解析部14に送出する。また、ジョブネット解析部13は、補正要求内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該補正要求内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む。
【0128】
ジョブ先読み実行解析部14は、ステップST23で受けた補正要求を補正指示としてジョブ実行結果補正部24に送信する(ST24)。
【0129】
ジョブ実行結果補正部24は、送信された補正指示を受けると、当該補正指示内のジョブID、ジョブインスタンスID及び引数に基づいて、ジョブの実行結果を補正する(ST25)。
【0130】
ジョブの実行結果の補正が完了すると、ジョブは、補正された実行結果をジョブ実行結果補正部24に返す(ST26)。
【0131】
ジョブ実行結果補正部24は、実行結果をジョブ先読み実行解析部14に送信する(ST27)。
【0132】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4に実行結果を記録する(ST28)。
【0133】
前述したステップST25におけるジョブ実行の補正では、引数のデフォルト値で先読み実行されていたジョブに対して、その引数値を実際に確定した値に置き換える。引数値をデフォルト値から実際に確定した値に置き換える方法は、個々のジョブの実装に依存する。例えば、引数のデフォルト値をそのままDBに格納しているだけのジョブであれば、DBの値を実際に確定した値に置き換えるだけで済む場合もある。引数のデフォルト値に基づいて計算処理をしているジョブであれば、確定した引数の値に基づいて再計算が必要になる場合もある。
【0134】
なお、補正指示に代えて、ロールバック指示を送信する場合は、前述したステップST23乃至ST28は、以下のステップST23’〜ST28’のように実行される。
【0135】
ステップST22の結果、そのジョブが先読み実行されていた場合、ジョブネット解析部13は、ジョブ先読み実行解析部14にそのジョブのロールバック要求を送出し(ST23’)、そのジョブが本実行となった旨をジョブ実行状態テーブル4に記録する。具体的にはジョブネット解析部13は、前述した判定を実行し、この判定の結果、当該判定に用いた引数のデフォルト値にジョブ先読み実行情報3内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報にジョブ先読み実行情報3内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致するジョブ実行状態テーブル4内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求をジョブ先読み実行解析部14に送出する(ST23’)。また、ジョブネット解析部13は、ロールバック要求内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該ロールバック要求内のジョブIDに関連付けてジョブ実行状態テーブル4に書き込む。
【0136】
ジョブ先読み実行解析部14は、ステップST23’で受けたロールバック要求をロールバック指示としてジョブ実行結果補正部24に送信する(ST24’)。
【0137】
ジョブ実行結果補正部24は、送信されたロールバック指示を受けると、当該ロールバック指示に基づいて、ジョブのロールバックを実行する(ST25’)。
【0138】
ジョブのロールバックによる再実行が完了すると、ジョブは、ジョブID、ジョブインスタンスID及び返却値を含む実行結果をジョブ実行結果補正部24に返す(ST26’)。
【0139】
ジョブ実行結果補正部24は、この実行結果をジョブ先読み実行解析部14に送信する(ST27’)。
【0140】
ジョブ先読み実行解析部14はジョブ実行状態テーブル4に実行結果を記録する(ST28’)。
【0141】
上述したように本実施形態によれば、ジョブ先読み実行解析部14が、ジョブ実行状態テーブル4内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つジョブ依存関係情報2内で実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補として選択し、先読み実行候補のジョブIDのうち、ジョブ先読み実行情報3内でロールバックの可又は引数補正の可に関連付けられたジョブIDを選択し、この選択したジョブIDのうちで最先のジョブIDと、ジョブインスタンスIDと、引数のデフォルト値と、を含む第2の起動指示をジョブ実行装置20に送信する構成により、ジョブネット実行時にジョブ間の依存関係を考慮してジョブを先読み実行し、余剰リソースを有効活用してジョブネット全体(実行順序に制約のあるジョブの集まり)の実行にかかる時間を短縮することができる。
【0142】
<第2の実施形態>
次に、第2の実施形態に係るジョブ実行システムについて説明する。
【0143】
第2の実施形態は、第1の実施形態の具体例であり、「多数のデータを正常/異常に仕分けして、正常なデータと異常なデータを別々に処理する」という業務を用いて、ジョブ先読み実行によりジョブネット全体の処理時間が短くなる例を示している。
【0144】
図17乃至図19にこの例のジョブネット定義情報1、ジョブ依存関係情報2、ジョブ先読み実行情報3を示す。この例では、ジョブ依存関係情報2とジョブ先読み実行情報3をシステム開発時に開発者が設定し、ジョブネット定義情報1はシステム運用時にシステム運用担当部門が随時、作成/更新するという運用を想定している。
【0145】
ジョブネット定義情報1には、図17に示すように、「多数のデータを正常/異常に仕分けして、正常なデータと異常なデータを別々に処理」する一連のジョブの定義が記述されている。最初に先頭ジョブjob0により、処理対象の全データを正常データと異常データに仕分ける。この先頭ジョブjob0の実行結果として、正常データ一覧と異常データ一覧が出力される。
【0146】
次に、正常データ一覧内の正常データ数と異常データ一覧内の異常データ数とを合わせた全データに占める異常データ数の割合に応じて条件分岐される。異常データ数が全データの5%以内であれば、第1及び第2ジョブjob1, job2からなる通常の処理に進む。異常データの割合が5%を超えていたら、第3ジョブjob3の例外処理に進む。
【0147】
通常の処理では、第1ジョブjob1による正常データの処理と、第2ジョブjob2による異常データの処理とを並行して実行する。
【0148】
ジョブ依存関係情報2には、図18に示すように、第1〜第3ジョブjob1, job2, job3が、先頭ジョブjob0の返却値に依存することが記述されている。
【0149】
ジョブ先読み実行情報3には、図19に示すように、第2〜第3ジョブjob2, job3がロールバックと引数補正の両方とも不可であることが記述されている。すなわち、第2〜第3ジョブjob2, job3は、先読み実行できない処理である。
【0150】
ジョブの実行例を図20に示す。この例は異常データの割合が5%以下で、第1及び第2ジョブjob1, job2を通常通りに処理する場合である。
【0151】
左側の図20(a)はジョブネット定義情報1に従った従来のジョブ実行例を示し、右側の図20(b)はジョブ依存関係情報2を考慮した先読み実行例を示している。
【0152】
従来のジョブ実行例では、最初に先頭ジョブjob0で正常/異常データを仕分ける。次に第1ジョブjob1による正常データの処理と、第2ジョブjob2による異常データの処理とを並行して実行する。この場合、先頭ジョブjob0の実行と第1ジョブjob1の実行が「逐次並行」でなされ、これがジョブネット全体の実行時間(tjob0+tjob1)となる。
【0153】
右側の先読み実行例では、先頭ジョブjob0の仕分け処理と並行して、第1ジョブjob1による正常データの処理を開始する。引数のデフォルト値として全データを受け取り、全データを対象に第1ジョブjob1を実行する。その後、先頭ジョブjob0の仕分け処理が完了した時点で、第1ジョブjob1の補正処理と第2ジョブjob2の異常データ処理を実行する。このため、先読み実行例におけるジョブネット全体の実行時間は、先頭ジョブjob0の実行時間と、第2ジョブjob2の実行時間との合計時間(tjob0+tjob2)となる。
【0154】
ここで、先読み実行例では異常データの割合が少なく、第1ジョブjob1の補正処理や第2ジョブjob2の異常データ処理が短い。そのため、先読み実行例の実行時間は、従来の実行例の実行時間に比べ、両者の差分(tjob1−tjob2)だけジョブネット全体の実行時間を短縮することができる。
【0155】
上述したように本実施形態によれば、第1の実施形態のジョブを具体化した構成においても、第1の実施形態と同様の効果を得ることができる。
【0156】
以上説明した各実施形態によれば、ジョブネット定義情報1に加え、ジョブ依存関係情報2及びジョブ先読み実行情報3を備えた構成により、ジョブを先読み実行できるか否かを判断でき、ジョブネット全体の実行にかかる時間を短縮することができる。
【0157】
なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0158】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0159】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0160】
さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0161】
また、記憶媒体は1つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0162】
なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0163】
また、各実施形態におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0164】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0165】
1…ジョブネット定義情報、2…ジョブ依存関係情報、3…ジョブ先読み実行情報、4…ジョブネット定義情報、10…ジョブ起動制御装置、11,21…記憶部、12…ジョブ起動制御部、13…ジョブネット解析部、14…ジョブ先読み実行解析部、20…ジョブ実行装置、22…ジョブ実行部、23…ジョブ起動部、24…ジョブ実行結果補正部。
【特許請求の範囲】
【請求項1】
互いに通信可能なジョブ起動制御装置及びジョブ実行装置を備えたジョブ実行システムであって、
前記ジョブ起動制御装置は、
前記各ジョブを識別するジョブIDが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブの実行順序を定義するジョブネット定義情報を記憶する定義情報記憶手段と、
前記各ジョブの間での依存関係を記憶する依存内容記憶手段と、
前記ジョブIDと、当該ジョブIDのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて記憶するジョブ補正情報記憶手段と、
前記ジョブIDと、当該ジョブIDのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスIDと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて記憶する実行状態記憶手段と、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、この選択したジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定し、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示を前記ジョブ実行装置に送信する第1の起動指示送信手段と、
前記第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む手段と、
前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する先読み候補選択手段と、
前記選択された先読み実行候補のジョブIDのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択し、この選択したジョブIDに一致する前記定義情報記憶手段内のジョブIDのうちで最先の実行順序に配列されたジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示を前記ジョブ実行装置に送信する第2の起動指示送信手段と、
前記第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む手段と、
前記ジョブ実行装置からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する手段と、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、当該次の実行順序のジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する手段と、
この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致する前記実行状態記憶手段内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する手段と、
前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信するロールバック指示送信手段と、
を備え、
前記ジョブ実行装置は、
前記第1又は第2の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動するジョブ起動手段と、
前記起動されたジョブの実行結果を前記ジョブ起動制御装置に返信する手段と、
前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行するロールバック実行手段と、
前記ロールバックによる再度の実行結果をジョブ起動制御装置に返信する手段と、
を備えたことを特徴とするジョブ実行システム。
【請求項2】
請求項1に記載のジョブ実行システムにおいて、
前記ジョブ起動制御装置は、
前記判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブIDと、このジョブIDに一致する前記実行状態記憶手段内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含む補正要求を送出する手段と、
前記送出された補正要求を補正指示として前記ジョブ実行装置に送信する補正指示送信手段と、
を更に備え、
前記ジョブ実行装置は、
前記送信された補正指示を受けると、当該補正指示内のジョブID、ジョブインスタンスID及び引数に基づいて、ジョブの実行結果を補正するジョブ実行結果補正手段と、
前記補正された実行結果を前記ジョブ起動制御装置に返信する手段と、
を更に備えたことを特徴とするジョブ実行システム。
【請求項3】
ジョブ実行装置に通信可能であり、且つ定義情報記憶手段、依存内容記憶手段、ジョブ補正情報記憶手段及び実行状態記憶手段を備えたジョブ起動制御装置に用いられるプログラムであって、
前記ジョブ起動制御装置を、
前記各ジョブを識別するジョブIDが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブIDに関連付けて前記分岐の条件が更に記述されているジョブネット定義情報を前記定義情報記憶手段に書き込む手段、
前記ジョブIDと、当該ジョブIDのジョブが依存する依存元のジョブを識別する依存元のジョブIDと、前記依存する内容が前記依存元のジョブの実行過程又は返却値である旨を示す依存内容と、を関連付けて前記依存内容記憶手段に書き込む手段、
前記ジョブIDと、当該ジョブIDのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて前記ジョブ補正情報記憶手段に書き込む手段、
前記ジョブIDと、当該ジョブIDのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスIDと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて前記実行状態記憶手段に書き込む手段、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、この選択したジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定し、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示を前記ジョブ実行装置に送信する第1の起動指示送信手段、
前記第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む手段、
前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する先読み候補選択手段、
前記選択された先読み実行候補のジョブIDのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択し、この選択したジョブIDに一致する前記定義情報記憶手段内のジョブIDのうちで最先の実行順序に配列されたジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示を前記ジョブ実行装置に送信する第2の起動指示送信手段、
前記第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む手段、
前記ジョブ実行装置からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する手段、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、当該次の実行順序のジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する手段、
この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致する前記実行状態記憶手段内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する手段、
前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信するロールバック指示送信手段、
として機能させ、
前記ジョブ実行装置としては、
前記第1又は第2の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動して当該ジョブの実行結果を前記ジョブ起動制御装置に返信し、
前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行し、当該ロールバックによる再度の実行結果をジョブ起動制御装置に返信するプログラム。
【請求項1】
互いに通信可能なジョブ起動制御装置及びジョブ実行装置を備えたジョブ実行システムであって、
前記ジョブ起動制御装置は、
前記各ジョブを識別するジョブIDが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブの実行順序を定義するジョブネット定義情報を記憶する定義情報記憶手段と、
前記各ジョブの間での依存関係を記憶する依存内容記憶手段と、
前記ジョブIDと、当該ジョブIDのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて記憶するジョブ補正情報記憶手段と、
前記ジョブIDと、当該ジョブIDのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスIDと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて記憶する実行状態記憶手段と、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、この選択したジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定し、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示を前記ジョブ実行装置に送信する第1の起動指示送信手段と、
前記第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む手段と、
前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する先読み候補選択手段と、
前記選択された先読み実行候補のジョブIDのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択し、この選択したジョブIDに一致する前記定義情報記憶手段内のジョブIDのうちで最先の実行順序に配列されたジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示を前記ジョブ実行装置に送信する第2の起動指示送信手段と、
前記第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む手段と、
前記ジョブ実行装置からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する手段と、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、当該次の実行順序のジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する手段と、
この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致する前記実行状態記憶手段内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する手段と、
前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信するロールバック指示送信手段と、
を備え、
前記ジョブ実行装置は、
前記第1又は第2の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動するジョブ起動手段と、
前記起動されたジョブの実行結果を前記ジョブ起動制御装置に返信する手段と、
前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行するロールバック実行手段と、
前記ロールバックによる再度の実行結果をジョブ起動制御装置に返信する手段と、
を備えたことを特徴とするジョブ実行システム。
【請求項2】
請求項1に記載のジョブ実行システムにおいて、
前記ジョブ起動制御装置は、
前記判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値を含む引数補正情報が引数補正の可を示す場合には、当該引数補正情報に関連付けられたジョブIDと、このジョブIDに一致する前記実行状態記憶手段内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含む補正要求を送出する手段と、
前記送出された補正要求を補正指示として前記ジョブ実行装置に送信する補正指示送信手段と、
を更に備え、
前記ジョブ実行装置は、
前記送信された補正指示を受けると、当該補正指示内のジョブID、ジョブインスタンスID及び引数に基づいて、ジョブの実行結果を補正するジョブ実行結果補正手段と、
前記補正された実行結果を前記ジョブ起動制御装置に返信する手段と、
を更に備えたことを特徴とするジョブ実行システム。
【請求項3】
ジョブ実行装置に通信可能であり、且つ定義情報記憶手段、依存内容記憶手段、ジョブ補正情報記憶手段及び実行状態記憶手段を備えたジョブ起動制御装置に用いられるプログラムであって、
前記ジョブ起動制御装置を、
前記各ジョブを識別するジョブIDが当該各ジョブの実行順序の順に配列して記述されており、前記各ジョブのうちの幾つかの各ジョブを分岐させて並列に実行する場合には当該幾つかの各ジョブのジョブIDに関連付けて前記分岐の条件が更に記述されているジョブネット定義情報を前記定義情報記憶手段に書き込む手段、
前記ジョブIDと、当該ジョブIDのジョブが依存する依存元のジョブを識別する依存元のジョブIDと、前記依存する内容が前記依存元のジョブの実行過程又は返却値である旨を示す依存内容と、を関連付けて前記依存内容記憶手段に書き込む手段、
前記ジョブIDと、当該ジョブIDのジョブのロールバックの可否を示すロールバック情報と、当該ジョブの引数補正の可否と引数のデフォルト値とを示す引数補正情報と、を関連付けて前記ジョブ補正情報記憶手段に書き込む手段、
前記ジョブIDと、当該ジョブIDのジョブとして実行されたジョブインスタンスを識別するジョブインスタンスIDと、前記ジョブインスタンスの状態が実行中、完了又は失敗である旨を示す実行状態と、前記ジョブインスタンスの実行が前記実行順序通りの本実行か又は前記本実行の実行順序よりも先に実行された先読み実行かを示す実行種別と、前記実行状態が完了を示す場合のジョブインスタンスの返却値と、を関連付けて前記実行状態記憶手段に書き込む手段、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、この選択したジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と実行中を示す実行状態との両者が関連付けられていないとき、当該選択したジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDを指定し、当該選択したジョブID及び当該指定したジョブインスタンスIDを含む第1の起動指示を前記ジョブ実行装置に送信する第1の起動指示送信手段、
前記第1の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、本実行を示す実行種別と、を当該第1の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む手段、
前記実行状態記憶手段内で実行中又は完了を示す実行状態に関連付けられたジョブIDとは異なるジョブIDであり、且つ前記依存内容記憶手段内で前記実行過程である旨を示す依存内容に関連付けられていないジョブIDを先読み実行候補のジョブIDとして選択する先読み候補選択手段、
前記選択された先読み実行候補のジョブIDのうち、前記ジョブ補正情報記憶手段内でロールバックの可を示すロールバック情報又は引数補正の可を示す引数補正情報に関連付けられたジョブIDを選択し、この選択したジョブIDに一致する前記定義情報記憶手段内のジョブIDのうちで最先の実行順序に配列されたジョブIDと、このジョブIDのジョブとして実行されるジョブインスタンスを識別するジョブインスタンスIDと、このジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、を含む第2の起動指示を前記ジョブ実行装置に送信する第2の起動指示送信手段、
前記第2の起動指示内のジョブインスタンスIDと、実行中を示す実行状態と、先読み実行を示す実行種別と、を当該第2の起動指示内のジョブIDに関連付けて前記実行状態記憶手段に書き込む手段、
前記ジョブ実行装置からジョブID、ジョブインスタンスID及び返却値を含む実行結果を受けると、この実行結果内のジョブID及びジョブインスタンスIDに関連付けて当該返却値を前記実行状態記憶手段に書き込むと共に、当該ジョブID及びジョブインスタンスIDに関連付けられた実行状態を完了に更新する手段、
前記実行状態記憶手段内で本実行を示す実行種別と完了を示す実行状態との両者に関連付けられたジョブIDに一致する前記定義情報記憶手段内のジョブIDのうち、当該定義情報記憶手段内で最後の実行順序のジョブIDを抽出し、この抽出したジョブIDの実行順序の次の実行順序に配列されたジョブIDを選択し、当該次の実行順序のジョブIDに一致する前記実行状態記憶手段内のジョブIDに対して先読み実行を示す実行種別と完了を示す実行状態が関連付けられているとき、当該次の実行順序のジョブIDに一致する前記ジョブ補正情報記憶手段内のジョブIDに関連付けられた引数のデフォルト値と、当該先読み実行を示す実行種別に関連付けられた返却値とを比較し、両者が一致するか否かを判定する手段、
この判定の結果、両者が不一致のとき、前記判定に用いた引数のデフォルト値に前記ジョブ補正情報記憶手段内で関連付けられたロールバック情報がロールバックの可を示す一方、このロールバック情報に前記ジョブ補正情報記憶手段内で関連付けられた引数補正情報が引数補正の否を示す場合には、当該ロールバック情報に関連付けられたジョブIDと、このジョブIDに一致する前記実行状態記憶手段内のジョブIDに関連付けられたジョブインスタンスIDと、当該判定に用いた返却値を示す引数と、を含むロールバック要求を送出する手段、
前記送出されたロールバック要求をロールバック指示として前記ジョブ実行装置に送信するロールバック指示送信手段、
として機能させ、
前記ジョブ実行装置としては、
前記第1又は第2の起動指示を前記ジョブ起動制御装置から受信すると、当該起動指示内のジョブID及びジョブインスタンスIDに基づいて、ジョブを起動して当該ジョブの実行結果を前記ジョブ起動制御装置に返信し、
前記ロールバック指示を前記ジョブ起動制御装置から受信すると、当該ロールバック指示に基づいて、ジョブのロールバックを実行し、当該ロールバックによる再度の実行結果をジョブ起動制御装置に返信するプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【公開番号】特開2012−203732(P2012−203732A)
【公開日】平成24年10月22日(2012.10.22)
【国際特許分類】
【出願番号】特願2011−68909(P2011−68909)
【出願日】平成23年3月25日(2011.3.25)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【公開日】平成24年10月22日(2012.10.22)
【国際特許分類】
【出願日】平成23年3月25日(2011.3.25)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
[ Back to top ]