SlideShare una empresa de Scribd logo
1 de 12
JNDI
Java Naming Derectory Interfaces
Benouini Rachid FST Fès 2014-2013
Plan
introduction
Les services de nommage "Naming Services"
Les annuaires "Directory Services"
JNDI et ses Objectifs
Architecture JNDI
Architecture JNDI API
Architecture JNDI SPI
L’utilisation d’un service de nommage
L’obtention d’un objet
Le stockage d’un objet
Utilisation de JNDI
En résumé
Les services de nommage "Naming Services"
Un service de nommage permet d'associer un nom unique à un
objet et de faciliter ainsi l'obtention de cet objet.
Il existe plusieurs types de services de nommage parmi lesquels :
 DNS (Domain Name System) : service de nommage utilisé sur internet
pour permettre la correspondance entre un nom de domaine et une
adresse IP
 NIS (Network Information System) : service de nommage réseau
développé par Sun Microsystems
 COS Naming (Common Object Services) : service de nommage utilisé
par Corba pour stocker et obtenir des références sur des objets Corba.
Les annuaires "Directory Services"
• Un annuaire est un service de nommage qui possède en plus une
représentation hiérarchique des objets qu'il contient et un mécanisme
de recherche.
• Exemple d’annuaires :
LDAP (Lightweight Directory Access Protocol)
• Exemple de structure directory d’une entreprise :
Entreprise A
Les
employés
Employer1
Employer2
Matériels
Impriment
Ordinateurs
Ordinateur1
Ordinateur2
Fax
JNDI et ses Objectifs
• JNDI est l’acronyme de Java Naming and Directory
Interface.
• Cette API fournit une interface unique pour utiliser
différents services de nommages ou d’annuaires et
définit une API standard pour permettre l’accès à ces
services.
• JNDI propose donc une abstraction pour permettre
l’accès à ces différents services de manière standard.
• Ceci est possible grâce à l’implémentation de pilotes
qui mettent en œuvre la partie SPI de l’API JNDI.
Architecture JNDI
Application Java
JNDI API
JNDI Naming Manager
JNDI API SPI
RMI LDAP NDS CORBA …
JNDI est composée de deux parties :
 Une API utilisée pour le développement des applications
 Une SPI utilisée par les fournisseurs d'une implémentation d'un pilote
Packages Rôle
javax.naming Classes et interfaces pour utiliser un service de nommage
javax.naming.directory Etend les fonctionnalités du package javax.naming pour l'utilisation des services de type annuaire
javax.naming.event Classes et interfaces pour la gestion des événements lors d'un accès à un service
javax.naming.ldap Etend les fonctionnalités du package javax.naming.directory pour l'utilisation de la version 3 de LDAP
javax.naming.spi Classes et interfaces dédiées aux Service Provider pour le développement de pilotes
L’utilisation d’un service de nommage
Le contexte :
Un service de nommage permet d'associer un nom à un objet. Cette association
est nommée binding. Un ensemble d'associations nom/objet est nommé un
contexte. Il existe deux types de contexte : contexte racine et sous contexte.
Exemple :
C: est un contexte racine dans un système de fichiers de type Windows.
Le répertoire Users (C:Users) est un sous-contexte du contexte racine qui est dans
ce cas nommé sous-répertoire.
Dans DNS, com est un contexte racine et test est un sous contexte (test.com), et a
partir de ce contexte, il est possible de réaliser plusieurs opérations.
Hashtable hashtableEnvironment = new Hashtable();
hashtableEnvironment.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
hashtableEnvironment.put(Context.PROVIDER_URL, "file:c:/");
Context context = new InitialContext(hashtableEnvironment);
L’utilisation d’un service de nommage
Pour pouvoir utiliser un service de nommage, il faut tout d'abord obtenir un
contexte racine qui va encapsuler la connexion au service.
A partir de ce contexte, il est possible de réaliser plusieurs opérations :
Tous les opérations possèdent deux versions surchargées attendant respectivement :
 Un objet de type Name : cet objet encapsule une séquence ordonnée de un ou plusieurs
