티스토리 뷰
Java.lang.ClassCastException:org.apache.tomcat.websocket.server.WsServerContainer incompatible with org.glassfish.tyrus.server.TyrusServerContainer 처리
parankiho 2019. 8. 2. 16:21위 Exception 메시지는 Weblogic 기동시에만 발생했고, Tomcat 에 어플리케이션을 올렸을 경우는 발생하지 않았다.
Exception 이 콘솔로그에 나오기는 하지만 기능적으로 어플리케이션 사용에는 문제가 없었으며, 해당 어플리케이션이 사용한 프레임웍을 개발한 쪽에서는 Weblogic 에서만 발생하니 Weblogic 에서 처리해야 한다는 황당한 이야기만...
역시나 각설하고 원인을 찾아보자.
전체 Exception 은 다음과 같으며, 기동시에 콘솔로그에 나오며 어플리케이션 로딩이 완료된 후에 발생하는 것으로 보인다.
<2019. 8. 2 오전 6시 21분 29,798초 KST> <Error> <HTTP> <BEA-101165> <Could not load user defined filter in web.xml: w
eblogic.websocket.tyrus.TyrusServletFilter.
java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer incompatible with org.glassfish.tyrus.server.TyrusServerContainer
at weblogic.websocket.tyrus.TyrusServletFilter.init(TyrusServletFilter.java:80)
at weblogic.servlet.internal.FilterManager$FilterInitAction.run(FilterManager.java:400)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
Truncated. see log file for complete stacktrace
>
위 Exception 에 나오는 클래스들이 어디에 있는 녀석인지 확인한 결과 다음과 같았다.
- org.glassfish.tyrus.server.TyrusServerContainer.class 는 Weblogic 엔진이 가지고 있는 라이브러리로 /engn01/weblogic12/wlserver/modules/org.glassfish.tyrus.tyrus-server.jar 내에 위치한 클래스
- org.apache.tomcat.websocket.server.WsServerContainer.class 는 어플리케이션이 가지고 있는 라이브러리로 어플리케이션 디렉토리내 WEB-INF/lib 에 tomcat-embed-websocket-8.5.28.jar 내에 포함된 클래스
tomcat-embed-websocket-8.5.28.jar 는 이름만으로도 Spring Boot 의 내장 톰캣에서 사용할 것 같은 느낌이며, 내부 클래스들을 확인해 보니.. javax.websocket.* 패키지와 org.apache.tomcat.websocket.* 패키지를 가지고 있다. 이와 별개로 웹로직 엔진에도 javax.websocket.* 패키지를 가진 라이브러리인 javax.websocket.javax.websocket-api.jar 를 가지고 있다.
따라서 기동 시에 웹로직 엔진의 javax.websocket.javax.websocket-api.jar 가 아닌 어플리케이션이 가지고 있는 tomcat-embed-websocket-8.5.28.jar 가 로딩이 되면서 org.apache.tomcat.websocket.server.WsServerContainer 클래스가 먼저 올라온것으로 추측된다.
해결방법은 간단하다. 해당 tomcat-embed-websocket-8.5.28.jar 을 어플리케이션 라이브러리에서 제거한다.
어차피 웹로직에서 org.apache.tomcat.websocket.* 패키지를 사용할 일이 없기때문에 엔진에 내장된 javax.websocket.* 패키지를 이용하면 되므로 WEB-INF/lib 에서 삭제하도록 한다. 다만 로컬환경에서 사용해야 하므로 maven 의 scope 를 조절해서 로컬에서는 정상적으로 사용할 수 있게 해두어야 겠다.
해당 라이브러리 삭제이후 콘솔로그상의 Exception 메시지는 모두 사라졌다.
'개발이야기' 카테고리의 다른 글
Weblogic 평균 기동시간 계산하기 (0) | 2019.07.26 |
---|---|
PowerShell 이용해서 텍스트파일 인코딩 바꾸기 (1) | 2018.05.25 |
logback 이용해서 여러 JVM 에서 하나의 로그파일을 기록하기 (0) | 2018.04.17 |
Microsoft Bluetooth Notebook Mouse 5000 (0) | 2010.04.30 |
Windows XP 에서 GDI Handle 갯수 및 크기 늘리기 (4) | 2008.10.22 |
WinFlashGuard.exe Warm 제거하기 (0) | 2008.10.20 |
- Total
- Today
- Yesterday
- 할인채
- qaos.com
- websocket
- 이표채
- 본사
- WebLogic
- prudent
- VMware
- hp-ux
- Java
- Windows
- ActiveX
- JTest
- coding standard
- 미투데이
- 채권
- WsServerContainer
- 의왕
- CODSTA
- TyrusServerContainer
- SharedSection
- 이미지
- JavaScript
- GDIProcessHandleQuota
- Internet Explorer 7
- 웹표준
- Microsoft
- logback
- 파생
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |