SlideShare une entreprise Scribd logo
1  sur  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.

Contenu connexe

Tendances

Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
Mariem ZAOUALI
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Shellmates
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
ENSET, Université Hassan II Casablanca
 

Tendances (20)

Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
JNDI
JNDIJNDI
JNDI
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptions
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3
 
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
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP
 
Java RMI
Java RMIJava RMI
Java RMI
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 

En vedette

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
Paianet - Connecting Healthcare
 
unique photos
unique photosunique photos
unique photos
cdngoose
 
Contaminacion imformatica
Contaminacion imformaticaContaminacion imformatica
Contaminacion imformatica
Dana Isabella
 
Derechos autor caos
Derechos autor caosDerechos autor caos
Derechos autor caos
giova24
 
Santiago del estero tierra de encuentros
Santiago del estero tierra de encuentrosSantiago del estero tierra de encuentros
Santiago del estero tierra de encuentros
celeyro
 
Amor y amistad
Amor y amistadAmor y amistad
Amor y amistad
dannyluz
 
News letter 2010
News letter 2010News letter 2010
News letter 2010
ecmedia1
 
Consumismo navideño
Consumismo navideñoConsumismo navideño
Consumismo navideño
zanneti
 

En vedette (20)

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
 
Consumismo navideño
Consumismo navideñoConsumismo navideño
Consumismo navideño
 

Similaire à 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_2011
yassine kchiri
 
Programmation_JEE_Version_imprimable.pdf
Programmation_JEE_Version_imprimable.pdfProgrammation_JEE_Version_imprimable.pdf
Programmation_JEE_Version_imprimable.pdf
ngombeemmanuel
 
Pres4777777777777777777entationLDAP1.pptx
Pres4777777777777777777entationLDAP1.pptxPres4777777777777777777entationLDAP1.pptx
Pres4777777777777777777entationLDAP1.pptx
hidaeli2001
 
Ado.net vs jpa
Ado.net vs jpaAdo.net vs jpa
Ado.net vs jpa
Netways
 
Presentation hibernate nfe103
Presentation hibernate nfe103Presentation hibernate nfe103
Presentation hibernate nfe103
MRamo2s
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 

Similaire à 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
 

Plus de benouini rachid

Plus 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.