WAS/Weblogic
[Error] weblogic java.lang.NoSuchMethodError
햄볶는뚱땡이
2011. 9. 14. 13:27
####<2011. 9. 14 오전 10시 32분 02초 KST> <Error> <HTTP> <user-PC> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1315963922648> <BEA-101020> <[weblogic.servlet.internal.WebAppServletContext@161dc26 - appName: '_auto_generated_ear_', name: 'com', context-path: '/com', spec-version: '2.5'] Servlet failed with Exception
java.lang.NoSuchMethodError:org.apache.commons.lang.exception.ExceptionUtils.getRootCauseMessage(Ljava/lang/Throwable;)Ljava/lang/String;
---------------------------------------------------------------------------------------
일반 톰캣에서는 잘 도는데.... weblogic 으로 WAS 를 변경 한 후에
웹로직에서 다음과 같은 에러가 발생했을 경우!
보통 App 안의 common.lang.jar 파일이 Duplication 나서 나는거라 생각했었는데.. 아무리 눈 씻고 찾아봐도 1개다 -_-;;;
bea 에 보면 modules 라는 폴더가 있다.
이 안에 commons.lang.jar 파일이 들어 있는데,
이 녀석과 Application Library 가 Dup 이 나서 그런거다...
자자... 그럼 이제 어떻게 해야 될까?
Solution >> App 안의 - WEB-INF 의 폴더 안에 weblogic.xml 을 살펴 보자.
(weblogic.xml 이 없다면 WEB-INF 안에 weblogic.xml 을 생성해 주도록 하자)
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
<wls:weblogic-version>10.3</wls:weblogic-version>
<wls:context-root>com</wls:context-root>
<wls:container-descriptor>
<wls:servlet-reload-check-secs>3</wls:servlet-reload-check-secs>
<wls:resource-reload-check-secs>-1</wls:resource-reload-check-secs>
<!-- 프로젝트의 lib 를 먼저 로딩하는 옵션 -->
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>
<wls:charset-params>
<wls:input-charset>
<wls:resource-path>/*</wls:resource-path>
<wls:java-charset-name>UTF-8</wls:java-charset-name>
</wls:input-charset>
</wls:charset-params>
</wls:weblogic-web-app>
<wls:weblogic-web-app xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
<wls:weblogic-version>10.3</wls:weblogic-version>
<wls:context-root>com</wls:context-root>
<wls:container-descriptor>
<wls:servlet-reload-check-secs>3</wls:servlet-reload-check-secs>
<wls:resource-reload-check-secs>-1</wls:resource-reload-check-secs>
<!-- 프로젝트의 lib 를 먼저 로딩하는 옵션 -->
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>
<wls:charset-params>
<wls:input-charset>
<wls:resource-path>/*</wls:resource-path>
<wls:java-charset-name>UTF-8</wls:java-charset-name>
</wls:input-charset>
</wls:charset-params>
</wls:weblogic-web-app>
위와 같이 <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> 옵션을 주게 되면 Application 의 Library 를 먼저 일게 된다.
이렇게 비로소 해결하였다!
유-후~