éléments (l'intérêt de cette classe est de permettre la manipulation individuelle de
chaque élément).
 Une chaine de caractères : elle contient la séquence
Méthode Rôle
void bind(String, Object) associer un objet avec un nom
void rebind(String, Object) modifier une association
Object lookup(String) supprimer une association
void unbind(String) obtenir un objet à partir de son nom
void rename(String, String) modifier un nom d’objet
NamingEnumeration listBindings(String) obtenir une liste des nom et les objets associés
NamingEnumeration list(String) obtenir une liste des nom et les classes d’objets associés
Le stockage d'un objet
• Généralement les objets à stocker doivent être d'un type particulier,
dépendant du pilote utilisé : il est fréquent que de tels objets doivent
implémenter une interface (java.io.Serializable, java.rmi.Remote, etc ...)
• La méthode bind() permet d'associer un objet à un nom.
Exemple :
import javax.naming.*;
...
public void createName() throws NamingException {
Context context = new InitialContext();
context.bind("/config/monApplication", "valeur");
}
L'obtention d'un objet
• Pour obtenir un objet du service de nommage, utiliser la méthode
lookup() du contexte.
Exemple :
• Ceci peut permettre de facilement stocker des options de configuration
d'une application, plutôt que de les stocker dans un fichier de
configuration. C'est encore plus intéressant si le service qui stocke ces
données est accessible via le réseau car cela permet de centraliser ces
options de configuration.
• Il peut permettre aussi de stocker des données "sensibles" comme des
noms d'utilisateurs et des mots de passe pour accéder à une ressource
et ainsi empêcher leur accès en clair dans un fichier de configuration.
import javax.naming.*;
....
public String getValeur() throws NamingException {
Context context = new InitialContext();
return (String) context.lookup("/config/monApplication");
}
Utilisation de JNDI
J2EE utilise énormément JNDI pour proposer des références vers des ressources
nécessaires aux applications. Chaque conteneur J2EE utilise un service accessible
via JNDI pour stocker des informations sur les applications et les composants. Ceci
permet de rendre dynamique la recherche de composants de l'application
Plusieurs technologies mises en œuvre dans J2EE font un usage de JNDI : par
exemple JDBC, EJB, JMS, ...
Dans JDBC 2.0 elle est fortement recommandée d’utilise JNDI pour stocker des
objets de type DataSource qui encapsulent les informations utiles à la connexion à
la source de données.
Comme JDBC, JMS recommande de stocker les informations concernant les files
(queues) et les sujets (topics) dans un annuaire et de les rechercher grâce à JNDI.
Les EJB stockent aussi leur référence vers leur interface home dans l'annuaire du
serveur d'application pour permette à un client d'obtenir une référence sur l'EJB.
En résumé
• JNDI est une solution proposée par J2EE pour exporter, partager,
centraliser les paramètres d’une application dans le cadre d’un projet ou
d’une entreprise. Il s’agit d’une base de données objet arborescente
dont chaque répertoire peut utiliser une technologie différente.
Certains répertoires sont spéciaux et permettent d’exploiter la même
technologie pour des paramètres spécifiques à une application ou à un
serveur d’application.
• JNDI est généralement utilisé pour découvrir ou publier des EJB. Cela
s’effectuant sans code particulier.

Más contenido relacionado

La actualidad más candente

Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMIKorteby Farouk
 
Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01Eric Bourdet
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java Youness Boukouchi
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRSLilia Sfaxi
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux javaInes Ouaz
 

La actualidad más candente (20)

HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Java RMI
Java RMIJava RMI
Java RMI
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Spring Boot RestApi.pptx
Spring Boot RestApi.pptxSpring Boot RestApi.pptx
Spring Boot RestApi.pptx
 
Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMI
 
Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Formation1 sockets
Formation1 socketsFormation1 sockets
Formation1 sockets
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 

Destacado

