• Aucun résultat trouvé

3 M ETAMODELE DE COMPOSANTS A SERVICES

3. M ETAMODELE DE COMPOSANTS A SERVICES Une spécification composite peut spécifier, par exemple, les composants pour lesquels la

3.2.2 I MPLEMENTATION COMPOSITE

Une implémentation composite, appelée simplement composite, représente une application ou un sous-système au niveau développement/composition (voir le métamodèle dans la Figure 58).

Etant une implémentation, un composite implémente une seule spécification (primitive ou composite) et hérite de toutes ses caractéristiques. Il peut affecter les valeurs des propriétés définies par sa spécification, et peut définir des ressources fournies et requises propres, des propriétés et des définitions de propriétés, des contraintes et des préférences de sélection sur les dépendances héritées de sa spécification, des contraintes et des préférences propres.

Etant un composite, il contient des implémentations (primitives ou composites) et des connecteurs (connector) entre elles. Parmi ces implémentations, une implémentation au moins est

identifiée comme l implémentation principale du composite mainImpl L implémentation principale

fournit au moins les ressources fournies du composite (i.e., les ressources fournies de la spécification du composite et les ressources fournies propres au composite). Si le composite implémente une spécification composite (liés par la relation conforms), son implémentation principale doit implémenter la spécification principale (mainSpec) de la spécification composite. Un composite peut définir/ajouter des propriétés, des contraintes et des préférences contextuelles.

Les dépendances d un composite celles héritées de sa spécification et celles propres au

composite, sont liées à des dépendances de ses implémentations contenues et seront donc résolues à

l extérieur du composite La résolution d une telle dépendance résulte ainsi dans une connexion entre

une implémentation contenue dans le composite et une implémentation externe, et dans une connexion entre le composite et l implémentation externe

Figure 58. Implémentation composite

Un composite est spécifié comme une implémentation primitive à laquelle on ajoute les

caractéristiques propres au développement d un composite Nous définissons formellement le concept

3.M

ETAMODELE DE COMPOSANTS A SERVICES

Une implémentation composite est un 7-uplet CI = <I, mI, Is, Cx, CP, CCT, CPF>, où : I = <name, S, R, D, P, DP, CT, PF> est l implémentation primitive de C)

m) est limplémentation principale de CI, tel que

R(I) R(mI) les ressources fournies de mI sont au moins les ressources fournies de I )s est l ensemble des implémentations contenues dans CI

Cx = {cx1, cx2 cxn} est un ensemble de connexions entre implémentations contenues dans CI, tel que chaque connexion cxi est un 2-uplet cx = <I1, I2>, où

I1 )s est l origine de la dépendance et I2Is est la destination de la dépendance, tel que d D(I1), target(d) = S(I2) | target(d) R(I2) il existe une dépendance de I1 dont la destination (target) est la spécification de I2, ou une ressource fournie par I2

CP = SCP ICP est l ensemble des propriétés contextuelles de CI, où

SCP est l ensemble des propriétés contextuelles de la spécification S de I (si S est primitive, SCP = ), et ICP est l ensemble des propriétés contextuelles définies par CI

CCT = SCCT ICCT est l ensemble des contraintes contextuelles de CI, où

SCCT est l ensemble des contraintes contextuelles de la spécification S de I (si S est primitive, SCCT = ), et ICCT est l ensemble des contraintes contextuelles définies par CI

CPF = SCPF ICPF est l ensemble des préférences contextuelles de CI, où

SCPF est l ensemble des préférences contextuelles de la spécification S de I (si S est primitive, SCPF = ), et ICPF est l ensemble des préférences contextuelles définies par CI

L implémentation CI est conforme à la spécification S de I : CI S

Dans notre approche, un composite peut être créé à partir d une spécification primitive ou composite avant ou pendant la phase d exécution Sa validité est assurée par le mécanisme de groupes.

Pour illustrer le concept de composite nous définissons l implémentation composite ADELE-MediaCenter qui implémente la spécification composite HomeMediaCenter présentée auparavant. Cette implémentation, illustrée dans la Figure 59, hérite donc de toutes les caractéristiques définies par

HomeMediaCenter Sa composition est guidée au moins par l ensemble des propriétés contraintes et

préférences contextuelles définies par HomeMediaCenter.

L implémentation primitive ADELE-MediaManager (aussi présentée précédemment) est

l implémentation principale de ADELE-MediaCenter. De ce fait, ADELE-MediaManager implémente la spécification MediaManager définie comme la spécification principale de HomeMediaCenter.

Lors de la composition du composite, les dépendances de ses implémentations contenues sont

résolues à l intérieur du composite résultant dans une nouvelle implémentation contenue et ou

connexion) sauf si elles sont définies comme des dépendances du composite.

Par exemple, considérons la dépendance vers la spécification MediaServer de l implémentation

ADELE-MediaManager contenue dans le composite ADELE-MediaCenter (voir la Figure 59). Cette dépendance étant aussi une dépendance du composite, sa résolution résultera donc dans une connexion entre ADELE-MediaManager et une implémentation externe sélectionnée ainsi qu une

connexion entre ADELE-MediaCenter et l implémentation externe

Un composite peut être créé et composé partiellement ou complètement avant ou pendant la

phase d exécution Dans la phase de développement un composite représente partiellement ou

complètement) la structure statique de l application en termes d implémentations Dans la phase d exécution un composite représente l état d exécution actuel d un composite en termes d implémentations Notre mécanisme automatique de composition, exécuté durant la phase de développement ou durant la phase d exécution assure la conformité et la cohérence d une composition vis-à-vis de sa spécification. Tout composite créé avant l exécution est vérifié statiquement lors de sa phase de compilation packaging afin d assurer sa validité. Diverses instances peuvent être créées,

<composite name="ADELE-MediaCenter" mainImplem="ADELE-MediaManager" specification="MediaManager"> <property name="provider" value="ADELE" />

<dependency specification="MediaServer" id="ms" multiple="true"> <constraints> <implementation filter="(|(language=FR)(language=EN))" /> </constraints> <preferences> <implementation filter="(language=FR)" /> </preferences> </dependency>

<dependency interface="org.osgi.service.log.LogService" id="log"> <constraints> <implementation filter="(version&gt;=1.0.0)" /> </constraints> </dependency> <contentMngt> <dependency specification="MediaPlayer"> <constraints> <instance filter="(usedMemory&lt;200)" /> </constraints> </dependency> <dependency specification="MediaRecorder"> <constraints> <implementation filter="(&(codec=g711)(codec=x264))" /> </constraints> </dependency>

<borrow implementation="false" instance="false" /> <local implementation="true" instance="true" /> </contentMngt>

</composite>

3.M

ETAMODELE DE COMPOSANTS A SERVICES