0
need to achieve:


複数のタスクへのフォーク処理

<fork name="customFork" >
  <transition to="task1" />
  <transition to="task2" />        
  <transition to="task3" />
       ... ... ...
  <transition to="taskN" />         
</fork>

jBPM ソリューションは、タスクを並行して実行する必要があります。

ノード/タスクで使用することを提案するjBPMのドキュメントを読みましたが、これをどのように実装する必要があるasync="true"は不明です。提案の 1 つは、カスタム マルチスレッド管理を処理するのではなく、DB に永続化し、タスクを JMS キューに送信することでした。しかし、jBPM がこれに対する簡単な解決策を持っていないのは奇妙すぎると思いました。

誰かがここで私が間違っていることを証明し、jBPM 3.2.6 を使用したシンプルでエレガントなソリューションを示してくれることを願っています[これは Red Hat がサポートする最新のものであるため]

ありがとうございました。

4

1 に答える 1

4

お気づきかもしれませんが、jBPM にはプロセス インスタンス データの同時実行制御がありません。たとえば、プロセス変数は、アクセス時にロックすることも、エンジンによって暗黙的にロックすることもできません。そのため、真の並列実行は競合状態につながります。

これは、BPM エンジンに関しては一般的な設計上のトレードオフです。プロセス インスタンスごとに 1 つのスレッドを実行することで、同時実行制御の落とし穴 (デッドロック、競合状態、飢餓、一貫性の問題など) をすべて回避します。ビジネス プロセスは長時間実行されることが想定されていますが、ほとんどの場合、なんらかのイベントが発生するのを待っていることも想定されており、それ自体が計算集約的であってはなりません。したがって、単一のプロセス インスタンスを実行するときに CPU がボトルネックになることはありません。

説明したように、プロセスから並列ワークロードを分割することで、この制限を回避できます。Java アクティビティを作成して手動でスレッドを生成することにより、プロセス内に保持することもできますが、これはお勧めできません。まず、インスタンスを実行している jBPM スレッドをブロックすると、並列化されたワークロードの進行状況を監視できなくなります。

于 2010-11-17T15:41:55.250 に答える