2012-08-14 3 views
0

WAS 6.1 Server에 응용 프로그램을 배포하려고합니다.WAS에서 응용 프로그램을 배포하는 동안 NoClassDefFoundError

그러나, 나는 아래의 오류가 점점 오전 :

${MY_JARS}\log4j-1.2.15.jar 

경우 키 '사용자 정의 속성'MY_JARS에서 :

Admin Console -> Servers -> Application Servers -> myServerName -> Java and Process Management -> Process Definition -> Java Virtual Machine -> ClassPath 

에서

java.lang.NoClassDefFoundError: org.apache.log4j.Logger 
at myPackage.myClass.<clinit>(myClass.java:40) 
at java.lang.J9VMInternals.initializeImpl(Native Method) 
at java.lang.J9VMInternals.initialize(J9VMInternals.java:194) 
at java.lang.Class.newInstanceImpl(Native Method) 
at java.lang.Class.newInstance(Class.java:1328) 
at com.ibm.ejs.container.EJSContainer.loadBeanMetaData(EJSContainer.java:1756) 
at com.ibm.ejs.container.HomeOfHomes.loadBeanMetaData(HomeOfHomes.java:1073) 
at com.ibm.ejs.container.HomeRecord.getHomeAndInitialize(HomeRecord.java:454) 
at com.ibm.ejs.container.EJSContainer.getHomeWrapperCommon(EJSContainer.java:1322) 
at com.ibm.ejs.container.EJSContainer.getHomeInstance(EJSContainer.java:1231) 
at com.ibm.ejs.container.EJSContainer.startBean(EJSContainer.java:1217) 
at com.ibm.ws.runtime.component.EJBContainerImpl.startBean(EJBContainerImpl.java:3385) 
at com.ibm.ws.runtime.component.EJBContainerImpl.startModule(EJBContainerImpl.java:2589) 
at com.ibm.ws.runtime.component.EJBContainerImpl.start(EJBContainerImpl.java:3719) 
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1304) 
at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1165) 
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:587) 
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:832) 
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:950) 
at com.ibm.ws.runtime.component.ApplicationMgrImpl$AppInitializer.run(ApplicationMgrImpl.java:2131) 
at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:342) 
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger 
at com.ibm.ws.classloader.CompoundClassLoader.findClass(CompoundClassLoader.java:579) 
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:414) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:597) 
... 22 more 

을 나는 아래와 같은 항목이 log4j jar에 대한 경로로 값을 포함합니다.

서버를 정리하고 재시작하고 다시 게시 한 다음 응용 프로그램을 여러 번 다시 배포했습니다. 그러나이 오류는 발생하지 않습니다.

내가 뭘 잘못하고 있니?

답변

2

그런 식으로 ${MY_JARS}을 사용하려면 Custom Properties이 아닌 Environment>WebSphere Variables으로 정의해야합니다.

그러나 log4j를 추가하는 방법에 대해서는주의해야합니다. 단일 항아리가 여러 응용 프로그램에서 공유되는 경우 log4j가 올바르게 작동하지 않을 수 있습니다. 우리는 log4j를 공유 라이브러리로 사용하려고 시도했지만 (아마도 당신이하려고하는 일을하는 더 좋은 방법이라고 할 수 있습니다), 결국 각 어플리케이션의 WEB-INF/lib에 배포 할 필요가있었습니다.

0

log4j.jar이 응용 프로그램의 CLASSPATH에 있는지 확인하십시오. 예를 들면 다음과 같습니다. WEB-INF \ lib 아래

+0

그러나 위에서 설명한대로 클래스 경로에 있습니다. 권리 ? – Nik

+0

@NikunjChauhan 예, log4j.jar이 애플리케이션 CLASSPATH에 있어야합니다. –

1

dbreaux는 이미 올바른 범위의 환경 변수를 만들어야한다고 지적했습니다. 사용자 정의 특성은 런타임에는 사용 가능하지만 서버 구성 레벨에는 사용할 수 없습니다.

WAS에서 어떤 라이브러리가로드되어 있는지 확인할 수 있습니다. IIRC를 사용하려면 응용 프로그램을 클릭해야합니다. 나중에 웹 모듈에서 클래스 로더를 확인할 수 있어야합니다. 클래스 로더를 열면 어떤 라이브러리가로드되었는지 알 수 있습니다.

관련 문제