Bonjour,


Je souhaiterais injecter un objet dans le JNDI, puis récupérer cet objet ailleurs dans le projet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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,