Implication des médecins, v2, website paianet, 13 01-21
Implication des médecins, v2, website paianet, 13 01-21Implication des médecins, v2, website paianet, 13 01-21
Implication des médecins, v2, website paianet, 13 01-21Paianet - Connecting Healthcare
 
Elements de reflexion dans le choix des modes de viticulture
Elements de reflexion dans le choix des modes de viticultureElements de reflexion dans le choix des modes de viticulture
Elements de reflexion dans le choix des modes de viticultureRiccagioia Scpa
 
El tránsito hacia el sindicalismo de clase en la enseñanza: Comisiones Obreras
El tránsito hacia el sindicalismo de clase en la enseñanza: Comisiones ObrerasEl tránsito hacia el sindicalismo de clase en la enseñanza: Comisiones Obreras
El tránsito hacia el sindicalismo de clase en la enseñanza: Comisiones ObrerasMarta Jaén
 
unique photos
unique photosunique photos
unique photoscdngoose
 
Contaminacion imformatica
Contaminacion imformaticaContaminacion imformatica
Contaminacion imformaticaDana Isabella
 
Cuadro comparativo (producto5)
Cuadro comparativo (producto5)Cuadro comparativo (producto5)
Cuadro comparativo (producto5)Marissa Ethel
 
Derechos autor caos
Derechos autor caosDerechos autor caos
Derechos autor caosgiova24
 
Santiago del estero tierra de encuentros
Santiago del estero tierra de encuentrosSantiago del estero tierra de encuentros
Santiago del estero tierra de encuentrosceleyro
 
Amor y amistad
Amor y amistadAmor y amistad
Amor y amistaddannyluz
 
La crise rénale sclérodermique
La crise rénale sclérodermiqueLa crise rénale sclérodermique
La crise rénale sclérodermiquekyste
 
News letter 2010
News letter 2010News letter 2010
News letter 2010ecmedia1
 

Destacado (20)

Jndi
JndiJndi
Jndi
 
JNDI
JNDIJNDI
JNDI
 
Iab sri 2009 vs 2008
Iab sri 2009 vs 2008Iab sri 2009 vs 2008
Iab sri 2009 vs 2008
 
Implication des médecins, v2, website paianet, 13 01-21
Implication des médecins, v2, website paianet, 13 01-21Implication des médecins, v2, website paianet, 13 01-21
Implication des médecins, v2, website paianet, 13 01-21
 
Elements de reflexion dans le choix des modes de viticulture
Elements de reflexion dans le choix des modes de viticultureElements de reflexion dans le choix des modes de viticulture
Elements de reflexion dans le choix des modes de viticulture
 
El tránsito hacia el sindicalismo de clase en la enseñanza: Comisiones Obreras
El tránsito hacia el sindicalismo de clase en la enseñanza: Comisiones ObrerasEl tránsito hacia el sindicalismo de clase en la enseñanza: Comisiones Obreras
El tránsito hacia el sindicalismo de clase en la enseñanza: Comisiones Obreras
 
unique photos
unique photosunique photos
unique photos
 
Cualescogesare
CualescogesareCualescogesare
Cualescogesare
 
Contaminacion imformatica
Contaminacion imformaticaContaminacion imformatica
Contaminacion imformatica
 
Cuadro comparativo (producto5)
Cuadro comparativo (producto5)Cuadro comparativo (producto5)
Cuadro comparativo (producto5)
 
Derechos autor caos
Derechos autor caosDerechos autor caos
Derechos autor caos
 
Santiago del estero tierra de encuentros
Santiago del estero tierra de encuentrosSantiago del estero tierra de encuentros
Santiago del estero tierra de encuentros
 
Amor y amistad
Amor y amistadAmor y amistad
Amor y amistad
 
Saltoen largo
Saltoen largoSaltoen largo
Saltoen largo
 
La crise rénale sclérodermique
La crise rénale sclérodermiqueLa crise rénale sclérodermique
La crise rénale sclérodermique
 
News letter 2010
News letter 2010News letter 2010
News letter 2010
 
