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

Web 容器

本节介绍已知的 Web 容器问题和相应的解决办法。

使用 --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 文件,这样在重新启动服务器后,取消部署或重新部署便可以成功。

无法使用基于 Servlet 2.4 的 web.xml(包含空 <load-on-startup\> 元素)来部署 WAR。(ID 6172006)

web.xml 中可选的 load-on-startup servlet 元素表示在启动声明相关 servlet 的 Web 应用程序时,将加载及初始化此 servlet。

此元素的可选内容是一个整数,用于表示该 servlet 相对于 Web application 的其他 servlet 而被装入和初始化的顺序。只要该 servlet 在包含它的 Web 应用程序启动期间被加载和初始化,空的 <load-on-startup\> 就表示顺序无关紧要。

web.xml 的 Servlet 2.4 模式不再支持空的 <load-on-startup\>,这意味着在使用基于 Servlet 2.4 的 web.xml 时,必须指定一个整数。如果像在 <load-on-startup/\> 中一样指定空的 <load-on-startup\>,则 web.xml 将无法针对 web.xml 的 Servlet 2.4 模式进行验证,从而导致 Web 应用程序的部署失败。

向下兼容性问题。在基于 Servlet 2.3 的 web.xml 中仍可以像往常那样指定空的 <load-on-startup\>

解决方法

使用基于 Servlet 2.4 的 web.xml 时,指定 <load-on-startup\>0</load-on-startup\> 以表示 servlet 的装入顺序无关紧要。

无法编译资源受限服务器上的 JSP 页面。(ID 6184122)

已访问 JSP 页面但是无法对其进行编译,并且服务器日志包含错误消息“无法执行命令”和以下堆栈跟踪消息:

at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec
(Execute.java:655) at org.apache.tools.ant.taskdefs.Execute.launch
(Execute.java:416) at org.apache.tools.ant.taskdefs.Execute.execute
(Execute.java:427) at org.apache.tools.ant.taskdefs.compilers.
DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.
java:448) at org.apache.tools.ant.taskdefs.compilers.JavacExternal.
execute(JavacExternal.java:81) at org.apache.tools.ant.taskdefs.Javac.
compile(Javac.java:842) at org.apache.tools.ant.taskdefs.Javac.execute
(Javac.java:682) at org.apache.jasper.compiler.Compiler.generateClass
(Compiler.java:396)

解决方法

将 JSP 编译开关 fork 设置为 false

可以通过以下两种方式之一来实现:

在多 CPU 计算机上运行时性能降低。(ID 6194026)

Application Server PE 的默认配置在多 CPU 计算机上无法表现出最佳性能。可以交替使用以使启动更快,但这又会对 Web 应用程序的性能产生负面影响。

解决方法

配置 Application Server 以使用以下 JVM 选项:

-Dcom.sun.enterprise.server.ss.ASQuickStartup=false

如果收到的 Fast Infoset 文档不规则,则会禁用 Fast Infoset 对已部署的 JAX-RPC 服务的支持。(ID 6368670)

如果将不符合 Fast Infoset 编码的 SOAP 消息发送给 JAX-RPC 服务,则服务会发生响应故障,这是正常的。但将后续的符合 Fast Infoset 编码的 SOAP 消息发送到同一服务或使用同一 JAX-RPC 运行时部署的服务时,则会不正常地发生故障。

解决方法

可以使用以下解决方法: