6.10. グラフ実行

ビジネスプロセスマネージャーのグラフ実行モデルは、 プロセス定義と「コマンドチェーンパターン」の解釈に基づいています。
プロセス定義のデータはデータベースに保存され、 プロセス実行中に使用されます。

注記

Hibernate の 2 次レベルキャッシュは、 ラインタイムに定義情報をロードしないようにするため使用されます。 プロセス定義は変更しないため、 Hibernate はプロセス定義をメモリにキャッシュすることができます。
「コマンドチェーンパターン」は、 グラフの各ノードがプロセス実行を渡すようにします。 ノードが渡さない場合、 wait state のように挙動します。
実行がプロセスインスタンスを開始し、 wait state に入るまで継続するようにしてみましょう。
トークンは実行パスを表します。 トークンはプロセスグラフのノードへのポインタを持っています。 wait state中、 トークンをデータベースで永続化することができます。
このアルゴリズムはトークンの実行を算出するために使用されます。 シグナルがトークンへ送信され、 コマンドチェーンパターンより遷移とノードで渡されると実行が開始されます。 関連するメソッドは次の通りです。
グラフ実行に関連するメソッド

図6.4 グラフ実行に関連するメソッド

トークンがノードにある場合、 シグナルをトークンに送ることが可能です。 シグナルは実行を開始する指示として扱われるため、 トークンの現ノードから leaving transition を指定しなければなりません。 最初の遷移がデフォルトになります。 トークンへのシグナルで、 現ノードを取得し、Node.leave(ExecutionContext,Transition) メソッドを呼びます (ExecutionContext 内のオブジェクトはトークンであるため、 ExecutionContext はトークンであると考えるのがよいでしょう)。 メソッドは node-leave イベントを発生させ、 Transition.take(ExecutionContext) を呼び出します。 そのメソッドは遷移イベントを実行し、 遷移の 宛先ノードにある Node.enter(ExecutionContext) を呼び出します。
ノードの各タイプは独自の動作を持っており、 execute メソッドより実装されます。 各ノードは Node.leave(ExecutionContext,Transition) を再び呼び出してグラフ実行を渡す役割を果たします。 要約は次の通りです。
  • Token.signal(Transition)
  • Node.leave(ExecutionContext,Transition)
  • Transition.take(ExecutionContext)
  • Node.execute(ExecutionContext)
  • Node.execute(ExecutionContext)

注記

アクション呼び出しを含む次の状態は、クライアントのスレッドで算出されます。すべての計算がこの方法で行われなければならないという考えは一般的な誤解です。非同期呼び出しと同様に、非同期メッセージング (Java Message Service より) を利用できます。プロセスインスタンスの更新として、同じトランザクション内でメッセージが送信されると、同期の課題はすべて適切に対応されなければなりません。ワークフローシステムの一部は、グラフにあるすべてのノード間で、非同期メッセージングを利用します。しかし、スループットが高い環境では、このアルゴリスムは、ビジネスプロセスのパフォーマンスを最大限にするため、より優れた制御と柔軟性をもたらします。