Sfsic2012 daghmi toumi
Sfsic2012 daghmi toumiSfsic2012 daghmi toumi
Sfsic2012 daghmi toumi
 
Angelcalle
AngelcalleAngelcalle
Angelcalle
 
La presentation de Abraham
La presentation de AbrahamLa presentation de Abraham
La presentation de Abraham
 
Taller3
Taller3Taller3
Taller3
 

Similar a JNDI Java Naming Derectory Interfaces

Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011yassine kchiri
 
Programmation_JEE_Version_imprimable.pdf
Programmation_JEE_Version_imprimable.pdfProgrammation_JEE_Version_imprimable.pdf
Programmation_JEE_Version_imprimable.pdfngombeemmanuel
 
POO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfPOO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfLarbaSAWADOGO2
 
Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Fabien Baligand
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generaleAmir Souissi
 
Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1ATHMAN HAJ-HAMOU
 
Pres4777777777777777777entationLDAP1.pptx
Pres4777777777777777777entationLDAP1.pptxPres4777777777777777777entationLDAP1.pptx
Pres4777777777777777777entationLDAP1.pptxhidaeli2001
 
Ado.net vs jpa
Ado.net vs jpaAdo.net vs jpa
Ado.net vs jpaNetways
 
[FR] Introduction à Spring Data Neo4j 3.x
[FR] Introduction à Spring Data Neo4j 3.x[FR] Introduction à Spring Data Neo4j 3.x
[FR] Introduction à Spring Data Neo4j 3.xFlorent Biville
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EEInes Ouaz
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementMohamed hedi Abidi
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateYouness Boukouchi
 
Presentation hibernate nfe103
Presentation hibernate nfe103Presentation hibernate nfe103
Presentation hibernate nfe103MRamo2s
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 

Similar a JNDI Java Naming Derectory Interfaces (20)

Springioc
SpringiocSpringioc
Springioc
 
Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011
 
Programmation_JEE_Version_imprimable.pdf
Programmation_JEE_Version_imprimable.pdfProgrammation_JEE_Version_imprimable.pdf
Programmation_JEE_Version_imprimable.pdf
 
POO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfPOO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdf
 
Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generale
 
4711538.pptx
4711538.pptx4711538.pptx
4711538.pptx
 
Développement Sous Android
Développement Sous AndroidDéveloppement Sous Android
Développement Sous Android
 
Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1
 
Pres4777777777777777777entationLDAP1.pptx
Pres4777777777777777777entationLDAP1.pptxPres4777777777777777777entationLDAP1.pptx
Pres4777777777777777777entationLDAP1.pptx
 
Ado.net vs jpa
Ado.net vs jpaAdo.net vs jpa
Ado.net vs jpa
 
Jpa(1)
Jpa(1)Jpa(1)
Jpa(1)
 
[FR] Introduction à Spring Data Neo4j 3.x
[FR] Introduction à Spring Data Neo4j 3.x[FR] Introduction à Spring Data Neo4j 3.x
[FR] Introduction à Spring Data Neo4j 3.x
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et Développement
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
 
Presentation hibernate nfe103
Presentation hibernate nfe103Presentation hibernate nfe103
Presentation hibernate nfe103
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Elastic serach
Elastic serachElastic serach
Elastic serach
 

Más de benouini rachid

Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en cbenouini rachid
 
Réseaux sans fil wifi et bluetooth
Réseaux sans fil wifi et bluetoothRéseaux sans fil wifi et bluetooth
Réseaux sans fil wifi et bluetoothbenouini rachid
 
Radio cognitive et intelligence artificielle
Radio cognitive et intelligence artificielleRadio cognitive et intelligence artificielle
Radio cognitive et intelligence artificiellebenouini rachid
 
Ontology concept et applications
Ontology concept et applicationsOntology concept et applications
Ontology concept et applicationsbenouini rachid
 
Ontologie concept applications
Ontologie concept applicationsOntologie concept applications
Ontologie concept applicationsbenouini rachid
 
