2017-11-15 17 views
0

타사 항아리를 사용하는 휴식 서비스를 개발했습니다. 그들의 코드를 검토해 보면 ClassLoader.getSystemResource ("log4j.properties")를 사용하여 데이터를 검색하고있는 것으로 나타났습니다. 이 코드는 null을 반환하므로 이후에는 항상 null 포인터 예외가 발생합니다. websphere 8.5.5.7에 배포하고 서버 classpath를 설정하면 동일한 코드가 제대로 작동합니다. 로컬 컴퓨터에서 Liberty를 사용하고 있기 때문에 경로를 검색하지 않습니다.Liberty Server - ClassLoader.getSystemResource는 null을 반환합니다.

server.xml에도 클래스 로더 설정을 시도했지만 사용하지 않았습니다.

<library id="config"> 
    <folder dir="/properties/dev/" includes="*.properties" scanInterval="5s"/> 
</library> 

<enterpriseApplication id="AbcEAR"location="AbcEAR.ear" name="AbcEAR"> 
    <classloader privateLibraryRef="config"/> 
</enterpriseApplication> 

답변

0

에만 JDK에서 사물과 어떤 클래스 패스에 볼 수있을 것입니다 시스템 클래스 로더를 사용합니다 ClassLoader.getSystemResource() 사용. Liberty는 전통적인 classpath를 사용하지 않고 대신 OSGi를 사용하므로 응용 프로그램 측면에서 시스템 로더는 Liberty에서 거의 사용되지 않습니다.

스레드 컨텍스트 클래스 로더의 ClassLoader.getResource()을 사용하십시오. 스레드 컨텍스트 클래스 로더는 Liberty 클래스 로더를 고려합니다.

+0

감사합니다. Andy. 앞에서 말했듯이 제 3 자 항아리를 사용하고 있으며 코드를 업데이트 할 수있는 권한이 없습니다. 클래스 경로를 찾고 속성 파일을 배치하려고했지만 여전히 null을 받았습니다. –

+0

@Ctsuser/properties/dev를 추가하기 위해 jvm.options에서 JVM 클래스 경로 구성을 추가해 보았습니까? – Alasdair