Cilia Mediation Framework v0.9.0 Implantation.
Plan Cilia: c'est quoi? Capacités. Cilia: Modèle d'implantation. Mise en œuvre: Médiateur Cilia. Assemblage dune chaîne de médiation. Exemples de médiateurs.
Cilia, c'est quoi? Modèle à composant spécifique au domaine de la médiation. Extension d'iPOJO. Permettre dassembler des chaînes de médiation pour faire communiquer des applications hétérogènes. Approche « white-box » Modèle simple. Encourage la séparation de préoccupations. Basée sur une plateforme à services dynamique (OSGi).
Capacités Runtime de médiation léger. Faible couplage entre médiateurs. Introspectable à l'exécution. Permet de mettre en place différents patrons d'intégration. Extensible. Permet de définir des médiateurs configurables. Configurables au runtime et a l'instanciation.
Cilia : Modèle d'implantation Un médiateur Cilia est implanté avec : POJO (Plain Old Java Object). Description de médiateur Cilia (XML d'iPOJO + des handlers de Cilia). Description des instances de médiateurs (XML d'iPOJO). POJO + Description de Médiateur Déclaration d'instance + collector scheduler Processor (POJO) sender dispatcher Médiateur Cilia
Composé d'un POJO et généralement deux handlers de Cilia. Scheduler handler : Gère le déclenchement du traitement des données. Dispatcher handler : Gère le routage des données. scheduler processor dispatcher collectorsender Pour la communication entre médiateurs ou par protocoles de réception/envoi de données : Collector : Collecte ou reçoit les données. Sender : Envoie les données.
Logique métier La logique métier d'un médiateur Cilia est définie dans la méthode process du médiateur Cilia. Exemple : package org.demo.mediators; import org.ow2.chameleon.cilia.Data; import org.ow2.chameleon.cilia.framework.Mediator; public class MediatorTest implements Mediator { public List process(List receivedData) { receivedData.get(0).setContent("new content"); return new ArrayList(receivedData); }
Logique non-fonctionnel La logique non-fonctionnelle d'un médiateur Cilia est gérée par un ensemble de handlers (scheduler et dispatcher). <component name="MediatorTest" classname="org.demo.mediators.MediatorTest"> Composant iPOJO + Cilia : Immediate-scheduler : déclenche le traitement (process method) pour chaque donné reçue multicast-scheduler : envoi la donnée traitée à tous les senders. Cilia handlers : NOTE : le médiateur de cet exemple n'a aucun sender ni collector déclaré.
Mise en œuvre : médiateur Cilia La version actuelle de Cilia est implémentée directement en utilisant le langage de description diPOJO. Il y a trois étapes pour faire un médiateur Cilia en utilisant iPOJO. Implémenter une classe Java (Le processor). Décrire le composant iPOJO avec les handlers de Cilia. Déclarer l'instance du médiateur. package org.demo.mediators; public class MediatorTest implements Mediator { public DataSet process(DataSet receivedData) {...} } <component name="MediatorTest" classname="org.demo.mediators.MediatorTest"> NOTE: La description du médiateur peut être faite dans le même fichier que la declaration de linstance (Metadata diPOJO).
Assemblage de chaîne de médiation Pour communiquer entre médiateurs : on ajoute et configure les senders dans la section du dispatcher et les collectors dans la section du scheduler. Déclaration des instances. Déclarations des médiateurs Communication entre les deux Médiateurs en utilisant EventAdmin avec le result/topic" Topic = "result/topic"
En progresse Description des médiateurs dans un langage de haut niveau. Les collectors et senders ne sont pas déclarés dans le type de médiateur, leur déclaration est faite au moment de décrire la chaîne de médiation sur la forme de connections. MediatorTest <connection type="EventAdmin" out-mediator="mediator1" in-mediator="mediator2" /> Déclaration de type de médiateur Déclaration de chaîne de médiation, utilisation de médiateurs et liaison entre eux
Scheduler Exemples Periodic scheduler Déclenche le traitement de donnée à chaque période de temps. Immediate Scheduler Déclenche le traitement de donnée chaque fois quune donnée est collectée. Correlation Scheduler Déclenche le traitement de donnée quand la liste de données est complète en utilisant linformation ajoutée par le split. Counter Scheduler Déclenche le traitement de donnée quand une condition, qui évalue et compte les données, est vérifiée.
Periodic Schedulers Déclenche le traitement de donnée à chaque période de temps. Propriétés : scheduler.delay : temps en millisecondes avant de commencer le premier traitement. scheduler.period : temps en millisecondes entre chaque déclenchement du traitement. Utilisation :
Immediate Scheduler Déclenche le traitement de donnée à chaque période de temps. Propriétés : Aucune. Utilisation :
Correlation Scheduler Déclenche le traitement de donnée quand la liste de donnée est complet en utilisant linformation ajoutée par le split. Propriétés : scheduler.correlation : quels sont les messages qui doivent être traités ensemble ? Utilisation : NOTE: "SPLIT.ID" est une méta-donnée ajoutée par le splitter pour identifier toutes les données qui doivent être traitées ensemble. La condition de finalisation est vérifiée quand le scheduler a reçu toutes les données.
Counter Scheduler Déclenche le traitement de donnée quand une condition qui évalue et compte le donnée, est vérifiée. Propriétés : scheduler.correlation : quels sont les messages qui doivent être traités ensemble ? scheduler.count : expression de type LDAP pour compter les données. scheduler.condition : condition de finalisation déclenchant le traitement de données.
Counter Scheduler (2) Utilisation : NOTE: Dans cet exemple, le scheduler va déclencher le traitement de données dès qu'il a reçu 3 données avec le nom "dataA" et 4 données avec le nom "dataB".
Dispatcher Exemples Content Based Dispatcher (en utilisant LDAP) Utilise LDAP pour vérifier le contenu et choisir à quel sender envoyer. Content Based Dispatcher (en utilisant XPath) Utilise XPath pour vérifier le contenu et choisir à quel sender envoyer. Multicast Dispatcher Envoie toutes les données à tous les senders du médiateur.
Content Based Dispatcher (ldap) Utilise LDAP pour vérifier le contenu et choisir a quel sender envoyer. Propriétés : routes : contient les conditions et les senders qui recevront les données quand la condition est vérifiée. Utilisation : NOTE: envoie la donnée vers le sender1 si le data.content <= 5, sinon il l'envoie vers sender2.
Content Based Dispatcher (XPath) Utilise XPath pour vérifier le contenu et choisir à quel sender envoyer. Propriétés : routes : contient les conditions et les senders qui recevront les données quand la condition est vérifiée. routes.condition.language : langage à utiliser pour la condition (XPath).
Content Based Dispatcher (xpath) Utilise XPath pour vérifier le contenu et choisir à quel sender envoyer. Utilisation : NOTE: envoie la donnée vers le sender1, si dans le contenu de la donnée l'élément contract-type a pour valeur "internet". Si il a pour valeur "fix" il envoie vers le sender2.
Multicast Dispatcher Envoie toutes les données à tous les senders du médiateur. Propriétés : Aucune. Utilisation : NOTE: envoie la donnée vers le sender1 et vers le sender2.