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; } }Je rencontre l'erreur suivante :
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); } }
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) :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)
- 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,
Partager