문제

IPlanet의 Java Application Server를 실행합니다. commons-logging-1.0.4.jar.

내 응용 프로그램 중 하나가 호출 할 때까지 괜찮습니다 AuthSSLProtocolSocketFactory 이것은 또 다른 Apache 라이브러리입니다 commons-logging.

JVM ClassPath에 항아리를 넣고이 오류를 얻습니다.

Invalid class loader hierarchy. You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed. (Caused by org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy....

그것은 것 같습니다 commons-logger 다른 클래스 로더에 두 가지 인스턴스가로드되는 것을 좋아하지 않습니다. Application Server에 처음으로로드하는 자체 클래스 로더가 있다고 가정합니다 (언급하는 AppServer 구성을 찾을 수는 없지만 응용 프로그램이로드 할 때 두 번째로로드 할 때는 예외가 발생합니다.

웹 서버를 변경할 수 없으며 Apache 라이브러리를 변경할 수 없습니다. 제안?

도움이 되었습니까?

해결책

ClassPath에 커먼즈를 기록하고 있습니까? 당신은 JVM ClassPath를 말했습니다. 그래서 나는 당신이 iPlanet을 시작할 때 명령 줄에 그것을 지정한다고 가정합니다. J2EE 앱에서 JARS를로드하는 것이 권장되는 방법이 아닙니다.

가장 쉬운 것은 Apache Library가 iPlanet과 함께 제공되는 Commons Logging Jar를 사용하도록하는 것입니다. Commons-logging.jar를 웹 -inf/lib dir 또는 classpath 설정에 넣지 말고 iPlanet 하나를 자동으로 선택해야합니다.

다른 팁

보세요 SLF4J.

또한, http://www.qos.ch/logging/classloader.jsp 도움이 될 것입니다.

IPLANET에 익숙하지는 않지만 WebSphere에서는 응용 프로그램 클래스로드 정책을 parent_last로 설정할 수 있습니다. 그런 다음 부모를보기 전에 응용 프로그램 클래스 로더의 모든 것을로드합니다. 비슷한 설정이 있다고 가정하면 이런 종류의 문제를 해결해야합니다.

이것은 자신의 응용 프로그램에 모든 종속성을 제공해야한다는 것을 의미합니다 (어쨌든 모범 사례).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top