1 / 36

Cilia, un framework de médiation ouvert, léger, multi-personnalités PARTIE 4 : Cas d'usage SI

Cilia, un framework de médiation ouvert, léger, multi-personnalités PARTIE 4 : Cas d'usage SI Auteurs : LIG/Adèle – Orange Labs/MAPS/MEP. Workshop Cilia : 21 juin 2010. Plan. Partie 1 : Médiation Historique Technologies de médiation Cilia : génération OSGi et multi-personnalités

seanna
Download Presentation

Cilia, un framework de médiation ouvert, léger, multi-personnalités PARTIE 4 : Cas d'usage SI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cilia, un framework de médiation ouvert, léger, multi-personnalités PARTIE 4 : Cas d'usage SI Auteurs:LIG/Adèle – Orange Labs/MAPS/MEP Workshop Cilia : 21 juin 2010

  2. Plan • Partie 1 : Médiation • Historique • Technologies de médiation • Cilia : génération OSGi et multi-personnalités • Partie 2 : Framework Cilia • Modèle d'implantation • Modèle de conception • Médiation de données et médiation de service • Partie 3 : Processus logiciel • Spécification d’architecture • Spécification d’instances • Déploiement • Partie 4 : Cas d'usage • Interopérabilité dans un Système d’Information • Remontée de données dans un Système Embarqué

  3. Cas d'usage Système d'Information UC1 : Décomposition de messages et aggrégation de messages Description et analyse Spécification de l’architecture Spécification des instances

  4. UC1 : description • Une application de suivi de consommation envoie des messages à destination de back-ends en charge de la facturation des communications fixe, mobile et internet

  5. Requêtes et réponses Front-End • Requête FE : • <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/> • <SOAP-ENV:Body> • <suiviconso-requete xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> • <idclient>CLIENT-ID 00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • <produit>fixe,mobile,internet</produit> • </suiviconso-requete> • </SOAP-ENV:Body></SOAP-ENV:Envelope> • Réponse FE : • <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> • <SOAP-ENV:Header/><SOAP-ENV:Body><suiviconso-reponse xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> <fixe>48</fixe> • <mobile>18</mobile> • <internet>17</internet> • <total>73</total> • </suiviconso-reponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

  6. Transformer : créer un message composite • Requête initiale du client (body) : • <suiviconso-requete xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> • <idclient>CLIENT-ID 00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • <produit>fixe,mobile,internet</produit> • </suiviconso-requete> • Requête après transformation (body) : • <suiviconso-requeteproduit="fixe" xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> • <idclient>CLIENT-ID 00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • </ suiviconso-requete> • <suiviconso-requeteproduit="mobile"xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> • <idclient>CLIENT-ID 00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • </ suiviconso-requete> • <suiviconso-requeteproduit="internet"xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> • <idclient>CLIENT-ID 00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • </suiviconso-requete>

  7. 1. Transform 2. Split Internet Mobile Fixe 3. Translate 4. Transform 5. InvokeS 6. Aggregate UC1 : analyse 1) Créer une requête composite 2) Découper le contenu et créer nrequêtes 3) Router les messages par le contenu 4) Traduire le contenu d'une requête (pour chaque BE) 5) Transformer une requête (pour chaque BE) 6) Appeler un service (pour chaque BE) 7) Regrouper les réponses associées à une requête et créer une liste de n réponses 8) Créer une réponse et y insérer une valeur calculée

  8. Splitter : créer n requêtes <suiviconso-requete produit="fixe" xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> <idclient>CLIENT-ID 00114</idclient> <debut>15052010</debut><fin>15062010</fin> </ suiviconso-requete> • Pour chaque sous-message, ajouter dans header : • - correlation_id, • - nb total de messages, • - n°seq <suiviconso-requete produit="mobile" xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> <idclient>CLIENT-ID 00114</idclient> <debut>15052010</debut><fin>15062010</fin> </ suiviconso-requete> <suiviconso-requete produit="internet" xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> <idclient>CLIENT-ID 00114</idclient> <debut>15052010</debut><fin>15062010</fin> </suiviconso-requete>

  9. Translator : traduire le contenu • Avant traduction (exemple de FacturationInternet) : <suiviconso-requete produit="internet"xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> • <idclient>CLIENT-ID 00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • </suiviconso-requete> • Après traduction : • <suiviconso-requete produit="internet" xmlns:SOAP-ENV="http://www.example.org/SuiviConsoInternet/"> • <idclient>CLIENT-IDENT00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • </suiviconso-requete> Information de contexte : - correlation_id, - nb total de messages, - n°seq

  10. Transformer : supprimer un attribut • Avant transformation (exemple de FacturationInternet) : <suiviconso-requete produit="internet"xmlns:SOAP-ENV="http://www.example.org/SuiviConsoInternet/"> • <idclient>CLIENT-ID00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • </suiviconso-requete> • Après transformation : • <suiviconso-requete xmlns:SOAP-ENV="http://www.example.org/SuiviConsoInternet/"> • <idclient>CLIENT-IDENT00114</idclient> • <debut>15052010</debut><fin>15062010</fin> • </suiviconso-requete> Information de contexte : - correlation_id, - nb total de messages, - n°seq

  11. Appeler un WS • Réponse de FacturationFixe : <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/> <SOAP-ENV:Body><suiviconso-reponseFixe xmlns:SOAP-ENV="http://www.example.org/suiviconsoFixe/"> <conso>48</conso> </suiviconso-reponseFixe> </SOAP-ENV:Body> </SOAP-ENV:Envelope> • Réponse de FacturationMobile : • … <suiviconso-reponseMobile xmlns:SOAP-ENV="http://www.example.org/suiviconsoMobile/"> <conso>18</conso> </suiviconso-reponseMobile> • Réponse de FacturationInternet : • … <suiviconso-reponseInternet xmlns:SOAP-ENV="http://www.example.org/suiviconsoInternet/"> <conso>17</conso> </suiviconso-reponseInternet>

  12. Aggregator : créer une réponse • <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> • <SOAP-ENV:Header/><SOAP-ENV:Body><suiviconso-reponse xmlns:SOAP-ENV="http://www.example.org/SuiviConso/"> <fixe>48</fixe> • <mobile>18</mobile> • <internet>17</internet> • <total>73</total> • </suiviconso-reponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

  13. Cas d'usage Système d'Information UC1 : Décomposition de messages et aggrégation de messages Description et analyse Spécification de l’architecture Spécification des instances

  14. Architecture Catégories de médiateurs identifiés Transform, Split, Translate, InvokeS, Aggregate Types de médiateur identifiés pour le cas d'usage Types spécifiques : - FacturationFixe, FacturationMobile, FacturationInternet - UC1Aggregator Types de la bibliothèque Cilia : -XsltTransformer, - XmlSplitter, - Translator

  15. Transformer Cilia compendium : XsltTransformer Scheduler = synchronisation But : transmettre sans délai le message à la partie "traitement métier" "immediate-scheduler" de la bibliothèque Cilia Processor = traitement métier But : modifier la structure d'un message POJO "XsltTransformerProcessor" Dispatcher = routage But : router un message vers le composant destinataire "multicast-dispatcher" de la bibliothèque Cilia

  16. Spécification de Transformer Cilia compendium : XsltTransformer <mediator-component category="Transform" name="XsltTransformer">      <processor classname="XsltTransformerProcessor">          <property name="xslt-file" field="filepath" />       </processor> <scheduler name="immediate-scheduler" /> <dispatcher name="multicast-dispatcher" /> </mediator-component>

  17. Splitter Cilia compendium : XmlSplitterWithCorrelation Scheduler = synchronisation But : transmettre sans délai le message à la partie "traitement métier" "immediate-scheduler" de la bibliothèque Cilia Processor = traitement métier But : découper le contenu sur expression et créer des messages POJO "XmlSplitterProcessor" Dispatcher = routage But : insérer un numéro de séquence et le nombre total de destinataires dans le header des messages, router les messages par le contenu vers les destinataires "content-based-dispatcher-with-correlation" de la bibliothèque Cilia

  18. Spécification de Splitter Cilia compendium : XmlSplitterWithCorrelation <mediator-component category="Split" name="XmlSplitterWithCorrelation">      <processor classname="XmlSplitterProcessor">          <property name="separator" field="expression" />         </processor> <scheduler name="immediate-scheduler" /> <dispatcher name="content-based-dispatcher-with-correlation" /> </mediator-component>

  19. Translator Cilia compendium : Translator Scheduler = synchronisation But : transmettre sans délai le message à la partie "traitement métier" "immediate-scheduler" de la bibliothèque Cilia Processor = traitement métier But : traduire des éléments du contenu d'un message en utilisant un dictionnaire local au médiateur (paramètre) POJO TranslatorProcessor Dispatcher = routage But : router un message vers le composant destinataire "multicast-dispatcher" de la bibliothèque Cilia

  20. Spécification de Translator Cilia compendium : Translator <mediator-component category="Translate" name="Translator">      <processor classname="TranslatorProcessor">          <property name="dictionary" field="dictionary" />         </processor> <scheduler name="immediate-scheduler" /> <dispatcher name="multicast-dispatcher" /> </mediator-component>

  21. FacturationInternet UC1 projet : FacturationInternet Scheduler = synchronisation But : transmettre sans délai le message à la partie "traitement métier" "immediate-scheduler" de la bibliothèque Cilia Processor = traitement métier But : transmettre la requête au service InternetBilling et récupérer la réponse POJO développé pour le projet UC1 – utilisation de CXF publicclassFacturationInternetProcessor{…} Dispatcher = routage But : router unmessage vers le composant destinataire "multicast-dispatcher" de la bibliothèque Cilia

  22. Spécification de FacturationInternet UC1 projet : FacturationInternet <mediator-component category ="InvokeS" name = "FacturationInternet"> <processor classname ="FacturationInternetProcessor" >           <proxy value ="uc1-cxf-proxy" />         </processor>   <scheduler name="immediate-scheduler" /><dispatcher name="multicast-dispatcher" /> </mediator-component >

  23. POJO FacturationInternetProcessor public class FacturationInternet { private FacturationInternetService service; public Data process(Data data) { String content = (String) data.getContent(); String responseContent = service.getConsommation(content); data.setContent(responseContent); return data; } }

  24. Aggregator UC1 projet : UC1Aggregator Scheduler : synchronisation But : regrouper les messages sur identifiant de corrélation, puis transmettre la liste des messages corrélés au processor "correlation-scheduler" de la bibliothèque Cilia Processor : traitement métier But : créer un message unique et y insérer une valeur calculée POJO développé pour le projet UC1 publicclassUC1AggregatorProcessorimplements IProcessor {…} Dispatcher : routage But : router les messages vers le composant destinataire "multicast-dispatcher" de la bibliothèque Cilia

  25. Spécification de Aggregator UC1 projet : UC1Aggregator <mediator-component category="Aggregate" name = "UC1Aggregator"> <processor classname ="UC1AggregatorProcessor" />   <scheduler name="correlation-scheduler" /><dispatcher name="multicast-dispatcher" /> </mediator-component >

  26. POJO UC1AggregatorProcessor public class UC1AggregatorProcessor implements IProcessor{ publicList process(List dataSet) { String fixe = "0",mobile = "0",internet = "0"; int total = 0; Document document = null; for(int i=0;i<dataSet.size();i++){ document = getDocumentFromData((Data)dataSet.get(i)); if (isDocumentFromMobile(document)) mobile = getConsommation(document); else if (isDocumentFromInternet(document)) internet = getConsommation(document); else if (isDocumentFromFixe(document)) fixe = getConsommation(document); } //calcul du total total=Integer.valueOf(mobile)+Integer.valueOf(fixe)+Integer.valueOf(internet); Data data = (Data) ((Data) dataSet.get(0)).clone(); data.setContent(buildReponse(fixe, mobile, internet, total));//composition de la réponse List returnList= Collections.singletonList(data); return returnList; } }

  27. Cas d'usage Système d'Information UC1 : Décomposition de messages et aggrégation de messages Description et analyse Spécification de l’architecture Spécification des instances Déploiement

  28. Instances Chaîne ou graphe de médiation Spécification des instances des types identifiés Spécification séparée des liaisons (binding)

  29. Exemple de deux instances de Transformer Première occurrence de Transformer dans la chaîne de médiation : créer une requête composite • <mediator-instance type="XsltTransformer" id="xslttransformer-1" > • <processor> • <property name="xslt-file" value="trans-1.xslt" /> • </processor> • </mediator-instance> Deuxièmeoccurrence de Transformer dans la chaîne de médiation : supprimer un attribut • <mediator-instance type="XsltTransformer" id="xslttransformer-2" > • <processor> • <property name="xslt-file" value="trans-2.xslt" /> • </processor> • </mediator-instance>

  30. Une instance de Splitter <mediator-instance type= "XmlSplitterWithCorrelation" id="xmlsplitterwithcorrelation-1"> <processor> <property name="separator" value="//suiviconso-requete" /> </processor> <dispatcher> <property name="language" value="xpath" /> <property name="condition"> <property name="//suiviconso-requete[@produit='fixe']" value="fixe" /> <property name="// suiviconso-requete[@produit='mobile']" value="mobile" /> <property name="// suiviconso-requete[@produit='internet']" value="internet" /> </property> </dispatcher> </mediator-instance>

  31. Trois instances de Translator <mediator-instance type="Translator" id="translator-1"> <processor>   <property name=“dictionary"> <item key=“SuiviConso" value=“SuiviConsoFixe"/> </property></processor> </ mediator-instance > <mediator-instance type="Translator" id="translator-2"> <processor>   <property name=“dictionary"> <item key=“SuiviConso" value=“SuiviConsoMobile"/> </property></processor> </ mediator-instance > <mediator-instance type="Translator" id="translator-3"> <processor>   <property name=“dictionary"> <item key="CLIENT-ID" value="CLIENT-IDENT"/> <item key=“SuiviConso" value=“SuiviConsoInternet"/> </property></processor> </ mediator-instance > FacturationFixe FacturationMobile FacturationInternet

  32. Trois instancespour appeler un WS FacturationFixe : <mediator-instance type="FacturationFixe " id="facturationfixe-1"/> FacturationMobile : <mediator-instance type="FacturationMobile " id="facturationmobile-1"/> FacturationInternet : <mediator-instance type="FacturationInternet " id="facturationinternet-1"/>

  33. Une instance de UC1Aggregator <mediator-instance type="UC1Aggregator" id="uc1aggregator-1"/>

  34. Spécification des liaisons • <bindings> • … • <!-- Instance de Transformer vers instance de Splitter --> • <binding from="xslttransformer-1” • to="xmlsplitterwithcorrelation-1”/> • <!-- Instance de Splitter vers les 3 instances de Translator --> • <binding from="xmlsplitterwithcorrelation-1:fixe“ • to="translator-1" /> • <binding from="xmlsplitterwithcorrelation-1:mobile“ • to="translator-2" /> • <binding from="xmlsplitterwithcorrelation-1:internet“ • to="translator-3" /> • … • </bindings>

  35. Liaison avec le premier médiateur • <!-- point d'entrée pour le premier médiateur--> • <binding to="xslttransformer-1"> • <property name="topic" value="splitaggregate/input"/> • </binding> topic=splitaggregate/input Le composant chain-proxy est un gestionnaire de requête qui sert aussi de façade pour l’accès à la passerelle Premier médiateur (xslttransformer-1) Gestionnaire de RQ/R Chain Proxy Front End sender.send(data); … public void notifyData(Data data){…} dernier médiateur

  36. Communication vers l’extérieur • La chaîne de médiation communique avec des services externes en utilisant des technologies d’importation de services (ROSE, DOSGi-CXF, …) • Cette solution permet d’avoir des médiateurs uniquement dédiés au code métier

More Related