Plan Rappels sur les patrons de conception Contexte Annuaire JNDI Conception d Applications Hétérogènes Distribuées



Documents pareils
Remote Method Invocation (RMI)

Java Naming and Directory Interface

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Remote Method Invocation en Java (RMI)

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Environnements de Développement

RMI le langage Java XII-1 JMF

Programmation réseau avec Java. 3/7 RMI, un peu de sécurité et CORBA

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Conception de serveurs d'applications ouverts

EXA1415 : Annotations

Création d une application JEE

Architecture Orientée Service, JSON et API REST

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Calcul Parallèle. Cours 5 - JAVA RMI

Serveur d'archivage 2007 Installation et utilisation de la BD exist

J2EE - Introduction. Développement web - Java. Plan du chapitre

La base de données XML exist. A. Belaïd

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Dis papa, c est quoi un bus logiciel réparti?

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Programmation Par Objets

Architecture applicative et Cartographie

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Web Tier : déploiement de servlets

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

TP Programmation Java / JDBC / Oracle

Compte Rendu d intégration d application

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Remote Method Invocation Les classes implémentant Serializable

Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI Proxy)

Auto-évaluation Programmation en Java

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Composants Logiciels. Le modèle de composant de CORBA. Plan

Le Modèle de Sécurité dans JAVA

Programmer en JAVA. par Tama

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Méta-annuaire LDAP-NIS-Active Directory

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Une introduction à la technologie EJB (2/3)

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Documentation CAS à destination des éditeurs

Patrons de Conception (Design Patterns)

Programmation répartie RPC & RMI

Intergiciel - concepts de base

JavaServer Pages (JSP)

Programmation Réseau SSH et TLS (aka SSL)

JOnAS 5. Serveur d application d

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Synchro et Threads Java TM

Groupe Eyrolles, 2004 ISBN :

JOnAS Day 5.1. Clustering

1. Installation d'un serveur d'application JBoss:

Utilisation de Jakarta Tomcat

Environnements de développement (intégrés)

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

OpenPaaS Le réseau social d'entreprise

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Alfstore workflow framework Spécification technique

Introduction au Déploiement

Corrigé des exercices sur les références

2 Chapitre 1 Introduction

Projet. But: consultation en temps réel d événements (cours de bourse, trafic d envoi SMS ) sur des téléphones portables. Serveur de diffusion

Introduction aux «Services Web»

Gestion distribuée (par sockets) de banque en Java

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Cours 1: Java et les objets

Projet gestion d'objets dupliqués

Première coupe : Introduction à la plateforme Java EE JAVA JAVA. Introduction à la plateforme Java EE. Introduction à la plateforme Java EE

Introduction à la plateforme J2EE

LOG4430 : Architecture logicielle et conception avancée

Maîtriser le menu contextuel dans un OfficeBean

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Java - RMI Remote Method Invocation. Java - RMI

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Création d un service web avec NetBeans 5.5 et SJAS 9

Bases Java - Eclipse / Netbeans

Aspects techniques : guide d interfaçage SSO

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

as Architecture des Systèmes d Information

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Composants logiciels Exemples : Java Beans, Enterprise Java Beans

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Best Practices : Utilisation des APIs de Lotus Web Content Management

Mise en place Active Directory / DHCP / DNS

Didier Donsez

Groupe Eyrolles, 2005, ISBN :

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

GEI 465 : Systèmes répartis

Création d objet imbriqué sous PowerShell.

Application web de gestion de comptes en banques

Transcription:

Conception d Applications Hétérogènes Distribuées Master 2 Traitement de l Information Lionel Médini Septembre-novembre 2015

