lundi 24 mars 2008

Comment faire une Correlation dans Bpel pour réveiller un processus

Ce mémo explique rapidement comment créer un processus Bpel (dit père) qui s'initialise et attend qu'un autre processus (dit fils) lui permet de se finir en fonction du contenu du message xml qu'il porte.

Pour être plus clair, le processus père démarre et attend. Ensuite, le fils poste un message au père avec un contenu approprié au père pour qu'il se termine.


Ce point technique sur la correlation démontre la simplicité de mise en oeuvre dans Bpel Process Manager D'Oracle (forcement)

La premiere étape consiste à créer un processus Bpel de type asynchrone dans Jdev:




puis de rajouter une méthode d'accès à ce même processus afin qu'il est 2 méthodes d'entrée et 1 de sortie. Cette étape se fait en modifiant le WSDL du processus que l'on vient de créer.






La méthode "suite" prend en entrée le même schéma et en sortie le schéma "output" par défaut.


Nous avons donc maintenant un processus BPEL avec 2 méthodes d'accès, auquel nous rajouter une action ASSIGN pour renseigner le résultat :






On rajoute une action "RECEIVE" afin d'arrêter le processus père tant que les conditions fonctionnelles ne sont pas remplies par le fils :




puis on effectue un "deploy" du processus père.




Maintenant on va créer le fiston (dit le processus fils), celui-ci va faire une action " INVOKE" pour prévenir le père sur la méthode "suite" qu'il peut continuer et se terminer si l'input du père correspond à l'input du fils.



Attention : Pour faire l'invoke du père il faut avant tout déployer le père.



Détail du fils :



L'action "invoke" appelle la méthode "suite" du père :








Puis il faut créer un correlationSet comme cela :


Puis définir un property alias, qui n'est autre qu'une propriété avec un type (ici String) qui permet de relier le père et le fils. Cette propriété est remplie par un Xpath :



Ensuite sur le père, vous devez spécifier une action "Receive" sur la méthode "suite" appelée par le fils.



Dans cette même action, sur l'onglet correlation, ajouter votre correlationSet :






La première action Receive du client doit comporter également le même correlationSet, mais il aura un 'initiate' à 'true'.


Dans le fils, sur l'action 'invoke' qui poussera le mesage XML vers le père le correlationSet (identique au père) doit avoir le paramètre 'out' (onglet correlation).


Le détail de ces 2 processus sur ce lien : (ICI)

1 commentaire:

Anonyme a dit…

Hi Hugu, it would be kind to write some articles in English.
I am nearly fluent in French but this is not the case of my co-workers.
When technical article is concerned automated translation tools show their limits.
Anyway, good content on your Blog, keep posting !