適用於 Microsoft Windows 的 Sun Java System Application Server Enterprise Edition 8.2 版本說明

使用 --precompilejsp=true 部署應用程式會鎖定 JAR 檔案 (ID 5004315)

在 Windows 平台上,如果您在 Windows 上部署應用程式時請求對 JSP 進行預先編譯,則以後無法按預期嘗試取消部署或重新部署該應用程式 (或任何具有相同模組 ID 的應用程式)。因為 JSP 預先編譯會開啟應用程式中的 JAR 檔案但不會將其關閉,並且 Windows 會防止取消部署刪除這些檔案或防止重新部署將其覆寫。

請注意,取消部署會延續至某個點,在該點上該應用程式會在邏輯上從 Application Server 中移除。還請注意,asadmin 公用程式不會傳回任何錯誤訊息,但應用程式的目錄和鎖定的 jar 檔案會保留在伺服器上。伺服器的記錄檔將包含描述無法刪除檔案和應用程式目錄的訊息。

取消部署失敗後會嘗試重新部署應用程式,因為伺服器會嘗試移除現有檔案與目錄,此嘗試仍失敗。如果您嘗試部署任何使用與初始部署的應用程式具有相同模組 ID 的應用程式,便會出現這種情況,因為伺服器是使用模組 ID 選擇目錄名稱來存放應用程式檔案。

基於同樣原因,不先取消部署即嘗試重新部署應用程式將會失敗。

診斷

如果您嘗試重新部署應用程式,或在取消部署之後再部署該應用程式,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 檔案,因此重新啟動後才能成功取消部署或重新部署。