Proxy et plus Cnam Paris jean-michel Douin, douin au cnam point fr

Slides:



Advertisements
Présentations similaires
Un environnement de développement éducatif
Advertisements

Le moteur
1. Résumé 2 Présentation du créateur 3 Présentation du projet 4.
Produit Gammes Nomenclatures Modules Techniques Prix de Revient Prix de Vente Modules Techniques Client Marges Mise en route Temps Unitaire Prix (Ex:
Mon carnet De comportement
Le mécanisme des exceptions
Introspection et Réflexion Manipulation dynamique de code Java.
Classe : …………… Nom : …………………………………… Date : ………………..
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Android View, onClick, Activity, Modèle Vue Contrôleur
NSY102 Conception de logiciels Intranet les patrons Proxy
Est Ouest Sud 11 1 Nord 1 Laval Du Breuil, Adstock, Québec I-17-17ACBLScore S0417 Allez à 1 Est Allez à 4 Sud Allez à 3 Est Allez à 2 Ouest RndNE
Est Ouest Sud 11 1 Nord 1 RondeNE SO
Les Prepositions.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
JXDVDTEK – Une DVDthèque en Java et XML
T ravail E tude R echerche COUREUX Éric DUCK Christian ZENGERLÉ Olivier COUREUX Éric DUCK Christian ZENGERLÉ Olivier EncadrantsEncadrants M. Crescenzo.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
1 Jeudi 8 juin 2006 Conception et présentation: Serge Raynaud, webmestre du CRNHR.
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
ESCPI 1 Programmation par contrats Une méthode appelée Appel de la méthode Si le contrat est respecté : Pré-assertions Lappelant En retour le contrat est.
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
LUNDI – MARDI – MERCREDI – JEUDI – VENDREDI – SAMEDI – DIMANCHE
LUNDI – MARDI – MERCREDI – JEUDI – VENDREDI – SAMEDI – DIMANCHE
SUJET D’ENTRAINEMENT n°2
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie.
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
La Saint-Valentin Par Matt Maxwell.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
1. 2 PLAN DE LA PRÉSENTATION - SECTION 1 : Code HTML - SECTION 2.1. : CSS (Méthode 1) - SECTION 2.2. : CSS (Méthode 2) - SECTION 3 : JavaScript - SECTION.
Programmation concurrente
Un patron de conception
Notre calendrier français MARS 2014
COURS DE PROGRAMMATION ORIENTEE OBJET :
Java, les objets : tout de suite ! Rassembler, grouper les objets
Android View, onClick, Activity, Modèle Vue Contrôleur
C'est pour bientôt.....
Veuillez trouver ci-joint
SUJET D’ENTRAINEMENT n°4
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
LUNDI – MARDI – MERCREDI – JEUDI – VENDREDI – SAMEDI – DIMANCHE
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
SUJET D’ENTRAINEMENT n°1
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
CALENDRIER-PLAYBOY 2020.
9 paires séries de 3 étuis ( n° 1 à 27 )
Projet de stage d’année IIR4 sous le thème:
Quel est l’intérêt d’utiliser le diagramme de Gantt dans la démarche de projet A partir d’un exemple concret, nous allons pouvoir exploiter plusieurs parties.
Les Chiffres Prêts?
Factory Design Patterns. Contents Factory patterns: principesFactory patterns: principes The Factory Method patternThe Factory Method pattern The Abstract.
Relevez le numéro de votre logo préféré et adressez-le à : En cas d’hésitation, vous pouvez choisir jusqu’à 3 logos. Seront pris.
Schéma de conception Factory Method Exemple Sylvain Giroux.
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
NSY102 1 NSY102 Conception de logiciels Intranet les patrons Proxy Le Patron Procuration/ Pattern Proxy Cnam Paris jean-michel Douin, douin au cnam point.
Transcription de la présentation:

Proxy et plus Cnam Paris jean-michel Douin, douin au cnam point fr Nouvelle version : 4 Septembre 2005 Notes de cours java : le langage : Introduction, approche impérative

Sommaire La famille Proxy Les Parents [Gof95] Les descendants VirtualProxy RemoteProxy DynamicProxy

Bibliographie utilisée Design Patterns, catalogue de modèles de conception réutilisables de Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides [Gof95] International thomson publishing France Mark Grand http://www.ida.liu.se/~uweas/Lectures/DesignPatterns01/panas-pattern-hatching.ppt http://www.mindspring.com/~mgrand/pattern_synopses.htm

Objectifs Proxy-Procuration Alias Motivation Fournit à un tiers objet un mandataire, pour contrôler l ’accès à cet objet Alias Subrogé (surrogate) Motivation contrôler différer optimiser sécuriser ...

realSubject->request(); Diagramme UML Subject request() … realSubject->request(); RealSubject request() … Proxy request() … realSubject L ’original

Une instance possible du pattern proxy http://www.theserverside.com/tt/articles/content/JIApresentations/Kabutz.pdf

le Service/Sujet public interface Service{ offrir(Bouquet b) … public interface Service{ /** Offrir un bouquet de fleurs * @param bouquet le bouquet * @return réussite ou échec ... */ public boolean offrir(Bouquet b); }

Une implémentation du Service ServiceImpl offrir(Bouquet b) … public class ServiceImpl implements Service{ public boolean offrir(Bouquet b){ System.out.println(" recevez ce bouquet : " + b); return true; }

Offrir en « direct » Client offrir(unBouquet) Console... Service service = new ServiceImpl(); assert service.offrir(unBouquet) == true;

Le mandataire public class ServiceProxy implements Service{ service.offrir(b) public class ServiceProxy implements Service{ private ServiceImpl service; public ServiceProxy(){ this.service = new ServiceImpl(); } public boolean offrir(Bouquet bouquet){ boolean résultat; System.out.print(" par procuration : "); résultat = service.offrir(bouquet); return résultat; } } ServiceProxy offrir(Bouquet b) …

Offrir par l ’intermédiaire de ServiceProxy Console ... Client offrir(unBouquet) offrir(unBouquet) Service service = new ServiceProxy(); service.offrir(unBouquet);

VirtualProxy Création d ’objets « lourds » à la demande Coût de la création d ’une instance Création d ’un objet seulement si nécessaire

Virtual (lazy) Proxy public class VirtualProxy implements Service{ private Service service; public boolean offrir(Bouquet bouquet){ boolean résultat; System.out.print(" par procuration, virtualProxy (lazy) : "); Service service = getServiceImpl(); résultat = service.offrir(bouquet); return résultat; }

VirtualProxy & Introspection private Service getServiceImpl(){ if(service==null){ try{ Class classe = Class.forName("ServiceImpl"); service = (Service) classe.newInstance(); }catch(Exception e){ e.printStackTrace(); } return service;

La « famille » avec BlueJ

Sécurité … VirtualProxy bis URLClassLoader hérite de SecureClassLoader Il peut servir à « vérifier » un code avant son exécution souvent associé à une stratégie de sécurité private Service getServiceImpl(){ if(service==null){ try{ ClassLoader classLoader = new URLClassLoader( new URL[]{new URL("http://jfod.cnam.fr/nsy102/proxy_pattern.jar")}); Class classe = Class.forName("ServiceImpl",true, classLoader); service = (Service) classe.newInstance(); }catch(Exception e){ e.printStackTrace(); } return service;

Résumé, bilan intermédiaire Procuration à un tiers Proxy contrôle complet de l ’accès au sujet réel VirtualProxy des contraintes de coûts en temps d ’exécution liée à une stratégie de sécurité ? Connaissance à l ’exécution du sujet réel ? ? Procuration pour un appel distant en complète « transparence » ?

un cousin plutôt dynamique et standard extrait de l ’API du J2SE Dynamic Proxy http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/InvocationHandler.html http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/Proxy.html L ’interface à implémenter interface java.lang.reflect.InvocationHandler; ne contient qu ’une seule méthode Object invoke( Object proxy, Method m, Object[] args); proxy : le contexte de l ’appelé, XXXClassLoader m : la méthode sélectionnée args : les arguments de cette méthode

DynamicEtProxy public class DynamicEtProxy implements InvocationHandler{ private ServiceImpl service; public DynamicEtProxy(){ this.service = new ServiceImpl(); } public Object invoke(Object proxy, Method method, Object[] args) throws Exception{ System.out.print(" par procuration dynamique : "); return method.invoke(service, args);

Dynamic Proxy Client Console ... Proxy InvocationHandler offrir(unBouquet) invoke(service,args) invoke() ClassLoader cl = Service.class.getClassLoader(); Service service = (Service) Proxy.newProxyInstance(cl, new Class[]{Service.class}, new DynamicEtProxy()); service.offrir(unBouquet);

Doit-on connaître le nom de la classe ? VirtualProxyBis, le retour ClassLoader cl = new URLClassLoader( new URL[]{new URL("http://jfod.cnam.fr/csiml/proxy_pattern.jar")}); Class classe = Class.forName("DynamicEtProxy",true, cl); InvocationHandler handler = (InvocationHandler)classe.newInstance(); Service service = (Service) Proxy.newProxyInstance(cl, new Class[]{Service.class}, handler); service.offrir(unBouquet); } encore plus dynamique ? Plus générique ?

DynamicProxy et le pattern décorateur

Le petit dernier Une procuration à distance

un petit dernier http://www.mindspring.com/~mgrand/pattern_synopses.htm

Java RMI utilise les DynamicProxy appel distant transparents génération des « stubs »

Pourquoi

Exemple