(58)【調査した分野】(Int.Cl.,DB名)
少なくとも1つのノードを含むフローを実行するように構成されるとともに、判定ユニット、作成ユニット及び実行ユニットを備えるフロースケジューリング装置であって、
前記判定ユニットが、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定するように構成され、
前記作成ユニットが、前記スケジュールされるべきノード上に存在するとともに前記トランザクションセーブポイントのあとに存在するスケジュールされるべきタスクを含む非同期タスクを、前記判定ユニットにより判定された前記トランザクションセーブポイントに従って作成するように構成され、
前記実行ユニットが、前記フローにおける前記非同期タスク以外のタスクを含むトランザクションを実行するために第1のスレッドを使用し、前記第1のスレッドにより実行された前記トランザクションをコミットし、実行された前記トランザクションが前記第1のスレッドによりコミットされた後に、前記非同期タスクを実行するために第2のスレッドを使用するように構成される、フロースケジューリング装置。
前記実行ユニットが、前記第1のスレッドが属する第1のフローエンジンプロセスのスケジュールされるべきタスクキューに前記非同期タスクを配置するように更に構成される、請求項1に記載のフロースケジューリング装置。
前記実行ユニットが、前記第1のスレッドが属する第1のフローエンジンプロセスのスケジュールされるべきタスクキューに前記非同期タスクを配置するように構成されることが、前記実行ユニットが、登録済みトランザクションコミッションイベントコールバックリスナーに従ってリッスンすることにより、前記第1のスレッドにより実行された前記トランザクションが首尾よくコミットされたことが得られる場合に、前記第1のフローエンジンプロセスの前記スケジュールされるべきタスクキューに前記非同期タスクを配置するように構成されることを含む、請求項2に記載のフロースケジューリング装置。
前記実行ユニットが、前記非同期タスクの実行が完了されるまえに前記第2のスレッドが例外的に終了する場合に、前記スケジュールされるべきタスクキューから前記非同期タスクを取り出し、前記非同期タスクを実行するために第3のスレッドを使用するように更に構成される、請求項1から請求項3のいずれか一項に記載のフロースケジューリング装置。
前記トランザクションセーブポイントが、データベースに存在するフローの定義に記憶される、請求項1から請求項5のいずれか一項に記載のフロースケジューリング装置。
当該方法が、前記非同期タスクの実行が完了されるまえに前記第2のスレッドが例外的に終了する場合に、前記スケジュールされるべきタスクキューから前記非同期タスクを取り出し、前記非同期タスクを実行するために第3のスレッドを使用するステップを更に含む、請求項8から請求項10のいずれか一項に記載の方法。
当該方法が、前記非同期タスクの実行が完了されるまえに前記第2のスレッドが属する第1のフローエンジンプロセスが例外的に終了する場合に、第2のフローエンジンプロセスにより、前記データベースから前記非同期タスクを獲得し、前記非同期タスクをスケジュールするとともに実行するステップを更に含む、請求項12に記載の方法。
少なくとも1つのノードを含むフローを実行するように構成されるとともに、メモリ及びプロセッサを備える、フロースケジューリングを実行するためのコンピュータ装置であって、
前記メモリが、当該コンピュータ装置の命令を記憶するように構成され、
前記プロセッサが、下記の、
スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定するステップと、
前記スケジュールされるべきノード上に存在するとともに前記トランザクションセーブポイントのあとに存在するスケジュールされるべきタスクを含む非同期タスクを、前記トランザクションセーブポイントに従って作成するステップと、
前記フローにおける前記非同期タスク以外のタスクを含むトランザクションを実行するために第1のスレッドを使用し、前記第1のスレッドにより実行された前記トランザクションをコミットするステップと、
実行された前記トランザクションが前記第1のスレッドによりコミットされた後に、前記非同期タスクを実行するために第2のスレッドを使用するステップとを達成するために、前記メモリ内の前記命令を実行するように構成される、コンピュータ装置。
前記プロセッサが、前記非同期タスクの実行が完了されるまえに前記第2のスレッドが例外的に終了する場合に、前記スケジュールされるべきタスクキューから前記非同期タスクを取り出し、前記非同期タスクを実行するために第3のスレッドを使用するように更に構成される、請求項15又は請求項16に記載のコンピュータ装置。
【背景技術】
【0003】
ワークフローは、時間系列又は論理関係に従って関連のビジネスアクティビティを相互接続することにより形成されたビジネスフローである。ビジネスオペレーションの間、文書、情報又はタスクは、組織の仕様に従った複数の関係者の間で転送されるか、処理されるか、又は実行される。ワークフロー技術の最も顕著な特徴は、コンピュータアプリケーション環境におけるビジネスプロセスの一部又は全体の自動化であり、そのようなプロセスは、概して、人間及び機械の関与を必要とするアクティビティ、例えば情報技術(IT、Information Technology)アプリケーションプログラム及びツールとの対話プロセスのことを指す。ワークフローは、一群のタスク(又はアクティビティ)と、タスク(又はアクティビティ)の間の順序関係とを含み、そして、フロー及びタスクの開始条件並びに終了条件と、各タスクの説明とを更に含む。
【0004】
ワークフロー管理システムは、ワークフローを定義して、作成して、そして実行するシステムのことを指す。システムは、主として、次の3つの態様、すなわち、ワークフロープロセス及びそのアクティビティを定義するとともに、モデリングする構築機能、オペレーション環境におけるワークフロープロセスを管理するとともに、ワークフロープロセスにおけるアクティビティをスケジュールするオペレーション制御機能、並びに、ワークフローのオペレーションの間、ユーザ(ビジネスジョブの関係者又は管理者)及び外部のアプリケーションプログラムと対話するオペレーション対話機能における機能サポートを提供する。
【0005】
現在、ワークフロー技術は、広く適用される。例えば、ワークフローは、ビジネスフロー管理のために、企業のビジネスに導入される。ビジネスプロセス管理(Business Process Management、BPM)に関係したミドルウェアスイートは、概して、モデリングツール(ビジネスフローのモデリングに関与する)、BPMエンジン(ビジネスフローの駆動に関与する)、フロー管理コンソール、そして技術的フレームワークプラットホームを含む。ビジネスがフローの編成、展開、オペレーション及びスケジューリングを達成することを支援し、それにより、企業のために、企業のビジネスの発展に足並みをそろえられる様々なフローを作成するように、ミドルウェアスイートは、プロセスモデリング及びエンジンプロセスインスタンススケジューリングのためのアプリケーションプログラミングインタフェース(Application Programming Interface、API)によって上位層のビジネスを提供するために、ビジネスシステムに埋め込まれることができる。
【0006】
図1は、BPMを使用することにより編成された典型的なビジネスフローの概略図を例示する。情報の同期化から注文の履行までは、完全な口座の開設フローであり、情報の同期化から料金の同期化を通り注文の履行までの各アクティビティは、タスクである。ビジネスサービスは、各タスクに対して設定されるとともに、それらのサービスは、
図1においてあらかじめ編成された順序で実行される。各タスクは、フローのスケジューリング及び実行の間の1つのノードに対応する。口座の開設フローそのものは、本発明の懸案事項ではなく、したがって、ここでは詳細に説明されない。
【0007】
ビジネスフローに関して、顧客の要求は下記を含む。
1.フローは、最後まで正しい論理構成の前提条件の下でビジネスゴールに従ってビジネスサービスを実行することを開始することができる。
2.フローは、ビジネスの追跡及び照会のために、各ステップにおいて実行情報を記録することができる。
3.ビジネスデータの変化を伴うデータの整合性は、フローの前方フローの間保持される必要がある。
4.フローにおけるノード上で例外が発生した場合に、フローが例外ノードにおいて停止するとともに、完了されたビジネスサービススケジューリングに影響を及ぼさずにフローが実行され続けることができるまで、障害に対する再試行又は人間の介入がサポートされる。
5.エンジンプロセスが例外的に終了する場合に、プロセスの再開と同時に完了されていないタスクから実行が再開されることをサポートする必要がある。
6.フローのスケジューリング性能は高くなければならない。
【0008】
従来技術の解決法では、ビジネスフローの定義のためのサービス構成及び順序編成を達成するために、ビジュアルフロー編成ツールが最初に使用され、BPMエンジンが、ビジネス入力及び呼び出し要求に従って、前述の編成されたフローの定義に基づいて、完了までフローを前方へ駆動する。BPMエンジンのフローは、データベースにパーシストされるとともに、データの整合性を保証するために、トランザクションメカニズムが、パーシステンスプロセス(persistence process)における制御のために使用される。BPMプラットフォームとビジネスシステムとの間のトランザクションが一様にスケジュールされることを保証するために、ビジネスシステム及びBPMプラットフォームに対して、同じトランザクションフレームワーク、例えば、Spring transaction framework、又は別の同様のトランザクションフレームワークが使用される必要がある。宣言的トランザクションが、同様に、BPMプラットフォームのAPIに対する呼び出しを開始するために、ビジネスに対して設定される必要がある。宣言的トランザクションは、トランザクションが設定ファイルにおける宣言を用いて扱われることを意味する。宣言的トランザクションを使用することの利点は、トランザクションの管理が変化する場合に、再コンパイルのためにコードを変更する必要がなく、設定ファイルにおいて再構成を行うことだけが必要である、ということである。ビジネスがフローをフローの前方へ駆動するためにフロースタートAPIを呼び出すと、トランザクション制御が使用されるので、もし中間ノード上で例外が発生したならば、トランザクションはトランザクション開始点にロールバックされるが、しかし、例外ノードに対するロールバックはサポートされていないとともに、同様に、実行は例外ノードから再開できない。
【0009】
したがって、ビジネスフロースケジューリングの間、従来技術は、ビジネスシステムとBPMプラットフォームとの間のデータの整合性を保証することも、例外が発生した場合にフローが例外ノードで終了するとともに、実行があとで例外ノードから再開されることを保証することもできない。
【発明の概要】
【0010】
本発明の実施例は、ビジネスフローをスケジュールするためのコンピュータ装置、方法及び装置を提供し、それは、ビジネスシステムとBPMプラットフォームとの間のデータの整合性を保証することができるばかりでなく、例外が発生した場合にフローが例外ノードで終了するとともに、復旧と同時に実行が例外ノードから再開されることを保証することができる。
【0011】
本発明の実施例の技術的解決法は、下記のとおりに実施される。
【0012】
第1の態様によれば、フロースケジューリングを実行するためのコンピュータ装置が提供され、それは、少なくとも1つのノードを含むフローをスケジュールするとともに実行するように構成されるとともに、メモリ及びプロセッサを含み、前記メモリは、当該コンピュータ装置の命令を記憶するように構成され、前記プロセッサは、下記の、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定するステップと、前記スケジュールされるべきノード上に存在するとともに前記トランザクションセーブポイントのあとに存在するスケジュールされるべきタスクを含む非同期タスクを、前記トランザクションセーブポイントに従って作成するステップと、前記フローにおける前記非同期タスク以外のタスクを含むトランザクションを実行するために第1のスレッドを使用し、前記第1のスレッドにより実行された前記トランザクションを
コミットするステップと、前記非同期タスクを実行するために第2のスレッドを使用するステップとを達成するために、前記メモリ内の前記命令を実行するように構成される。
【0013】
第1の態様の第1の可能な実施方法において、前記プロセッサは、前記第1のスレッドが属する第1のフローエンジンプロセスのスケジュールされるべきタスクキューに前記非同期タスクを配置するように更に構成される。
【0014】
第1の態様の第1の可能な実施方法に関連して、第2の可能な実施方法において、前記第1のスレッドが属する第1のフローエンジンプロセスのスケジュールされるべきタスクキューに前記非同期タスクを配置する前記ステップは、登録済みトランザクション
コミッションイベントコールバックリスナーに従ってリッスンすることにより、前記第1のスレッドにより実行された前記トランザクションが首尾よく
コミットされたことが得られる場合に、前記第1のフローエンジンプロセスの前記スケジュールされるべきタスクキューに前記非同期タスクを配置するステップを含む。
【0015】
第2の態様によれば、ビジネスフローをスケジューリングするための方法が提供され、当該方法は、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定するステップと、前記スケジュールされるべきノード上に存在するとともに前記トランザクションセーブポイントのあとに存在するスケジュールされるべきタスクを含む非同期タスクを、前記トランザクションセーブポイントに従って作成するステップと、前記フローにおける前記非同期タスク以外のタスクを含むトランザクションを実行するために第1のスレッドを使用し、前記第1のスレッドにより実行された前記トランザクションを
コミットするステップと、前記非同期タスクを実行するために第2のスレッドを使用するステップとを含む。
【0016】
第2の態様の第1の可能な実施方法において、前記第1のスレッドにより実行された前記トランザクションを
コミットする前記ステップのあとに、当該方法は、前記第1のスレッドが属する第1のフローエンジンプロセスのスケジュールされるべきタスクキューに前記非同期タスクを配置するステップを更に含む。
【0017】
第2の態様の第1の可能な実施方法に関連して、第2の可能な実施方法において、当該方法は、トランザクション
コミッションイベントコールバックリスナーを登録するステップを更に含み、前記第1のスレッドが属する第1のフローエンジンプロセスのスケジュールされるべきタスクキューに前記非同期タスクを配置する前記ステップは、リッスンすることにより、前記第1のスレッドにより実行された前記トランザクションが首尾よく
コミットされたことが得られる場合に、前記第1のフローエンジンプロセスの前記スケジュールされるべきタスクキューに前記非同期タスクを配置するステップを具体的に含む。
【0018】
第2の態様の第3の可能な実施方法において、非同期タスクを作成する前記ステップのあとに、当該方法は、前記非同期タスクをパーシストするステップを更に含み、前記第1のスレッドにより実行された前記トランザクションを
コミットする前記ステップのあとに、当該方法は、前記のパーシストされた非同期タスクをデータベースに記憶するステップと、前記非同期タスクの実行が完了されるまえに前記第2のスレッドが属する第1のフローエンジンプロセスが例外的に終了する場合に、第2のフローエンジンプロセスにより、前記データベースから前記非同期タスクを獲得し、前記非同期タスクをスケジュールするとともに実行するステップとを更に含む。
【0019】
第3の態様によれば、フロースケジューリング装置が提供され、それは、少なくとも1つのノードを含むフローを実行するように構成されるとともに、判定ユニット、作成ユニット及び実行ユニットを含み、前記判定ユニットは、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定するように構成され、前記作成ユニットは、前記スケジュールされるべきノード上に存在するとともに前記トランザクションセーブポイントのあとに存在するスケジュールされるべきタスクを含む非同期タスクを、前記判定ユニットにより判定された前記トランザクションセーブポイントに従って作成するように構成され、前記実行ユニットは、前記フローにおける前記非同期タスク以外のタスクを含むトランザクションを実行するために第1のスレッドを使用し、前記第1のスレッドにより実行された前記トランザクションを
コミットするとともに、前記非同期タスクを実行するために第2のスレッドを使用するように構成される。
【0020】
第4の態様によれば、コンピュータのプロセッサにより実行可能な命令が記憶されるコンピュータ読み取り可能な記憶媒体が提供され、前記命令は、下記の、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定するステップと、前記スケジュールされるべきノード上に存在するとともに前記トランザクションセーブポイントのあとに存在するスケジュールされるべきタスクを含む非同期タスクを、前記トランザクションセーブポイントに従って作成するステップと、前記フローにおける前記非同期タスク以外のタスクを含むトランザクションを実行するために第1のスレッドを使用し、前記第1のスレッドにより実行された前記トランザクションを
コミットするステップと、前記非同期タスクを実行するために第2のスレッドを使用するステップとを実行するために使用される。
【0021】
本発明の実施例の技術的解決法では、トランザクションセーブポイントが、フローノードに対して設定されるとともに、非同期タスク以外のスケジュールされたタスクを実行するスレッドが、実行を完了したあとでトランザクションを
コミットする、ということが確認されることができる。非同期タスク以外のスケジュールされたタスクがトランザクションメカニズムに従って
コミットされるので、データの整合性は保証される。新しいスレッドは、トランザクションセーブポイントのあとの非同期タスクをスケジュールするために使用され、その結果、タスクの間のトランザクション分割が実行される。例外が発生した場合に、フロースケジューリングは、非同期タスクにおいて終了するとともに、復旧と同時に、実行は非同期タスクから再開される。
【発明を実施するための形態】
【0023】
本発明の目的、技術的解決法及び利点を、より明確に及びより分かりやすくするために、下記は、添付図面及び実施例を参照して、さらに本発明を詳細に説明する。
【0024】
トランザクションの実行が失敗する場合に、トランザクションが、トランザクションの開始ノードの代わりに中間ノードにロールバックされることができることを実装するために、新しいトランザクションセーブポイント(savepoint)をフローにおけるノードに追加するとともに、各ノードを別々にパーシストすることが望ましいかもしれない。BPMエンジンがフローを駆動すると、トランザクションセーブポイントに遭遇する場合に、トランザクションセーブポイントのまえのトランザクションが最初に
コミットされ、次に、新しいトランザクションが、BPMフローの次のノードの実行を制御するために作成される。
【0025】
具体的な実施方法が
図2において示されたシナリオを一例として使用することにより説明され、ここで、ビジネスAPI1、BPMスケジューリングAPI、そしてビジネスAPI2が、宣言的トランザクションT1に対して設定されるとともに、T1は最も外側のトランザクションである。ビジネスAPI1及びビジネスAPI2は、ビジネスの実行方法であり、そしてBPMスケジューリングAPIは、プラットフォームのスケジューリング方法である。内側のトランザクションT2は、BPMスケジューリングAPIのために事前設定されるとともに、T2は、自動的にビジネストランザクションT1に加わる。トランザクションセーブポイントは、BPMスケジューリングAPIに事前設定される。トランザクションセーブポイントに従って、内側のトランザクションT2が、先に
コミットされ得るとともに、新しい内側のトランザクションT3が、BPMスケジューリングAPIのフローの残りの完了されていない部分のために作成され、ここで、T3は、BPMフローの次のノードのフローを制御する。統一されたトランザクション管理が使用されるので、T3がビジネスAPI2を管理することができない間、T2が
コミットされる場合に、T1は先に
コミットされ、その結果、トランザクション管理がビジネスAPI2のために存在せず、データの矛盾をもたらす。したがって、この解決法は、トランザクションが例外ノードにロールバックされることができるが、データの整合性を保証することができない。問題を解決するために、本発明の実施例では、ビジネスシステムとBPMプラットフォームとの間のデータの整合性を保証するとともに、例外が発生した場合に、トランザクションセーブポイントが設定される例外ノードでフローが終了するとともに、復旧と同時に実行が例外ノードから再開されることを保証するように、トランザクションセーブポイントのあとのスケジュールされるべきタスク以外のタスクを含むトランザクションが最初に
コミットされ、次に、新しいスレッドが、フローにおけるトランザクションセーブポイントのあとのスケジュールされるべきタスクを実行するために使用される。
【0026】
理解を容易にするために、フロー、トランザクション、タスク、スレッド及びプロセスという用語が説明される。フロー、トランザクション及びタスクは、ビジネスに関しての記述であり、そしてスレッド及びプロセスは、機械の実行に関しての記述である。フローは全体のビジネスに対応しており、そして複数のタスクを含み得る。フローは、プロセスにより管理される。1つのトランザクションは、1つのスレッドにより実行され、そして1つのスレッドは、複数のトランザクションを含み得る。1つのトランザクションは、1つ又は複数のタスクを含み得る。スレッドにより実行される場合に、タスクは、同様にノードと呼ばれる。タスクは、分割され得る。1つのプロセスは、1つのフローエンジンにおいて実行される。1つのプロセスは、複数のスレッドを含み得る。スレッドは、プロセスにより駆動される。
【0027】
図3は、本発明の一実施例によるBPMビジネスアプリケーションシステムの構造的な図である。ビジネスシステム301は、ビジネスフローの編成、展開、オペレーション及びスケジューリングを達成するように構成される。ビジネスシステムは、クラスタシステムであり得るとともに、ここで、クラスタシステムは、相互接続されたコンピュータを含む並列又は分散処理システムである。実施方法において、ビジネスシステム301は、例えば、サーバa302及びサーバb307を含む、少なくとも1つのサーバを含み得る。サーバ302は、ビジネスモジュール303、及びBPMエンジン304を具体的に含み得る。サーバbは、サーバaの構造と同様の構造を有している。ビジネスモジュール303は、ユーザのビジネス要求を受け取り、BPMエンジン304に対して、ビジネスフロースケジューリング要求を開始するように構成される。BPMエンジン304は、データベース308からフローの定義を読み取るように構成される。データベース308は、フローの定義及び関連するデータを記憶する。
【0028】
ビジネスシステム301におけるサーバは、ローカルなビジネスフロー306又はサードパーティのビジネスシステム(図には示されていない)と、ローカルなビジネスフロー306又はサードパーティのビジネスシステムにおけるサービスを呼び出すために更に対話し得る。ビジネスフロー306は、少なくとも1つのタスクを含む。
図3において示された一例では、ビジネスフロー306は、タスク1〜nを含み、ここで、nは2を超える自然数である。ビジネスシステム301は、フローの定義を生成するとともに、フローの定義をデータベース308に記憶するために、BPMモデリングツール305を使用することにより、ビジネスフロー306を要約する。フロータスクのトランザクションセーブポイントは、フローの定義において設定される。フローの定義は、フローにおけるタスクに対応するノード、ノードの間の関係、入力/出力データ、トランザクションセーブポイントなどを含む。フローの定義は、フローチャート又は静的な設定ファイルを使用することにより表され得るとともに、データベース308又はファイルシステムに記憶される。ビジネススケジューリング要求を受け取る場合に、サーバのBPMエンジンは、フロースケジューリングを実行するためにフローの定義を読み取る。もしスケジュールされたノードがトランザクションセーブポイントを含むならば、トランザクションセーブポイントのあとのスケジュールされるべきタスクのために非同期タスクが作成される。非同期タスクのためのフロースケジューリングは下記を具体的に含み、すなわち、トランザクションが、トランザクションセーブポイントのあとのスケジュールされるべきタスク以外のタスクにより形成され、そしてスレッドにより実行されるとともに、トランザクションを実行するスレッドが終了される場合に、対応するトランザクションが首尾よく
コミットされたあとで、非同期タスクである、トランザクションセーブポイントのあとのスケジュールされるべきタスクが、別のスレッドによりスケジュールされて実行される。さらに、非同期タスクはデータベースに書き込まれ、その結果、非同期タスクを実行するプロセスが失敗する場合に、非同期タスクは、別のサーバのBPMエンジンプロセスにより獲得されることができる。
【0029】
ビジネスシステム301による非同期タスクのためのフロースケジューリングにおいて例外が発生した場合に、BPMエンジン304内に存在するとともに、非同期タスクを実行するスレッドは、スケジューリング及び実行を続ける代りに、例外が発生したノードにおいて停止する。もし非同期タスクを実行しているスレッドが例外であるならば、非同期タスクの実行を再開するように、BPMエンジンは、非同期タスクを実行するために、非同期タスクスケジューリングスレッドプールから、別の待機スレッドを獲得する。もし現在のBPMエンジンプロセスが例外的に終了するならば、別のサーバ、例えばビジネスシステムにおけるサーバbのBPMエンジンプロセスが、サーバ内のBPMエンジンプロセスが例外的に終了したことを示す通知メッセージを監視又は受信することにより、この例外的な終了を確認し、その場合に、引き継ぎ方針に従って、データベースから完了されていない非同期タスクを獲得するとともに、例外的に終了したBPMエンジンプロセスによって実行されているタスクの実行を再開する。
【0030】
図4は、本発明の一実施例によるビジネスシステムにおけるサーバの概要の構成図である。この実施例では、サーバは、コンピュータ装置であり得るとともに、それはプロセッサベースのコンピュータを具体的に含む。
図4において示されたように、サーバ400は、バス410、プロセッサ402、メモリ404、入力/出力インタフェース406及び通信インタフェース408を含み得る。バス410は、情報が全てのコンポーネントの間で転送される経路を含み得る。プロセッサ402は、情報を処理し、そして命令又はオペレーションを実行するように構成されるとともに、具体的には、本発明の解決法のプログラムの実行を制御するように構成される、多目的の中央演算処理装置(CPU)、マイクロプロセッサ、特定用途向け集積回路(
Application-Specific Integrated Circuit、ASIC)又は1つ若しくは複数の集積回路であり得る。サーバは、情報及び命令を記憶するように構成される1つ又は複数のメモリ404を更に含み得る。メモリは、静的な情報及び命令を記憶することが可能である読出し専用メモ
リ(Read-Only Memory、ROM)若しくは別のタイプの静的なメモリ装置、情報及び命令を記憶することが可能であるランダムアクセスメモリ(
Random Access Memory、RAM)若しくは別のタイプのダイナミック記憶装置、又は磁気ディスク記憶装置であり得る。これらのメモリは、バス410を使用することにより、プロセッサ402に接続される。
【0031】
入力/出力インタフェース406は、入力装置又は出力装置を含み得る。入力装置は、ユーザにより入力されたデータ及び情報を受け取るように構成されるとともに、例えば、キーボード、マウス、カメラ、スキャナ、ライトペン、音声入力装置、タッチスクリーン、又は同様のものである。出力装置は、情報がユーザに対して出力又は表示されることを可能にするように構成されるとともに、スクリーン、プリンタ、拡声器などを含む。コンピュータ装置は、ネットワークインタフェース408を更に含む。ネットワークインタフェースは、別の装置、又はイーサネット、無線アクセスネットワーク(RAN)若しくは無線ローカルエリアネットワーク(WLAN)のような通信ネットワークとの通信を容易にするために使用される、あらゆるトランシーバのような装置である。プロセッサ402は、同様に、バス410を使用することにより、入力/出力インタフェース406及びネットワークインタフェース408に接続されることができる。
【0032】
メモリ404は、ビジネスモジュール410及びBPMエンジン412のプログラムを含む、本発明の解決法を実行する要素のプログラム命令を記憶する。メモリ404は、オペレーティングシステム及び別のアプリケーションプログラムを更に記憶し得る。プロセッサ402は、メモリ404内のプログラム又は命令を読み取って実行するとともに、ネットワークインタフェース408を使用することにより、実行プロセスにおいて別の装置と通信するように構成される。具体的には、プロセッサ402がメモリ404内の命令を実行する場合に、プロセッサ402は、
図6において示されたステップ601〜604を実行することができる。
【0033】
図5は、フローエンジンの概略構造図であり、ここで、フローエンジンは
図4におけるBPMエンジン412である。
図5において示されたように、フローエンジン510は、フローパーザ511、タスクマネージャ512及びタスクエグゼキュータ513を含む。フローパーザ511は、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定するように構成される。具体的には、フローパーザ511は、データベース308からフローの定義を読み取り、そしてスケジュールされるべきノードに対してトランザクションセーブポイントが設定されるかどうかを判定するために、フローの定義を構文解析する。スケジューリングの間に、あらかじめ設定されたトランザクションセーブポイントがスケジュールされるべきノード上で発見される場合に、タスクマネージャ512は、現在スケジュールされたフローノードを実行するスレッドにおいて非同期タスクを作成する。非同期タスクは、フローの定義におけるトランザクションセーブポイントのあとの予定外のタスクを含む。非同期タスクは、現在のスレッドにより実行されることになっていないが、しかし、現在のスレッドが終了されたあとで、別のスレッド、すなわち第2のスレッドによりスケジュールされて実行される。タスクマネージャ512は、データベースに書き込むために、作成された非同期タスクを更にパーシストする。
【0034】
タスクマネージャ512は、宣言的トランザクションのために、トランザクション
コミッションイベントコールバックリスナー(callback)を更に登録する。トランザクション
コミッションイベントコールバックリスナーは、一度トランザクション
コミッションイベントがリッスンすることにより獲得されれば、事前に登録されたコールバック方法が呼び出されることを意味する。トランザクション
コミッションイベントコールバックリスナーの目的は、トランザクションセーブポイントのまえのトランザクションが
コミットされたあとで、非同期タスクのスケジューリングが行われることを保証することである。
【0035】
現在スケジュールされたフローノードを実行するスレッドは、現在のスレッドと呼ばれる。1つのスレッドの実行が完了されたあとで、スレッドは、外側の宣言的トランザクションに戻り、スレッドが戻ることは、そのスレッドが終了されるとともに、新しいスレッドが開始されることができる、ということを示す。現在のスレッドが終了される場合に、スレッドに対応する最も外側の宣言的トランザクションが、スレッドが戻ることによって
コミットされる。トランザクション
コミッションイベントコールバックリスナーがあらかじめ登録されているので、リッスンすることにより、外側のトランザクションが
コミットされたことが得られる場合に、タスクマネージャ512は、事前に登録されたコールバック方法を使用することにより、スレッドにより共有されたホームBPMエンジンプロセスのスケジュールされるべきタスクキュー515に作成された非同期タスクを配置する。現在のスレッドが終了される場合に、タスクマネージャ512は、同時に、データベースに非同期タスクを更に書き込む。タスクキュー515におけるタスクデータはデータベースにおけるタスクデータと同じであり、一方、タスクキューにおけるタスクがメモリに一時的に記憶されるとともに、データベースにおけるデータが持続的に記憶されることができるという点で差異がある。非同期タスクスケジューリングスレッドプール内のスレッドは、スケジューリングのためにタスクキューから非同期タスクを獲得し得るとともに、スケジューリングが成功したあとで、データベースから非同期タスクを削除し得る。
【0036】
タスクエグゼキュータ513は、非同期タスクを実行するために第2のスレッドを使用するように構成される。複数の待機スレッドは、非同期タスクスケジューリングスレッドプールにあらかじめ適用され、開始されるのを待っている。第2のスレッドは、非同期タスクスケジューリングスレッドプールから獲得される。
【0037】
非同期タスクのスケジューリングの間に、もし非同期タスクを実行する第1のBPMエンジンプロセスにおいて例外が発生したならば、別のサーバの第2のBPMエンジンプロセスは、監視することにより、第1のBPMエンジンプロセスが例外であることを確認するか、又は、第1のBPMエンジンプロセスが例外的に終了したことを示す通知メッセージを受信する。第2のBPMエンジンプロセスは、データベースから、例外的なBPMエンジンプロセスにより完了されていない同期タスクを獲得するとともに、第2のBPMエンジンのタスクエグゼキュータは、非同期タスクを実行し続ける。
【0038】
この実施例では、トランザクションセーブポイントが、フローノードに対して設定され、その結果、非同期タスク以外のスケジュールされたタスクを実行するスレッドは、実行を完了したあとで外側のトランザクションに自動的に戻る。外側のトランザクションがトランザクションメカニズムに従って
コミットされるので、データの整合性は保証される。新しいスレッドが、トランザクションセーブポイントのあとの非同期タスクをスケジュールするために使用され、その結果、タスクノードの間のトランザクション分割が実行される。例外が発生した場合に、フロースケジューリングは、非同期タスクにおいて終了するとともに、復旧と同時に、実行は非同期タスクから再開される。さらに、高性能のフロー実行解決法が、スケジューリングのための非同期タスクスケジューリングスレッドプールを使用することにより提供される。
【0039】
図6は、本発明の一実施例によるフロースケジューリング方法のフローチャートである。下記で説明される方法は、
図4において示されたサーバ、又は
図5において示されたフローエンジンにより実行され得る。
【0040】
ステップ601:フローエンジンが、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定する。
【0041】
BPMモデリングツールがフローチャートを組み立てるために使用される場合に、トランザクションセーブポイントは、フローにおけるノードの間又はノードの中に事前設定される。トランザクションセーブポイントの構成は、フォーマットされた方法で、フローの定義に記憶される。もしフローの定義がビジネスプロセスモデル及び表記法(Business Process Model and Notation、BPMN)に準拠しているならば、トランザクションセーブポイントは、サービスタスク(Service Task)のようなアクティビティ(Activity)の拡張属性を使用することにより記憶される。
【0042】
例えば、<startEvent id=“startSimple” name=“Start” ufl:asynExecute=“true”/>であり、ここで、“asynExecute=“true””は、非同期スケジューリングがノードにより必要とされるということ、及び、トランザクションセーブポイントが設定されるということを示す。
【0043】
スケジューリングの間、フローエンジンは、フローの定義に従って、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることが分かる。トランザクションセーブポイントを定義するためにXML記述が使用される一例において、トランザクションセーブポイントのためのXML記述は、フローノードの定義の記述の先頭又は中程に配置され得る。どちらの方法においても、フローエンジンは、構文解析により、ノードに対してトランザクションセーブポイントが設定されることを判定することができる。
【0044】
ステップ602:フローエンジンが、フローの定義内にあり、スケジュールされるべきノード上に存在するとともに、トランザクションセーブポイントのあとに存在するスケジュールされるべきタスクを含む非同期タスクを、判定ユニットにより判定されたトランザクションセーブポイントに従って作成する。
【0045】
非同期タスクが作成されたあとで、非同期タスクは、更にパーシストされることができ、それは、具体的には、データベースに書き込むために、非同期タスクをデータベース記憶インタフェースにバッファすることである。
【0046】
ステップ603:フローエンジンが、フローにおける非同期タスク以外のタスクを含むトランザクションを実行するために第1のスレッドを使用し、完了すると、トランザクションを
コミットする。
【0047】
第1のスレッドは終了される。第1のスレッドにより実行されるとともに、フローにおける非同期タスク以外のタスクを含むトランザクションは、完了されて
コミットされる。
コミットされたトランザクションは、トランザクションセーブポイントのまえにスケジュールされて実行されたタスクを含むとともに、外側のトランザクションにおける非同期タスク以外のトランザクションセーブポイントのあとのタスクノードを含み得る。
【0048】
第1のスレッドにより実行されたトランザクションが
コミットされる場合に、非同期タスクは、第1のスレッドが属する第1のフローエンジンプロセスのスケジュールされるべきタスクキューに配置され得る。第1のフローエンジンプロセスは、具体的には、BPMエンジンにより実行されるプロセスであり得る。第1のスレッドにより実行されたトランザクションが
コミットされたあとで、非同期タスクは、データベースに更に書き込まれる。
【0049】
ステップ604:フローエンジンが、非同期タスクを実行するために第2のスレッドを使用する。
【0050】
フローのスケジューリングを続けるように、新しいスレッド、すなわち第2のスレッドが、非同期タスクを実行するために、第1のフローエンジンプロセスにおいて使用される。非同期タスクが首尾よく処理されたあとで、フローエンジンは、データベースに記憶された非同期タスクを削除する。
【0051】
もし非同期タスクの実行が完了されるまえに第2のスレッドが例外的に終了するならば、第1のフローエンジンプロセスは、非同期タスクスケジューリングスレッドプールから、別の待機スレッド、すなわち第3のスレッドを獲得するとともに、非同期タスクの実行を再開するように、スケジュールされるべきタスクキューから取り出された非同期タスクをスケジュールするために第3のスレッドを使用する。もし第1のフローエンジンプロセスが例外的に終了するならば、第2のフローエンジンプロセスは、監視することにより、第1のフローエンジンプロセスが例外的に終了することを確認するか、又は、第1のフローエンジンプロセスが例外的に終了したことを示す通知メッセージを受信し、データベースから完了されていない非同期タスクを獲得し、そして非同期タスクをスケジュールするとともに実行するためにスレッドを割り当てる。
【0052】
本発明のこの実施方法では、トランザクションセーブポイントが、フローノードに対して設定されるとともに、非同期タスクが異なるスレッドを使用することによりスケジュールされ、それは、非同期スレッドスケジューリングであり、その結果、トランザクションセーブポイントが設定されるノードを実行するスレッドは、実行を完了したあとで外側のトランザクションに自動的に戻る。外側のトランザクションがトランザクションメカニズムに従って
コミットされるので、データの整合性は保証される。さらに、第2のスレッドが、トランザクションセーブポイントのあとの次のフローを駆動するために使用され、タスクノードの間のトランザクション分割を実行する。例外が発生した場合に、フロースケジューリングは、非同期タスクにおいて終了するとともに、復旧と同時に、実行は非同期タスクから再開される。さらに、高性能のフロー実行解決法が、スケジューリングのための非同期タスクスケジューリングスレッドプールを使用することにより提供される。
【0053】
図7は、本発明の一実施例によるフロースケジューリングの具体的な手順のフローチャートである。この実施例におけるステップの実行は、
図2において示されたように、ビジネスAPI1、BPMスケジューリングAPI、そしてビジネスAPI2がビジネスフローに含まれる一例を使用することにより説明される。トランザクションセーブポイントは、BPMスケジューリングAPIに設定される。
【0054】
ステップ701:BPMエンジンのプロセスがフロースケジューリングを起動する。
【0055】
ステップ702:BPMエンジンが、フローの定義において事前設定されたトランザクションを開始する。この実施例では、BPMエンジンにより開始されたトランザクションT1は、ビジネスAPI1、BPMスケジューリングAPI、そしてビジネスAPI2を含むように構成され、トランザクションT1は、同様に、下記では外側のトランザクションと呼ばれる。トランザクションT1は、スレッドにより実行され、スレッドは、同様に、下記では現在のスレッドと呼ばれる。
【0056】
概して、トランザクションは、1つ又は複数のタスクを含み、トランザクションは、1つのスレッドにより実行されるとともに、スレッドは、BPMエンジンプロセスにより駆動される。スレッドにより実行される場合に、タスクは、同様にノードと呼ばれる。
【0057】
ステップ703:BPMエンジンが、スケジュールされるべきノードがトランザクションセーブポイントを含むかどうかを判定し、もし含まないならばステップ704に進み、もし含むならばステップ705に進む。
【0058】
この実施例では、トランザクションセーブポイントは、BPMスケジューリングAPIにあらかじめ設定される。
【0059】
ステップ704:スケジュールされるべきノードがトランザクションセーブポイントを含まない場合、BPMエンジンが、現在のスレッドにおける次のノードを実行し続ける。現在のスレッドは、現在スケジュールされたフローノードを実行するスレッド、すなわち
図6において示された実施例における第1のスレッドである。
【0060】
ステップ705:トランザクションセーブポイントをスケジュールされるべきノード上で発見する場合に、BPMエンジンが、現在のスレッドにおいて非同期タスクを作成するとともに、非同期タスクをパーシストする。この実施例では、非同期タスクは、トランザクションセーブポイントのあとの、BPMスケジューリングAPIのスケジュールされるべきタスクを含む。この実施例では、パーシステンス(Persistence)は、具体的には、非同期タスクをデータベース記憶インタフェースにバッファすることである。パーシステンスの目的は、データ、例えばメモリ内の目的物を、リレーショナルデータベース、ディスクファイル又はXMLデータファイルに記憶することである。
【0061】
非同期タスクの設定は、具体的には、XML記述、例えばbpmn2extn:nextFlowExecutionMode=“ASYNCHRONOUS_CONTINUE”であり得る。
【0062】
ステップ706:トランザクション
コミッションイベントコールバックリスナーを登録する。非同期タスクのためのスレッド開始方法は、コールバックリスナーの登録コードにおいて定義される。トランザクション
コミッションイベントコールバックリスナーは、現在のスレッドにおけるトランザクションが
コミットされたあとに、非同期タスクのためのスレッドが開始することを保証する。トランザクション
コミッションイベントコールバックリスナーは、ステップ705のあとで登録され得るか、又は、フローの定義において事前設定され得る。
【0063】
ステップ707:現在のスレッドの実行が完了すると、現在のスレッドが戻るように外側のトランザクションT1を
コミットする。
コミットされたトランザクションT1は、ビジネスAPI1、トランザクションセーブポイントのまえのBPMスケジューリングAPIのためのスケジュールされたタスク、そしてビジネスAPI2を含む。非同期タスクである、トランザクションセーブポイントのあとのBPMスケジューリングAPIのためのスケジュールされるべきタスクは、実行又は
コミットされない。
【0064】
ステップ708:外側のトランザクションT1が
コミットされる場合に、登録済みトランザクション
コミッションイベントコールバックリスナーのコールバック方法に従って、現在のフローエンジンプロセスのスケジュールされるべきタスクキューに非同期タスクを配置する。タスクキューは、非同期タスクスケジューリングスレッドプール内のスレッドによりスケジュールされ得る。複数の待機スレッドは、非同期タスクスケジューリングスレッドプールにあらかじめ適用され、開始されるのを待っている。
【0065】
ステップ709:外側のトランザクションT1が
コミットされる場合に、非同期タスクをデータベースに更に書き込む。データベースに書き込まれたあとで、非同期タスクは、持続的に記憶されることができる。ステップ709及びステップ708を実行する順序は限定されない。
【0066】
ステップ710:現在のフローエンジンプロセスが例外的に終了するかどうかを監視するとともに、もしプロセスが例外的に終了するならばステップ711を実行するか、又は、もしプロセスが正常に実行されるならばステップ712を実行する。
【0067】
ステップ711:第2のフローエンジンプロセスが、データベースから、例外的に終了したフローエンジンプロセスにより完了されていない非同期タスクを獲得するとともに、スケジューリングを続けるためにフローを割り当て、そして完了後、ステップ713に進む。第2のフローエンジンプロセスは、別のフローエンジンプロセスが例外的に終了したかどうかを積極的に監視するか、又は、第2のフローエンジンプロセスは、第1のフローエンジンプロセスが例外的に終了したことを示す通知メッセージを受信する。
【0068】
ステップ712:現在のBPMエンジンプロセスが、非同期タスクを実行するとともに、スケジューリングを続けるために、新しいスレッド(すなわち、第2のスレッド)を使用する。新しいスレッドは、非同期タスクスケジューリングスレッドプールから獲得される。もし非同期タスクの実行が完了されるまえに非同期タスクを実行するスレッドが例外的に終了するならば、BPMエンジンは、非同期タスクを実行するための非同期タスクスケジューリングスレッドプールから、別の待機スレッド、すなわち第3のスレッドを取り出す。
【0069】
ステップ713:非同期タスクの実行を完了するとともに、データベースにおける非同期タスクを削除する。
【0070】
前述のフロースケジューリング方法に基づくと、
図8は、本発明の一実施例によるフロースケジューリング装置の構成の概略構造図である。
図8において示されたように、フロースケジューリング装置は、判定ユニット801、作成ユニット803及び実行ユニット805を含む。
【0071】
判定ユニット801は、スケジュールされるべきノードに対してトランザクションセーブポイントが設定されることを判定するように構成される。
【0072】
作成ユニット803は、スケジュールされるべきノード上に存在するとともにトランザクションセーブポイントのあとに存在するスケジュールされるべきタスクを含む非同期タスクを、判定ユニット801により判定されたトランザクションセーブポイントに従って作成するように構成される。
【0073】
実行ユニット805は、フローにおける非同期タスク以外のタスクを含むトランザクションを実行するために第1のスレッドを使用し、第1のスレッドにより実行されたトランザクションを
コミットするとともに、非同期タスクを実行するために第2のスレッドを使用するように構成される。
【0074】
実行ユニット805は、第1のスレッドが属する第1のフローエンジンプロセスのスケジュールされるべきタスクキューに、作成ユニットにより作成された非同期タスクを配置するように更に構成される。
【0075】
実行ユニット805は、登録済みトランザクション
コミッションイベントコールバックリスナーに従ってリッスンすることにより、第1のスレッドにより実行されたトランザクションが首尾よく
コミットされたことが得られる場合に、第1のフローエンジンプロセスのスケジュールされるべきタスクキューに非同期タスクを配置するように更に構成される。
【0076】
実行ユニット805は、非同期タスクをパーシストし、第1のスレッドにより実行されたトランザクションが
コミットされたあとで、パーシストされた非同期タスクをデータベースに記憶し、その結果、非同期タスクの実行が完了されるまえに第2のスレッドが属する第1のフローエンジンプロセスが例外的に終了する場合に、第2のフローエンジンプロセスがデータベースから非同期タスクを獲得し、非同期タスクをスケジュールするとともに実行する、ように更に構成される。
【0077】
判定ユニット801は、データベースに記憶されるフローの定義に従ってトランザクションセーブポイントを判定する。
【0078】
本発明のこの実施例の技術的解決法によれば、フロースケジューリング装置が、フローノードに対してトランザクションセーブポイントが設定されることを発見する場合に、非同期タスクが作成されるとともに、非同期スレッドスケジューリングが非同期タスクのために使用される、ということが確認されることができる。トランザクションセーブポイントが設定されるノードを実行するスレッドは、スレッドの実行が完了されたあとで、トランザクションメカニズムに従って
コミッションを行い、それは、データの整合性を保証する。さらに、新しいスレッドが、トランザクションセーブポイントのあとの次のフローを駆動するために使用され、タスクノードの間のトランザクション分割を実行する。
【0079】
前述の装置におけるユニットの間の情報交換及び実行プロセスのような内容は、本発明の方法の実施例と同じ発想に基づいている。したがって、詳細な内容については、本発明の方法の実施例における説明に対して参照が行われ得るとともに、詳細は再度ここでは説明されない。
【0080】
具体的な実施例が、本発明の原理及び実施方法を説明するために、この明細書において使用される。前述の実施例は、単に本発明の方法及び発想を理解するのを助けることを意図している。さらに、実施方法及び応用範囲に関して、変更が本発明の発想に従って当業者により実行され得る。したがって、明細書は、本発明に対する限定と解釈されないものとする。