Цитирование https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
В корневом контексте пространства имен
это привязка с именем "комп",
который связан с поддеревом, зарезервированным
для привязок, связанных с компонентами.
Название "comp" является сокращением от компонента.
Других привязок на
корневой контекст. Тем не менее, корень
контекст зарезервирован для будущего
расширение политики, в частности
для именования ресурсов, которые не связаны
к самому компоненту, но к другому
типы объектов, таких как пользователи или
ведомства. Например, будущее
политики могут позволить вам называть пользователей
и организации / отделы с помощью
имена, такие как "Java: пользователь / Алиса" и
"Java: орг / инженерия"
.
В контексте "comp" есть два
привязки: «env» и «UserTransaction».
Имя "env" связано с поддеревом
который зарезервирован для компонента
привязки, связанные с окружающей средой, а
определяется его дескриптором развертывания.
«env» - это сокращение от окружающей среды.
J2EE рекомендует (но не требует)
следующая структура для "env"
Пространство имен.
Таким образом, привязка, которую вы сделали из весны или, например, из дескриптора контекста tomcat, идет по умолчанию под java: comp / env /
Например, если ваша конфигурация:
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="foo"/>
</bean>
Тогда вы можете получить к нему доступ напрямую, используя:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");
или вы можете сделать промежуточный шаг, чтобы вам не приходилось указывать «java: comp / env» для каждого получаемого вами ресурса:
Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");