cursus de formation aux nouvelles technologies de developpement uv j2ee / jndi module java expert

34
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Upload: bruce-nedelec

Post on 03-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT

UV J2EE / JNDI

Module Java Expert

Page 2: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 2 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Module Java

Vue d’ensemble du langage Java Le langage Java : syntaxe et sémantique Programmation multi-tâche : les threads Accéder aux bases de données Composants réutilisables : le modèle MVC Développement Client/Serveur Présentation d’un IDE : WSAD / Forté / JBuilder Les serveurs d’applications J2EE Les Enterprise JavaBeans Ré-ingénierie d’applications Java

Page 3: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 3 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Naming Service

Associer des noms aux objets (bind) Récupérer les objets par leur nom (resolve) nom de fichier ==> octets sur le disque Exemples:

– RMI Registry– CORBA Naming Service (COSNaming)– Domain Name Service (DNS)– système de fichiers

Page 4: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 4 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Contextes

Contient un ensemble de liaisons (binding) et des opérations de recherche (lookup)

Possède ses propres convention de nommage Exemples

– Système de répertoire : “/”

– domaine DNS : “edu”

– LDAP: “c=us” Système de nommage est un ensemble de contextes

– noms d’un système particulier = espace de nommage (namespace)

Page 5: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 5 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Noms

Identificateur assigné à un objet localhost ==> 127.0.0.1 Convention de nommage définie par le système de

nommage– /rép/rép2/file pour UNIX

– disque:\rép\string pour DOS

– cn=dan, o=ISP pour LDAP

– www-lil.univ-littoral.fr pour DNS

Page 6: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 6 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Noms (suite)

Nom Atomique– nom utilisé dans une liaison

– Possède un sens uniquement dans un contexte

– Ex. nom de fichier dans un répertoire Nom composé

– séquence de noms atomiques

– /usr/bin/ls

– conforme à la convention de nommage

Page 7: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 7 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Names (Cont)

Nom composite– Couvre de multiple systèmes de nommage– http://www.apl.jhu.edu/~deruelle/

• URL id: http

• DNS: www.apl.jhu.edu

• UNIX et serveur web: /usr/deruelle/public_html

RésolutionObject o = ctx.lookup(“usr/deruelle/public_html”);

Page 8: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 8 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Objectifs de JNDI

Proposer une API pour accéder à différents noms. Différents noms peuvent être combinés dans une

seul système logique. De nouvelles implémentations de services de

nommage peuvent être ajoutées sans modifications du client.

Page 9: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 9 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Architecture JNDI

API JNDI

Interface JNDI de fournisseurs de service

Application Cliente Java

Manager de nommage JNDI

DNS LDAP CORBARMI autres

Page 10: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 10 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Architecture JNDI

Application Programming Interface (API)– API pour les programmeurs d’applications clientes– interface Unifiée

Service Provider Interface (SPI)– Pour les vendeurs permettant un accès JNDI à leur service

de nommage

Page 11: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 11 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JNDI API

Incluse dans le Java 2 SDK v 1.3 Doit être téléchargé pour les JDK 1.1 et JDK 1.2 Packages

– javax.naming– javax.naming.directory– javax.naming.event– javax.naming.ldap– javax.naming.spi

Page 12: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 12 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Service Providers

Implémentation des produits sous-jacents Incluses dans Java 2 SDK 1.3

– LDAP– COSNaming– JNDI over RMI Registry

Doit être téléchargé pour les versions précédentes– http://java.sun.com/products/jndi/

Page 13: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 13 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JNDI Providers

LDAP– com.novell.naming.service.nds.NdsInitialContextFactory

NIS– com.sun.jndi.nis.NISCtxFactory

NIS+ (future) RMI

– com.sun.jndi.rmi.registry.RegistryContextFactory COSNaming Fichies

– com.sun.jndi.fscontext.[Ref]FSContextFactory

Page 14: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 14 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Configuration

Pour 1.3, rien à faire. JNDI devrait être inclus dans la distribution avec 3 fournisseurs

Pour Java 2 SDK version 1.2– jndi.jar in $JAVA_HOME/jre/lib/ext

Pour jdk 1.1– Ajouter jndi.jar au CLASSPATH

Page 15: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 15 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Quelques produits LDAP

accessible publiquement :– ldap://ldap.Bigfoot.com– ldap://ldap.four11.com– ldap://ldap.InfoSpace.com

Page 16: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 16 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Tâches Communes JNDI

Obtenir une référence au contexte initial (InitialContext)

Opérations sur le contexte– Lister les fils d’un contexte– Lier (Bind) des noms à des objets– rechercher (Lookup) des objets via leur nom– Créer/détruire des contextes– Note: NamingException peut être envoyée pour la plupart

des opérations de contexte.

Page 17: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 17 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Contextes JNDI

javax.naming.Context

bind(String name, Object obj)createSubcontext(String name) : Contextlist(String name) : NamingEnumerationlistBindings(String name) : NamingEnumerationlookup(String name) : Object

<<abstract>>

javax.naming.InitialContext

InitialContext()InitialContext(java.util.Hashtable env)

Page 18: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 18 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Obtenir un contexte initial

import javax.naming.*;

// non nécessaire pour les serveurs d’applications J2EE

java.util.Properties props = new java.util.Properties();

props.put(Context.INITIAL_CONTEXT_FACTORY,

“com.sun.jndi.fscontext.RefFSContextFactory”);

