IntroductionPremier aperçuDéfinition du modèleDéploiement des composantsLangage de description d'architectureReconfiguration dynamiqueEric BrunetonImplémentation de référenceConclusionwww.objectweb.org www.objectweb.org(ICAR03.ppt) - D2 - 25/08/2003 Principes architecturaux pour l’ingénierie des systèmesMaîtrise Construction par composition de briques logicielles : les composantsdu déploiementVision homogène de la topologie des systèmes logicielsde l’administrationservices & applications, intergiciel (middleware), systèmes d’exploitationde l’évolutionGestion uniforme des ressources, des activités et des domaines de contrôlede l’intégrationCouverture du cycle de vie complet : d’infrastructures logiciellesdéveloppement, déploiement, supervisionrépartieshétérogènes Réalisation d’un support d’exécution pour composantsSupport d’exécution pouvant être et en parties patrimoniales (legacy)spécialisé, outillé, étenduen prenant en compte les besoins applicatifs (QoS)composé avec d’autres canevas : persistance, réplication,sécurité, …www.objectweb.org (ICAR03.ppt) - D3 - 25/08/2003 www.objectweb.org (ICAR03.ppt) - D4 - 25/08/2003 Application aux plate-formes middleware d’ObjectWebIntroductionConfiguration, intégration des composants ObjectWebPremier aperçuComposants ...
Maîtrise du déploiement de ladministration de lévolution de lintégration d’infrastructures logicielles réparties hétérogènes et en parties patrimoniales (legacy) en prenant en compte les besoins applicatifs (QoS) www.objectweb.org (ICAR03.ppt) - D3 - 25/08/2003
Introduction Premier aperçu Définition du modèle Déploiement des composants Langage de description d'architecture Reconfiguration dynamique Implémentation de référence Conclusion
www.objectweb.org
(ICAR03.ppt) - D2 - 25/08/2003
Principes architecturaux pour l’ingénierie des systèmes Construction par composition de briques logicielles : les composants Vision homogène de la topologie des systèmes logiciels services & applications, intergiciel (middleware), systèmes dexploitation Gestion uniforme des ressources, des activités et des domaines de contrôle Couverture du cycle de vie complet : développement, déploiement, supervision Réalisation d’un support d’exécution pour composants Support dexécution pouvant être spécialisé, outillé, étendu composé avec dautres canevas : persistance, réplication,sécurité, … www.objectweb.org (ICAR03.ppt) - D4 - 25/08/2003
Application aux plate-formes middleware d’ObjectWeb Configuration, intégration des composants ObjectWeb Composants communs, partage de ressources entre composants : Transaction Manager, Pool, Cache, Logger, … Outils de développement communs : configuration, supervision, … Recherche et développement Techniques de composition sûres et efficaces : Assertions, contrats, méthodes formelles, … Intégrité des reconfigurations dynamiques Disponibilité et tolérance aux fautes: persistance, duplication, mobilité, …
www.objectweb.org
(ICAR03.ppt) - D5 - 25/08/2003
!" Serveur HTTP minimal ppurbivliactecl S a o ss ckSeetrvs;erimplements Runnable { public Server (Socket s) { this .s = s; } écoute sur une server socket p S u e b r l v ic er s S t o a c ti k c et v s o i = d n m e a w inS(SertrviengS[]oacrgkset)( t 8 h 0 r 8 o 0 w ); s IOException { r pour chaque connexion: } while ( true ) { new Thread( new Server(s.accept())).start(); } ublic v lance un nouveau thread ptry { oid run () { InputStreamReader in = new InputStreamReader(s.getInputStream());PrintStream out = new PrintStream(s.getOutputStream());String rq = new LineNumberReader(in).readLine(); lit l'URL i S f y(rsqt.estma.rotust.Wpirtihn(t"lnG(rEqT);")){File f = new File(rq.substring(5,rq.indexOf(','4)));if (f.exists() && !f.isDirectory()) { InputStream is = new FileInputStream(f);byte [] data = new byte[is.available()];is.read(data); envoie le fichier demandé is.close(); out.print("HTTP/1.0 200 OK\n\n"); out.write(data);} else { ou un message d'erreur oouutt..pprriinntt((""H<ThtTmPl/>1D.0oc4u0m4eNnottnFotoufonudn\dn.\<n/"h);tml>"); } } out.close();s.close(); } catch (IOException _) { } } } www.objectweb.org
(ICAR03.ppt) - D7 - 25/08/2003
Introduction Premier aperçu Définition du modèle Déploiement des composants Langage de description d'architecture Reconfiguration dynamique Implémentation de référence Conclusion
www.objectweb.org
(ICAR03.ppt) - D6 - 25/08/2003
! # Composants statiques puprbilvicatcela S s o s ckSeetrvs;erimplements Runnable { public Server (Socket s) { this .s = s; } durée de vie public static void main (String[] args) throws IOException { ServerSocket s = new ServerSocket(8080); celle de l'application } while ( true ) { new Thread( new Server(s.accept())).start(); } correspondent aux « services » ptur I yb n l {p i u c t v S o t i r d earumnR(e)a{d er in = new InputStreamReader(s.getInputStream()); Composants dynamiques PrintStream out = new PrintStream(s.getOutputStream());String rq = new LineNumberReader(in).readLine();System.out.println(rq);if (rq.startsW ith("GET ")) { durée de vie plus courte File f = new File(rq.substring(5,rq.indexOf(','4))); correspondent aux « données » if (f.exists() && !f.isDirectory()) { InputStream is = new FileInputStream(f); éfin byte [] data = new byte[is.available()];D ition des composants is.read(data);is.close(); out.print("HTTP/1.0 200 OK\n\n"); trouver out.write(data);} else { out.print("HTTP/1.0 404 Not Found\n\n"); les services out.print("<html>Document not found.</html>"); } [ les structures de données ] } un service = un composant out.close();s.close(); } catch (IOException _) { } } } www.objectweb.org
(ICAR03.ppt) - D8 - 25/08/2003
! " Dépendances : utiliser des scénarios et des cas d'utilisation Structure hiérarchique : correspond au niveau d'abstraction Receiver Analyzer Logger Scheduler File Frontend Handler Dispatcher Error Handler Handler Backend Comanche www.objectweb.org (ICAR03.ppt) - D9 - 25/08/2003
Choix de la granularité des composants plusieurs composants identifiés à la conception peuvent être implémentés sous la forme d'un seul composant Implémentation des interfaces de composant Fractal impose une séparation stricte entres les interfaces et leurs implémentations Interfaces de Comanche public interface Logger { void log (String msg); } public interface Scheduler { void schedule (Runnable task); } public interface RequestHandler { void handleRequest (Request r) throws IOException; } public class Request { Socket s; Reader r; PrintStream out; String url; } www.objectweb.org (ICAR03.ppt) - D11 - 25/08/2003
! Contrats entre composant : doivent être définis avec attention pour être le plus stable possible ne doivent concerner que les aspects fonctionnels Contrats pour Comanche logger : une opération log(String) scheduler : une opération schedule(Runnable) handlers : une opération handleRequest analyzer : lit l'URL dispatcher : essaie les différents handlers, jusqu'à un succès file handler : essaie de lire et de renvoyer le fichier à l'URL indiquée error handler : retourne un message d'erreur www.objectweb.org (ICAR03.ppt) - D10 - 25/08/2003
Composants sans dépendances : implémentés comme en Java standard public class BasicLogger implements Logger { public void log (String msg) { System.out.println(msg); } } public class SequentialScheduler implements Scheduler { public synchronized void schedule (Runnable task) { task.run(); } } public class MultiThreadScheduler implements Scheduler { public void schedule (Runnable task) { new Thread(task).start(); } }
www.objectweb.org
(ICAR03.ppt) - D12 - 25/08/2003
Composants avec dépendances : première solution : ne permet pas la configuration statique public class RequestReceiver implements Runnable { private Scheduler s = new MultiThreadScheduler(); private RequestHandler rh = new RequestAnalyzer(); // rest of the code not shown } deuxième solution: ne permet pas la reconfiguration dynamique public class RequestReceiver implements Runnable { private Scheduler s; private RequestHandler rh; public RequestReceiver (Scheduler s, RequestHandler rh) { this .s = s; this .rh = rh; } // rest of the code not shown } www.objectweb.org (ICAR03.ppt) - D13 - 25/08/2003
!$ $
Avantages : public class Server { méthode la plus directe pu R b e l q ic ue s s t t a R ti e c c v ei o v i e d rrmra=in n ( e S w triRnge[q]uaersgtsR)e{ceiver(); aucun outils requis RequestAnalyzer ra = new RequestAnalyzer(); Inconvénients : RequestDispatcher rd = new RequestDispatcher();FileRequestHandler frh = new FileRequestHandler(); propices aux erreurs ErrorRequestHandler erh = new ErrorRequestHandler(); ne montre pas l'architecture Scheduler s = new MultiThreadScheduler(); mélange les aspects architecture Logger l = new BasicLogger();rr.bindFc("rh", ra); et déploiement rr.bindFc("s", s); ra.bindFc("rh", rd); ra.bindFc("l", l); rd.bindFc("h0", frh); rd.bindFc("h1", erh); rr.run(); } }
www.objectweb.org
(ICAR03.ppt) - D15 - 25/08/2003
Composants avec dépendances : public class RequestReceiver implements Runnable, BindingController { private Scheduler s; private RequestHandler rh; public String[] listFc () { return new String[] { "s", "rh" }; } public Object lookupFc (String n) { if (n.equals("s")) { return s; } else if (n.equals("rh")) { return rh; } else return null ; } public void bindFc (String n, Object v) { if (n.equals("s")) { s = (Scheduler)v; } else if (n.equals("rh")) { rh = (RequestHandler)v; } } public void unbindFc (String n) { if (n.equals("s")) { s = null; } else if (n.equals("rh")) { rh = null; } } // … www.objectweb.org (ICAR03.ppt) - D14 - 25/08/2003
!$ # %
<component-type name="HandlerType"> Avantages : <provides> ect <interface-type name="rh" signature="comanche.RequestHandler"/> bonne séparation des asp s </provides> architecture et déploiement </component-type> vérifications statiques possibles li isons invalides, <primitive-template name="FileHandler" implements="HandlerType"> a <primitive-content class="comanche.FileRequestHandler"/> liaisons manquantes </primitive-template> , … <composite-template name="Comanche" implements="RunnableType"> Inconvénients : <composite-content> <components> l'architecture n'est pas très <component name="fe" type="FrontendType" implementation="Frontend"/> visible <component name="be" type="HandlerType" implementation="Backend"/> </components> <bindings> <binding client="this.r" server="fe.r"/> <binding client="fe.rh" server="be.rh"/> </bindings> </composite-content> </composite-template> (ICAR03.ppt) - D16 - 25/08/2003
www.objectweb.org
!$# $"& Outils graphique pour éditer des fichiers ADL la représentation en graphe montre clairement l'architecture
www.objectweb.org
(ICAR03.ppt) - D17 - 25/08/2003
'$(# Interface LifeCycleController : 1ère solution public class RequestDispatcher implements RequestHandler, BindingController, LifeCycleController { private boolean started; private int counter; public String getFcState () { return started ? STARTED : STOPPED; } public synchronized void startFc () { started = true ; notifyAll(); } public synchronized void stopFc () { while (counter > 0) { wait(); } started = false ; } public void handleRequest (Request r) throws IOException { synchronized ( this ) { while (counter == 0 && !started) { wait(); } ++counter; } try { // original code } finally { synchronized ( this ) { --counter; if (counter == 0) { notifyAll(); } } } } // rest of the class unchanged www.objectweb.org
(ICAR03.ppt) - D19 - 25/08/2003
'$(# Reconfiguration : statique : stopper l'application, changer l'ADL, redémarrer pas toujours possible, par exemple pour raisons de disponibilité dynamique : reconfigurer l'application pendant son exécution pose des problèmes de cohérence –outil de base pour aider à les résoudre : gestion du cycle de vie Exemple : remplacer le composant FileHandler dynamiquement : –RequestHandler rh = new FileAndDirRequestHandler(); –rd.unbindFc("h0"); –rd.bindFc("h0", rh); le RequestDispatcher doit être suspendu pendant l'opération www.objectweb.org (ICAR03.ppt) - D18 - 25/08/2003
'$(# Interface LifeCycleController : autres solutions implémenterli'nterfacedansune(sous)classeséparée meilleure séparation des aspects –composants déployables avec ou sans gestion du cycle de vie générer cette classe ou cette sous classe automatiquement génération de code statique ou dynamique LifeCycleController BindingController RequestHandler content controller
www.objectweb.org
(ICAR03.ppt) - D20 - 25/08/2003
'$
Avant de stopper ou de reconfigurer un composant, il faut obtenir sa référence d'oùlesinterfacesdi'ntrospection(etdereconfiguration)suivantes : public interface Component { public interface ContentController { Object[] getFcInterfaces (); Object[] getFcInternalInterfaces (); Object getFcInterface (String itfName); Object getFcInterfaceInterface(String itfName); Type getFcType (); Component[] getFcSubComponents (); } void addFcSubComponent (Component c); void removeFcSubComponent(Component c); }
www.objectweb.org
(ICAR03.ppt) - D21 - 25/08/2003
Fractal utilise des patrons de conception bien connus et les organise en un modèle à composants uniforme, extensible et indépendant des langages Avantages impose la séparation entre interfaces et implémentations assure un niveau de flexibilité minimum impose la séparation des aspects fonctionnels, d'architecture et de déploiement permetdi'nstancieruneapplicationdeplusieursfaçons –depuis une configuration très optimisée mais non reconfigurable jusqu'à une configuration moins performante mais dynamiquement reconfigurable www.objectweb.org (ICAR03.ppt) - D23 - 25/08/2003
) & "
C CC BC C CC BC C CC BC C BC C BC C C CC BC C C C BC C
www.objectweb.org
Introduction Premier aperçu Définition du modèle Déploiement des composants Langage de description d'architecture Reconfiguration dynamique Implémentation de référence Conclusion www.objectweb.org
(ICAR03.ppt) - D22 - 25/08/2003
(ICAR03.ppt) - D24 - 25/08/2003
*
Composant Fractal : entité à l'exécution par exemple, en Java, des objets et non pas des classes ou des .jar deni'mportequeltype service, ressource, donnée, activité, processus, protocole, liaison, … sans cible ni granularité particulière application, intergiciel ( middleware ), système dexploitation
www.objectweb.org
(ICAR03.ppt) - D25 - 25/08/2003
* Composant de base : aucuneinterfacedecontrôle=>pasdi'ntrospection équivalent à un objet au sens des langages orienté objets Premiers niveaux de contrôle : introspection des composants : interface Component donne accès à la liste des interfaces d'un composant introspection des interfaces : interface Interface donne accès au nom d'une interface donneaccèsàli'nterfaceComponent du composant www.objectweb.org
(ICAR03.ppt) - D27 - 25/08/2003
*
De l’extérieur, un composant Fractal : est une boite noire, avec des points daccès appelés interfaces (externes) chaque interface à un nom (unique dans le composant) une signature (ensemble d opérations – i.e. méthodes en Java) un rôle (client, serveur ou contrôle) component, Component interfaces de contrôle interfaces serveur s, I u, I interfaces clientes -o uis --r o e u ç foiovuernnite d s es appels t, J v, I -é u m r e e tt q ent edsesappels -à gauche par convention w, K -à droite par convention
www.objectweb.org
(ICAR03.ppt) - D26 - 25/08/2003
* composant composite A l’intérieur, un composant : à un contrôleur et un contenu composant composant primitif primitif contenu = dautres composants partagé notion de sous composant , composants primitifs et composites, composants partagés contenu contrôleur le contrôleur peut (entre autres) : fournir des fonctions dintrospection et de reconfiguration intercepter les appels dopération entrants et sortants –pour les aspects non fonctionnels (cycle de vie, transactions, sécurité, …) modifier le comportement de ses sous contrôleurs www.objectweb.org (ICAR03.ppt) - D28 - 25/08/2003
*
liaisons : interactions liaison primitive lie –une interface cliente –à une interface serveur dans le même espace dadressage liaison composite lie un nombre arbitraire dinterfaces est un ensemble de liaisons primitives et de composants de liaisons liaisons normales, dimport et dexport www.objectweb.org (ICAR03.ppt) - D29 - 25/08/2003
*
Récursion : UNDO UNDO gestion à grain arbitraire : passage à léchelle, homogénéité Partage : UNDO préserve l'encapsulation sans partage avec partage permet de modéliser des ressources : données, pools, caches, connections, … activités : threads , transactions, procédés / tâches, … domaines de contrôle : défaillance, sécurité, persistance, mobilité, … www.objectweb.org (ICAR03.ppt) - D31 - 25/08/2003
*
Interfaces internes interfaces du contrôleur visibles seulement des sous composants Interfaces complémentaires deux interfaces internes et externes de même nom et même signature, mais de rôle opposés interfaces complémentaires liaisond'exportliaisondi'mport Exporte une interface d'un sous composant Importe une interface externe à l'intérieur à l'extérieur du composant englobant d'un composant composite www.objectweb.org (ICAR03.ppt) - D30 - 25/08/2003
*
Trois méthodes possibles GenericFactory : crée nimporte quel type de composant crée , … Factory : crée des composants tous de même type template : crée des composants similaires à lui même crée
www.objectweb.org
(ICAR03.ppt) - D32 - 25/08/2003
* ($
Type de composant c, J ensemble de types dinterface non modifiable à lexécution c : interface de type singleton Type d’interface snom s, I c1, J ciognntianture ca, J obli g g e at n o c ir e e, optionnelle c$, J cardinalité singleton, collection c : interface de type collection www.objectweb.org (ICAR03.ppt) - D33 - 25/08/2003
Introduction Premier aperçu Définition du modèle Déploiement des composants Langage de description d'architecture Reconfiguration dynamique Implémentation de référence Conclusion
www.objectweb.org
(ICAR03.ppt) - D35 - 25/08/2003
*
Tout est optionnel introspection, interfaces de contrôle, de fabriques, typage, … et extensible sous composants dans les contrôleurs, typage alternatif, … Niveaux de conformité : C I Typage (Re)configuration Fabriques Templates 0 0.1 X 1 X 1.1 X X 2 X X 2.1 X X X 3 X X X 3.1 X X X X 3.2 X X X X X 3.3 X X X X X X www.objectweb.org (ICAR03.ppt) - D34 - 25/08/2003