티스토리 뷰

위 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 메시지는 모두 사라졌다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함