Domanda

need to achieve:


Forking dell'elaborazione a più attività

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

La soluzione jBPM dovrebbe eseguire attività in parallelo e non, come viene fatto per impostazione predefinita, in sequenza.

Ho letto la documentazione di jBPM che suggerisce di utilizzare async="true" sui nodi/attività, tuttavia non è chiaro come esattamente questo dovrebbe essere implementato.Uno dei suggerimenti era quello di persisterlo nel DB e inviare le attività alla coda JMS, per non occuparsi della gestione multi-thread personalizzata.Tuttavia ho trovato troppo strano che jBPM non abbia una soluzione semplice per questo.

Spero che qualcuno mi dimostri che ho torto e mi mostrerà una soluzione semplice ed elegante con jBPM 3.2.6 [poiché questo è l'ultimo supportato da Red Hat]

Grazie.

È stato utile?

Soluzione

Come probabilmente avrai notato, jBPM non dispone di controlli di concorrenza per i dati dell'istanza di processo.Ad esempio, le variabili di processo non possono essere bloccate quando vi si accede né sono implicitamente bloccate dal motore.Esecuzioni veramente parallele porterebbero a condizioni di gara a causa di ciò.

Questo è un compromesso di progettazione comune quando si tratta di motori BPM.Eviti tutte le trappole del controllo della concorrenza (deadlock, race conditions, starvation, problemi di coerenza...) con un singolo thread di esecuzione per ogni istanza del processo.Si suppone che i processi aziendali siano di lunga durata, ma dovrebbero anche attendere che si verifichi qualche evento per la maggior parte del tempo e non dovrebbero essere di per sé ad alta intensità di calcolo.Pertanto la CPU non dovrebbe mai costituire un collo di bottiglia durante l'esecuzione di una singola istanza di processo.

Puoi aggirare questa limitazione suddividendo il carico di lavoro parallelo fuori dal processo come hai descritto.Puoi anche mantenerlo all'interno del processo creando un'attività Java e generando manualmente i thread, sebbene ciò sia altamente sconsigliato.Per cominciare, bloccherai il thread jBPM che sta eseguendo l'istanza e non sarai in grado di monitorare l'avanzamento del tuo carico di lavoro parallelizzato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top