質問
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でシンプルでエレガントなソリューションを見せてくれることを願っています これはレッドハットによってサポートされている最新のものなので
ありがとうございました。
解決
おそらく気づいたように、JBPMにはプロセスインスタンスデータの並行性コントロールがありません。たとえば、アクセス時にプロセス変数をロックすることも、エンジンによって暗黙的にロックされることもありません。本当に並行して実行されると、そのために人種の状況につながります。
これは、BPMエンジンに関しては一般的な設計トレードオフです。各プロセスインスタンスの単一の実行スレッドで、すべての並行性制御落とし穴(デッドロック、人種条件、飢star、一貫性の問題など)を避けます。ビジネスプロセスは長期にわたると思われますが、ほとんどの場合、いくつかのイベントが発生するのを待っているはずであり、それ自体で集中的に計算されるべきではありません。したがって、CPUは単一のプロセスインスタンスを実行するときにボトルネックになることはないはずです。
説明したように、プロセスから並列ワークロードを分割することにより、この制限を回避できます。また、Javaアクティビティを作成し、手動でスレッドを生成することでプロセス内に保つこともできますが、これは非常に落胆しています。手始めに、インスタンスを実行しているJBPMスレッドをブロックし、並列化されたワークロードの進捗を監視することができなくなります。