Sun Java System Application Server 9.1 릴리스 노트

Windows에서 --precompilejsp=true를 사용하여 응용 프로그램을 배포하면 JAR 파일이 응용 프로그램 내에서 잠겨 이후의 배포 해제나 재배포가 실패할 수 있음(5004315)

설명

Windows에서 응용 프로그램을 배포할 때 JSP의 사전 컴파일을 요청하고 나중에 해당 응용 프로그램의 배포를 해제하거나 해당 응용 프로그램(또는 동일한 모듈 아이디를 가진 응용 프로그램)을 재배포하려고 시도하면 예상한 것처럼 작동하지 않습니다. 문제는 JSP 사전 컴파일을 수행하면 응용 프로그램의 JAR 파일을 열지만 닫지 않고 Windows에서는 배포 해제 시 그러한 파일을 삭제하지 못하거나 재배포 시 덮어쓰지 못합니다.

배포 해제는 응용 프로그램이 Application Server에서 논리적으로 제거된다는 점에서 어느 정도는 성공한 것으로 볼 수 있습니다. 또한 asadmin 유틸리티는 오류 메시지를 반환하지 않지만 응용 프로그램의 디렉토리와 잠긴 jar 파일은 서버에 남아 있습니다. 서버의 로그 파일에는 파일 및 응용 프로그램 디렉토리를 삭제하는 데 실패한 것을 설명하는 메시지가 포함됩니다.

배포 해제에 실패한 후 응용 프로그램을 재배포하려는 시도는 서버에서 기존 파일과 디렉토리를 제거하려고 하기 때문에 역시 실패하게 됩니다. 이러한 문제는 원래 배포한 응용 프로그램과 동일한 모듈 아이디를 사용하는 응용 프로그램을 배포하려고 시도하면 서버가 응용 프로그램 파일을 저장할 디렉토리 이름을 선택할 때 모듈 아이디를 사용하기 때문에 발생할 수 있습니다.

먼저 응용 프로그램의 배포를 해제하지 않고 재배포하려고 시도하는 경우도 같은 이유 때문에 실패합니다.

진단

응용 프로그램의 배포를 해제한 후 재배포하려고 시도하면 asadmin 유틸리티는 아래와 유사한 오류를 반환합니다.


An exception occurred while running the command. The exception 
message is: CLI171 Command deploy failed : Deploying application in 
domain failed; Cannot deploy. Module directory is locked and can't 
be deleted.

해결 방법

응용 프로그램을 배포할 때 --precompilejsps=false(기본 설정)를 지정한 경우에는 이 문제가 발생하지 않습니다. 응용 프로그램을 처음 사용하면 JSP 컴파일이 트리거되어 첫 번째 요청에 대한 응답 시간은 이후의 요청에 대한 응답 시간보다 더 깁니다.

사전 컴파일을 수행하면 응용 프로그램을 배포 해제 또는 재배포하기 전에 서버를 중단하고 다시 시작해야 합니다. 서버를 종료하면 잠긴 JAR 파일의 잠금이 해제되어 재시작한 후 배포 해제 또는 재배포를 성공적으로 수행할 수 있습니다.