Sun Java System Application Server Platform Edition 8.2 发行说明

使用 --precompilejsp=true 部署应用程序时,会锁定该应用程序中的 JAR 文件,从而导致以后无法取消部署或重新部署。(仅限于 Windows)(ID 5004315)

如果您在 Windows 上部署应用程序时要求预编译 JSP,则以后尝试取消部署该应用程序或重新部署该应用程序(或任何具有相同模块 ID 的应用程序)的操作将不会按预期进行。出现此问题的原因是:JSP 预编译会打开应用程序中的 JAR 文件,但不能关闭这些文件,Windows 将禁止执行取消部署或重新部署操作以避免删除或覆盖它们。

请注意,取消部署在某种程度上是成功的,因为会从 Application Server 中逻辑删除应用程序。另外请注意,asadmin 实用程序不会返回任何错误消息,但 application 的目录以及锁定的 jar 文件会保留在服务器中。server 的日志文件将包含用于说明未能删除文件和 application 的目录的消息。

在取消部署后尝试重新部署应用程序的操作会失败,这是由于服务器尝试删除现有文件和目录,而这些尝试也失败了。如果您尝试部署的应用程序所使用的模块 ID 与最初部署的应用程序的模块 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\qt be deleted

解决方法

如果部署应用程序时指定了 --precompilejsps=false(默认设置),则不会出现此问题。请注意,第一次使用应用程序时会触发 JSP 编译,因此第一个请求的响应时间将会长于随后的请求的响应时间。

另外,请注意,如果您确实进行了预编译,则在取消部署或重新部署应用程序之前,应先停止并重新启动服务器。关闭服务器后将释放锁定的 JAR 文件,这样在重新启动服务器后,取消部署或重新部署便可以成功。