France Telecom Matthieu Leclercq

Slides:



Advertisements
Présentations similaires
Introduction Rétro ingénierie d’interfaces graphiques
Advertisements

Module 5 : Implémentation de l'impression
Le struts validator – framework de validation
DTD Sylvain Salvati
Julien HERON.
Virtualisation dorchestration de services TER Master 1 Infomatique 4 Avril 2008 Encadrant : Philippe Collet.
TER 2005 Sujet encadré par Philippe Collet Nicolas Yohann Barbier Thomas Castillejos Nicolas Sauvan Bastien Salageanu Emil.
Langages objet Définitions Traduction des méthodes en C++
Cours 5.3 : XML et les architectures N-tiers – Tier Présentation
51 Les technologies XML Cours 6 : XML et les architectures N-tiers – Tier Métier Janvier Version 1.0 -
D1 - 01/03/2014 Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document par son destinataire.
Design Pattern MVC En PHP5.
VI50 – TP3 Introduction à Virtools. Virtools Virtools Media Design 3DS, Maya, Lightwave… Sound Design wav, mp3… Texture, 2D interface jpg, bmp… Specific.
TP 3-4 BD21.
Common Gateway Interface
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Les Services Web Avec.NET version 1.1. Un service Web en bref… Méthodes ou objets accessible à distance via SOAP (Simple Object Access Protocol ); SOAP.
Etude des Technologies du Web services
Programmation orientée objet
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
Configuration de Windows Server 2008 Active Directory
Interfaces : comment classifier ?
XML: Syntaxe XML, DTD et Schémas
Module 5 : Publication de ressources dans Active Directory
Séminaire Service Interoperability on Context Level in Ubiquitous Computing Environments Davide Bazzi IIUF Etude de larticle: Service Interoperability.
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
WP2 Modèles de programmation
Patrons de conceptions de créations
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
APPLETS. Applets : généralités Applet : application s'exécutant dans une page HTML Le ByteCode (fichiers.class) est téléchargé depuis un serveur. L'exécution.
0 Objectifs de la session n°1  Revenir sur toutes les bases théoriques nécessaires pour devenir un développeur Web,  Découvrir l’ensemble des langages.
Interface application 1 Fichiers en upload Fichiers en téléchargement PlayersChat Fichiers Recherche.
 Objet window, la fenêtre du navigateur
Un visiteur… …venu d’ailleurs Whooooooooooooooo!!!
DÉFINITIONS modules programmes chaînes de programmes
Mastère Professionnel Systèmes de Communication et Réseaux
Technologies web et web sémantique TP3 - XML. XML eXtensible Markup Language (langage extensible de balisage) – Caractéristiques: méta-langage = un langage.
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Université Lyon 2 - TICE 3 : séance 041 Traitement de données chiffrées dans un tableur TICE 3 – Séance 4 Karine Abbas, Ny Haingo Andrianarisoa.
Architecture d’une application WEB Statique:
Code Contracts Gilles TOURREAU - MVP C# Architecte .NET / Formateur
Présentation du framework JSF (Java Server Faces) dans le modèle événementiel MVCII
Visualisation d’un entrepôt de données Pré soutenance technique
Citrix ® Presentation Server 4.0 : Administration Module 2 : Présentation et installation de Citrix Presentation Server.
Les RPC remote procedure call
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours MIAGE « Architectures Orientées Services »Henry Boccon-GibodCours MIAGE « Architectures Orientées Services »Henry Boccon-Gibod 1 Architectures Orientées.
Mise au point d'une interface XUL pour un concordancier (LDI)‏ Tromeur Laurent 29 octobre 2007.
Modélisation des documents: DTD et Schéma
1. Introduction 2. DTD 3. Schémas
Les Servlets Présentation Cycle de vie Principe de fonctionnement
LDAP La gestion des groupes Gestionnaire de groupes uPortal permet de brancher plusieurs types (services) de gestion de groupes. Les groupes peuvent être.
Citrix ® Presentation Server 4.0 : Administration Module 12 : Sécurisation de l'accès aux ressources publiées.
L T I Laboratoire de Téléinformatique 2 Projet de semestre Parseur XML basé sur la DTD : Buts –Utiliser la grammaire définissant un type de fichiers XML.
1 Journee gdr COSMAL 27/01/2009 Exécution Distribuée et Agile de Compositions de Services Françoise Baude & Virginie Legrand
CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003.
POIRIER Kévin (Chef de projet) HUCHEDÉ Cédric BEUTIER Kévin LEBRUN Jérémy BESNIER Richard Simulation de décisions de Jury 1.
Objectifs du développement Des agendas culturels et services quotidiens de La Libre Belgique et de La Dernière Heure et proposera des services d’informations.
SOAP et les RPC XML SOAP WSDL RPC. Rappels sur le XML Langage avec des balises Très lisible Pour stocker des données Séparation entre contenu et présentation.
Systèmes d'information décisionnels
XML : un métalangage pour la description de documents structurés XML a été défini par le consortium W3 en fonction de 2 objectifs: Compenser les limitations.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 3.
Le langage XML Documents bien formés Un document XML est dit bien formé lorsque le document est correct sans toutefois posséder une DTD. Le prologue du.
05/02/98WEB ESNIG Liste de valeurs « LOV » Oracle Designer/2000 & Oracle Web Server.
Un visiteur… …venu d’ailleurs Whooooooooooooooo!!!
Installation du PGI – CEGID
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
FACTORY systemes Le module de gestion de fiches recettes FORMATION INTOUCH 7.0.
FACTORY systemes Module 6 Page 6-1 La base de données InSQL FORMATION InSQL 7.0.
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Transcription de la présentation:

