인용 https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
네임 스페이스의 루트 컨텍스트에는 구성 요소 관련 바인딩을 위해 예약 된 하위 트리에 바인딩 된 "comp"라는 이름의 바인딩이 있습니다. 이름 "comp"는 구성 요소의 약자입니다. 루트 컨텍스트에는 다른 바인딩이 없습니다. 그러나 루트 컨텍스트는 정책의 향후 확장, 특히 구성 요소 자체가 아니라 사용자 또는 부서와 같은 다른 유형의 엔터티에 연결된 리소스 이름 지정을 위해 예약되어 있습니다. 예를 들어, 향후 정책에서는 "java : user / alice"및 "java : org / engineering"과 같은 이름을 사용하여 사용자 및 조직 / 부서의 이름을 지정할 수 있습니다.
"comp"컨텍스트에는 "env"와 "UserTransaction"의 두 가지 바인딩이 있습니다. "env"라는 이름은 배포 설명자에 정의 된대로 구성 요소의 환경 관련 바인딩을 위해 예약 된 하위 트리에 바인딩됩니다. "env"는 환경의 약자입니다. J2EE는 "env"네임 스페이스에 대해 다음 구조를 권장합니다 (필수는 아님).
따라서 spring 또는 예를 들어 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");
jdbc/loc
따라서java:comp/env/jdbc/loc
정확합니다) cherouvim의 대답은 첫 번째 예를 잘못 사용했음을 의미java:comp/env/jdbc/loc
하므로jdbc/loc
정확합니다. 그럼에도 불구하고 실제 대답은 현재 상황 에 따라 다릅니다 .