Question

need to achieve:


Faire le traitement à plusieurs tâches

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

La solution JBPM doit exécuter des tâches en parallèle, et non, comment cela se fait par défaut, séquentiel.

J'ai lu la documentation JBPM qui suggère d'utiliser async="true" sur les nœuds / tâches, mais il n'est pas clair sur la façon dont exactement Cela doit être mis en œuvre. L'une des suggestions était de le persister en DB et d'envoyer les tâches à la file d'attente JMS, de ne pas gérer la gestion multi-thread personnalisée. Cependant, j'ai trouvé trop étrange que JBPM n'ait pas de solution simple pour cela.

J'espère que quelqu'un me prouvera le contraire ici et me montrera une solution simple et élégante avec JBPM 3.2.6 Comme c'est le dernier soutenu par Red Hat

Merci.

Était-ce utile?

La solution

Comme vous l'avez probablement remarqué, JBPM n'a aucun contrôle de concurrence pour les données d'instance de processus. Par exemple, les variables de processus ne peuvent pas être verrouillées lorsqu'elles sont accessibles et ne sont pas implicitement verrouillées par le moteur. Des exécutions vraiment parallèles conduiraient à des conditions de course à cause de cela.

Il s'agit d'un compromis de conception commun en ce qui concerne les moteurs BPM. Vous évitez tous les pièges de contrôle de la concurrence (impasses, conditions de course, famine, problèmes de cohérence ...) avec un seul thread d'exécution pour chaque instance de processus. Les processus métier sont censés être de longue date, mais sont également censés attendre que certains événements se produisent la plupart du temps et ne devraient pas être à forte intensité de calcul par eux-mêmes. Le CPU ne devrait donc jamais être un goulot d'étranglement lors de l'exécution d'une seule instance de processus.

Vous pouvez contourner cette limitation en divisant la charge de travail parallèle du processus comme vous l'avez décrit. Vous pouvez également le maintenir à l'intérieur du processus en créant une activité Java et engendrez manuellement les fils, bien que cela soit très découragé. Pour commencer, vous bloquerez le fil JBPM qui exécute l'instance et vous ne pourrez pas suivre les progrès de votre charge de travail parallélisée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top