La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "NSY102 1 Proxy et plus Notes de cours java : le langage : Introduction, approche impérative Cnam Paris jean-michel Douin, douin au cnam point fr Nouvelle."— Transcription de la présentation:

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

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

3 NSY102 3 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 hatching.ppt

4 NSY102 4 Objectifs Proxy-Procuration –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 –...

5 NSY102 5 Diagramme UML –L original Subject request() … RealSubject request() … Proxy request() … realSubject realSubject->request();

6 NSY102 6 Une instance possible du pattern proxy

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

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

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

10 NSY Le mandataire 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) … service.offrir(b)

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

12 NSY 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

13 NSY 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; }

14 NSY 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; }

15 NSY La « famille » avec BlueJ

16 NSY 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; }

17 NSY 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 » ?

18 NSY un cousin plutôt dynamique et standard extrait de l API du J2SE Dynamic Proxy –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

19 NSY 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); }

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

21 NSY 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 ?

22 NSY DynamicProxy et le pattern décorateur

23 NSY Le petit dernier Une procuration à distance

24 NSY un petit dernier tm

25 NSY102 25

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

27 NSY Pourquoi

28 NSY Exemple

29 NSY102 29

30 NSY102 30

31 NSY102 31


Télécharger ppt "NSY102 1 Proxy et plus Notes de cours java : le langage : Introduction, approche impérative Cnam Paris jean-michel Douin, douin au cnam point fr Nouvelle."

Présentations similaires


Annonces Google