France Telecom 17-12-2004 Matthieu Leclercq Fractal ADL France Telecom 17-12-2004 Matthieu Leclercq

Plan L’ADL L’usine fractal ADL Exemple d’extension L’interface Factory Modules, mini-DTD et AST Architecture de l’usine Exemple d’extension Ajout dynamique de composants

L’ADL Fractal Fichiers XML respectant une DTD Un fichier contient une définition Une définition est une description d’un composant. Interfaces Sous composants (composant composite) Liaisons entre sous composants Implémentation (composant primitif) Contrôleurs Attributs Contrôleurs Julia (julia.cfg)

Exemple Composants Helloworld du tutorial Fractal client server service run Composants Helloworld du tutorial Fractal La méthode run exécute le client qui appel le serveur grâce à l’interface service

Exemple <definition name="HelloWorld"> <interface name="r" role="server" signature="java.lang.Runnable"/> <component name="client"> <interface name="r" role="server" signature="java.lang.Runnable"/> <interface name="s" role="client" signature="Service"/> <content class="ClientImpl"/> </component> <component name="server"> <interface name="s" role="server" signature="Service"/> <content class="ServerImpl"/> </component> <binding client="this.r" server="client.r"/> <binding client="client.s" server="server.s"/> </definition> HelloWorld run client server

Exemple L’exemple précédent présente un ADL monolithique. Une application est décrite dans un ADL. Techniques pour découper la description d’une application dans plusieurs fichiers ADL. Référence d’ADL Héritage d’ADL ADL paramétrique

Référence d’ADL L’ADL du client peut être écrit dans un fichier séparé et référencé dans l’ADL du composite <definition name="HelloWorld"> <interface name="r" role="server" signature="java.lang.Runnable"/> <component name="client" definition="Client"/> ... Fichier Client.fractal : <definition name="Client"> <interface name="r" role="server" signature="java.lang.Runnable"/> <interface name="s" role="client" signature="Service"/> <content class="ClientImpl"/> </definition>

Heritage d’ADL Un ADL peut étendre un autre ADL. Héritage multiple Définition du type du composant client : <definition name="ClientType"> <interface name="r" role="server" signature="java.lang.Runnable"/> <interface name="s" role="client" signature="Service"/> </definition> Définition du composant client concret : <definition name="Client" extends="ClientType"> <content class="ClientImpl"/> </definition> Héritage multiple Liste de définitions séparées par des virgules Graphe d’héritage linéarisé pour résoudre les conflits

Arguments d’un l’ADL Un ADL peut être paramétré par une liste d’arguments. Le parser remplace textuellement les arguments par leur valeur (chaîne de caractères) <definition name="Client" arguments="impl"> <interface name="r" role="server" signature="java.lang.Runnable"/> <interface name="s" role="client« signature="Service"/> <content class="${impl}"/> </definition> <definition name="HelloWorld"> <interface name="r" role="server" signature="java.lang.Runnable"/> <component name="client" definition="Client(ClientImpl)"/> ...

Exemple avancé Définition d’un composant par assemblage «d’aspects» Exemple : Network Dream Un Network est un composite contenant un ChannelOut et un ChannelIn. Un Network peut être désynchronisé, fiable, causal, … Network ChannelOut Codec ChannelIn in-push out-push

Exemple avancé Exemple de l'aspect désynchronisé Placer une file de message devant le ChannelOut Définition de l’aspect désynchronisé : <definition name="AspectBuffered" arguments="client,server"> <component name="Queue" definition="dream.PushPushActiveQueue"/> <binding client="${client}" server="Queue.in-push"/> <binding client="Queue.out-push" server="${server}"/> </definition> Définition d'un Network désynchronisé : <definition name="NetworkBuffered" extends="AspectBuffered(this.in-push,ChannelOut.in-push), Network()"/>

