BPEL et les files JMS, troisième partie : Création d'un producteur et d'un consommateur BPEL

Pour faire suite aux deux articles précédents (configuration AQ et configuration Weblogic), je vous propose ce troisième article dans lequel seront détaillées les différentes étapes à suivre lors de la création de processus BPEL producteur / consommateur de messages JMS.
Dans cet article, nous verrons comment créer un producteur et un consommateur simple, sans se préoccuper de synchronisation que nous traiterons dans l’article suivant.
Bien, assez palabré, attaquons …

Création d’un producteur de messages JMS

Dans le composite, ajoutez un adaptateur de ressources JMS dans la zone « référence » et suivez les étapes décrites ci-dessus :

  • Etape 1 : donner un nom au service que vous créez, Enqueue par exemple.
  • Etape 2 : sélectionnez le provider JMS, ici il s’agit d’un provider Oracle de type Advanced Queuing :
  • Etape 3 : Sélectionnez la connexion au serveur sur lequel le processus va être déployé.
  • Etape 4 : Choix de l’interface, choisissez « Define from operation  and schema (specified later) ».
  • Etape 5 : Choix de l’opération, ici « Produce Message ». Vous pouvez renommer le nom de l’opération.
  • Etape 6 : Choix de la file de messages dans laquelle vous souhaitez déposer le message. Sélectionnez la file à l’aide de l’explorateur proposé par le wizard (bouton « browse »), l’ensemble des files définies sous Weblogic est alors visible. Précisez le nom JNDI défini dans la configuration de l’adaptateur de ressources sous Weblogic (Etape « Configuration de l’adaptateur de ressources » de l’article 2).
  • Etape 7 : Choix du schéma décrivant le type de message déposé dans la file JMS :

La configuration est désormais terminée, votre partnerLink est maintenant prêt. Il reste désormais à l’invoquer en utilisant une activité invoke dans le processus BPEL.
Au passage, vous aurez remarqué que Jdeveloper a généré deux fichiers : un .jca et un .wsdl. Ces deux fichiers résument les informations que vous avez précisées lors des étapes précédentes : nom du service, description du message d’entrée, nom de la file, etc.
Fichier .jca :

<adapter-config name="Enqueue" adapter="Jms Adapter"
         xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
<connection-factory location="eis/aqjms/QueueEnqueue"
                    UIConnectionName="s1230"
                    UIJmsProvider="OJMS"
                    adapterRef=""/>
<endpoint-interaction portType="Produce_Message_ptt"
                      operation="Produce_Message">
<interaction-spec
        className="oracle.tip.adapter.jms.outbound.JmsProduceInteractionSpec">
<property name="DestinationName" value="jms/TestJava"/>
<property name="DeliveryMode" value="Persistent"/>
<property value="0"/>
<property value="TextMessage"/>
</interaction-spec>
</endpoint-interaction>
</adapter-config>

Voilà, c’est plutôt simple, non ?

Création d’un consommateur de messages JMS

La démarche est identique à la création d’un producteur de messages JMS, excepté l’étape 7 du designer JDeveloper.
Les seules différences sont en fait les propriétés techniques à spécifier qui varient selon l’opération effectuée. Par exemple, la priorité du message est une propriété qui doit être mise à jour à l’empilement et non au dépilement …
De même que pour l’empilement, il faut donc spécifier le nom de la queue dans laquelle on va consommer, le type de message, le nom JNDI lié à la connexion JDBC utilisée pour le dépilement des messages, etc.
Les paramètres supplémentaires à renseigner sont :

  • Le nom du consommateur lorsqu’il s’agit d’un Topic
  • Le « Message Selector » qui est en fait le filtre sur les messages à consommer

Conclusion

Vous savez maintenant créer des processus BPEL produisant / consommant des messages JMS !!
Dans l’article suivant je détaillerai la méthode à suivre pour rendre le processus consommateur synchrone afin de garantir la bonne livraison du message, et permettre ainsi de déplacer les messages en erreur dans une file d’exception. En effet, en rendant le consommateur synchrone, le message ne sera pas dépilé si le reply n’est pas effectué dans le consommateur BPEL. Par ailleurs, je m’attarderai un peu plus sur le mode multi-consommateurs et notamment la mise en place de filtre de messages.
A suivre !