JP5033343B2 - ジョブ管理装置およびジョブ管理方法 - Google Patents
ジョブ管理装置およびジョブ管理方法 Download PDFInfo
- Publication number
- JP5033343B2 JP5033343B2 JP2006089277A JP2006089277A JP5033343B2 JP 5033343 B2 JP5033343 B2 JP 5033343B2 JP 2006089277 A JP2006089277 A JP 2006089277A JP 2006089277 A JP2006089277 A JP 2006089277A JP 5033343 B2 JP5033343 B2 JP 5033343B2
- Authority
- JP
- Japan
- Prior art keywords
- job
- class
- processing
- data
- item
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Description
このような背景から、JAVA(登録商標)によってエンタープライズシステムを開発する必要性が顕在化しつつあると本発明者は認識した。
この装置は、ジョブのタイプに応じてあらかじめ定義されたクラスからジョブオブジェクトを生成し、各ジョブオブジェクトの依存関係を示すジョブリスト情報を生成する。そして、ジョブの処理内容を示す処理関数をジョブオブジェクトが生成された後に設定し、複数の処理関数に対して別々のスレッドを割り当てた上で、これら複数の処理関数を時間的に並行して実行させる。
前段にあたるジョブオブジェクトと後段にあたるジョブオブジェクトの関係において、後段にあたるジョブオブジェクトの処理関数は、前段にあたるジョブオブジェクトの処理関数が生成する出力データを変数として所定の処理を実行し、出力データが未生成の段階においては出力データが生成されるまで待機する。
エンタープライズシステム204は、企業や公共施設のような組織の業務管理のために導入されるシステムである。エンタープライズシステム204は、地理的に分散された複数の組織を統合するシステムとして構成されてもよい。
ジョブ管理装置100は、各ジョブの関係を定義したデータフローダイアグラム(DFD:Data Flow Diagram)にしたがって複数のジョブを順次実行する。データフローダイアグラム(以下、「DFD」ともよぶ)については、後に図3等に関連して詳述する。また、ジョブ管理装置100の機能については、次の図2以降に関連して詳述する。
ここに示す各ブロックは、ハードウェア的には、コンピュータのCPUをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
ここでは、主として各機能ブロックの発揮すべき機能について述べ、その具体的な作用については、図3以降に関連して説明する。
ユーザインタフェース処理部110は、ユーザからの入力処理やユーザに対する情報表示のようなユーザインタフェース全般に関する処理を担当する。通信部120は、ノード端末200やデータベース206との通信処理を担当する。データ処理部130は、ユーザインタフェース処理部110や通信部120から取得されたデータを元にして各種のデータ処理を実行する。データ処理部130は、ユーザインタフェース処理部110および通信部120の間のインタフェースの役割も果たす。
モデル管理部140は、各ジョブの依存関係を示す「静的なモデル」に関するデータを管理する。フロー制御部150は、各ジョブの処理内容を定義するとともに、各ジョブの実行を制御する。ここで注目すべきは、本実施例におけるジョブ管理装置100において、ジョブの静的な依存関係を管理するモデル管理部140と、ジョブの動的な処理内容を管理するフロー制御部150が機能上分離されていることである。そのため、ジョブの「依存関係の定義」と「処理内容の定義」について、一方の設計作業が他方の設計内容によって制約されない枠組み(フレームワーク)となっている。
以上をふまえて、より具体的なソフトウェア構造について説明する。
同図に示すデータフローダイアグラム312は、所定の期間における4つCD(Compact Disc)店のCDの売上枚数を集計して、地域別および店別の売上枚数を計算するという処理過程を示している。このデータフローダイアグラム312には、売上データ300、売上集約処理302、地区別売上データ304、店マスタデータ306、店名追加処理308および店別売上データ310の6つの構成要素(Entity)が定義されている。
UriageSourceクラス400は、売上データ300に対応するジョブクラスであり、売上データ300を各CD店のノード端末200から収集して保持するクラスである。UriageAggregatorクラス402は、売上集約処理302に対応するジョブクラスである。以下、同様に、AreaUriageTotalSinkクラス404は地区別売上データ304、MiseMaSourceクラス406は店マスタデータ306、MiseMaMatcherクラス408は店名追加処理308、MiseUriageTotalSinkクラス410は店別売上データ310にそれぞれ対応するジョブクラスである。
そこで、本実施例においては、UriageSourceクラス400からMiseUriageTotalSinkクラス410までの各ジョブクラスに対して、後述するNodeFlowControllerクラス500によって後天的に「処理を注入する(inject)」という手法を採用している。すなわち、ジョブクラスそのものは、先天的には依存関係を持たないかたちで設計されている。
UriageProcessingModelクラス440は、データフローダイアグラム312に示した各ジョブクラスの関係を定義するクラスである。UriageProcessingModelクラス440は、図4に示した6つのジョブクラスを含むジョブクラス群420を持つ。同図に示す菱形記号は、UML(Unified Modeling Language)の表記法に基づき、「集約(aggregation)」を示す。すなわち、UriageProcessingModelクラス440は、その一部としてジョブクラス群420を持つ。したがって、UriageProcessingModelクラス440がインスタンス化されるときには、その一部であるジョブクラス群420も付随してインスタンス化される。UriageProcessingModelオブジェクトは、各ジョブオブジェクトを持つことになる。
以下においては、MultiThreadFlowControllerクラス452によるマルチスレッドモデルを題材として説明する。なお、参考までに、シングルスレッドモデルについては本件の関連案件である特願2005−350643に詳しい。
前の図4に示したように、UriageProcessingModelクラス440は、UriageSourceクラス400からMiseUriageTotalSinkクラス410までの6つのジョブクラスを持つ。UriageProcessingModelクラス440自体は、MultiThreadFlowControllerクラス452に持たれている。UriageProcessingModelクラス440は、ProcessingModelクラス460を継承するモデルクラスである。すなわちUriageProcessingModelクラス440は、ProcessingModelクラス460において定義された機能を受け継ぎつつ、CDの売上処理を管理するために特有の機能が追加されたクラスとして定義される。ProcessingModelクラス460の作成にあたっては、CDの売上処理を管理するために特有の機能のみを追加すればよいので、スクラッチからUriageProcessingModelクラス440自体を作成するのに比べて、開発や保守にともなう負担が軽減される。以下、ProcessingModelクラス460のように、モデルクラスの継承元となる、基本的なクラスのことを「モデルベースクラス」とよぶことにする。ProcessingModelクラス460は、Connectionクラス430を持つ。したがって、ProcessingModelクラス460を継承するUriageProcessingModelクラス440も、Connectionクラス430を持つことになる。
このように、6つのジョブクラスは、4種類のクラス(以下、「ジョブベースクラス」とよぶ)のいずれかを継承している。更に遡ると、すべてのジョブベースクラスは、Nodeクラス490を継承する。Nodeクラス490は、ジョブのタイプによらない基本的な仕様が定義されたクラスである。
前の図6で見たように、NodeFlowControllerクラス500は、ジョブオブジェクトの処理内容を定義するための処理クラスである。NodeFlowControllerクラス500からMTNodeFlowControllerクラス502が継承され、更に、MTRecordStreamSourceクラス510、MTRecordStreamMatcherクラス512、MTRecordStreamAggregatorクラス514およびMTRecordStreamSinkクラス516の4種類の処理クラスが継承されている。MTRecordStreamSourceクラス510は、RecordStreamSourceクラス480に対応して、その処理内容を定義するためのクラスである。MTRecordStreamMatcherクラス512、MTRecordStreamAggregatorクラス514およびMTRecordStreamSinkクラス516は、それぞれ、RecordStreamMatcherクラス484、RecordStreamAggregatorクラス482およびRecordStreamSinkクラス486に対応してそれらの処理内容を定義するクラスである。NodeFlowControllerクラス500から継承された4種類の処理クラスによって、ジョブクラスの処理内容が定義されることになる。
以上のクラス図をふまえ、サンプルのソースコードを参照しながら、基幹的な処理の内容を処理順序にしたがって説明する。以下に示すソースコードはJAVA(登録商標)にて記述されている。
この最初に実行される関数(メソッド:method)は、main関数である(S10)。main関数は、UriageProcessingModelクラス440のpublicでstaticなメンバ関数であり、UriageProcessingModelクラス440の外からコール可能である。ユーザは、main関数に引数を指定するか否かによって、シングルスレッドモデルか(S12)、マルチスレッドモデルかを選択できる(S14)。引数が指定され、マルチスレッドモデルが選択されたとして説明する(S14)。
S100において、UriageProcessingModelクラス440がインスタンス化されるときには、まず、UriageProcessingModel()として示されるコンストラクタ関数が実行される(S102)。このコンストラクタ関数の実行に際して、各ジョブクラスがインスタンス化される(S104)。ここでは、UriageProcessingModelクラス440のメンバ変数として、UriageSourceクラス400、MiseMaSourceクラス406、UriageAggregatorクラス402、MiseMaMatcherクラス408、MiseUriageTotalSinkクラス410およびAreaUriageTotalSinkクラス404の各ジョブクラスがインスタンス化され、それぞれ、uriageSource、miseMaSource、uriageAggregator、miseMaMatcher、miseUriageTotalSinkrおよびareaUriageTotalSinkという名前のジョブオブジェクトが生成される。なお、各ジョブオブジェクトの生成に際しては、それぞれ、NodeFlowControllerクラス500から処理オブジェクトが生成される。継承元のNodeクラス490がNodeFlowControllerクラス500を持つためである。ただし、この段階では処理オブジェクトにはジョブオブジェクトごとに対応した具体的な処理内容は定義されない。また、UriageProcessingModelクラス440のインスタンス化に際しては、モデルベースクラスが持っている関係クラス、すなわち、Connectionクラス430もインスタンス化される。Connectionクラス430は、リスト形式にて各ジョブオブジェクトのつながりを管理するためのクラスである。
前の図8に示したdoTestWithMultiThread関数のS200において、MultiThreadFlowControllerクラス452がインスタンス化される。このとき、まず、MultiThreadFlowController()として示されるコンストラクタ関数が実行される(S202)。このコンストラクタ関数の実行によって、ProcessingModelクラス460のインスタンスを保持するmodelという名前の変数が用意される(S204)。このProcessingModelクラス460は、UriageProcessingModelクラス440の継承元となるモデルベースクラスであるから、この段階では、modelという名前の変数には、CDの売上処理に関する具体的なモデルは設定されない。コンストラクタ関数の実行により、MultiThreadFlowControllerクラス452からmultiThreadFlowControllerという名前のコントロールオブジェクトが生成される(図8のS200)。
前の図10に示したdoTask関数のS320の実行にともなって、injectRecordStream関数が実行される。これによって、ジョブオブジェクト間でデータを受け渡すためのオブジェクトとして、MTRecordStreamクラスがインスタンス化される。このMTRecordStreamクラスがキュークラスに相当する。このクラスは、前段にあたるジョブオブジェクトから投入されたアイテムオブジェクトを所定個数を上限として保持するキューとして機能する。後段にあたるジョブオブジェクトは、キューオブジェクトからアイテムオブジェクトを取得し、アイテムオブジェクトが保持するデータを読み出す。たとえば、前段にあたるジョブオブジェクトのUriageSourceオブジェクトは、後段にあたるジョブオブジェクトのUriageAggregatorオブジェクトとの関係で設定されたキューオブジェクトにアイテムオブジェクトを格納し、後段のUriageAggregatorオブジェクトは、このキューオブジェクトからアイテムオブジェクトを取得する。ジョブオブジェクト間においてデータの受け渡しをするための基本的なインタフェースも、コントロールオブジェクト側にて定義される。
次に、doTask関数のS330(図10)の実行にともなって、injectFlowController関数が実行される。injectFlowController関数は、関係オブジェクトを走査して、順次ジョブオブジェクトを選択し、各ジョブオブジェクトについてinjectFlowControllerToNode関数を実行する(S332)。
ここでは、ジョブベースクラスに応じて割り当てるべき処理クラスを選択するアルゴリズムを示しているが、ジョブクラスごとに割り当てるべき処理クラスを選択するアルゴリズムは、これ以外にも任意に設計可能である。たとえば、外部イベントの検出等、所定の条件の成否に応じて、割り当てるべき処理クラスを選択・変更してもよい。
注入初期化処理が完了すると、エンタープライズシステム204を実際に稼働させるためのmainTask関数が実行される(S340)。mainTask関数は、関係オブジェクトを走査してジョブオブジェクトを順次選択し、各ジョブオブジェクトに設定されている処理オブジェクトを取得する(S342)。
MiseMaSourceオブジェクトの処理内容は、店マスタデータ306という所定のマスタデータを読み出して、MiseMaMatcherオブジェクトに転送することである。MiseMaSourceオブジェクトは、必ずしも店マスタデータ306の全てを読み出す必要はなく、後段にあたるMiseMaMatcherオブジェクトの処理に必要なだけ読み出せばよい。このような理由から、MiseMaSourceオブジェクトのワーカスレッドは、join関数による終了の待ち合わせ対象から除外されている。一方、UriageSourceオブジェクトは、ノード端末200から取得された全ての売上データ300を処理対象とするため、待ち合わせの対象となっている。すなわち、UriageSourceオブジェクトが売上データ300の全てを取得してUriageAggregatorオブジェクトに渡し終わらなければ、mainTaskは終了しない。
MTNodeFlowControllerクラス502から継承されるマルチスレッド系の処理クラスは、startThread関数をメンバ関数として備える。この関数が、MultiThreadFlowControllerクラス452からコールされると、新たにワーカスレッドを生成し(S350)、実行開始させる(S352)。こうして、処理関数に相当するdoTask関数がワーカスレッドにて実行される。
このように、6つのワーカスレッドは実行開始されても、必ずしも全てが即時に実行状態となるわけではなく、他のジョブの処理状態に応じて待機状態と実行状態のいずれかの状態に遷移する。結果として、DFDに定義された依存関係にしたがいつつも、複数のジョブが非同期的に実行されることになる。
ジョブ間には、関係クラスの定義にしたがって前段と後段という依存関係が定義される。図4の場合、MiseMaSourceオブジェクトの後段のジョブは、MiseMaMatcherオブジェクトであるが、MiseUriageTotalSinkオブジェクトにとってMiseMaMatcherオブジェクトは前段のジョブにあたる。図14においては、簡単のため、依存関係を有するジョブ1からジョブ4を対象として説明する。ここでいうジョブ1からジョブ4の各ジョブはジョブオブジェクトに対応する。ジョブ1の後段のジョブはジョブ2である。ジョブ2の後段のジョブはジョブ3とジョブ4である。各ジョブは、前段にあたるジョブからその処理結果を示すデータを取得したことを条件として自処理を実行する。
以上に示した処理方法を採用する理由について説明する。
仮に、ジョブ1の処理結果が記録されたアイテムオブジェクトをジョブ2が取得し、ジョブ2がこのアイテムオブジェクトにジョブ2の処理結果を上書きして更にジョブ3に渡すとする。このように、1つのアイテムオブジェクトがジョブ1からジョブ2、ジョブ3へと順次転送されていくモデルの場合、各ジョブがブロックされやすくなる。なぜならば、ジョブ1は、ジョブ3がアイテムオブジェクトをジョブ1に返還するか、新たにアイテムオブジェクトを生成しなければ、次の処理結果をジョブ2に渡せなくなるからである。アイテムオブジェクトの生成するというアプローチは、次の、(2)に示す理由により望ましくない。
これに対して、ジョブ1とジョブ2、ジョブ2とジョブ3、ジョブ2とジョブ4の関係ごとにあらかじめアイテムオブジェクトを用意しておけば、ジョブ1は、ジョブ3やジョブ4の処理状態に直接的な影響を受けることなく自処理を実行できる。ジョブ間ごとにアイテムオブジェクトを用意することにより、ジョブ間におけるデータ受け渡し処理をシンプルにすると共に、ブロッキングの発生を抑制できる。
ジョブ1はジョブ2へのデータ転送時にアイテムオブジェクトを生成し、ジョブ2はジョブ1からデータを取得するとそのアイテムオブジェクトを破棄(destroy)して、メモリ領域を解放するとしてもよい。しかし、多くのバッチ処理を実行するエンタープライズシステムにおいてこのような方法を採用した場合、アイテムオブジェクトの生成・破棄にともなうオーバーヘッドがシステム全体のパフォーマンスを悪化させかねない。
そこで、ジョブ間ごとにあらかじめアイテムオブジェクトを生成し、これをジョブ間で再利用することによりアイテムオブジェクトの生成・破棄にともなう処理コストを低減している。アイテムオブジェクトの生成コストはエンタープライズシステム204の実行開始時、アイテムオブジェクトの破棄コストは実行終了時に局在化されるため、スループットを向上させることができる。
前後段のジョブ間でデータ送受のために利用されるアイテムオブジェクトは、複数個、たとえば、5個生成される。アイテムオブジェクトの数は、ジョブの性質やテスト実行の結果に応じて好適な数を求めればよい。仮に、ジョブ1とジョブ2の間でデータを送受するためのアイテムオブジェクトが1つだけの場合、ジョブ2がアイテムオブジェクトからデータを読み出しているときには、ジョブ1はそのアイテムオブジェクトが返還されるまで新たな処理結果をアイテムオブジェクトに記録できない。このため、ジョブ1の処理状態は後段のジョブ2の処理状態の影響を受けやすくなる。
これに対して、複数個のアイテムオブジェクトを再利用対象とすれば、ジョブ1の処理とジョブ2の処理を非同期実行しやすくなる。特にマルチスレッドモデルにおいて、ジョブ間ごとに複数個のアイテムオブジェクトを再利用することにより、システム全体としてのスループットを向上させることができる。
ジョブ1からキューを介さずにアイテムオブジェクトを直接ジョブ2に渡すとすれば、ジョブ1はジョブ2がアイテムオブジェクトを受け取り可能な状態となるまでブロックされることになる。これに対して、キューオブジェクトは、前段のジョブと後段のジョブを非同期的に動作させるため、システム全体としてのスループットを向上させることができる。
同図に示すソースコードは、MiseMaMatcherクラス408が、自処理が完了したときに呼び出すdoProcessMatching関数を示す。doProcessMatching関数が実行されると、プールオブジェクトからアイテムオブジェクトrecordが取得される(S364)。プールオブジェクトにアイテムオブジェクトがなければブロックされる。取得されたアイテムオブジェクトrecordには、処理結果が書き込まれ(S366)、キューオブジェクトに投入される(S368)。キューが一杯のときには、S368の処理はブロックされる。
MiseMaMatcherオブジェクトの後段のジョブオブジェクトは、図4によるとMiseUriageTotalSinkオブジェクトである。同図に示すソースコードは、MiseUriageTotalSinkの処理オブジェクトとなるMTRecordStreamSinkクラス516が、自処理の開始に際して呼び出すdoTask関数を示す。まず、前段のジョブオブジェクトとの関係で設定されているキューオブジェクトからアイテムオブジェクトrecordを取得する(S370)。キューが空であれば、S370の処理はブロックされる。
アイテムオブジェクトは、前後段のジョブ間のみならず、MiseMaSourceクラス406やUriageSourceクラス400がノード端末200やデータベース206からデータを取得するときにも利用される。ここでは、データA、データB、データCおよびデータDの4種類のデータの構造体として示されるデータXを対象として説明する。データXは、データA、データB、データYを含み、データYはデータCとデータDを含む。データA〜データDのように基本単位となるデータのことを「要素データ」、データXやデータYのように、要素データを複数含んで構成される構造体型のデータのことを「集合データ」とよぶことにする。
int dataA = RIX.RIA.getNum();
のような形式にて、アイテムオブジェクトRIXを介して、アイテムオブジェクトRIAのgetNum関数により、データAを整数値として取り出すことができる。処理オブジェクトがデータAを必要としたときに、バイナリデータ配列中のデータAが抽出され、getNum関数による型変換処理が実行されることになる。いいかえれば、データAを取り出す必要が生じない限り、データAはバイナリデータの一部として扱われる。たとえば、データXの複製やデータXと別のデータとの比較の場合には、データAの型変換は実行する必要がない。
たとえば、処理オブジェクトは、
string dataD = RIX.RIY.RID.getString();
のような形式にて、アイテムオブジェクトRIXを介してアイテムオブジェクトRIDのgetString関数により、データDを文字列型として取り出すことができる。
COBOLなどの手続き型言語の場合、これら2種類の定義は一体としてなされることが多かった。そのため、開発者は、ジョブの静的な関係定義と動的な処理定義を同時に意識しながらシステムを設計する必要があった。これに対して、本実施例にて示したフレームワークによれば、これら2種類の定義を明確に分離できる。そのため、ジョブの処理定義に過度に影響されることなく、ジョブの関係定義を行うことができる。また、その逆も真である。このような分離設計を可能とするフレームワークは、エンタープライズシステム204の拡張性・保守性・堅牢性を高める上で効果がある。
具体例として、100個のジョブオブジェクトによって構成されるエンタープライズシステム204のうち、3個のジョブオブジェクトの機能だけをテストしたい場合について説明する。このような場合、まず、100個のジョブオブジェクトを生成しておく。そして、実際には、この3個のジョブオブジェクトにだけ処理を注入する。次に、さきほどの3個のジョブオブジェクトを含む5個のジョブオブジェクトの機能をテストしたい場合には、生成済の100個のジョブオブジェクトのうち、今度は5個のジョブオブジェクトに処理を注入する。すなわち、はじめに100個のジョブオブジェクトを生成しておけば、2回目のテストのために新たにテスト対象として加わった2個のジョブオブジェクトを生成する必要がない。このような処理方法によると、最初に全てのジョブオブジェクトを生成しておけば、テスト対象の変更により新たなインスタンス化処理を実行しなくて済むというメリットがある。
1.複数のアイテムオブジェクトを初期生成しておき、これらを循環的に再利用することにより、アイテムオブジェクトの生成・破棄にともなう処理コストを抑制する。
2.アイテムオブジェクトの受け渡しのためのキューを用意することにより、各ジョブの非同期性を高める。
3.アイテムオブジェクトはバイナリ形式にてデータを取り扱い、抽出が必要なときだけ型変換処理を実行することにより、型変換にともなう処理コストを低減する。
本実施例に示したジョブ管理装置100によれば、オブジェクト指向の枠組みを維持することによりオブジェクト指向言語の優位性を活かしつつも、データの送受や変換に関するオーバーヘッドの発生を抑制することにより、手続き型言語並のスループットと、オブジェクト指向言語の利点を両立させている。
このほかにも、請求項に記載の各構成要件が果たすべき機能は、本実施例において示された各機能ブロックの単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
ジョブのタイプに応じてあらかじめ定義されたクラスから、ジョブオブジェクトを生成するジョブオブジェクト生成部と、
各ジョブオブジェクトの依存関係を示すジョブリスト情報を生成するジョブリスト情報生成部と、
ジョブの処理内容を示す処理関数を、ジョブオブジェクトが生成された後に設定する処理注入部と、
前記ジョブリスト情報を参照してジョブオブジェクトを選択し、そのジョブオブジェクトについて設定された処理関数を実行させる実行指示部と、
を備えることを特徴とするジョブ管理装置。
前記処理注入部と前記実行指示部の各機能をその機能の一部として含むオブジェクトとしてコントロールオブジェクトを生成するコントロールオブジェクト生成部と、を更に備え、
前記コントロールオブジェクトは、前記モデルオブジェクトを処理対象とすることによって、前記処理注入部と前記実行指示部の各機能を発揮させることを特徴とするA1からA3のいずれかに記載のジョブ管理装置。
前記処理注入部は、ジョブオブジェクトの生成後に、ジョブオブジェクトに処理オブジェクトを設定することにより、ジョブオブジェクトについての処理関数を設定することを特徴とするA1からA4のいずれかに記載のジョブ管理装置。
所定の処理関数は、前記ジョブリスト情報を参照して次に実行すべき複数の処理関数を特定し、前記複数の処理関数を時間的に並行して実行させることを特徴とするA1からA6のいずれかに記載のジョブ管理装置。
前記複数の外部装置に分散配置された各ジョブオブジェクトの処理関数は時間的に並行して実行可能であることを特徴とするA1からA7のいずれかに記載のジョブ管理装置。
各ジョブオブジェクトの依存関係を示すジョブリスト情報を生成するステップと、
ジョブの処理内容を示す処理関数を、ジョブオブジェクト生成後に設定するステップと、
前記ジョブリスト情報を参照してジョブオブジェクトを選択し、そのジョブオブジェクトについて設定された処理関数を実行させるステップと、
を備えることを特徴とするジョブ管理方法。
各ジョブの処理内容を定義するコントロールオブジェクトを生成する機能と、
コントロールオブジェクトの第1のメンバ関数を実行することにより、モデルオブジェクトにおいて定義されるジョブの処理内容を設定する機能と、
コントロールオブジェクトの第2のメンバ関数を実行することにより、第1のジョブについての処理を実行させる機能と、
前記依存関係にしたがって、前記第1のジョブの出力データを渡すべき第2のジョブを特定する機能と、
前記第2のジョブについての処理を実行させる機能と、
をコンピュータに発揮させることにより、複数のジョブを依存関係にしたがって実行させることを特徴とするジョブ管理プログラム。
Claims (7)
- 前段にあたるジョブの出力データに基づいて後段にあたるジョブが実行されるように依存関係が定められた複数のジョブを実行するための装置であって、
ジョブのタイプに応じてあらかじめ定義されたクラスから、ジョブオブジェクトを生成するジョブオブジェクト生成部と、
各ジョブオブジェクトのデータの利用関係である依存関係を示すジョブリスト情報を生成するジョブリスト情報生成部と、
ジョブの処理した結果を返す処理関数を、ジョブオブジェクトが生成された後に当該ジョブオブジェクトの変数に注入する処理注入部と、
複数の処理関数に対して別々のスレッドを割り当てることにより、複数の処理関数を時間的に並行して実行させる実行指示部と、を備え、
前段にあたるジョブオブジェクトと後段にあたるジョブオブジェクトの関係において、前記後段にあたるジョブオブジェクトの処理関数であって、当該後段にあたるジョブオブジェクトが生成された後に注入された処理関数は、前記前段にあたるジョブオブジェクトの処理関数であって、当該前段にあたるジョブオブジェクトが生成された後に注入された処理関数が生成する出力データを変数として所定の処理を実行し、出力データが未生成の段階においては出力データが生成されるまで待機することを特徴とするジョブ管理装置。 - データを送受するためにあらかじめ定義されたクラスから、アイテムオブジェクトを生成するアイテムオブジェクト生成部と、
前段にあたるジョブオブジェクトと後段にあたるジョブオブジェクトのセットごとに設定され、アイテムオブジェクトを保持するアイテムオブジェクト保持部と、を更に備え、
前記アイテムオブジェクト生成部は、前段にあたるジョブオブジェクトと後段にあたるジョブオブジェクトのセットごとにアイテムオブジェクトを生成して、対応するアイテムオブジェクト保持部に生成したアイテムオブジェクトを格納し、
前段にあたるジョブオブジェクトの処理関数は、後段にあたるジョブオブジェクトとの関係で設定されたアイテムオブジェクト保持部からアイテムオブジェクトを取り出して出力データを記録した上で、後段にあたるジョブオブジェクトにアイテムオブジェクトを転送し、
前記後段にあたるジョブオブジェクトの処理関数は、転送された前記アイテムオブジェクトから出力データを読み出したあと、前記アイテムオブジェクトを前記アイテムオブジェクト保持部に戻すことを特徴とする請求項1に記載のジョブ管理装置。 - 前記アイテムオブジェクト保持部は、複数個のアイテムオブジェクトを保持可能であって、
前記アイテムオブジェクト生成部は、前段にあたるジョブオブジェクトと後段にあたるジョブオブジェクトのセットに対応して複数個のアイテムオブジェクトを生成して、対応するアイテムオブジェクト保持部に前記複数個のアイテムオブジェクトを格納することを特徴とする請求項2に記載のジョブ管理装置。 - 前段にあたるジョブオブジェクトの処理関数から後段にあたるジョブオブジェクトの処理関数に転送されるアイテムオブジェクトを所定の上限個数まで保持するキューを、前段にあたるジョブオブジェクトと後段にあたるジョブオブジェクトのセットごとに生成するキュー生成部、を更に備え、
前段にあたるジョブオブジェクトの処理関数は後段にあたるジョブオブジェクトの処理関数に対して前記キューを介して、アイテムオブジェクトを転送し、
前記前段にあたるジョブオブジェクトの処理関数は、前記キューに投入されているアイテムオブジェクトの数が前記所定の上限個数に達しているときには前記キューに空きができるまで待機し、
前記後段にあたるジョブオブジェクトの処理関数は、前記キューにアイテムオブジェクトが存在しないときには、前記前段にあたるジョブオブジェクトの処理関数がアイテムオブジェクトを投入するまで待機することを特徴とする請求項2または3に記載のジョブ管理装置。 - 前記アイテムオブジェクト生成部は、データ型に関わらずバイナリ形式でデータを保持するためのバイナリデータ配列にデータを格納して管理するクラスからアイテムオブジェクトを生成することを特徴とする請求項2から4のいずれかに記載のジョブ管理装置。
- 組織業務の構成単位としてのジョブに対応するジョブオブジェクトを、ジョブのタイプに応じてあらかじめ定義されたクラスから生成するステップと、
各ジョブオブジェクトのデータの利用関係である依存関係を示すジョブリスト情報を生成するステップと、
ジョブの処理した結果を返す処理関数を、ジョブオブジェクト生成後に当該ジョブオブジェクトの変数に注入するステップと、
複数の処理関数に対して別々のスレッドを割り当てることにより、複数の処理関数を時間的に並行して実行させるステップと、を備え、
前段にあたるジョブオブジェクトと後段にあたるジョブオブジェクトの関係において、前記後段にあたるジョブオブジェクトの処理関数であって、当該後段にあたるジョブオブジェクトが生成された後に注入された処理関数には、前記前段にあたるジョブオブジェクトの処理関数であって、当該前段にあたるジョブオブジェクトが生成された後に注入された処理関数が生成する出力データを変数として所定の処理を実行させ、出力データが未生成の段階においては出力データが生成されるまで待機させることを特徴とするジョブ管理方法。 - 前段にあたるジョブの出力データに基づいて後段にあたるジョブが実行されるように、複数のジョブのデータの利用関係である依存関係を定義するオブジェクトとしてモデルオブジェクトを生成する機能と、
各ジョブの処理内容を定義するコントロールオブジェクトを生成する機能と、
コントロールオブジェクトの第1のメンバ関数を実行することにより、ジョブの処理した結果を返す処理関数をジョブごとに当該ジョブオブジェクトの変数に注入する機能と、
コントロールオブジェクトの第2のメンバ関数を実行することにより、複数のジョブの処理関数に別々のスレッドを割り当て、複数の処理関数を時間的に並行して実行させる機能と、
前段にあたるジョブと後段にあたるジョブの関係において、前記後段にあたるジョブの処理関数であって、当該後段にあたるジョブオブジェクトが生成された後に注入された処理関数には、前記前段にあたるジョブの処理関数であって、当該前段にあたるジョブオブジェクトが生成された後に注入された処理関数が生成する出力データを変数として所定の処理を実行させ、出力データが未生成の段階においては出力データが生成されるまで待機させる機能と、
をコンピュータに発揮させることにより、複数のジョブを依存関係にしたがって実行させることを特徴とするジョブ管理プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006089277A JP5033343B2 (ja) | 2006-03-28 | 2006-03-28 | ジョブ管理装置およびジョブ管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006089277A JP5033343B2 (ja) | 2006-03-28 | 2006-03-28 | ジョブ管理装置およびジョブ管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2007265029A JP2007265029A (ja) | 2007-10-11 |
JP5033343B2 true JP5033343B2 (ja) | 2012-09-26 |
Family
ID=38637952
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006089277A Expired - Fee Related JP5033343B2 (ja) | 2006-03-28 | 2006-03-28 | ジョブ管理装置およびジョブ管理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5033343B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6708919B2 (ja) | 2015-08-03 | 2020-06-10 | 富士通株式会社 | 情報処理プログラム、情報処理装置およびレコードデータ処理方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3349547B2 (ja) * | 1993-05-10 | 2002-11-25 | 株式会社日立製作所 | スケジューリングシステム |
EP0935192A1 (en) * | 1998-02-09 | 1999-08-11 | Sony Europa B.V. | Method and system for communication between application programs and a network |
JP2000112770A (ja) * | 1998-09-30 | 2000-04-21 | Matsushita Electric Ind Co Ltd | プログラム翻訳装置 |
JP3663950B2 (ja) * | 1999-01-20 | 2005-06-22 | 株式会社デンソー | 自動車用電子制御装置 |
JP2002297394A (ja) * | 2001-04-02 | 2002-10-11 | Canon Sales Co Inc | 情報処理装置及びその方法とそのシステム |
JP4286481B2 (ja) * | 2001-12-07 | 2009-07-01 | 株式会社野村総合研究所 | クラスタリングシステム |
-
2006
- 2006-03-28 JP JP2006089277A patent/JP5033343B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2007265029A (ja) | 2007-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5140067B2 (ja) | ワークフローにおいて継続をモデル化するフレームワーク | |
JP4806240B2 (ja) | コンポーネント化された拡張可能なワークフローモデル | |
US9911092B2 (en) | Systems and methods for a real-time workflow platform | |
US8332811B2 (en) | Systems and methods for generating source code for workflow platform | |
JP5710852B2 (ja) | 設計時および実行時にワークフローを継ぎ目なくオーサリングし編集するためのフレームワーク | |
JP5173128B2 (ja) | フローベースおよび制約ベースのワークフローをオーサリングし、実行するための統一モデル | |
US8589864B2 (en) | Automating the creation of an application provisioning model | |
US20100042670A1 (en) | Integrated development engine for a cloud computing environment | |
JP2004520635A (ja) | 石油会社のモデル資産のアプリケーション・フレームワークを有するオブジェクト指向ソフトウェア・アプリケーション | |
AU2005221076A1 (en) | Task execution using graphical representation of task dependency | |
KR20080106561A (ko) | 실세계 프로세스들을 모델링하기 위한 방법 및 시스템과 컴퓨터 판독가능 매체 | |
JPH0764778A (ja) | オブジェクト指向コンピュータ・システム及びオブジェクト実行方法 | |
JP5007060B2 (ja) | ジョブ管理装置およびジョブ管理方法 | |
US7490098B2 (en) | Apparatus, system, and method for processing hierarchical data in disparate data repositories | |
US7640538B2 (en) | Virtual threads in business process programs | |
JP6691554B2 (ja) | 基礎をなす永続性フレームワークおよびクラウドベースの統合サービスに含まれるランタイム・エンジンからウェブ・ユーザーインターフェース・アプリケーションを隔離するためのシステムおよび方法 | |
JP5033343B2 (ja) | ジョブ管理装置およびジョブ管理方法 | |
US20200293383A1 (en) | System and Method for Developing Modularized Application | |
KR20010110097A (ko) | 작업흐름-관리-시스템에서의 보관 방법 | |
JP5007041B2 (ja) | ジョブ管理装置およびジョブ管理方法 | |
US20240143487A1 (en) | Secure testing of attachment functionality of objects | |
Andrews | Design and Development of a Run-time Object Design and Instantiation Framework for BPM Systems | |
Shi et al. | Business Objects-A New Business Process Modeling Approach | |
JP2014021665A (ja) | ジョブ管理装置 | |
Murillo et al. | Distributed Seismic Unix: a tool for seismic data processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080908 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110513 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110524 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110714 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20120228 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120522 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20120529 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120626 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120702 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5033343 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150706 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |