web.xml의 resource-ref는 무엇에 사용됩니까?


112

언제 / 왜 <resource-ref>요소를 정의할지 궁금 합니다.web.xml파일에 합니다.

JNDI를 사용하여 웹 / 앱 서버에 정의 된 다음 Java 코드에서 JNDI 참조를 조회 할 것이라고 생각했을 것입니다.

resource-ref 정의는 나에게 약간 중복되는 것처럼 보이며 언제 유용할지 생각할 수 없습니다. 예:

<resource-ref>
  <description>Primary database</description>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
</resource-ref>

답변:


156

항상 컨테이너에 구성된 JNDI 이름으로 애플리케이션의 리소스를 직접 참조 할 수 있지만 그렇게하면 기본적으로 컨테이너 별 이름을 코드에 연결하게됩니다. 예를 들어 어떤 이유로 나중에 이름을 변경하려는 경우 모든 응용 프로그램의 모든 참조를 업데이트 한 다음 다시 빌드하고 다시 배포해야합니다.

<resource-ref>다른 간접 계층을 도입합니다. web.xml 에서 사용할 이름을 지정 하고 컨테이너에 따라 컨테이너 구성 파일에 바인딩을 제공 합니다.

그래서 여기에 무슨 일이 일어나는지 : java:comp/env/jdbc/primaryDB이름 을 조회하고 싶다고 가정 해 봅시다 . 컨테이너는 web.xml에에 대한 <resource-ref>요소 가 있음을 발견 jdbc/primaryDB하므로 다음과 유사한 내용을 포함하는 컨테이너 별 구성을 조사합니다.

<resource-ref>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>

마지막으로 이름으로 등록 된 객체를 반환합니다 jdbc/PrimaryDBInTheContainer.

아이디어web.xml 에서 리소스를 지정 하면 배포자 역할 에서 개발자 역할 을 분리하는 이점이 있다는 것입니다 . 즉, 개발자는 프로덕션에서 실제로 필요한 리소스가 무엇인지 알 필요가 없으며 애플리케이션을 배포하는 사람은 실제 리소스에 매핑 할 멋진 이름 목록을 갖게됩니다.


6
IMHO, 역할 분리를 넘어선 다. 아이디어는 서버에서 jndi 이름을 사용할 수 있다고 가정 할 수 없으므로 배포자가 선택한 "실제"JNDI 이름에 응용 프로그램에 사용 된 이름을 매핑하는 방법이 필요합니다.
Pascal Thivent

3
Google에서 찾을 수 없기 때문에 기본이어야합니다. 그러나 "java : comp / env / jdbc / primaryDB"를 검색하려는 경우 res-ref-name이 "jdbc / primaryDB"인 이유는 무엇입니까?
Torben

4
내가 아는 한 "jndi-name"요소는 표준 web.xml의 일부가 아니라 특정 공급 업체 배포 설명 자의 일부입니다.
Ramon Chiara

2
@RaviParekh, 그는 "컨테이너 별 구성"에 대해 언급했습니다. jboss-web.xml 또는 weblogic.xml 또는 기타 공급 업체별 배포 설명자 파일
abhihello123

1
이것을 바람둥이와 관련시킬 수 있습니까? 나는 tomcat의 context.xml과 web.xml의 resource-ref에 정의 된 데이터 소스를 의미합니다
Atul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.