co to jest java: comp / env?

82

co to znaczy java:comp/env?

Jak wygląda wygląd:

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

zrobić ?

Rozumiem, że wyszukiwanie takie jak:

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

wyszukuje nazwę MyDatasourcew context.xmllub, web.xmlaby uzyskać adres URL bazy danych. Czy tak jest? !! Ale co robi ten pierwszy?

saplingPro
źródło
1
możliwy duplikat What does java: comp / env / do?
Marko Topolnik
4
@Marko Topolnik, ale to nie odpowiada na moje pytanie.
saplingPro
4
Przed głosowaniem otwórz i przeczytaj łącze, aby zamknąć to pytanie. Nie idź po tytule.
saplingPro
1
Z pewnością wygląda na odpowiedź dla mnie. Jest to główna przestrzeń nazw udostępniana przez kontener, w której można wyszukiwać zasoby.
user207421
To jest dobre pytanie dla osób próbujących na przykład migrować z Weblogic do Tomcat
ACV

Odpowiedzi:

73

java:comp/env to węzeł w drzewie JNDI, w którym można znaleźć właściwości dla bieżącego komponentu Java EE (aplikacji internetowej lub EJB).

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

umożliwia zdefiniowanie zmiennej wskazującej bezpośrednio na ten węzeł. To pozwala

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

zamiast

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

Względne ścieżki zamiast bezwzględnych ścieżek. Do tego służy.

JB Nizet
źródło
Do czego służy ten węzeł? W drzewie JNDI byłoby wiele węzłów.
saplingPro
7
Nadal nie mam pojęcia, co tak naprawdę jest java:comp/env.
saplingPro
9
Każdy komponent JEE (webapp, EJB) może definiować właściwości, które są lokalne dla tego komponentu. Te właściwości są dostępne za pośrednictwem java:comp/env. Zobacz na przykład tomcat.apache.org/tomcat-7.0-doc/ ... EJB mają ten sam rodzaj rzeczy.
JB Nizet
9

Jest to globalna tablica haszująca w pamięci, w której można przechowywać zmienne globalne według nazwy.

Schemat adresu URL „java:” powoduje, że JNDI szuka javaURLContextFactoryklasy, która jest zwykle udostępniana przez kontener aplikacji, np. Tutaj jest implementacja Tomcata javadoc

Zobacz także NamingManager.getURLContext

Bogaty
źródło