Oracle SOA Suite : création d'un flux BPEL

Comme promis, ce tutorial qui vous permettra de débuter avec la SOA Suite et la création de flux d’orchestration avec BPEL.
Je me propose de vous initier à BPEL en vous montrant comment réaliser un flux simple interagissant avec une base de données. Cet exemple appelle une procédure PL/SQL stockée en base qui accepte un paramètre en entrée et renvoie un résultat dépendant de l’entrée. Cet exemple permettra de couvrir une partie des notions abordées lors de la création d’un flux : activités BPEL, adaptateur de ressources, etc.

Création du projet

image1
La première partie consiste à créer le projet et à le configurer :

  • Nom du processus qui sera déployé
  • Type du processus : synchrone ou asynchrone. Pour plus d’informations, consultez l’article Introduction à BPEL et Oracle SOA Suite
  • Types des variables d’entrée et sortie

Suivez les étapes décrites par les captures d’écran ci-dessus pour créer et configurer votre projet.

Développement du flux

Création du partnerLink

En première partie, nous allons créer le partnerLink, c’est-à-dire le composant qui va nous permettre de communiquer avec la base de données. Pour cela, glisser-déposer un composant DBAdapter depuis la palette de composants (services) vers la zone services de la fenêtre de développement :

image2

Une nouvelle fenêtre s’ouvre alors et va nous permettre de configurer l’adaptateur de base de données étape par étape. La première étape va nous permettre de donner un nom au service :

image3

La deuxième étape consiste à préciser les informations de connexion à la base de données. Pour cela, il est nécessaire de créer une connexion à la base de données en cliquant sur l’onglet new. Ces informations de connexion ne seront a priori pas utilisées à l’exécution du flux mais ne serviront que pour le développement. A l’exécution, on préférera utiliser un nom JNDI pointant sur un pool de connexions pour des raisons de performances. L’utilisation du nom JNDI requiert un certain nombre de configurations à mettre en place côté serveur. Voici les étapes à suivre pour créer la connexion à la base de données :
image4

  • Nom de la connexion et choix du type de connexion
  • Informations d’identification (utilisateur, mot de passe)
  • Informations de connexion (hôte, port et SID ou directement une chaîne JDBC)
  • Test de la connexion

Une fois la connexion à la base créée, on arrive à l’écran suivant de la configuration de l’adaptateur de base de données :

image5

Le nom JNDI automatiquement généré doit être changé par celui créé sur le serveur. A l’exécution, le moteur BPEL utilisera ce nom JNDI pour la connexion à la base ou utilisera les informations de connexion données en dur si le nom JNDI n’est pas trouvé ou n’est pas renseigné.
image6
Les deux dernières étapes consistent à spécifier le type d’opération que vous souhaitez mettre en place :

  • Appel d’une procédure stockée
  • Exécuter une requête
  • Polling sur une table
  • Exécuter un script SQL

et à spécifier les informations en fonction de l’action spécifiée, ici nom de la procédure appelée et le schéma dans lequel elle se trouve.
Une fois la création validée, trois fichiers sont générés :

  • DBAdapaterOutboundHeader.wsdl : description de l’en-tête technique (header) qu’il est possible d’envoyer à l’appel du DBAdapter lors de l’exécution du flux.
  • Un schéma XML (xsd) : décrit les paramètres d’entrée / sortie de la procédure appelée.
  • Un descripteur de WS (.wsdl) : décrit les informations qui seront nécessaires à l’exécution, il s’agit d’un résumé des informations saisies précédemment (schéma, procédure, informations de connexion, etc.)

Appel du service et initialisation de la variable d’entrée

Afin de bien découper le code et le rendre plus lisible par tout le monde, on va utiliser une activité scope pour englober l’appel à la base de données, pour cela glisser / déposer une activité scope et donner lui un nom.
L’appel de l’adaptateur de base de données va se faire à l’aide l’activité invoke. Il nous suffit alors de déposer une activité invoke dans la fenêtre de développement à l’endroit où l’on souhaite que l’appel à la base de données se fasse : dans le scope que l’on a créé juste avant.
Une fois l’invoke déposé, il suffit alors de le relier au partnerLink du service que l’on souhaite appeler, ici l’adaptateur de bases de données et de remplir les informations de la fenêtre qui s’ouvre automatiquement :

  • Nom de l’activité : invDBAdapter
  • Opération
  • Variables d’entrée / sortie à créer à l’aide du designer

image7
Préférez la création de variables locales plutôt que globales pour des raisons de lisibilité du code et de performances. Attention, les variables locales ne sont visibles que dans le scope où on les a créées et les sous-scopes.
Une fois l’appel configuré et les variables créées, il reste à initialiser la variable d’entrée à l’aide d’une activité assign que l’on va placer juste avant l’appel. On va créer une règle de copie qui va permettre d’assigner la variable d’entrée du flux à la variable d’entrée de l’adaptateur de base de données en double cliquant sur l’activité assign :
image8
L’appel de l’adaptateur de ressources est donc maintenant opérationnel, il reste à exploiter le résultat de la procédure PL/SQL.

Exploitation du résultat

A présent, on peut s’occuper du retour de la fonction et l’exploiter comme bon nous semble, ici, on se contentera de l’afficher dans la console. Pour cela, on utilise une activité assign dans laquelle on va affecter la variable de sortie du flux à l’aide d’une expression mise en place via l’ « expression builder ».
image9
La capture d’écran suivante permet de visualiser le flux dans son intégralité ainsi qu’un résultat d’exécution :
image10

Conclusion

Ce tutorial aura donc permis de mettre en place un flux simple interagissant avec une base de données et de s’initier à BPEL au travers d’un exemple. Vous avez également pu appréhender l’outil Jdeveloper et son interface de développement.
Dans un prochain article, je m’attarderai sur l’intégration de transformations XSL dans un flux BPEL et les différentes possibilités offertes par Jdeveloper pour mettre en place des transformations XSL (designer, interface de test, etc.)
Référence: