[JNDI] Est-t-il possible d'injecter n'importe quel objet dans le JNDI ?
Bonjour,
Je souhaiterais injecter un objet dans le JNDI, puis récupérer cet objet ailleurs dans le projet :
Code:
1 2 3 4 5 6 7 8 9 10
| package com.test;
public class MaClasse {
public int a;
@Override
public String toString(){
return "" + a;
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package com.test;
import javax.naming.*;
public class Main {
public static void main(String[] args) throws NamingException {
Context ctx1 = new InitialContext();
MaClasse toto = new MaClasse();
toto.a = 9;
ctx1.rebind("toto", toto);
// Ailleurs dans le projet
Context ctx2 = new InitialContext();
Object o = ctx2.lookup("toto");
System.out.println(o);
}
} |
Je rencontre l'erreur suivante :
Citation:
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
at javax.naming.InitialContext.rebind(InitialContext.java:427)
at com.test.Main.main(Main.java:9)
D'après ce que j'ai compris il faut initialiser les paramètres suivants pour que le JNDI fonctionne (extrait du cours de Monsieur Doudoux) :
- java.naming.factory.initial permet de préciser le nom de la fabrique proposée par le fournisseur. Cette fabrique est en charge de l'instanciation d'un objet de type InitialContext
- java.naming.provider.url : URL du context racine
1. Est-t-il possible de réaliser en Java avec le JNDI ce que je souhaite mettre en place ?
2. Si oui pour 1., comment faire pour que mon code au-dessus fonctionne ?
3. En réalité, j'ai déjà eu l'occasion de récupérer une ressource dans le JNDI lorsque j'ai travaillé avec JMS (Java Message Service), le problème c'est comment fait-t-on pour renseigner dans le fichier jndi.properties lorsqu'on travaille avec plusieurs types de ressources (ex: JMS + JDBC etc...) ? Parce que le fichier jndi.properties ne va pas pouvoir contenir plusieurs java.naming.factory.initial non ? Si oui, comment faut-t-il s'y prendre ?
4. Quels sont les limites et contraintes de JNDI ?
Cordialement,