2017-05-10 8 views
0

Liberty 16.0.0.4에서 실행되는 WAR (압축 해제 된 WAR) 내부의 JAR 파일로 URL을 복원합니다. 코드는 대략 다음과 같습니다Websphere Liberty : WAR 파일의 URL에 마지막으로 수정 된 타임 스탬프가 없습니다.

URL url = servletContext.getResource(somePath); 
URLConnection connection = url.openConnection(); 
long lastModified = connection.getLastModified(); 

URL은 내가 파일의 타임 스탬프를 찾고 있어요 형태

"wsjar:file:/{path_to_WAR}/My.war/WEB-INF/lib/someLIB.jar!/META-INF/resources/foo/bar.txt" 

이다, 대신, 내가 얻을 등 ETag를 캐시 컨트롤을 생성하는 데 사용되기 때문에 someLIB.jar의 타임 스탬프. 항아리의 타임 스탬프는 개발 중 일식 게시와 자동화 된 빌드에서 의미가 없으며 끊임없이 변화하고 있습니다.

이 버그가 아닙니까? 해결 방법이 있습니까?

답변

1

wsjar 프로토콜은 jar 프로토콜과 동일한 사용자가 볼 수있는 동작을 시도합니다. 유일한 차이점은 캐싱 및 Windows 파일 공유 잠금을보다 잘 제어 할 수 있다는 것입니다. jar 프로토콜은 항목이 아닌 JAR의 타임 스탬프를 반환하므로 wsjar 프로토콜도 동일하므로 버그가 아닙니다. 이론적으로는 비표준 동작에 대한 옵션을 추가하기 위해 RFE를 제출할 수 있지만 실제로 구현되는지 여부는 분명하지 않습니다.

해결 방법으로 다른 모든 파일의 타임 스탬프가 포함 된 추가 파일을 저장하도록 빌드를 조정하거나 강력한 유효성 검사가 아닌 약한 유효성 검사를 사용하도록 ETag를 변경할 수 있습니다. (다른 사람들은 wsjar URL을 구문 분석하여 JAR을 직접 열어 보라고 제안 할 수도 있지만 다른 JAR 구문에 의존하기는 매우 약합니다.)