Exemple avancé Network ChannelOut Codec ChannelIn Network Queue <definition name="AspectBuffered" arguments="client,server"> <component name="Queue" definition="dream.PushPushActiveQueue"/> <binding client="${client}" server="Queue.in-push"/> <binding client="Queue.out-push" server="${server}"/> </definition> <definition name="NetworkBuffered" extends="AspectBuffered(this.in-push,ChannelOut.in-push), Network()"/> Network ChannelOut Codec ChannelIn out-push in-push Graphe d’Héritage Network Queue AspectBuffered NetworkBuffered

Plan L’ADL L’usine fractal ADL Exemple d’extension L’interface Factory Modules, mini-DTD et AST Architecture de l’usine Exemple d’extension Ajout dynamique de sous composants

L’interface Factory Fournit la méthode Object newComponent (String name, Map context) name : nom de la définition à créer context : contient les valeurs des arguments de la définition Association nom de l’argument → valeur Retourne l’interface Component du composant créé La Factory est obtenue grâce aux méthodes statiques de la classe FactoryFactory

L’usine Fractal ADL L’usine est modulaire et extensible Développé en fractal. Utilise un AST (Abstract Syntaxic Tree) Créé par le parser XML Un nœud correspond à une entité XML Un module défini Une partie de la DTD (mini-DTD) Les interfaces implémentées par les nœuds de l’AST

Les modules de l’ADL standard Module Component Module de base Défini la composition : un composant peut contenir d’autres composants Module Interface Un composant possède des interfaces Module Binding Les interfaces peuvent être liées Module Implementation Un composant a une implémentation, des contrôleurs Module Argument Une définition peut avoir des arguments ...

Module de l’ADL Un module est constitué de Une mini-DTD (fragment de DTD) Un ensemble d’interfaces implementées par les nœuds de l’AST Les méthodes suivent une convention de nommage Implémentation générée dynamiquement par ASM Un ensemble de composants intégré à l’usine Fractal ADL. Réalisent des traitements spécifiques sur l’AST.

mini-DTD et interface d’AST Exemple du module component <!ELEMENT definition (component*) > <!ATTLIST definition name CDATA #REQUIRED extends CDATA #IMPLIED> <!ELEMENT component (component*) > <!ATTLIST component definition CDATA #IMPLIED> interface DefinitionNode { get/setName(); get/setExtends(); } interface ComponentNode { get/setName(); get/setDefinition(); } <?add ast="definition" itf="DefinitionNode"?> interface ComponentContainerNode { addComponent(Component c); getComponents(); } <?add ast="definition" itf="ComponentContainerNode"?> <?add ast="component" itf="ComponentNode"?> <?add ast="component" itf="ComponentContainerNode"?>

Exemple de parsing <definition name="HelloWorld"> <interface name="r" role="server" signature="java.lang.Runnable"/> <component name="client" definition="Client"/> <component name="server" definition="Server"/> <binding client="this.r" server="client.r"/> <binding client="client.s" server="server.s"/> </definition> Node implements DefinitionNode, InterfaceContainerNode, ComponentContainerNode, BindingContainerNode Definition Name="Server" addInterface() addComponent() addBinding() Interface name="r", role="server" signature=… Node implements InterfaceNode Component name="client", definition="Client" Component name="server", definition="Server" Binding client="this.r", server="client.r" Binding client="client.s", server="server.s"

Plan L’ADL L’usine fractal ADL Exemple d’extension L’interface Factory Modules, mini-DTD et AST Architecture de l'usine Exemple d’extension Ajout dynamique de sous composants

Structure de l’usine 3 passes Génération d’un AST et vérification les contraintes d’intégrité (ex : liaisons corrects) Construction d’un graphe de taches à exécuter pour réaliser le déploiement Exécution de chaque tache en respectant l’ordre de précédence. Chaque passe est réalisée par un ensemble de composants spécifiques. Chaque module possède ses propres composants pour chacune des 3 passes.

Première passe : les Loaders La première passe est réalisée par une chaîne de Loaders Un Loader délègue au Loader suivant afin d’obtenir un AST Le parseur XML est en bout de chaîne Chaque Loader effectue un parcours de l’AST afin de vérifier des contraintes spécifique à un module Exemple : le BindingLoader vérifie pour chaque liaisons que les interfaces clientes et serveurs existent et sont compatibles Loader Binding Loader Component Loader Interface Loader Argument Loader XML Loader

