Cilia/Workshop/TP3

From Wiki Adele Team
Jump to: navigation, search


This Page Is Currently Under Construction And Will Be Available Shortly, Please Visit Reserve Copy Page


CLICK HERE


Objectif du TP

L'objectif de ce TP est de créer un type de médiateur à partir de zéro, de spécifier une instance de ce médiateur, puis de la déployer. On verra aussi comment un médiateur peut appeler un service OSGi.

Description de l'application

L'application demande à l'utilisateur de saisir un nombre. Le médiateur transforme ce nombre en lettres en appelant un service OSGi de la passerelle. Nous allons créer une chaîne de médiation constituée de ce médiateur avec les connexions suivantes :

  • En entrée, le médiateur est connecté à une console graphique qui assure la saisie du texte d'entrée.
  • En sortie, le médiateur est connecté à une console textuelle qui affiche le résultat du traitement.

ConverterMediator1.png

Le médiateur ne fait pas la conversion de nombres en lettres, mais il utilise un service disponible dans le passerelle qui effectue cet opération.

ConverterMediator2.png

Créer un projet Maven

<source lang="bash"> mvn org.apache.maven.plugins:maven-archetype-plugin:create \ -DarchetypeArtifactId=maven-ipojo-plugin \ -DarchetypeGroupId=org.apache.felix \ -DgroupId=cilia.examples \ -DartifactId=number-converter \ -Dversion=1.0.0 \ -Dname="Number converter" \ -DpackageName=cilia.examples.mediator </source>

Cette commande génère le squelette du projet, plus spécialement:

  • un fichier pom.xml avec le plugin permettant la compilation en bundle OSGi
  • les répertoires src/main/java et src/main/ressources
  • la structure des packages

Le répertoire src/main/resources contient le fichier iPOJO metadata.xml

Download.png Télécharger le projet complet de ce TP comprend la passerelle TP3-project


Ajouter des dépendances

Dans le fichier pom.xml, il faut ajouter le nom du projet et les dépendances suivantes:

<source lang="xml">

<dependencies>

 <dependency>
   <groupId>fr.liglab.adele.cilia</groupId>
   <artifactId>cilia-core</artifactId>
   <version>1.0.0-SNAPSHOT</version>
 </dependency>
 <dependency>
   <groupId>cilia.examples</groupId>
   <artifactId>number.converter.service</artifactId>
   <version>1.0.0</version>
 </dependency>

</dependencies> </source>

Ces dépendances sont vers Cilia ipojo runtime et vers le service que notre médiateur utilisera.

Dans le fichier pom.xml, le maven-bundle-plugin doit être configuré comme suit : <source lang="xml"> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>1.4.3</version> <extensions>true</extensions> <configuration>

 <instructions>
   <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
   <Private-Package>cilia.examples.mediator</Private-Package>
 </instructions>

</configuration> </source>

Développer un processeur spécifique

On crée une nouvelle classe Java qui correspondra au processor de notre médiateur "NumberConverterProcessor"; On place ce fichier sous src/main/java/cilia/examples/mediator/NumberConverterProcessor.java <source lang="java"> package cilia.examples.mediator; import cilia.examples.converter.service.NumberConverter; import fr.liglab.adele.cilia.Data; public class NumberConverterProcessor {

   private NumberConverter converter;
   public Data process(Data data) {
       String content = (String)data.getContent();
       Long number = null;
       number = Long.decode(content);
       String wordValue = converter.convert(number.longValue());
       data.setContent(wordValue);
       return data;
   }

} </source>

Dans cet exemple, l'object converter n'est pas instancié et il n'est pas nécessaire de le faire. Dans la section suivante, on configure un composant iPOJO qui résoudra les dépendances de service.

Spécifier un type de médiateur

Le médiateur NumberConverter est spécifié en utilisant la configuration iPOJO étendue pour la médiation.

Le fichier src/main/resources/metadata.xml doit contenir la spécification du médiateur comme suit : <source lang="xml"> <ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance%22 xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd%22 xmlns="org.apache.felix.ipojo" xmlns:cilia="fr.liglab.adele.cilia"> <component classname="cilia.examples.mediator.NumberConverterProcessor" name="NumberConverterFrench"> <requires field="converter" filter="(language=french)"/> <cilia:immediate-scheduler data.type="fr.liglab.adele.cilia.Data"/> <cilia:multicast-dispatcher data.type="fr.liglab.adele.cilia.Data"/> </component> </ipojo> </source>

Ce médiateur utilise un service OSGi. En utilisant la balise requires, iPOJO injectera le service correspondant. Dans cet exemple, notre type de médiateur est configuré avec deux handlers de la bibliothèque Cilia : immediate-scheduler et multicast-dispatcher.

i La version actuelle de Cilia (1.0.0-SNAPSHOT) supporte deux types de données dans le processeur : "fr.liglab.adele.cilia.Data" et "java.util.List". Le dernier est une liste de "fr.liglab.adele.cilia.Data".


Spécification en DSL XML de la chaîne de médiation

Ensuite, on doit créer un fichier tp3.dscilia qui contient la description de la chaîne de médiation. <source lang="xml"> <cilia>

       <chain id="converterChain_tp3">
               <mediators>
                       <mediator-instance id="mediator1" type="NumberConverterFrench"/>
               </mediators>
               <bindings>
                       <binding to="mediator1" protocol="gui-console"/>
                       <binding from="mediator1" protocol="console"/>
               </bindings>
       </chain>

</cilia> </source>

Compiler et déployer

Le projet doit être compilé en utilisant Maven.

<code>mvn clean install</code>

Download.png Le résultat, et les bundles nécessaires TP3-files


Le bundle créé doit être copié dans le répertoire <code>load</code> de la plateforme d'execution.

Déployer la chaîne de médiation

Le fichier tp3.dscilia doit être copié dans le répertoire <code>load</code> de la plateforme d'exécution pour créer dynamiquement une instance de la chaîne de médiation.

? Comment créer un nouveau médiateur qui filtrera les messages qui ne sont pas des nombres ou qui sont des nombres négatifs et comment l'ajouter à notre chaîne ...


TP suivant