що таке java: comp / env?


83

що мається на увазі під java:comp/env?

Як виглядає вигляд:

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

робити?

Я розумію, що такий пошук, як:

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

шукає ім'я MyDatasourceв context.xmlабо, web.xmlщоб отримати URL-адресу бази даних. Це так? !! Але що робить перший, який шукає?


1
можливий дублікат Що робить Java: comp / env /?
Marko Topolnik

4
@Marko Topolnik, але це не відповідає на моє запитання.
saplingPro

4
Будь ласка, відкрийте та прочитайте посилання перед голосуванням, щоб закрити це питання. Не просто йти за заголовком.
saplingPro

1
Звичайно, це для мене виглядає як відповідь. Це кореневий простір імен, наданий контейнером, в якому ви можете шукати свої ресурси.
user207421

Це гарне запитання для людей, які намагаються перейти, наприклад, з Weblogic на Tomcat
ACV

Відповіді:


73

java:comp/env є вузлом у дереві JNDI, де ви можете знайти властивості поточного компонента Java EE (веб-додаток або EJB).

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

дозволяє визначити змінну, що вказує безпосередньо на цей вузол. Це дозволяє робити

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

а не

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

Відносні шляхи замість абсолютних шляхів. Ось для чого він використовується.


Для чого призначений цей вузол? У дереві JNDI було б багато вузлів.
saplingPro

7
Я все ще не відчуваю, що насправді є java:comp/env.
saplingPro

9
Кожен компонент JEE (webapp, EJB) може визначати властивості, які є локальними для цього компонента. І ці властивості доступні через java:comp/env. Дивіться, наприклад, tomcat.apache.org/tomcat-7.0-doc/… . EJB мають те саме.
JB Nizet

9

Це загальна хеш-таблиця в пам’яті, де ви можете зберігати глобальні змінні за іменами.

Схема url-адреси "java:" змушує JNDI шукати javaURLContextFactoryклас, який зазвичай надається вашим контейнером програми, наприклад, ось реалізація Tomcat javadoc

Див. Також NamingManager.getURLContext

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.