Utilisation de JNDI
Les deux paramètres de base du contexte initial
!!INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial"
Classe du fournisseur de service du contexte initial
(Attention : cette classe doit être dans le CLASSPATH)
!!PROVIDER_URL = "java.naming.provider.url »
Paramètres passé au fournisseur, en général URL du service
Exemple
Properties props = Properties();
props.put(INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.registry.RegistryContextFactory");
props.put(PROVIDER_URL, "rmi://localhost:1099");
Context ic = new InitialContext(props);
2008-2009 Master SAR - M2 MDOC - Introduction 13
Utilisation de JNDI
Extrait de l’API de Context
!!void bind(String name, Object obj):
associe l’objet obj au nom name
(chemin complet, tous les contexte intermédiaires doivent exister)
!!NamingEnumeration<Binding> listBinding(String name):
renvoie la liste des associations possédant le nom name (1 niveau)
!!Object lookup(String name):
Renvoie l’objet ayant pour nom name (dans le sous-arbre)
!!void rebind(String name, Object obj):
Ré-associe l’objet obj au nom name
!!void unbind(String name):
Détruit l’association ayant pour nom name
!!Context createSubcontext(String name):
Crée un sous-contexte ayant pour nom name (préférable à bind)
2008-2009 Master SAR - M2 MDOC - Introduction 14
Utilisation de JNDI
Exemple avec le service de résolution de noms RMI
public interface Hello { void sayHello(); }
public HelloImpl implements Hello { … implem … }
Côté serveur
Context ic = new InitialContext(props);
Remote obj = new HelloImpl();
UnicastRemoteObject.exportObject(obj, 0);
ic.rebind("mon-serveur", obj);
Côté client
Context ic = new InitialContext(props);
Hello server = (Hello)ic.lookup("mon-serveur");
server.sayHello();
2008-2009 Master SAR - M2 MDOC - Introduction 15
L’usine à objet
Problème avec les Stateful Bean:
A chaque client son Bean!
! !ic.lookup("Test@Remote")
renvoie un nouveau Bean à chaque appel
Solution : enregistrer des javax.naming.Reference
!! Interception de la recherche
2008-2009 Master SAR - M2 MDOC - Introduction 16