• Aucun résultat trouvé

CHAPITRE III. PROPOSITIONS

III.4 Description des éléments de l’architecture

III.4.4 Représentation externe du COTS

Le COTS, dans notre étude, n’est qu’une boite noire qui offre des services ou, par fois, demande des services s’il en a besoin.

Un COTS n’est connu que par son interface, qui diffère d’un COTS à un autre. Tous nos COTS sont reliés à l’unité d’orientation (OR), cette dernière doit s’adapter avec chaque interface du COTS. Ce la signifier qu’il faut un connecteur adéquat pour chaque COTS. D’autre part, l’ajout d’un nouveau COTS nécessite un nouveau connecteur adéquat, et une adaptation de l’unité d’orientation pour ce nouveau COTS. Cet inconvénient dégrade considérablement notre solution, surtout du point de vu de la dynamique du système. Pour cela nous avons pensé à unifier toutes les interfaces des COTS. L’approche optée par les interfaces WSDL été la plus proche a notre cas, donc nos l’avons adopté sans trop réfléchi. De plus, cette architecture a un intérêt à la génération du code WSDL, qui sert comme enveloppe du COTS, puisqu’elle est proche de la technologie des services WEB, d’une part. D’autre part, les interfaces prennent le même modèle, c'est-à-dire les même fonctions à publier.

Le code suivant représenté l’interface du COTS en WSDL : <? xml version="1.0"?> <definitions name="Offre_service" targetNamespace="urn: serveur_orchestration " xmlns:typens="urn: serveur_orchestration " xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <!—Declaration de parametre de message --> <types>

<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:serveur_orchestration"> <xsd:element name="Nom_cervice" type="xsd: string "/> <xsd:complexType name="Param">

<xsd:element name="Nom_param" type="xsd: string "/> <xsd:element name="Type_param" type="xsd: string "/>

<xsd:element name="Valeur_param" type="xsd:string"/> </xsd:complexType>

<xsd:complexType name="Table_param">

<xsd:element name="Set_param" WSDL:arrayType="xsd: Param[]"/>

</xsd:complexType>

<xsd:Type name="Reponse_pret" type="xsd:boolean"/> </types>

<!—assemblage de parametre, pour notre cas nous avons un seul parametre -->

<message name="demande_service">

<part name="Nom_cervice" type="xsd: Nom_cervice "/> <part name="Param" type="xsd: Table_param"/> </message>

<message name="reponse_service">

</message>

<!—décrire l’operation demande_pret" --> <portType name="Offre_service_port"> <operation name="Offre_service_op">

<input message="typens: demande_service "/> <output message="typens: reponse_service "/> </operation>

</portType>

<!-- Spécifie la liaison d’un <porttype> à aux protocole (SOAP, http GET/POST -->

<binding name="Offre_service_bind" type="typens: Offre_service_port ">

<soap:binding style="rpc"

transport="http://schemas.xmlsoap.org/soap/http"/> <operation name=" Offre_service_op ">

<input> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding>

<service name=" Offre_service">

<port name=" Offre_service_op " binding="typens: Offre_service_Bind">

<soap:address location="http:// Local_COTS.com "/> < !—URL comme exemple -- > </port>

</service> </definitions>

Dans cette interface nous voyons que le service offert par un COTS est devenu un paramètre de la fonction Offre_service. Donc pour appeler un service de COTS, on doit faire référence à l’URL du COTS mais pas au service lui-même.

nous avons choisi d’utiliser un tableau de trois champs pour représenter les paramètres nécessaires pour l’appel d’un service. Il va de même pour la réponse (Figure 28).

Figure 28 le tableau de paramètre utiliser par une interface WSDL

Maintenant, nous pouvons rédiger le style de notre COTS comme suite :

„ Le port offre_service prend la forme suivante

Type Type_demande_service is view( Nom_Service : string

Param : Sequence (view(nom : string; type: string; valeur : string))) Donc le port sera

In_P_demande_service is port with Connections

In: connection[Type_demande_service];

Protocol

Via In receive.

Le COTS prend le style composant/connecteur suivant

COTS_component is style extending ( component ) where Cammen

Ports

-- !pour les besoin des autres demandeur.

port_OR_COTS_Fournisseur_demande_service : in_P_demande_service

port_OR_COTS_Fournisseur_reponse_service : out_P_reponse_service

-- !pour les besoins du COTS.

port_COTS_OR_demande_service :

out_P_demande_service

port_COTS_OR_reponse_service :

in_P_reponse_service -- !pour les notifications

port_OR_UC_notification :

constraints

exists(port_OR_COTS_Fournisseur_demande_service); --! Les

deux ports (fournisseur)sont nécessaire, si

exists(port_OR_COTS_Fournisseur_reponse_service);

-- !est passif non le COTS, mais les deux autre s’ils n’existent pas , on dit que le COTS est autonome

every sequence {true*.<via

port_OR_COTS_Fournisseur_demande_service resive any>. (not<via port_OR_COTS_Fournisseur_reponse_service send any >)*.<via port_OR_COTS_Fournisseur_demande_service resive any >.true*} –-!

Il ne faut pas avoir une réponse avant une demande de service

leads to state{false})

forall(p |p in type P_demande_service;

implies

{via p resive D : Type_demande_service > and

D~ ID_repondeur_service != e.name} –-! il faut recevoir les requêtes

qui lui sont adressé

leads to state{false})

Documents relatifs