2016-05-19 4 views
0

Ich habe einen BPMN-Prozess, der jede Minute startet, ruft eine Liste von Nachrichten und Iteraten ab (jede enthält eine userId und das entspricht einer Nachricht in einer Konversation), dann sendet es eine Nachricht an eine BPEL verarbeiten.BPEL mit Korrelationssätzen

Der BPEL-Prozess enthält einen Korrelationssatz (mit der userId), sodass pro Benutzer nur eine Prozessinstanz vorhanden ist. Dieser BPEL-Prozess enthält 4 Nachrichtenfang mit derselben Schnittstelle und nach der Verarbeitung von 4 Nachrichten wird die Instanz beendet.

Das Ich habe ist: Ich erhalte 4 Nachrichten vom selben Benutzer, endet die Prozessinstanz. Dann erhalte ich eine weitere Nachricht vom selben Benutzer. Nach meinem Verständnis sollte es eine neue Instanz des BPEL-Prozesses schaffen. Stattdessen zeigt es mir, dass die Sendeaktivität ausgeführt wird, und keine neue Instanz erstellt wird, und ich kann keinen Fehler sehen.

Kann mir jemand helfen? Danke

Antwort

0

Normalerweise wird die Korrelation auf der OrderId festgelegt. Da die Nachrichten korreliert werden müssen, werden die Nachrichten immer in der Datenbank gespeichert.

Wenn Ihre Instanz abgeschlossen ist, sind die Instanzdaten in der Datenbank vorhanden. Wenn die gleiche CustomerId-Nachricht zu BPEL kommt, sucht sie zuerst nach der CustomerId in der Datenbank. Sobald festgestellt wird, dass eine abgeschlossene Instanz vorhanden ist, wird eine Ausnahme ausgelöst. Sie können die Datenbank löschen, und Sie werden feststellen, dass Ihre Korrelation erneut funktioniert (nur einmal). So ist es in der BPEL-Engine implementiert.

Ich würde vorschlagen, dass Sie die OrderId als Korrelation verwenden. Da die Bestell-ID nur dem Kunden bekannt sein wird.

Verwandte Themen