Correction
Correction
2. « google Search » ou « Amazon web services electronic commerce » requièrent une clé qui
sert à :
a) Identifier le web service invoqué
b) Identifier l’utilisateur qui accède au web service
c) Identifier la machine Internet qui émet l’invocation du web service
b) uniquement
Page 1 / 7
d) Une page JSP
e) Un fichier WSDL
b) L’implémentation d’un web service peut effectivement prendre la forme de classes
de paquetages Java. Mais aussi peut prendre la forme d’un code écrit en langage BPEL
(mais de manière stricte, un web service n’est pas forcément un processus BPEL)
Un service web est par contre obligatoirement associé avec un fichier WSDL qui
spécifie en fait précisément les informations nécessaires pour pouvoir se servir du
service web.
Page 2 / 7
10. Un fichier WSDL associé à un service web:
a) Expose au plus une opération
b) Expose autant de types de port (portType) que d’opérations
c) Expose au plus une façon de se binder (binding) à chaque type de port
a) non car plusieurs opérations par port sont autorisées.
b) oui et non ! car en fait un portType peut contenir plus d’une opération.
c) faux, car on a pu voir qu’un porttype peut être associé à plusieurs bindings (http ou
soap)
Page 3 / 7
Exercice 2 – (barème approximatif : 10 points) traitant essentiellement de SOA
11. Les 3 acronymes SCA, BPEL et JBI signifient respectivement
ServiceComponentArchitecture
Business Process Execution Language
Java Business Integration
12. La spécification SCA définit :
a) Une manière d’enchainer des appels de services
b) Une manière d’assembler des modules encore appelés composants logiciels
c) Une alternative à l’implémentation de services web
b) SCA est un modèle permettant d’exprimer les services nécessaires à
l’accomplissement d’un service donné par le biais d’une approche type composant
logiciel.
Ce n’est pas a) car, SCA n’aborde pas la logique d’orchestration (même si un
composant SCA peut être implanté en utilisant un programme BPEL)
13. Un bus à services permet de :
a) D’assembler des services web
b) Transformer des invocations de services émises dans une technologie donnée en une
autre technologie
c) De publier des services métiers, accessibles via le bus
a) pas vraiment, le bus permet d’autres choses (ce n’est pas un moteur d’orchestration,
ni un modèle de composants logiciels comme SCA).
b) oui, c’est un rôle clé du bus
c) plutôt non, car, en soi, un bus à services n’est pas un registre de services (c’est bien
plus, au sens où le bus héberge plusieurs choses, éventuellement parmi elles un registre
de services internes). En général, ce registre interne peut permettre de retrouver les
services à l’intérieur du bus, mais pas à l’extérieur du bus (ce que offre un registry
UDDI). Donc, même si un service métier est publié dans le registre interne du bus, il
n’est pas visible à l’exérieur. Donc pas publié, et donc pas appelable de l’extérieur.
Page 4 / 7
Plutôt le b) au sens où ces applications externes peuvent être emballées en tant que
service ( via par exemple un service web), et ainsi, rendues intégrables avec d’autres
services
c) pas du tout : une architecture SOA peut être composée uniquement de web services
s’invoquant directement les uns les autres (pensez au TP1 ensemble de fichiers axis-
08.zip)
16. Les notions d’architecture SOA et de processus métier sont
a) complémentaires
b) incompatibles
Expliquer/justifier clairement votre choix ici :
a) car un module écrit en BPEL peut justement jouer le rôle de chef d’orchestre qui
dicte à quel moment les services utilisés dans la SOA sont invoqués.
Page 5 / 7
c) un peu aussi, car, chaque module logiciel est bien identifié en tant que service On
peut donc facilement lui associer les informations de monitoring (de qualité de service
comme on dit) et ainsi mesurer ses performances, et vérifier qu’il honore son contrat
Exercice 3– (5 points) Annoter ce WSDL de vos commentaires : à quoi il sert, comment s’en
servir d’un point de vue client, quelles données vont circuler quand on l’utilise, etc
<?xml version="1.0"?>
<definitions name="StockQuote"
targetNamespace="http://example.com/stockquote.wsdl"
xmlns:tns="http://example.com/stockquote.wsdl"
xmlns:xsd1="http://example.com/stockquote.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema targetNamespace="http://example.com/stockquote.xsd"
xmlns="http://www.w3.org/1999/XMLSchema">
<element name="TradePriceRequest">
<complexType>
<all>
<element name="tickerSymbol" type="string"/>
</all>
</complexType>
</element>
<element name="TradePrice">
<complexType>
<all>
<element name="price" type="float"/>
</all>
</complexType>
</element>
</schema>
</types>
<message name="GetLastTradePriceInput">
<part name="body" element="xsd1:TradePrice"/>
</message>
<message name="GetLastTradePriceOutput">
<part name="body" element="xsd1:TradePriceResult"/>
</message>
<portType name="StockQuotePortType">
<operation name="GetLastTradePrice">
<input message="tns:GetLastTradePriceInput"/>
<output message="tns:GetLastTradePriceOutput"/>
</operation>
</portType>
<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetLastTradePrice">
<soap:operation soapAction="http://example.com/GetLastTradePrice"/>
<input>
<soap:body use="literal"
namespace="http://example.com/stockquote.xsd"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="literal"
namespace="http://example.com/stockquote.xsd"
Page 6 / 7
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="StockQuoteService">
<documentation>My first service</documentation>
<port name="StockQuotePort" binding="tns:StockQuoteBinding">
<soap:address location="http://example.com/stockquote"/>
</port>
</service>
</definitions>
Ce service web offre une unique opération : sur envoi d’un message de type GetLastTradePrice,
l’opération nommée GetLastTradePrice va s’exécuter. L’URL pour déclencher cette opération
depuis un navigateur web devrait
http://example.com/stockquote/method=GetLastPrice?tickerSymbol=MonEntreprisePreferee.
Le message sera véhiculé par une enveloppe SOAP (on a défini un soap binding). Le type de
donnée en entrée est un tickerSymbol prenant une valeur de type chaine de caractères. En réponse,
on obtient un price que l’on peut interpréter comme un flottant.
Page 7 / 7