Première passe : les Loaders Le ComponentLoader mixe plusieurs AST en un seul Résolution des références, de l’héritage et du partage de composant Les Loaders placés en « amont » du ComponentLoader effectuent un parcours de l’AST mixer. Les Loader en « aval » parcourent plusieurs AST Le BindingLoader est placé en amont Les liaisons sont vérifiées sur l’AST mixé L’ArgumentLoader est placé en aval Les arguments ont une portée locale à un fichier XML

Première passe : les Loaders <definition name="HelloWorld"> <interface name="r" role="server" signature="java.lang.Runnable"/> <component name="client" definition="Client"/> <component name="server" definition="Server"/> <binding client="this.r" server="client.r"/> <binding client="client.s" server="server.s"/> </definition> Definition Name="Helloworld" Interface name="r", role="server" signature=… Component name="server", definition="Server" Binding client="this.r", server="client.r" client="client.s", server="server.s" name="client", definition="Client" Interface name="r", role="server" signature=… Content class=… name="s", role="client" Interface name="s", role="server" signature=… Content class=… Component name="Client" Interface name="r", role="server" signature=… Content class=… name="s", role="client" Component name="Server" Interface name="s", role="server" signature=… Content class=… Loader load("Helloworld") Binding Loader Component Loader XML Loader load("Server") load("Helloworld") load("Client")

Deuxième passe : les Compilers Les Compilers construisent un graphe de taches élémentaires de déploiement Exemples de tache : instancier un composant, ajouter un composant dans un composite, créer une liaison, ... Les taches dépendent les unes des autres Pour effectuer une liaison il faut que les deux composants soient créés et ajoutés dans un même composite L’exécution d’une tache fournit un résultat utilisable par les taches qui en dépendent La tache d’instanciation fournit le composant instancié aux taches d’ajout dans un composite ou aux taches de liaison.

Deuxième passe : les Compilers Le MainCompilers Effectue un parcours récursif des composants décris dans l‘AST Exécute les Compilers auxquels il est lié TypeCompiler typeBuilder implementationBuilder ImplementationCompiler componentBuilder bindingBuilder Main Compiler ComponentCompiler attributeBuilder BindingCompiler AttributeCompiler

Troisième passe : les Builders Les Builders sont appelés par les taches lorsqu’elles sont exécutées. Chaque type de tache a son propre Builder ImplementationBuilder pour les taches d’instanciation BindingBuilder pour les taches de liaison L’ensemble des Builders est appelé Backend Fractal ADL fournit plusieurs Backends FractalBackend créé des composants Fractal JavaBackend créé des objets Java StaticFractalBackend génère du code source pour créer des composants Fractal StaticJavaBackend génère du code source pour créer des objets Java

Plan L’ADL L’usine fractal ADL Exemple d’extension L’interface Factory Modules, mini-DTD et AST Architecture de l’usine Exemple d’extension Ajout dynamique de sous composants

Ajout dynamique de sous composants Décrire, dans un ADL, une structure existante ainsi que des composants à y ajouter Les composants existants sont dits legacy <definition name="AddServer" arguement="num"> <component name="duplicator"> <interface name="s" role="client" cardinality="collection" signature="Service"/> <legacy contingency="mandatory"/> </component> <component name="server${num}" definition="Server"/> <binding client="duplicator.s${num}" server="server${num}.s"/> </definition> client server1 server2 duplicator HelloWorld s server3

Modification de la DTD Modification apportée à la DTD afin d'intégrer le nouveau module : <!ELEMENT component (..., legacy?, ...) > <!ELEMENT legacy EMPTY> <!ATTLIST legacy contingency (mandatory | optional) #REQUIRED > <!-- legacy module --> <?add ast="component" itf="LegacyContainer" ?> <?add ast="legacy" itf="Legacy" ?>

Le LegacyLoader Nouveau Loader inséré en tête de la chaîne de Loaders Parcourt en parallèle l'AST et la structure à reconfigurer Le composant à reconfigurer est obtenu via le contexte Vérifie que les composants legacy existent et sont compatibles avec leur description ADL Le type des composants legacy doit être un sous type du composant décrit dans l'ADL Loader Leagacy Loader Binding Loader …

Le précompilateur Ajout d'une passe de précompilation Insertion de taches d'instanciation « fictives » pour les composants existants Les composants existants ne doivent pas être recréés Ces taches fournissent l’instance existante aux taches qui en dépendent Le Builder d’ajout dans un composite est réécrit Vérifie que le composant n’est pas déjà dans le composite Main Compiler LegacyCompiler Pre-Post Compiler TypeCompiler Main Compiler …

Perspectives Modules existants Support pour le packaging Ajout d’information pour le changement dynamique de classe Tache ant pour la « compilation » statique d’ADL Générer du code source pour déployer rapidement une architecture fixe. ADL de reconfiguration dynamique Déploiement distribué intentionnel