Segmentation par watershed
Segmentation par watershedSegmentation par watershed
Segmentation par watershedbenouini rachid
 

Más de benouini rachid (7)

Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en c
 
Réseaux sans fil wifi et bluetooth
Réseaux sans fil wifi et bluetoothRéseaux sans fil wifi et bluetooth
Réseaux sans fil wifi et bluetooth
 
Radio cognitive et intelligence artificielle
Radio cognitive et intelligence artificielleRadio cognitive et intelligence artificielle
Radio cognitive et intelligence artificielle
 
e-commerce
e-commercee-commerce
e-commerce
 
Ontology concept et applications
Ontology concept et applicationsOntology concept et applications
Ontology concept et applications
 
Ontologie concept applications
Ontologie concept applicationsOntologie concept applications
Ontologie concept applications
 
Segmentation par watershed
Segmentation par watershedSegmentation par watershed
Segmentation par watershed
 

JNDI Java Naming Derectory Interfaces

  • 1. JNDI Java Naming Derectory Interfaces Benouini Rachid FST Fès 2014-2013
  • 2. Plan introduction Les services de nommage "Naming Services" Les annuaires "Directory Services" JNDI et ses Objectifs Architecture JNDI Architecture JNDI API Architecture JNDI SPI L’utilisation d’un service de nommage L’obtention d’un objet Le stockage d’un objet Utilisation de JNDI En résumé
  • 3. Les services de nommage "Naming Services" Un service de nommage permet d'associer un nom unique à un objet et de faciliter ainsi l'obtention de cet objet. Il existe plusieurs types de services de nommage parmi lesquels :  DNS (Domain Name System) : service de nommage utilisé sur internet pour permettre la correspondance entre un nom de domaine et une adresse IP  NIS (Network Information System) : service de nommage réseau développé par Sun Microsystems  COS Naming (Common Object Services) : service de nommage utilisé par Corba pour stocker et obtenir des références sur des objets Corba.
  • 4. Les annuaires "Directory Services" • Un annuaire est un service de nommage qui possède en plus une représentation hiérarchique des objets qu'il contient et un mécanisme de recherche. • Exemple d’annuaires : LDAP (Lightweight Directory Access Protocol) • Exemple de structure directory d’une entreprise : Entreprise A Les employés Employer1 Employer2 Matériels Impriment Ordinateurs Ordinateur1 Ordinateur2 Fax
  • 5. JNDI et ses Objectifs • JNDI est l’acronyme de Java Naming and Directory Interface. • Cette API fournit une interface unique pour utiliser différents services de nommages ou d’annuaires et définit une API standard pour permettre l’accès à ces services. • JNDI propose donc une abstraction pour permettre l’accès à ces différents services de manière standard. • Ceci est possible grâce à l’implémentation de pilotes qui mettent en œuvre la partie SPI de l’API JNDI.
  • 6. Architecture JNDI Application Java JNDI API JNDI Naming Manager JNDI API SPI RMI LDAP NDS CORBA … JNDI est composée de deux parties :  Une API utilisée pour le développement des applications  Une SPI utilisée par les fournisseurs d'une implémentation d'un pilote Packages Rôle javax.naming Classes et interfaces pour utiliser un service de nommage javax.naming.directory Etend les fonctionnalités du package javax.naming pour l'utilisation des services de type annuaire javax.naming.event Classes et interfaces pour la gestion des événements lors d'un accès à un service javax.naming.ldap Etend les fonctionnalités du package javax.naming.directory pour l'utilisation de la version 3 de LDAP javax.naming.spi Classes et interfaces dédiées aux Service Provider pour le développement de pilotes
  • 7. L’utilisation d’un service de nommage Le contexte : Un service de nommage permet d'associer un nom à un objet. Cette association est nommée binding. Un ensemble d'associations nom/objet est nommé un contexte. Il existe deux types de contexte : contexte racine et sous contexte. Exemple : C: est un contexte racine dans un système de fichiers de type Windows. Le répertoire Users (C:Users) est un sous-contexte du contexte racine qui est dans ce cas nommé sous-répertoire. Dans DNS, com est un contexte racine et test est un sous contexte (test.com), et a partir de ce contexte, il est possible de réaliser plusieurs opérations. Hashtable hashtableEnvironment = new Hashtable(); hashtableEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); hashtableEnvironment.put(Context.PROVIDER_URL, "file:c:/"); Context context = new InitialContext(hashtableEnvironment);
  • 8. L’utilisation d’un service de nommage Pour pouvoir utiliser un service de nommage, il faut tout d'abord obtenir un contexte racine qui va encapsuler la connexion au service. A partir de ce contexte, il est possible de réaliser plusieurs opérations : Tous les opérations possèdent deux versions surchargées attendant respectivement :  Un objet de type Name : cet objet encapsule une séquence ordonnée de un ou plusieurs éléments (l'intérêt de cette classe est de permettre la manipulation individuelle de chaque élément).  Une chaine de caractères : elle contient la séquence Méthode Rôle void bind(String, Object) associer un objet avec un nom void rebind(String, Object) modifier une association Object lookup(String) supprimer une association void unbind(String) obtenir un objet à partir de son nom void rename(String, String) modifier un nom d’objet NamingEnumeration listBindings(String) obtenir une liste des nom et les objets associés NamingEnumeration list(String) obtenir une liste des nom et les classes d’objets associés
  • 9. Le stockage d'un objet • Généralement les objets à stocker doivent être d'un type particulier, dépendant du pilote utilisé : il est fréquent que de tels objets doivent implémenter une interface (java.io.Serializable, java.rmi.Remote, etc ...) • La méthode bind() permet d'associer un objet à un nom. Exemple : import javax.naming.*; ... public void createName() throws NamingException { Context context = new InitialContext(); context.bind("/config/monApplication", "valeur"); }
  • 10. L'obtention d'un objet • Pour obtenir un objet du service de nommage, utiliser la méthode lookup() du contexte. Exemple : • Ceci peut permettre de facilement stocker des options de configuration d'une application, plutôt que de les stocker dans un fichier de configuration. C'est encore plus intéressant si le service qui stocke ces données est accessible via le réseau car cela permet de centraliser ces options de configuration. • Il peut permettre aussi de stocker des données "sensibles" comme des noms d'utilisateurs et des mots de passe pour accéder à une ressource et ainsi empêcher leur accès en clair dans un fichier de configuration. import javax.naming.*; .... public String getValeur() throws NamingException { Context context = new InitialContext(); return (String) context.lookup("/config/monApplication"); }
  • 11. Utilisation de JNDI J2EE utilise énormément JNDI pour proposer des références vers des ressources nécessaires aux applications. Chaque conteneur J2EE utilise un service accessible via JNDI pour stocker des informations sur les applications et les composants. Ceci permet de rendre dynamique la recherche de composants de l'application Plusieurs technologies mises en œuvre dans J2EE font un usage de JNDI : par exemple JDBC, EJB, JMS, ... Dans JDBC 2.0 elle est fortement recommandée d’utilise JNDI pour stocker des objets de type DataSource qui encapsulent les informations utiles à la connexion à la source de données. Comme JDBC, JMS recommande de stocker les informations concernant les files (queues) et les sujets (topics) dans un annuaire et de les rechercher grâce à JNDI. Les EJB stockent aussi leur référence vers leur interface home dans l'annuaire du serveur d'application pour permette à un client d'obtenir une référence sur l'EJB.
  • 12. En résumé • JNDI est une solution proposée par J2EE pour exporter, partager, centraliser les paramètres d’une application dans le cadre d’un projet ou d’une entreprise. Il s’agit d’une base de données objet arborescente dont chaque répertoire peut utiliser une technologie différente. Certains répertoires sont spéciaux et permettent d’exploiter la même technologie pour des paramètres spécifiques à une application ou à un serveur d’application. • JNDI est généralement utilisé pour découvrir ou publier des EJB. Cela s’effectuant sans code particulier.