1 8. Notion dadaptateur dobjet. 2 c 2003 - Raphaël Marvie Principe Rendre plusieurs objets (Servant) disponibles dans un serveur Chaque objet est associé

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Le Nom L’adjectif Le verbe Objectif: Orthogram
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
Ma surprise du Zoo.
Licence pro MPCQ : Cours
Distance inter-locuteur
1 Plus loin dans lutilisation de Windows Vista ©Yves Roger Cornil - 2 août
EPU SI Mireille Blay-Fornarino
1 I. Bus logiciel ? Mireille Blay-Fornarino Daprès et Sacha Et (cf. références en bas.
Les numéros 70 –
Les numéros
Les identités remarquables
Le, la, les words Possessive Adjectives MINE!!. 2 My in french is mon, ma,mes... Le word/ begins with a vowel: Mon La word: Ma Les word: Mes.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Algorithme et structure de données
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
2 1. Vos droits en tant quusagers 3 1. Vos droits en tant quusagers (suite) 4.
Nom du module Date Lieu de la formation. 2 Genèse du projet Historique, partenaires, publics Pour qui ? Pourquoi ? Qui ? Comment ? Quand ?
Live Meeting Technique N°3 Thomas LEBRUN – MVP WPF/Silverlight Florent SANTIN – MVP Team System Julien CORIOLAND - MSP.
1 7 Langues niveaux débutant à avancé. 2 Allemand.
Connexion base de données
Injection de dépendances
COTE DIVOIRE IMAGES DES ATROCITES COMMISES PAR ALASSANE DRAMANE OUATARA, SORO GUILAUMES ET LEURS HOMMES 1.
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
SERABEC Simulation sauvetage aérien avec un Hercule C130. Départ de St-Honoré le 4 octobre Durée de vol 3 heures. Premier vol en Hercule pour les.
1 5 octobre 2011 / paw Présentation du 7 octobre 2011.
CONCOURS DE CONAISSANCE 4 Français I Mars Il ________ la géographie (to learn).
La méthodologie………………………………………………………….. p3 Les résultats
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Le soccer & les turbans Sondage mené par lAssociation détudes canadiennes 14 juin 2013.
Olivier DERUELLE Erwan FOUYER Maxime JOUIN Rodolphe LOUE
Présentation générale
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
GRAM 1 CE2 Je sais transformer une phrase affirmative en phrase négative.
Le drapeau canadien comme symbole de fierté nationale : une question de valeurs partagées Jack Jedwab Association détudes canadiennes 28 novembre 2012.
Session 7 1 IST/VIH/SIDA.
Le Concours de Conaissance Francais I novembre 2012.
Titre : Implémentation des éléments finis sous Matlab
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
LES NOMBRES PREMIERS ET COMPOSÉS
Logiciel gratuit à télécharger à cette adresse :
Les chiffres & les nombres
Représentation des systèmes dynamiques dans l’espace d’état
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
Programmation concurrente
Multi-Thread Jian-Yun Nie
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
Chapitre 9 Les sous-programmes.
Titre : Implémentation des éléments finis en Matlab
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1 INETOP
Influenza: le modèle épidémiologique belge 29 Mai 2009
Aire d’une figure par encadrement
Comment rendre une femme heureuse…
P.A. MARQUES S.A.S Z.I. de la Moussière F DROUE Tél.: + 33 (0) Fax + 33 (0)
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Leçons To attend Assister à 2. To fish.
Nom:____________ Prénom: ___________
LES PILES ET FILES.
Commission paritaire de suivi des opérations de reclassement repositionnement dans le cadre du droit d’option Statistiques novembre 2010.
La formation des maîtres et la manifestation de la compétence professionnelle à intégrer les technologies de l'information et des communications (TIC)
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Les sockets.
Transcription de la présentation:

1 8. Notion dadaptateur dobjet

2 c Raphaël Marvie Principe Rendre plusieurs objets (Servant) disponibles dans un serveur Chaque objet est associé à une clé unique dans le serveur Une référence inclut désormais la clé de lobjet Adaptateur dobjet Aiguillage et lien entre le réseau et les objets Gère les clés associées aux objets et leurs références Raffinement du Manager Adaptateur : lien référence / objet dimplémentation Squelette : décodeur de requête pour un objet

3 c Raphaël Marvie Architecture version 8 Proxy Réseau ObjectAdaptateur Servant Client Contrat Servant Squelette

4 c Raphaël Marvie Interactions version 8

5 c Raphaël Marvie Côté serveur Adaptateur dobjet Gestion du accept et du routage des requêtes Connecte les objets et crée leurs références Squelette de service Défini par rapport au contrat de Servant Décodeur de messages réseau pour un Servant particulier Définition de deux squelettes Programme serveur Crée un adaptateur dobjet Crée deux squelettes et servants, les enregistre Active ladaptateur dobjet

6 c Raphaël Marvie Contrats interface ServiceA { public String hello (String msg) throws Exception ; public String lower (String msg) throws Exception ; public String upper (String msg) throws Exception ; } interface ServiceB { public boolean isprime (int a) throws Exception ; public int sqr (int a) throws Exception ; }

7 c Raphaël Marvie Code Server public class Server { public void run () throws Exception { ObjectAdapter oa = ObjectAdapter.init () ; SkeletonA skel_a = new SkeletonA (new ServantA ()) ; oa.register (skel_a) ; System.out.println (oa.obj2ref (skel_a)) ; SkeletonB skel_b = new SkeletonB (new ServantB ()) ; oa.register (skel_b) ; System.out.println (oa.obj2ref (skel_b)) ; oa.start () ; } // rest is unchanged

8 c Raphaël Marvie Code ObjectAdapter (i) public class ObjectAdapter extends Thread { private static ObjectAdapter ref ; private ServerSocket asock ; private Vector skeletons ; protected ObjectAdapter () throws Exception { this.skeletons = new Vector () ; this.asock = new ServerSocket (0) ; } public static ObjectAdapter init () throws Exception { if (ObjectAdapter.ref == null) ObjectAdapter.ref = new ObjectAdapter () ; return ObjectAdapter.ref ; }

9 c Raphaël Marvie Code ObjectAdapter (ii) public String obj2ref (Skeleton obj) { int key = this.skeletons.indexOf (obj) ; if (key == -1) return null ; String host = null ; try { host = InetAddress.getLocalHost ().getHostAddress () ; } catch (UnknownHostException uhe) { return null ; } int port = this.asock.getLocalPort () ; return host + ":" + port + ":" + key ; }

10 c Raphaël Marvie Code ObjectAdapter (iii) public void run () { try { while (true) { Socket sock = this.asock.accept () ; BufferedReader in =... String msg = in.readLine () ; if (msg == null) { // no more to be read sock.close () ; continue ; } int key = Integer.parseInt (msg.substring (0,1)) ;

11 c Raphaël Marvie Code ObjectAdapter (iv) try { Skeleton skel = (Skeleton)this.skeletons.elementAt (key) ; skel.init (sock) ; new Thread (skel).start () ; } catch (ArrayIndexOutOfBoundsException e) { sock.close () ; } } catch (Exception e) { return ; }

12 c Raphaël Marvie Interface Skeleton interface Skeleton extends Runnable { void init (Socket sock) throws Exception ; }

13 c Raphaël Marvie Code SkeletonA (i) public class SkeletonA implements Skeleton { private ServantA ref ; public SkeletonA (ServantA s) throws Exception { this.ref = s ; } public void init (Socket sock) throws Exception { this.in =... this.out =... }

14 c Raphaël Marvie Code SkeletonA (ii) public void run () { try { while (true) { String msg = this.in.readLine () ; if (msg == null) // no more to be read break ; String res ; switch (msg.charAt (0)) { case 0: res = this.ref.hello (msg.substring (1)) + "\n" ; break ; // etc. }

15 c Raphaël Marvie Côté client Modification du proxy Prise en compte des clés dobjets Connexion en deux temps au squelette Définition dun Proxy pour chacun des services Deux chaînes Proxy / Skeleton / Servant Fourniture de la référence comme une propriété Définition de deux programmes clients Chacun utilise un proxy pour un service particulier

16 c Raphaël Marvie Code ProxyA (changes) public class ProxyA implements ServiceA { private Socket sock ; private BufferedReader in ; private DataOutputStream out ; public ProxyA (String host, int port, String key) throws Exception { this.sock = new Socket (host, port) ; this.in =... this.out =... this.out.writeBytes (key + "\n") ; }

17 c Raphaël Marvie Code ClientA (changes i) public class ClientA { private ServiceA ref ; public ClientA () throws Exception { this.ref = (ServiceA) this.ref2proxy () ; } public void run (String msg) throws Exception { System.out.println (this.ref.hello (msg)) ; System.out.println (this.ref.lower (msg)) ; System.out.println (this.ref.upper (msg)) ; }

18 c Raphaël Marvie Code ClientA (changes ii) public ProxyA ref2proxy () throws Exception { Properties props = System.getProperties () ; String ref = props.getProperty ("service.reference") ; if (ref == null) throw new Exception ("no server reference given") ; String parts[] = ref.split (":") ; if (parts.length < 3) throw new Exception ("malformed reference") ; String host = parts [0] ; int port = Integer.parseInt (parts [1]) ; String key = parts [2] ; return new ProxyA (host, port, key) ; }

19 c Raphaël Marvie Bénéfices et limitations Bénéfices Serveur multi-services et multi-threadé (Skeleton) Identification complète dun service – adresse:port:clé Les références sont créées au niveau du serveur Limitations Comment définir et utiliser des exceptions applicatives ? Comment simplifier la traduction de référence en Proxy ?

20 9. Exceptions et traduction référence vers Proxy

21 c Raphaël Marvie Principe Exceptions Ajout dun code dans les messages de retour 0 : OK; sinon un numéro dexception... Traduction automatique de références en Proxy Extension des références pour contenir le type des références Contrôle du typage lors de la création du proxy Instanciation et initialisation automatique du Proxy

22 c Raphaël Marvie Architecture version 9 Proxy Réseau ObjectAdaptateur Servant Client Contrat Servant Squelette

23 c Raphaël Marvie Interactions version 9

24 c Raphaël Marvie Chargement automatique de proxy Motivations Transformation dune référence de service distant en proxy Contrôler la conformité entre le type du proxy et du service Modifications des implémentations Extension des références Ajout du type du service dans la référence : adresse:port:clé:type Règles de nommage des classes NomDuServiceProxy, NomDuServiceSkeleton, NomDuServiceServant Les squelettes fournissent le type du service (pour construire la référence) Interface de base Proxy implémentée par tous les proxy (pour init )

25 c Raphaël Marvie Opération ref2proxy (i) public class Util { public static Proxy ref2proxy (String ref) throws Exception { String parts[] = ref.split (":") ; if (parts.length < 4) throw new Exception ("malformed reference") ; String host = parts [0] ; int port = Integer.parseInt (parts [1]) ; String key = parts [2] ; String type = parts [3] ;

26 c Raphaël Marvie Opération ref2proxy (ii) // instanciation du bon proxy (présent dans classpath : convention de nommage) Class pclass = Class.forName (type + "Proxy") ; Proxy p = (Proxy) pclass.newInstance () ; // initialisation p.init (host, port, key) ; return p ; }

27 c Raphaël Marvie Interface Proxy interface Proxy { public void init (String host, int port, String key) throws Exception ; }

28 c Raphaël Marvie Côté serveur Gestion des exceptions Définition des exceptions dans le contrat du service Modification des squelettes pour transférer les exceptions Ajout de try catch pour les exceptions applicatives Ajout dun code en début de message réponse réseau Typage des références Modification des squelettes : fourniture du type du servant Modification de lopération obj2ref dans ladaptateur dobjet

29 c Raphaël Marvie Contrat ServiceB public class DivByZero extends Exception {} interface ServiceB { public boolean isprime (int a) throws Exception; public int sqr (int a) throws Exception ; public int div (int a, int b) throws Exception, DivByZero; }

30 c Raphaël Marvie Interface Skeleton interface Skeleton extends Runnable { void init (Socket sock) throws Exception ; String type () ; }

31 c Raphaël Marvie Code ServiceBSkeleton (modifs) public String type () { return "step9.ServiceB" ; } public void run () { … // managing isprime method from ServiceB case 0: int val0 = Integer.parseInt (msg.substring (1)) ; res = "0" + this.ref.isprime (val0) + "\n" ; break ;

32 c Raphaël Marvie Code ServiceBSkeleton (changes ii) // managing div method from ServiceB case 2: String args [] = msg.substring (1).split (" ") ; int arg0 = Integer.parseInt (args [0]) ; int arg1 = Integer.parseInt (args [1]) ; try { res = "0" + this.ref.div (arg0,arg1) + "\n" ; } catch (DivByZero e) { res = "1\n" ; // first exception raised } break ; // etc. }

33 c Raphaël Marvie Code ObjectAdapter public String obj2ref (Skeleton obj) { int key = this.skeletons.indexOf (obj) ; if (key == -1) return null ; String host = null ; try { host = InetAddress.getLocalHost ().getHostAddress () ; } catch (UnknownHostException uhe) { return null ; } int port = this.asock.getLocalPort () ; return host + ":" + port + ":" + key + ":" + obj.type () ; }

34 c Raphaël Marvie Côté client Modification des proxy Gestion des exceptions Si code interne supérieur à 0 alors lever lexception équivalente Modification des clients Utilisation de lopération ref2proxy Plus besoin de préciser le nom du Proxy Utiliser le proxy avec le type de son interface

35 c Raphaël Marvie Code ServiceBProxy (changes i) public boolean isprime (int val) throws Exception { // automatic conversion of int to string out.writeBytes ("0" + val + "\n") ; String res = in.readLine () ; return Boolean.valueOf( res.substring (1)).booleanValue () ; }

36 c Raphaël Marvie Code ServiceBProxy (changes ii) public int div (int a, int b) throws Exception, DivByZero { out.writeBytes ("2" + a + " " + b + "\n") ; String res = in.readLine () ; if (res.charAt (0) == 1) throw new DivByZero () ; return Integer.parseInt (res.substring (1)) ; }

37 c Raphaël Marvie Code ClientB (changes) public ClientB () throws Exception { Properties props = System.getProperties() ; String ref = props.getProperty("service.reference") ; this.refB = (ServiceB) Util.ref2proxy (ref) ; } Exécution avec -D"service.reference=localhost:12345:1:step9.ServiceB"

38 c Raphaël Marvie Bénéfices et limitations Bénéfices Bénéfices des exceptions sur le code produit Contrôle du typage à lutilisation des références Limitations Partage des références compliqué et réduit au fichier Utiliser facilement plusieurs services dans un même client ?

Service de désignation

40 c Raphaël Marvie Principe Désignation des objets par des noms symboliques Association : nom symbolique / références Les serveurs enregistrent une référence avec un nom Les clients recherchent une référence avec un nom Service notoire : lannuaire

41 c Raphaël Marvie Architecture version 10 Proxy Réseau OAdap… Nommage Servant Client Contrat Service Servant Squelette OAdap…

42 c Raphaël Marvie Interactions version 10

43 c Raphaël Marvie Annuaire Service au même titre quun autre Défini par une interface Hébergé par un serveur Accessible au travers dun Proxy Particularités Serveur dédié initialisé sur un port prédéfini Connaître la machine = point dentrée du système Proxy particulier pour simplifier lutilisation Patron de conception Singleton

44 c Raphaël Marvie Contrat NameService interface NameService { public void export (String name, String ref) throws Exception ; public String lookup (String name) throws Exception ; }

45 c Raphaël Marvie Proxy Naming (extrait) public class Naming implements NameService { private static Naming ref ; private Naming () throws Exception { Properties props = System.getProperties () ; String host = props.getProperty ("naming.host") ; // etc. } public static Naming init () throws Exception { if (Naming.ref == null) Naming.ref = new Naming () ; return Naming.ref ; // etc. } // etc. }

46 c Raphaël Marvie Côté serveur Diffusion des références Plus daffichage sur la ligne de commande Export des références de services Vers une application répartie Le serveur est client du service de nommage Utilisation du proxy de ce dernier Unique point dentrée : référence du service de nommage $ javac -Dnaming.host=localhost step9.Server

47 c Raphaël Marvie Code Server (changes) public void run () throws Exception { Naming ns = Naming.init () ; ObjectAdapter oa = ObjectAdapter.init () ; ServiceASkeleton skel_a = new ServiceASkeleton (new ServiceAServant ()) ; oa.register (skel_a) ; ns.export ("ServiceA", oa.obj2ref (skel_a)) ; ServiceBSkeleton skel_b = new ServiceBSkeleton (new ServiceBServant ()) ; oa.register (skel_b) ; ns.export ("ServiceB", oa.obj2ref (skel_b)) ; oa.run () ; }

48 c Raphaël Marvie Côté client Récupération des références Plus de lecture de fichiers texte Lookup des références de service Vers une application répartie Client est client des services A, B et Nommage Utilisation des proxy de ces trois services Unique point dentrée : référence du service de nommage $ javac -Dnaming.host=localhost step9.Client

49 c Raphaël Marvie Code Client (changes) public class Client { public Client () throws Exception { Naming ns = Naming.init () ; String ref_a = ns.lookup ("ServiceA") ; this.refA = (ServiceA) Util.ref2proxy (ref_a) ; String ref_b = ns.lookup ("ServiceB") ; this.refB = (ServiceB) Util.ref2proxy (ref_b) ; } // merge of previous clients code }

50 c Raphaël Marvie Bénéfices et limitations Bénéfices Unique point dentrée dans le système Partage simplifié des références de services Limitations On écrit un peu toujours la même chose... On risque à chaque fois de faire des erreurs (skel/proxy)

Génération automatique du code technique

52 c Raphaël Marvie Principe Ne pas écrire ce qui peut être généré On ne va pas toujours écrire la même chose Un proxy et un squelette suivent toujours le même schéma Quelques mises en oeuvre possibles Générateur réflexif (par rapport aux interfaces Java) Réalisation uniforme (mono-langage) Implémentation assez technique Génération par rapport à des contrats XML implémentation relativement directe (DOM) Permet de gérer plusieurs langages cibles

53 c Raphaël Marvie Règles de génération Un contrat de service XXX devient 3 classes XXXProxy Une méthode init pour la connexion Une méthode par méthode du contrat XXXSkeleton Une méthode run avec un switch Une entrée par méthode du contrat XXXServant Les méthodes du contrat à compléter

54 c Raphaël Marvie Bénéfices et limitations Bénéfices : Contrat + générateur Rapidité de développement Proxy, Skeleton, Servant Il ne reste plus quà écrire le code fonctionnel Moins derreurs (correspondances, …) Limitations Ce nest toujours pas parfait : implémentation basique Passage de références dobjets distants ? Passage dobjets sérialisés ?

55 Début de conclusions

56 c Raphaël Marvie Constat Progressivement nous venons de définir un bus logiciel Sa structuration Son utilisation Un bus logiciel repose essentiellement sur deux concepts La désignation dun service (les références) La liaison avec un service distant (établir une connexion)

57 c Raphaël Marvie Architecture générale dun bus logiciel

58 c Raphaël Marvie Premières Conclusions Bénéfices Abstraction de la préoccupation communication dune application Génération du code technique de la préoccupation automatisable Et maintenant ? Raffiner le code pour loptimiser et le rendre plus fiable meilleure structuration des messages réseau (définition dun protocole) dépasser la limitation de 10 méthodes par interface permettre le passage de types complexes et références en paramètres Développement de services de base (comme lannuaire)

59 c Raphaël Marvie Et après … Création des objets accessibles à distance Pool dobjets Assemblage dynamique Adaptabilité Persistance des informations …

60 c Raphaël Marvie Classes dintergiciels Objets répartis Java RMI, CORBA, DCOM,.NET Composants répartis Java Beans, Enterprise Java Beans, CCM Message-Oriented Middleware (MOM) Message Queues, Publish-Subscribe Intégration dapplications Web Services Coordination Accès aux données, persistance Support dapplications mobiles

61 c Raphaël Marvie Propriétés à prendre en compte Hétérogénéité Hardware Langages Ressources Contexte dusage Désignation/localisation Migration Mobilité Ubiquité Mireille Blay-Fornarino Distribution Equilibrage de charge Parallelisation Decentralisation Prise de décision Contrôle de laccès concurrent Clients simultanés Serveurs parallèles Données réparties synchronisation de l'accès aux ressources, Gestion des transactions

62 c Raphaël Marvie Propriétés à prendre en compte Sécurité authentification (certificats) sécurisation des communications (cryptage) contrôle daccès (autorisation) Dimensionnement croissance du nombre de clients « duplication des serveurs », « gestion de caches » gigantesque quantité de données Tolérance aux fautes site en panne ou inaccessible « redondance des serveurs » « fonctionnement en mode dégradé » Mireille Blay-Fornarino

63 c Raphaël Marvie Bibliographie École dété sur les Intergiciels et sur la Construction dApplications Réparties : Patrons et Canevas pour lIntergiciel Sacha Krakowiak, ICAR 2003 Dis papa, cest quoi un bus logiciel réparti ? LIFL – IRCICA Equipe GOAL Décembre 2003