JDBC 구현 jar에 Tomcat의 "승인" 디렉토리를 사용하시겠습니까?

JDBC 구현 jar에 Tomcat의 "승인" 디렉토리를 사용하시겠습니까?

우리 공급업체는 MySQL JDBC jar를 Tomcat 6 "$CATALINA_HOME/endorsed" 디렉터리에 배치할 것을 권장합니다.

그 추천의 목적이 무엇인지는 나에게 불분명합니다.

그만큼클래스로더 하우투Tomcat 6의 경우 "승인된" 메커니즘에 대해 다음과 같이 설명합니다.

Java는 JCP 외부에서 생성된 API(예: W3C의 DOM 및 SAX)를 대체할 수 있도록 "승인된 표준 재정의 메커니즘"이라는 메커니즘을 지원합니다. XML 파서 구현을 업데이트하는 데에도 사용할 수 있습니다. 자세한 내용은 다음을 참조하세요. http://docs.oracle.com/javase/1.5.0/docs/guide/standards/index.html.

Tomcat은 컨테이너를 시작하는 명령줄에 시스템 속성 설정 -Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS를 포함하여 이 메커니즘을 활용합니다. 이 옵션의 기본값은 $CATALINA_HOME/endorsed입니다. 이 승인된 디렉터리는 기본적으로 생성되지 않습니다.

따라서 "$CATALINA_HOME/endorsed" 디렉토리가 생성되고 명령줄에서 활성화되면 JDK와 함께 제공되는 API 구현을 재정의하는 데 사용할 수 있습니다. 그러나 JDK에는 JDBC에 대한 기본 구현이 제공되지 않습니다.

MySQL JDBC 구현을 "웹 애플리케이션 클래스 로더보다 높은" 클래스 로더(이 경우에는 "공통" 클래스 로더)에 로드하려는 경우:

Tomcat 6 클래스로더 계층 구조

...Classloader Howto에 설명된 대로 "$CATALINA_HOME/lib" 또는 "$CATALINA_BASE/lib"에 넣을 수 있습니다.

공급업체가 나쁜 관행을 권장하고 있습니까?

본인에게 메모

톰캣 5에서는클래스로더 계층 구조다음과 같았습니다:

Tomcat 5 클래스로더 계층 구조

단순화시켜 주신 하나님께 감사드립니다!

답변1

그렇습니다.

해당 권장 사항의 목적은 JAR을 서버 전체에서 사용할 수 있도록 하고 공통 디렉터리의 모든 항목보다 먼저 로드되도록 하는 것입니다. 제시된 계층 구조에 따라 무엇이 먼저 로드되는지도 결정되기 때문입니다.

관련 정보