환경
WLS 12.2.1.4
JDK 1.8
특이사항
Web Application은 WLS 12.1.2에서 운영중.
12.2.1.4에서 동일한 애플리케이션을 올리니 발생한 현상.
<Servlet: "JAX-RS/Jersey#1" failed to preload on startup in Web application: "myAppName".
A MultiException has 1 exceptions. They are:
1. java.lang.LinkageError: ClassCastException:
attempting to cast zip:DOMAIN_HOME/servers/xxxxx/tmp/_WL_user/myAppName/h26hzd/war/WEB-INF/lib/jsr311-api-1.0.jar!/javax/ws/rs/ext/RuntimeDelegate.class to jar:file:/usr/local/app/Oracle/Middleware/Oracle_Home/oracle_common/modules/javax.ws.rs.javax.ws.rs-api.jar!/javax/ws/rs/ext/RuntimeDelegate.class
at org.jvnet.hk2.internal.Utilities.justCreate(Utilities.java:1085)
at org.jvnet.hk2.internal.ServiceLocatorImpl.create(ServiceLocatorImpl.java:978)
at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1082)
at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1074)
at org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:711)
Truncated. see log file for complete stacktrace
Caused By: java.lang.LinkageError: ClassCastException:
attempting to cast zip:DOMAIN_HOME/servers/xxxxx/tmp/_WL_user/myAppName/h26hzd/war/WEB-INF/lib/jsr311-api-1.0.jar!/javax/ws/rs/ext/RuntimeDelegate.class to jar:file:/usr/local/app/Oracle/Middleware/Oracle_Home/oracle_common/modules/javax.ws.rs.javax.ws.rs-api.jar!/javax/ws/rs/ext/RuntimeDelegate.class
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:146)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120)
at javax.ws.rs.core.MediaType.valueOf(MediaType.java:179)
at org.glassfish.jersey.media.sse.SseFeature.(SseFeature.java:62)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Truncated. see log file for complete stacktrace
>
custom application이 JERSEY 1.0을 사용중인데, 해당 버전은 WLS 12.2.1.x 에서는 더 이상 지원하지 않는 라이브러리.
애플리케이션 클래스로더가 시스템 클래스로더와 충돌되지 않는 관계로 애플리케이션은 1차 시도(막 배포된 상황)에서는
애플리케이션 상태를 active 상태로 만들어 줍니다. 하지만 애플리케이션이 여전히 ACTIVE 상태이고
인스턴스가 재기동이 된다면 애플리케이션 클래스로딩이 시스템 클래스로딩 이전에 발생하므로,
RuntimeDelegate.class 와 애플리케이션 class가 다른 버전의 jar 들을 통해서 빌드되기 때문에
ClassCastException이 발생합니다.
12.1.x 버전에서는 무리없이 동작하나, 12.2.* 버전의 WLS 에서는 해당 현상이 발견됩니다.
===솔루션===
이 문제를 해결하기 위해서는 JERSEY 버전을 1.x가 아닌 2.x를 사용하여 애플리케이션이 구현되어야 하거나,
javx.ws.rs.* 패키지가 prefer-application-packages로 걸려 있다면, 해당 설정을 제거.
javx.ws.rs.* 패키지말고, com.sun.jersey.*, com.sun.research.ws.wadl.*, com.sun.ws.rs.ext.* 들 또한
javax.ws.rs 패키지와 연관이 패키지 이므로 해당 설정들도 제거해야 할 수도 있음.
'WAS > WebLogic' 카테고리의 다른 글
| plug in parameter인 WebLogicCluster 설정 시 주의할 내용 (0) | 2025.11.20 |
|---|---|
| Admin 및 Managed Server 상태가 Fail 임에도 서비스 되는 현상 (0) | 2025.11.03 |
| weblogic Socket Timeout 관련하여 정리 (0) | 2024.07.10 |
| JDK 업그레이드 (0) | 2024.06.19 |
| 애플리케이션 배치 시, AppMerge failed to merge your application (0) | 2024.06.11 |