[E] Processing @HanlesTypes of ServletContainerInitializers failed for the class [module-info.class] but the deployment process will continue.
JEUS 8.0 환경에서 Application Deploy시 java.lang.IllegalArgumentException 에러가 발생한다.
Deploy시 발생하는 에러이지만 Deploy는 정상적으로 수행이 되는 점이 이상하지만 웹 접속은 안돼서 .. 해결해야 한다.
[2023.03.31 09:51:20][2] [Jenkins-41] [WEB-3911] Processing @HanlesTypes of ServletContainerInitializers failed for the class [META-INF/versions/9/jakarta/xml/bind/ModuleUtil.class] but the deployment process will continue.
<<__Exception__>>
java.lang.IllegalArgumentException
at jeus.thirdparty.asm504.ClassReader.<init>(ClassReader.java:170)
at jeus.thirdparty.asm504.ClassReader.<init>(ClassReader.java:153)
at jeus.thirdparty.asm504.ClassReader.<init>(ClassReader.java:424)
at jeus.servlet.listener.HandlesTypesNavigator.getMatchedHandlesTypes(HandlesTypesNavigator.java:119)
at jeus.servlet.listener.HandlesTypesNavigator.navigateClass(HandlesTypesNavigator.java:73)
at jeus.servlet.engine.Context.searchAnnotationsForHandlesTypes(Context.java:1672)
at jeus.servlet.engine.Context.init0(Context.java:871)
at jeus.servlet.engine.Context.init(Context.java:599)
at jeus.servlet.engine.VirtualHost.deployContext(VirtualHost.java:110)
at jeus.servlet.common.WebContainerManager.createAndAddContext(WebContainerManager.java:779)
at jeus.servlet.common.WebContainerManager.deployContext(WebContainerManager.java:754)
at jeus.servlet.deployment.WebModuleDeployer.distribute1(WebModuleDeployer.java:164)
at jeus.deploy.deployer.AbstractDeployer.distribute(AbstractDeployer.java:239)
at jeus.deploy.deployer.DeploymentAdministrator.distribute(DeploymentAdministrator.java:245)
at jeus.deploy.deployer.DeploymentAdministrator.distribute(DeploymentAdministrator.java:178)
at jeus.server.service.internal.ServerDeploymentService.distribute(ServerDeploymentService.java:166)
at jeus.server.service.internal.ServerDeploymentService.distribute(ServerDeploymentService.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at jeus.management.JeusMBeanServerAccessController.invoke(JeusMBeanServerAccessController.java:576)
at javax.management.remote.generic.ServerIntermediary.handleRequest(ServerIntermediary.java:270)
at javax.management.remote.generic.ServerIntermediary$PrivilegedRequestJob.run(ServerIntermediary.java:941)
at java.security.AccessController.doPrivileged(Native Method)
at javax.management.remote.generic.ServerIntermediary$RequestHandler.handleMBSReqMessage(ServerIntermediary.java:717)
at javax.management.remote.generic.ServerIntermediary$RequestHandler.execute(ServerIntermediary.java:619)
at jeus.management.remote.generic.ServerSynchroMessageNonblockingConnectionImpl.readMessage(ServerSynchroMessageNonblockingConnectionImpl.java:172)
at jeus.management.remote.jeusmp.UnifiedTransportConnection$1.run(UnifiedTransportConnection.java:289)
at jeus.util.pool.ManagedThreadPoolImpl$WorkWrapper.run(ManagedThreadPoolImpl.java:279)
at jeus.util.pool.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:1299)
at jeus.util.pool.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:1343)
at java.lang.Thread.run(Thread.java:748)
<<__!Exception__>>
[2023.03.31 09:51:20][2] [Jenkins-41] [WEB-3911] Processing @HanlesTypes of ServletContainerInitializers failed for the class [module-info.class] but the deployment process will continue.
<<__Exception__>>
java.lang.IllegalArgumentException
at jeus.thirdparty.asm504.ClassReader.<init>(ClassReader.java:170)
at jeus.thirdparty.asm504.ClassReader.<init>(ClassReader.java:153)
at jeus.thirdparty.asm504.ClassReader.<init>(ClassReader.java:424)
at jeus.servlet.listener.HandlesTypesNavigator.getMatchedHandlesTypes(HandlesTypesNavigator.java:119)
at jeus.servlet.listener.HandlesTypesNavigator.navigateClass(HandlesTypesNavigator.java:73)
at jeus.servlet.engine.Context.searchAnnotationsForHandlesTypes(Context.java:1672)
at jeus.servlet.engine.Context.init0(Context.java:871)
at jeus.servlet.engine.Context.init(Context.java:599)
at jeus.servlet.engine.VirtualHost.deployContext(VirtualHost.java:110)
at jeus.servlet.common.WebContainerManager.createAndAddContext(WebContainerManager.java:779)
at jeus.servlet.common.WebContainerManager.deployContext(WebContainerManager.java:754)
at jeus.servlet.deployment.WebModuleDeployer.distribute1(WebModuleDeployer.java:164)
at jeus.deploy.deployer.AbstractDeployer.distribute(AbstractDeployer.java:239)
at jeus.deploy.deployer.DeploymentAdministrator.distribute(DeploymentAdministrator.java:245)
at jeus.deploy.deployer.DeploymentAdministrator.distribute(DeploymentAdministrator.java:178)
at jeus.server.service.internal.ServerDeploymentService.distribute(ServerDeploymentService.java:166)
at jeus.server.service.internal.ServerDeploymentService.distribute(ServerDeploymentService.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at jeus.management.JeusMBeanServerAccessController.invoke(JeusMBeanServerAccessController.java:576)
at javax.management.remote.generic.ServerIntermediary.handleRequest(ServerIntermediary.java:270)
at javax.management.remote.generic.ServerIntermediary$PrivilegedRequestJob.run(ServerIntermediary.java:941)
at java.security.AccessController.doPrivileged(Native Method)
at javax.management.remote.generic.ServerIntermediary$RequestHandler.handleMBSReqMessage(ServerIntermediary.java:717)
at javax.management.remote.generic.ServerIntermediary$RequestHandler.execute(ServerIntermediary.java:619)
at jeus.management.remote.generic.ServerSynchroMessageNonblockingConnectionImpl.readMessage(ServerSynchroMessageNonblockingConnectionImpl.java:172)
at jeus.management.remote.jeusmp.UnifiedTransportConnection$1.run(UnifiedTransportConnection.java:289)
at jeus.util.pool.ManagedThreadPoolImpl$WorkWrapper.run(ManagedThreadPoolImpl.java:279)
at jeus.util.pool.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:1299)
at jeus.util.pool.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:1343)
at java.lang.Thread.run(Thread.java:748)
<<__!Exception__>>
IllegalArgumentException (런타임 에러)
IllegalArgumentException은 적절하지 못한 인자가 메소드에 넘어갔을 때 발생하는 오류로 메소드에 전달되는 파라미터가 잘 넘어 갔는지, 어떤 값이 들어갔는지 확인할 필요가 있다. 양수를 넣어야하는데 음수를 넣었다거나? 타입이나 길이가 일치하지 않는다거나? 하는 문제에서 발생해서 보통 로그만 읽으면 해결이 되는데 .. war 파일 받아와서 배포하는 중에 발생한 에러라 짐작도 안감.
module-info.class 클래스에 대해 서블릿 컨테이너 Initialize를 실패했다는데, 조금 찾아보니 JEUS가 아닌 Tomcat 등의 WAS 환경에서도 발생할 수 있는 에러인 것 같다.
해결 방법
WAS와 APP의 JDK 버전이 달라서 발생하는 문제로, JDK 버전을 맞춰주면 해결됨
- JEUS : openjdk version "1.8.0_362"
- Jenkins : java.specification.version=[1.8], java.runtime.version=[1.8.0_261-b12], vendor=[Oracle Corporation]
인줄 알았는데 .. Deploy or 서버 기동시 에러가 고쳐지지 않아서 배포하려는 war 파일 자체에 문제가 있다고 판단, 기존 서버(Jenkins가 이미 Deploy되어 잘 사용중인 서버)의 war 파일을 가져와서 Deploy한 뒤 기동해보기로 함.
두 war 파일을 열어보니 형광펜으로 표시한 파일들이 기존 war 파일에는 존재하지 않았고, 파일을 직접 열어서 어떤 역할인지?는 확인하지 않았지만 war 파일을 변경하여 다시 Deploy 했을 때 결과적으로.... 정상 배포가 됐다. 기동도 됨.
그런데 Jenkins 서버에 http 접속을 하려고 하니 연결이 되지 않음 (???)
문제를 찾기 위해 여러 가설(이라기보다는 사실 확인이지만)을 세웠다.
- Java(jdk) 버전 변경 이후 로그에 출력되는 jdk 버전도 정상적으로 변경되어 das-ms jdk 버전 일치함
- war 파일 변경 후 에러 로그가 출력되지 않음 → war 파일에 문제가 있던 건 맞음
- 이전에는 Jenkins 접속이 되는 것까지 확인했는데, 특정 시점 이후로 접속이 되지 않는다? → Network / ssh 연결 안되는 오류 해결한 이후로 Jenkins, Promanager 등 특정 포트를 사용하는 MS로의 접속이 불가해짐.
추론을 통해 Network, ssh 오류 해결 이후 무언가 설정이 변경되어 포트가 막힌 것이라고 생각했고 포트 리스트를 확인했다.
LISTEN이면 잘 열려있다는 소리인데 .. 왜 안될까하고 혹시나 방화벽을 확인해보니
방화벽이 왜 켜져있지 .... ^ 심지어 허용된 포트 리스트에 das/ssh 포트밖에 없는 걸 확인하고 갑자기 현타가 옴..
이전에는 NAT으로 연결했다고 생각했으나 사실은 Bridge 느낌으로 네트워크가 연결되어 있어서 그런가 방화벽 관계없이 14040 포트도 연결이 가능했었는데 Network, ssh 설정 변경 이후에는 확실한 NAT 방식이어서 그런지 막혔나보다.
한숨 푹푹 쉬면서 켜줬음
추가한 포트 확인해주고 ..
저 아저씨 얼굴이 너무 보고싶었는데 이렇게 보니까 좀 허무한 것 같기도 하고 하 아무튼 반갑습니다
요약하면,
1. Java(jdk) 버전 확인 (배포될 서버와 Deploy하고자하는 Application이 컴파일 된 jdk의 버전이 일치해야 함)
2. war 파일 이상 없는지 확인 (정상 기동됐던 war 파일을 사용하는 것이 가장 바람직함)
3. 접속할 http 포트가 방화벽 설정에서 허용되어 있는지 확인 (Ubuntu는 ufw 이용)