• Aucun résultat trouvé

Invocation dynamique de service web

CHAPITRE 4 : DES BUTS UTILISATEURS AU SERVICE OPERATIONNEL :

3. Le processus générique pour lier la modélisation des services intentionnels et la

4.2. Invocation dynamique de service web

Pour que les services web soient hébergés dans l’annuaire de service UDDI, ils doivent être décrits dans le langage WSDL. La contribution de cette directive est de permettre une liaison entre les services décrits en WSDL et le langage de requête XQuery. Cette approche permet de rechercher l’ensemble des services web équivalents à l’intention de l’utilisateur et à les invoquer pour que l’utilisateur puisse faire son choix de service web. L’exemple ci-dessous illustre le cas des services de réservation de vol de la compagnie aérienne découvert dans la directive précédente de la section 3.5.1.4 permettant de découvrir les services web. Le service web de la réservation de vol de la compagnie aérienne est décrit dans le langage WSDL pour être hébergé par un annuaire de service UDDI. Puis l’invocation de ces services de

A182 2

réservation se fait au travers du langage de requête XQuery décrit dans la Figure 4.14. La fonction de la requête XQuery décrite dans cet exemple donne toutes les réservations de vol, c’est à dire la date et le montant total du vol pour une ville de départ et une ville d’arrivée donnée ainsi que la date de départ et le montant total. L’ensemble des vols sera transmit à un fournisseur principal du MOS qui se chargera de réunir les autres informations de la réservation de chambre et de les remettre à l’interface utilisateur puis au client final qui pourra faire son choix. Dans la requête de l’exemple de la Figure 4.14, la fonction a un nom (reg : DemanderReservationVol), prend des paramètres en entrée et retourne un résultat. Notons que le nom de la fonction, les paramètres en entrée et les résultats en sortie sont respectivement les opérations identifiées, les messages en entrée et les messages en sorties identifiés lors de la transformation des communications métiers en services web. Chaque paramètre est identifié par un nom de variable et un type. XQuery peut renvoyer des types de schémas XML existants utilisant des ″types séquences″, par exemple, ″element″ (compagnieAerienne) est un type de séquence qui renvoie à la déclaration de ″element compagnieAerienne défini globalement. Le corps de la fonction est composé d’une expression XQuery qui calcule le résultat à partir des paramètres en entrée de la fonction. Dans notre exemple, la requête utilise la syntaxe XPath pour effectuer une recherche à l’intérieur du registre (supposée être ici un document XML), extrait les informations appropriées de la réservation de vol aux compagnies aériennes, puis construit un element compagnieAerienne qui contient la date et le montant total du vol ainsi que la ville de départ et la ville d’arrivée. Notons que la construction de

element dans XQuery a la même syntaxe qu’en XML, et utilise des accolades pour revenir à la syntaxe de l’expression XQuery.

<definitions

targetNamespace=″http://exemple.org/ReservationVol″ xmlns : tns=″http://exemple.org/ReservationVol ″> <types>

<xs: schema tragetNamespace =″http://exemple.org/ ReservationVol ″> <xs : element name=″compagnieAerienne″

<xs: complextype> <xs : sequence>

<xs : element name=″dateVol″ type=″xs:date″/> <xs : element name=″villeDepart″ type=″xs:string″/> <xs : element name=″villeArrivee″ type=″xs:string″/> <xs : element name=″montantTotal″ type=″xs:double″/>

</xs : sequence> </xs: complextype> </xs : element> </xs: schema> </types> <message name=″DemanderReservationVol″> <part name=″madateVol″ type=″xs:date″/> <part name=″mavilleDepart″ type=″xs:string″/> <part name=″mavilleArrivee″ type=″xs:string″/> <part name=″monmontantTotal″ type=″xs:double″/> </message>

<message name = ″DemanderReservationVolResponse″> <part name=″listeVol″ element=″tns:compagnieAerienne″/> </message>

<portype name=″ReservationVol″>

<operation name=″DemanderReservationVol″> <input message=″tns: DemanderReservationVol ″/>

<output message=″tns: DemanderReservationVolResponse ″/> </operation>

</portype> <definitions>

Figure 4.13. Le WSDL pour le service ReservationVol

import module namespace reg=″″″″http://resgister/reg″″″″ ;

import schema namespace ″″″″http://exemple.org/ ReservationVol.xsd ″″″″ ; declare function reg : DemanderReservationVol (

$madateVol as xs : date, $mavilleDepart as xs : string, $mavilleArrivee as xs : string, $monmontantTotal as xs : double, ) as element (compagnieAerienne) { for $madateVol in $reg:dateVol,

$mavilleDepart in $reg: villeDepart, $mavilleArrivée in $reg: villeArrivee, $mmontantTotal in $reg: montantTotal where $madateVol

order by $madateVol return

A3B2 2

<dateVol> {$madateVol } </dateVol>

<villeDepart> {$mavilleDepart} </villeDepart> <villeArrivée> {$mavilleArrivée} </villeArrivée> <montantTotal> {$mmontantTotal} </montantTotal> </compagnieAerienne>

} ;

Figure 4.14. Requête XQuery sur un annuaire de service web décrit en WSDL

5. Conclusion

Dans ce chapitre, nous avons proposé une approche pour la construction d’applications à base de services logiciels. Cette approche repose sur l’introduction d’un modèle opérationnel de services MOS et d’une démarche méthodologique conduisant à sa construction.

Le modèle MOS décris, à un niveau opérationnel, les services qui sont un moyen d’opérationnalisation du service intentionnel atomique. Dans cette optique, un service logiciel constitue une entité opérationnelle ayant une responsabilité spécifique et décrite indépendamment de toute plateforme.

La démarche, que nous avons définie dans ce chapitre, permet de (i) guider l’utilisateur dans l’écriture des scénarios où chaque scénario représente une manière possible de réalisation du service atomique, (ii) générer de façon systématique l’opérationnalisation des services intentionnels atomiques à l’aide du modèle MOS et (iii) invoquer dynamiquement les services web.

De cette façon, nous avons pu répondre au problème de la mise en correspondance entre les besoins des clients exprimés, à un niveau opérationnel, à l’aide des services du modèle MIS et les services logiciels proposés par les développeurs, à un niveau opérationnel, à l’aide des services du modèle MOS.

Certains avantages de l’approche proposée sont les suivants :

- Utilisation multiple du même modèle MOS pour générer des modèles sur des plateformes différentes (service web ou autre).

- Indépendance de la logique métier aux technologies d’implémentation. - Evolution simultanée du niveau intentionnel et opérationnel des services. - Invocation dynamique des services web au travers de requêtes Xquery.

CHAPITRE 5 : DU SERVICE OPERATIONNEL