Was ist Java: Comp / Env?

81

Was ist gemeint mit java:comp/env?

Wie sieht das aus?

Context envContext = (Context)initContext.lookup("java:comp/env");

machen ?

Ich verstehe, dass ein Look-up wie:

(DataSource)envContext.lookup("jdbc/MyDatasource")

sucht nach dem Namen MyDatasourcein der context.xmloder web.xml, um die URL der Datenbank zu erhalten. Ist es so ? !! Aber was macht der erstere Lookup?

saplingPro
quelle
1
mögliches Duplikat von Was macht Java: comp / env / do?
Marko Topolnik
4
@ Marko Topolnik aber das beantwortet meine Frage nicht.
SaplingPro
3
Bitte öffnen und lesen Sie den Link, bevor Sie abstimmen, um diese Frage zu schließen. Gehen Sie nicht einfach nach dem Titel.
SaplingPro
1
Es sieht sicher nach einer Antwort für mich aus. Es ist ein Root-Namespace, der vom Container bereitgestellt wird, damit Sie Ihre Ressourcen nachschlagen können.
Marquis of Lorne
Dies ist eine gute Frage für Leute, die versuchen, von Weblogic nach Tomcat zu migrieren, zum Beispiel
ACV

Antworten:

72

java:comp/env ist der Knoten in der JNDI-Struktur, an dem Sie Eigenschaften für die aktuelle Java EE-Komponente (eine Webanwendung oder eine EJB) finden.

Context envContext = (Context)initContext.lookup("java:comp/env");

Ermöglicht das Definieren einer Variablen, die direkt auf diesen Knoten zeigt. Es erlaubt zu tun

SomeBean s = (SomeBean) envContext.lookup("ejb/someBean");
DataSource ds = (DataSource) envContext.lookup("jdbc/dataSource");

eher, als

SomeBean s = (SomeBean) initContext.lookup("java:comp/env/ejb/someBean");
DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/dataSource");

Relative Pfade statt absoluter Pfade. Dafür wird es verwendet.

JB Nizet
quelle
Wofür ist dieser Knoten gedacht? Es würde viele Knoten im JNDI-Baum geben.
SaplingPro
7
Ich bekomme immer noch nicht das Gefühl, was eigentlich ist java:comp/env.
SaplingPro
9
Jede JEE-Komponente (Webapp, EJB) kann Eigenschaften definieren, die für diese Komponente lokal sind. Und diese Eigenschaften sind über zugänglich java:comp/env. Siehe zum Beispiel tomcat.apache.org/tomcat-7.0-doc/… . EJBs haben das Gleiche.
JB Nizet
9

Es handelt sich um eine speicherinterne globale Hashtabelle, in der Sie globale Variablen nach Namen speichern können.

Das URL-Schema "java:" veranlasst JNDI, nach einer javaURLContextFactoryKlasse zu suchen , die normalerweise von Ihrem App-Container bereitgestellt wird. Beispiel: Hier ist Tomcats Implementierungs-Javadoc

Siehe auch NamingManager.getURLContext

Reich
quelle