본문 바로가기

WAS/JBoss&WildFly

[JBoss EAP 7] logmanager 관련 기동 이슈

728x90

이관 작업중에 이런 에러가 발생해서 상당히 당혹스러웠던 경우가 있어 정리해본다.

 

[I001] Control Module loading complete.
WARNING: Failed to load the specified log manager class org.jboss.logmanager.LogManager
Exception in thread "main" java.lang.NoClassDefFoundError: org.jboss.logmanager.log4j.BridgeRepositorySelector
        at org.jboss.as.server.Main.main(Main.java:73)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
        at java.lang.reflect.Method.invoke(Method.java:620)
        at org.jboss.modules.Module.run(Module.java:260)
        at org.jboss.modules.Main.main(Main.java:291)
Caused by: java.lang.ClassNotFoundException: org.jboss.logmanager.log4j.BridgeRepositorySelector
        at java.net.URLClassLoader.findClass(URLClassLoader.java:666)
        at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:773)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:746)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:336)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:727)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:395)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)

 

이게 당시의 문제와 동일한 로그는 아니지만, caused by: java.lang.ClassNotFoundException: org.jboss.logmanager

이 에러는 맞길래 일단 이걸 가지고 설명을 진행한다.

 

우선 환경 자체는 env.sh 내부에, jboss.modules.system.pkgs 로 선언되는 자바 변수가 있는데,

여기에 org.jboss.logmanager가 설정되어 있었다.

 

근데 AS-IS 장비에서는 올라가 있는데, TO-BE로 옮기려는 상황에서 기동할려니 ClassNotFoundException이 발생하는 것이다.

 

그래서 검색을 진행했고 해결법 자체는 다음과 같았다. [7.4 버전은 아래의 설정으로 조치가 완료]

[env.sh 내부에 아래의 세 줄을 추가]

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-<version>.jar"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager"

 

근데 이걸 했는데도 동작을 안한다...

근데 또 조사를 해보니 다음과 같은 내용이 있었다.

jboss eap 에 대해서 패치를 진행한 경우에는 ${JBOSS_HOME}/modules/system/layers/base/.overlays/layer-base-jboss-eap~ 경로가 있고, 이 경로에 있는 logmanager.jar 파일을 JAVA_OPTS 상에 입력해줘야 했던 것이다.

 

그래서 최종적으로는 다음과 같이 수정하였다.

[EAP 7.2 버전]

[env.sh 내부에 아래의 세 줄을 추가]

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/.overlays/layer-base-jboss-eap-7.2.9.CP/org/jboss/logmanager/main/jboss-logmanager-2.1.15.Final-redhat-00001.jar
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager"