cours-Fractal
20 pages
Latin
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
20 pages
Latin
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

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 ...

Sujets

Informations

Publié par
Nombre de lectures 25
Langue Latin

Exrait

     Eric Bruneton
www.objectweb.org
     Maîtrise du déploiement de ladministration de lévolution de linté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 dexploitation 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 dexécution pouvant être spécialisé, outillé, étendu composé avec dautres 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;e r implements 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 in S(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.0o c4u0m4 eNnot t nFoto ufonudn\dn.\<n/"h);t ml>");  } } 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;e r implements 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=i n 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émenter li'nterface dans une (sous) classe sé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ù les interfaces di'ntrospection (et de reconfiguration) 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 permet di'nstancier une application de plusieurs faç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 de ni'mporte quel type service, ressource, donnée, activité, processus, protocole, liaison, … sans cible ni granularité particulière application, intergiciel ( middleware ), système dexploitation
www.objectweb.org
(ICAR03.ppt) - D25 - 25/08/2003
*     Composant de base : aucune interface de contrôle => pas di'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 donne accès à li'nterface Component 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 daccè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 edses appels -à 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 = dautres 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 dintrospection et de reconfiguration intercepter les appels dopé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 dadressage liaison composite lie un nombre arbitraire dinterfaces est un ensemble de liaisons primitives et de composants de liaisons liaisons normales, dimport et dexport 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 liaison d'exportliaison di'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 nimporte 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 dinterface non modifiable à lexé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
%  # +
Component boot = Fractal. getBootstrapComponent (); class Fractal static getBootstrapComponent interface Component Interface[] getFcInterfaces Interface getFcInterface getFcType interface Interface tf Component getFcItfOwner gf boot getFcItfName getFcItfType isFcInternalItf
www.objectweb.org
(ICAR03.ppt) - D36 - 25/08/2003
  • Accueil Accueil
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • BD BD
  • Documents Documents