du cours Outils de programmation avancés Retour sur les patrons de conception Inversion de contrôle (conteneurs d objets) et annuaires (communication dans un conteneur) Réserve d instances (gestion du cycle de vie) Systèmes d information distribués ( RMI Appel de méthodes distantes (CORBA, Frameworks Java Objets transactionnels distribués (EJB) Composants déployables à chaud (OSGi) Introduction à l urbanisation des SI

Le pattern Un conteneur diminue le couplage entre ses composants en les isolant les uns des autres et de l extérieur Le conteneur n a pas accès aux classes d implémentation des composants Les composants ne connaissent pas le type de conteneur Problème Les composants ont besoin de communiquer entre eux et avec l extérieur Le framework doit pouvoir contrôler les communications avec et entre les composants

Le pattern Principe Ajout d un niveau d indirection entre conteneur et composants Spécifique aux types de modules (servlets, EJB, POJO...) Spécifique au conteneur (Web, EJB...) Rediriger les communications vers cet objet Exemples javax.servlet.servletcontext (Java EE) : environnement des servlets d un conteneur Web javax.ejb.ejbcontext (Java EE) : informations contextuelles liées à un EJB Remarque Un composant peut avoir plusieurs contextes associés

Le pattern Principe Client Conteneur Service externe Module 1 Module 2 Communication entre composants conteneur les composants conteneur et l extérieur Les conteneur modules ne n a doivent connaissent communiquent pas accès pas aux communiquer pas classes pas le type directement d implémentation de directement conteneur avec entre des eux modules l extérieur (adjonction de services techniques lors de la communication)

Le pattern Initialisation et service Conteneur Socle (context manager) 1. new context() 2. setcontext(c) 3. getservice() Module Client

Le pattern Source : http://www.dotnetguru.org/articles/articlets/contextpattern/.htm

Le pattern Exemple d utilisation (ServletContext) @WebServlet(name = "Test", urlpatterns = {"/test", initparams = { @WebInitParam(name= "Site", value="http://univ-lyon1.fr/"), @WebInitParam(name= "Author", value= "Medini")) public class Test extends HttpServlet { protected void doget([ ]) throws [ ] PrintWriter out = response.getwriter(); ServletContext context = request.getservletcontext(); try { out.println("context path: " + context.getcontextpath()); out.println("server info: " + context.getserverinfo()); out.println("registered servlets"); for (String servletname: context.getservletregistrations().keyset()) { ServletRegistration sr = context.getservletregistration(servletname); out.println(servletname + " : " + sr.getclassname()); for (String param: sr.getinitparameters().keyset()) out.println("parameter:"+ paramname+ " value:"+ sr.getinitparameter(param)); finally { out.close();

Le pattern Avantages Isolation des composants Contrôle des communications Évite l anti-pattern ne pas parler aux inconnus a.b.c.callmethod() Inconvénients Rajoute un niveau d indirection (de complexité) Peut être en contradiction avec la loi de Demeter (least knowledge) S il est mal utilisé, beaucoup d objets peuvent se retrouver à disposition de tous les composants problèmes de sécurité et de performances

Le pattern Variantes Encapsulated context intégré au conteneur applications simples Ambiant context (aka. Scope, Context Object) tenir compte du scope des objets (- annuaire ) isolation des couches de l application Navigational context orienté Web (HTML / JS)

Le pattern Le conteneur + le pattern contexte isolent les composants Le conteneur fait office de serveur (les composants peuvent recevoir des requêtes) Problème Permettre l accès aux composants dans un conteneur Conserver un faible couplage entre les composants

Le pattern Principe Rajouter un niveau d indirection qui centralise les références sur les composants accessibles stocke et renvoie les références (en général sous forme de paires clés-valeurs) Éventuellement, hiérarchiser les références pour permettre différents types d accès En fonction du scope des composants Autres noms Registre (registry) Serveur de noms (Naming Directory)

Le pattern Fonctionnement À l instanciation d un composant Le serveur enregistre le composant dans l annuaire Le composant attend les requêtes À la première requête du client Le client interroge l annuaire pour récupérer une référence sur l objet enregistré Le client effectue un cast de cette référence en fonction du type de l objet Le client peut appeler les méthodes de l objet

Le pattern Exemple d utilisation (binding d un stub en RMI) public class ComputeEngine implements Compute { public <T T executetask(task<t t) { return t.execute(); public static void main(string[] args) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); try { String name = "Compute"; Compute engine = new ComputeEngine(); Compute stub = (Compute) UnicastRemoteObject.exportObject(engine, 0); Registry registry = LocateRegistry.getRegistry(); registry.rebind(name, stub); System.out.println("ComputeEngine bound"); catch (Exception e) { System.err.println("ComputeEngine exception:"); e.printstacktrace(); Source : http://docs.oracle.com/javase/tutorial/rmi/implementing.html

Le pattern Exemple d utilisation (récupération d une référence par le client) public class ComputePi { public static void main(string args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); try { String name = "Compute"; Registry registry = LocateRegistry.getRegistry(args[0]); Compute comp = (Compute) registry.lookup(name); Pi task = new Pi(Integer.parseInt(args[1])); BigDecimal pi = comp.executetask(task); System.out.println(pi); catch (Exception e) { System.err.println("ComputePi exception:"); e.printstacktrace(); Source : http://docs.oracle.com/javase/tutorial/rmi/client.html

Le pattern Remarques Pour favoriser le faible couplage, le client doit connaître l interface de l objet et non son implémentation Le conteneur peut avoir la responsabilité de l enregistrement d un composant dans l annuaire Un même objet peut servir à la fois de contexte et d annuaire Exemples (Java SE) RMI : java.rmi.registry (nommage à plat ) : javax.naming (serveur de noms, hiérarchique)

Java Naming Directory Interface API Java de référence pour L accès à des objets distants (annuaire distribué) La séparation des comportements applicatifs (hiérarchie de contextes) Caractéristiques Intégré à Java SE depuis le JDK 1.3 Standard utilisé pour de nombreuses technologies LDAP, DNS, RMI, EJB Packages : javax.naming.*

Java Naming Directory Interface 2 types d API Client API Client Naming Manager API SPI (Service Provider Interface) LDAP DNS NIS File System RMI

Java Naming Directory Interface API «client» Utilisation d un annuaire indépendamment du SPI Accéder à un contexte applicatif initial (lié à l application) Enregistrer un objet (serveur) Explorer/modifier la hiérarchie de contextes (client & serveur) Retrouver un objet (client) Paramétrage Fichier de configuration : jndi.properties Programmatique

Java Naming Directory Interface API «client» Binding Opérations bind(), rebind(), unbind(), rename() Remarque En pratique, il est plus sûr d utiliser la méthode rebind() Recherche Opération lookup() Remarque Nécessite de connaître le contexte initial de l objet cherché

Java Naming Directory Interface API «client» Exploration Opérations Context.list(javax.naming.Name) : renvoie un NameClassPair (nom «bindé» et nom de la classe) Context.listBindings(javax.naming.Name) : renvoie une énumération de Binding Modification de l arborescence Opérations createsubcontext(), destroysubcontext() Remarque Revient à créer/supprimer un répertoire

Java Naming Directory Interface API «client» : exemples Binding import javax.naming.*; public void registerfruit() throws NamingException { //Get the context object Context context = new InitialContext(); // Create the object to be bound Fruit fruit = new Fruit("orange"); // Perform the bind context.bind("favorite", fruit); // Bind a new object Fruit fruit2 = new Fruit("orange"); context.rebind("favorite", fruit2);

Java Naming Directory Interface API «client» : exemples Recherche d objet import javax.naming.*; public Fruit findfruit() throws NamingException { Context context = new InitialContext(); return (Fruit) context.lookup("favorite"); Remarque Le contexte initial pour Java EE est «java:comp/env» Par défaut, les EJB sont enregistrés dans le contexte «java:comp/env/ejb»

Java Naming Directory Interface API «client» : configuration Par fichier de configuration java.naming.factory.initial=com.sun.jndi.ldap.ldapctxfactory java.naming.provider.url=ldap://monserveur:389... Remarque : d autres paramètres peuvent être nécessaires en fonction du type du service d annuaire Par programmation Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "com.sun.jndi.fscontext.reffscontextfactory"); env.put(context.provider_url, "file:/tmp/tutorial"); Context ctx = new InitialContext(env);

Java Naming Directory Interface Nommage Il existe deux types de classes utilisées pour gérer les URL de nommage javax.naming.compoundname : URLs «classiquement» séparées par des slashs javax.naming.compositename : URLs dont la structure est définie par une classe spécifique Dans ce cas, il faut fournir le nom du package dans la configuration Source : http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/spec/spi/jndispi.fm.html

Java Naming Directory Interface API SPI Permet d implémenter un support qui s interface avec l annuaire Context ContextFactory Nécessite l utilisation d un type d URL pour l accès aux contextes Java Naming Provider : jnp://monserveur Peut nécessiter un paramétrage : java.naming.factory.url.pkgs Pour l utilisation du service, il «suffit» de configurer le client pour qu il accède à la factory et à l URL du contexte initial Source : http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/spec/spi/jndispi.fm.html

Références Ouvrage Deepak Alur, Dan Malks, John Crupi (2003), Core J2EE Patterns: Best Practices and Design Strategies, Prentice Hall, ISBN : 978-0131422469 Sites http://stackoverflow.com/questions/986865/can-you-explain-thecontext-design-pattern-a-bit http://www.allankelly.net/patterns/encapsulatedcontext.html http://www.cs.wustl.edu/~schmidt/pdf/context-object-pattern.pdf http://www.cs.unibo.it/fabio/vd99/lima/lima.html http://en.wikipedia.org/wiki/law_of_demeter http://www.dotnetguru.org/articles/articlets/contextpattern/. htm

Références http://martinfowler.com/eaacatalog/registry.html http://pagesperso-systeme.lip6.fr/gael.thomas/cours/mdoc/cours/ mdoc4.1-jndi.pdf http://www.jmdoudoux.fr/java/dej/chap-jndi.htm http://docs.oracle.com/javase/7/docs/api/javax/naming/packagesummary.html http://docs.oracle.com/javase/jndi/tutorial/basics/naming/index.html http://www.javaworld.com/javaworld/jw-04-2002/jw-0419-jndi.html

Références SPI http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/spec/spi/j ndispi.fm.html JNP http://stackoverflow.com/questions/192718/jndi-without-a-j2eecontainer-with-jnp-maybe-some-other-provider http://mail-archive.ow2.org/jonas-team/2002-01/msg00063.html