Cilia/Workshop/DSL XML

From Wiki Adele Team
< Cilia‎ | Workshop
Revision as of 12:41, 24 November 2010 by Admin (talk | contribs) (Reverted edits by Iharuhiq (Talk) to last revision by Pedraza)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Pourquoi un DSL?

Le Cilia DSL permet de définir les médiateurs qui vont interagir avec la chaîne de médiation et leurs propriétés, en plus permettre de créer des liaisons entre les médiateurs.

Description en XML

Le racine du XML doit être toujours "cilia". Il est possible d'avoir plus d'une chaîne de médiation dans le même fichier.

NAME OPTIONAL DESCRIPTION
cilia No It's the root node.
chain No Each chain is defined in this chain node.
<cilia>
   <chain ...>
     <!-- -->
   </chain>

   <chain ...>
     <!-- -->
   </chain>
</cilia>

Chaque chaîne de médiation doit avoir un type et un identificateur. Pour l'instant le type n'apporte pas de fonctionnalité a la chaîne mais est utile pour les distinguer.

NAME OPTIONAL DESCRIPTION
id No Chain unique identification.
type No Chain type.
<cilia>
    <chain id="MyChainId" type="MyChainType">
        <!-- -->
    </chain>
</cilia>

Dans la version actuelle (1.0.0-SNAPSHOT) il y a deux balises principales pour chaque chaîne de médiation.

<chain>
   <mediators>..</mediators>
   <bindings>...</bindings>
</chain>
NAME OPTIONAL DESCRIPTION
mediators No It contains all the mediators used in each chain.
bindings No It contains all the bindings in the chain.

Description de médiateurs

Tous les médiateurs d'une chaîne doivent être définis dans la balise "mediators". Et, tout comme les chaînes, chaque médiateur doit avoir un type et un identificateur. Contrairement aux chaînes de médiation, le type de chaque médiateur est important pour qu'il soit résolu dans la plateforme d'exécution. L'identificateur est aussi important et doit être unique dans chaque chaîne.

<chain id="chainId" type="chainType">
    <mediators>
      <mediator id="mediatorId" type="MyMediatorType">
        <property name="propertyName" value="propertyValue"/>
      </mediator>
    </mediators>
</chain>
NAME OPTIONAL DESCRIPTION
id No Mediator unique identifier.
type No Mediator type used to resolve it in the execution platform.
property Yes Each mediator could have different properties, in this section each mediator's property is defined.
property name No Each mediator property must have a name.
property value No Each mediator property must have a value, it could be a string or a map.


Description de Bindings

Le deuxième balise d'une chaîne de médiation sert à décrire les bindings.

<chain id="chainId" type="chainType">
    <mediators>
      <!-- mediators -->
    </mediators>
    <bindings>
       <bind from="mediatorId1->exitPoint1" to="mediatorId2->inPoint1" />
    </bindings>
</chain>
NAME OPTIONAL DESCRIPTION
bind No Bind declaration
bind from Yes Describes which mediator is the one who sends the data, and which port is used by this binding.
bind to Yes Describes which mediator is the one who receives the data, and which port is used by this binding.
bind type Yes Describes the type of the binding between mediators, event-admin-binding is the default one.

Binding Port

La spécification d'un port dans un binding peut être omis. Dans ce cas un port "std" est utilisé.

<chain id="chainId" type="chainType">
    <mediators>
      <!-- mediators -->
    </mediators>
    <bindings>
       <bind from="mediatorId1" to="mediatorId2" />
    </bindings>
</chain>

La spécification précèdent est équivalent a la spécification qui suive.

<chain id="chainId" type="chainType">
    <mediators>
      <!-- mediators -->
    </mediators>
    <bindings>
       <bind from="mediatorId1->std" to="mediatorId2->std" />
    </bindings>
</chain>

Type de binding

Le type de binding pourras être spécifié pour changer le type de protocole a utilises au moment de faire un liaison. Cilia utilise un liaison OSGi/EventAdmin si aucun type a être spécifiée. Pour spécifier un autre type de liaison on doit metre le type attribut dans le balise bind.

    <bindings>
       <bind from="mediatorId1->std" to="mediatorId2->std" type="jms-binding"/>
    </bindings>

Half Binding

Quand on va faire un liaison entre un chaîne de médiation et un autre application externe, ou un protocole de communication mais pas nécessairement pour faire communiquer deux médiateurs on utilises les bindings qui utilisent seulement un médiateur.

    <bindings>
       <bind from="mediatorId1->std" type="jms-binding">
          <property name="jms.topic" value="example$to$topic"/>
       </bind>
    </bindings>

Dans l'exemple précèdent, le médiateur "mediatorId1" en utilisant le port "std", a un binding de type "jms-binding" et envoie la donnée vers le topic "example$to$topic"

    <bindings>
       <bind to="mediatorId2->std" type="jms-binding">
          <property name="jms.topic" value="example$from$topic"/>
       </bind>
    </bindings>

Pour recevoir la donnée, on change le "from" de la liaison pour "to". Dans cet exemple, le médiateur "mediatorId2" reçoit le donnée envoie par le topic "example$from$topic"

Exemple d'un chaîne de médiation

<cilia>
    <chain id="MyChainId" type="MyChainType">
       <mediators>
          <mediator type="myMediator" id="mediatorId1"/>
          <mediator type="myMediator2" id="mediatorId2"/>
       </mediators>
       <bindings>
          <bind from="mediator1->std" to="mediatorId2->std" >
       </bindings>
    </chain>
</cilia>