props.put(Context.PROVIDER_URL, “file:///”);

//obligatoire pour toutes les applications

Context initContext = new InitialContext( props );

Page 19: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 19 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Contexte initial

Point de départ dans l’espace de noms. Toutes les opérations exécutées sont relatives au

contexte initial. Spécifier le fournisseur de service à l’aide de la

propriété :

props.put(Context.INITIAL_CONTEXT_FACTORY”,

“com.sun.jndi.fscontext.RefFSContextFactory” );

Page 20: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 20 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Contexte initial (suite)

Spécifier les propriétés spécifiques au fournisseur LDAP

props.put(Context.PROVIDER_URL, “ldap://host:port”);

props.put(Context.SECURITY_PRINCIPAL, “user” );

props.put(Context.SECURITY_CREDENTIALS, “password”);

Système de fichierprops.put(Context.PROVIDER_URL, “file://tmp/”);

Créer le contexte initialInitialContext initContext = new InitialContext( props );– Création sans paramètres provoque la recherche d’un fichier jndi.properties,

indiquant l’API JNDI et l’espace de nommage à utiliser

Page 21: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 21 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Lister les fils

NamingEnumeration children = initContext.list(“”);

while( children.hasMore() )

{

NameClassPair nc = (NameClassPair) children.next();

System.out.println(nc.getName());

System.out.println(nc.getClassName());

}

list() renvoie un NamingEnumeration d’objets NameClassPair listBindings() renvoie un NamingEnumeration des objets liés

Page 22: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 22 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

NameClassPair and Binding

javax.naming.NameClassPair

getClassName() : StringgetName() : String

javax.naming.Binding

getObject() : Object

Représente une association entre un name et un objet

Représente le nom et la classe d’un objet lié à un contexte

Page 23: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 23 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

NamingEnumeration

Spécialise la collection java.util.Enumeration. Envoie une exception lorsque il n’y a plus d’entrées dans

l’énumération. Permet des résultats partiels qui sont renvoyés et une exception

suite à un accès invalide:– i.e. hasMore() renverra une exception

Page 24: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 24 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Lier des noms à un objet

Lier un nom à un objet à l'intérieur d’un contexte

File f = new File(“/tmp/dan”);

tmpDirContext.bind(“dan”, f );

NameAlreadyBoundException est envoyée si le nom “dan” est déjà lié dans le contexte tmp.

Peut utiliser unbind() ou rebind()

Page 25: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 25 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Recherche d’un objet

Rechercher un objet dans un contexte– String name; Object o = initContext.lookup(name);– le nom peut être composé :

– “/usr/tmp/dir/myfile”– les séparateurs ne sont pas standardisés !

– La classe renvoyée est chargée par le fournisseur !

Page 26: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 26 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Paramètre Name

Les opérations de contexte peuvent prendre une String ou un Name dans le paramètre name.

Name– Séquence ordonnée de composants

– Noms Composés

– Noms Composites

String– Représente un nom composite

Page 27: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 27 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exceptions de nommage

catch( NamingException e )

{

}

Méthodes importantes– toString() : String– getRootCause() : Throwable– getRemainingName() : Name– getExplanation() : String

Page 28: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 28 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

javax.naming.Context

bind(String name, Object obj)createSubcontext(String name) : Contextlist(String name) : NamingEnumerationlistBindings(String name) : NamingEnumerationlookup(String name) : Object

<<abstract>>

javax.naming.InitialContext

InitialContext()InitialContext(java.util.Hashtable env)

javax.naming.directory.InitialDirContext

InitialDirContext()InitialDirContext(Hashtable env)

javax.naming.directory.DirContext

getAttributes() : Attributessearch(String name, Attributes matchingAttributes) : NamingEnumeration

<<abstract>>

Page 29: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 29 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Attributs de contexte

Attributs Commun LDAPc = Country

o = Organization

ou = Organizational Unit

cn = Common Name (premier ou nom complet)

sn = User’s surname (surnom utilisateur)

Page 30: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 30 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JNDI and RMI

Propose une interface standard pour le registre RMI

Properties props = new Properties();

props.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.rmi.registry.RegistryContextFactory”);

props.put(Context.PROVIDER_URL, “rmi://host:port”);

Context ctx = new InitialContext(props);

ctx.rebind(“Teller”, unObjetRMI );

……..

Teller t = (Teller) ctx.lookup(“Teller”);

Page 31: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 31 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JNDI et JDBC

Sources de données JDBC (DataSource)– Evolutions du gestionnaire de Driver JDBC– Stockées dans l’arborescence JNDI– Permettent le pool de connexion– Méthodes d’un objet DataSource ds :

• Connection conn = ds.getConnection(String name, String password )

• conn.close()

Page 32: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 32 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JNDI et EJB

Objet Home pour un EJB est stocké dans JNDI Afin de créer un bean:

InitialContext ic = new InitialContext( props );

TellerHome th = (TellerHome) ic.lookup(“TellerHome”);

Page 33: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 33 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JNDI et les applications J2EE

InitialContext – fourni par le Container– accédé par un composant en utilisant le constructeur par

défaut.• InitialContext rootCtx = new InitialContext();

Propriétés – fournies au Container à l’aide du descripteur de déploiement– accédées par un composant à travers un contexte spécial

• Object object = rootCtx.lookup(“java:comp/env/monObjet”);

Page 34: CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert

Module J2EE/JNDIPage 34 / 34

Deruelle LaurentCopyright © 2002 Laurent Deruelle

En résumé

Les applications clientes JNDI peuvent accéder à des ressources telles que:– imprimantes

– fax

– bases de données (JDBC 2.0)

– références d’objet

qui sont contenues dans de multiples implémentations des services de nommage et en utilisant la même API.