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

언제 / 왜 <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>



답변

항상 컨테이너에 구성된 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 에서 리소스를 지정 하면 배포자 역할 에서 개발자 역할 을 분리하는 이점이 있다는 것입니다 . 즉, 개발자는 프로덕션에서 실제로 필요한 리소스가 무엇인지 알 필요가 없으며 애플리케이션을 배포하는 사람은 실제 리소스에 매핑 할 멋진 이름 목록을 갖게됩니다.


답변