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

第 3 章 已知问题和限制

本章介绍有关 Sun Java System Application Server Platform Edition 8.2 产品的已知问题和相应的解决方法。如果汇总说明未指明特定平台,则所有平台都可能出现此问题。本部分信息按以下内容进行组织:

管理

如果不存在 domain1,则 package-appclient 脚本将不起作用。(ID 6171458)

默认情况下,在 $INSTALL/lib/package-appclient.xml 中有一个用于 domain1(由 asenv.conf 来指向)的 AS_ACC_CONFIG 变量的硬编码值。如果删除 domain1 并创建新域,将不会使用新域名更新 AS_ACC_CONFIG 变量,从而导致 package-appclient 脚本失败。

解决方法

执行以下操作之一:

无法恢复具有其他名称的备份域。(ID 6196993)

无法使用 backup-domainrestore-domain 命令对安装的同一 Application Server 上的域进行镜像,这是由于使用不同于原始名称的其他名称不能恢复域,即使 asadmin restore-domain 命令提供了重命名域的选项。重命名备份域似乎已成功,但尝试启动重命名的域时却会失败,原因是域配置中的条目并没有更改,并且 startservstopserv 仍然使用原始域名来设置路径。

解决方法

用于 restore-domain 的域名必须与用于原始 backup-domain 命令的域名相同。Application Server 8.2 中的 backup-domainrestore-domain 命令仅用于在同一台计算机上备份和恢复同一个域。

不支持启动带有附加 JMX 代理的 Application Server。(ID 6200011)

可以在 Application Server 上配置 J2SE 1.4.x, 5.0 或更高版本。J2SE 5.0 平台的完整功能是可以启动 JMX 代理。在服务器启动时,如果您明确设置了系统属性,此功能将被激活。

示例值包括:

name="com.sun.management.jmxremote" value="true"
name="com.sun.management.jmxremote.port" value="9999"
name="com.sun.management.jmxremote.authenticate" value="false"
name="com.sun.management.jmxremote.ssl" value="false"

在配置了 JMX 属性并启动服务器之后,将在 Application Server VM 中启动新的 jmx-connector 服务器。此过程的副作用是会对管理功能造成不利影响,并且 Application Server 管理 GUI 和 CLI 可能会产生异常结果。出现此问题的原因在于内置 jmx-connector 服务器与新的 jmx-connector 服务器之间存在一些冲突。

解决方法

如果使用 jconsole(或任何其他 JMX 兼容客户机),请考虑重新使用标准的 JMX Connector Server,它在启动 Application Server 时启动。

当服务器启动时,server.log 中将显示类似于以下所示的内容。您可以连接到其中指定的 JMXServiceURL,并在成功提供证书后执行相同的管理/配置操作,例如:

[#|2004-11-24T17:49:08.203-0800|INFO|sun-appserver-ee8.1|javax.enterprise.
system.tools.admin|_ThreadID=10;|ADM1501: Here is the JMXServiceURL for the 
JMXConnectorServer: [service:jmx:rmi:///jndi/rmi://hostname:8686/management/
rmi-jmx-connector]. This is where the remote administrative clients should 
connect using the JSR 160 JMX Connectors.|#]

有关更多信息,请参阅《Sun Java System Application Server 8.2 Administration Guide》。

如果某个 Web 模块是任一虚拟服务器的默认 Web 模块,则无法对其进行重新部署或取消其部署。(ID 6204799)

如果将 Web 模块指定为虚拟服务器的默认 Web 模块,并试图对其进行重新部署或取消其部署,则将会收到以下错误消息:

Trying to undeploy application from domain failed; Virtual Servers [server] 
have <WEB-MODULE-NAME\> as default web module. Please remove the default web
module references first. ; requested operation cannot be completed Virtual 
Servers [server] have <WEB-MODULE-NAME\> as default web module. Please
remove the default web module references first.

此时,domain.xml 处于错误状态,管理控制台可能会无法显示已部署的 Web 应用程序表。即使停止并再次启动域,仍将出现这种情况。

解决方法

更改默认 Web 模块。

Procedure更改默认 Web 模块

步骤
  1. 使用管理控制台,转至虚拟服务器页面,将默认 Web 模块更改为空或指定其他 Web 模块。

  2. 使用 CLI,通过将 domain 指定为目标来取消 Web 模块的部署。


    # asadmin undeploy --target domain <WEB-MODULE-NAME\>

    现在,管理控制台应该可以正常工作了,如果需要,可以再次部署 Web 模块。

通过 Application Server GUI 中的 AMX API 将 WAR 和 JAR 部署到 PE 服务器后,出现 FrameworkError 异常。(ID 6201462)

如果使用 AMX API 在 PE 上部署了某个应用程序但未对其进行引用,则 Application Server GUI 在显示该应用程序时将抛出错误。AMX 要求显式引用应用程序。例如,部署应用程序时,需要显式创建 DeployedItemRefConfig。如果为了简化部署过程而假定在 PE 中进行了引用,则将导致 Application Server GUI 出现问题。

解决方法

创建资源或应用程序后,始终创建对资源或应用程序的引用。

配置中的 Java 主目录设置不起作用。(ID 6240672)

Application Server 域/服务器未使用由相关配置的 java-config 元素的 java-home 属性指向的 JDK。

解决方法

对于安装的给定服务器,appserver-installation-dir/config/asenv.conf 文件确定了 Application Server 进程针对所有域使用的 JDK 。该文件中的属性 AS_JAVA 确定了所使用的 JDK,此属性是在安装时设置的。如果安装完成后,Application Server 进程使用的是其他 JDK,则可以将该值改为指向所需的 JDK。请注意,安装的此服务器中的所有域均会受此更改影响。


注 –

不会检查对 asenv.conf 文件的手动更改的有效性,因此更改时应谨慎行事。修改 AS_JAVA 的值时,请检查产品文档以了解最低的 JDK 版本要求。


Selector.select() 抛出 IOException。Application Server 启动失败。(ID 6322825)

在当前 JDK 代码中,/dev/poll 选定器会将包含 8192pollfd 条目的数组分配给该选定器使用。这将超出 nofiles ulimit,从而导致分配失败,并显示错误“参数无效”。selector.select() 的中断导致在启动期间连接至 MQ 的 Application Server 套接字服务失败,并抛出 IOException

解决方法

放宽对 pollfd 文件描述符的限制。有两种方法可完成此操作:

  1. 以 root 用户身份在 shell 上执行 ulimit -n 8193

  2. 将文件描述符数目的严格限制增加为 8193 或更高:

    1. 使用 ulimit -n -H 检查严格限制。

    2. 如果小于 8193,请编辑 /etc/system,以添加 set rlim_fd_max=8193 命令。

    3. 重新引导计算机。

create-domain 主密码具有特殊字符时,域无法启动。(ID 6345947)

域的主密码包含百分比 (%) 字符时,域无法启动。

解决方法

域的主密码不应包含百分比字符 (%)。创建新域或更改现有域的主密码时亦如此。

AS 8.2 启动时无法正确处理特定的 Java System 属性。(ID 6372759)

将以下内容添加到 JVM 代理设置会导致服务器无法启动:


<jvm—options>-Dhttp.proxyHost=webcache.east.sun.com</jvm—options>
<jvm—options> -Dhttp.proxyPort=8080</jvm—options>
<jvm—options>-Dhttp.nonProxyHosts="mssp.ctu.gov|*.ctu.gov|localhost"
</jvm—options>

插入 * 字符会导致发生“找不到类 Def”错误(线程 main java.lang.NoClassDefFoundError: com/sun/enterprise/security/store/IdentityManager 中的异常)。插入 | 字符会导致启动脚本等待服务器启动超时。

此功能对于支持驻留在防火墙后且需要访问外部和内部服务器的 Application Server 部署(和门户部署)十分重要。Portal Server URL Scraper 便是一个例子。要允许 URL Scraper 从外部源获取内容,这些设置是必需的。

解决方法

编辑 install-dir/config/asenv.conf 文件,将行 AS_NATIVE_LAUNCHER="true" 更改为 AS_NATIVE_LAUNCHER="false"

应用程序客户机

本节介绍已知的应用程序客户机问题和相应的解决方法。

封装在应用程序客户机归档文件中的库 JAR 覆写了 MANIFEST 文件。(ID 6193556)

如果在您的客户机 JAR 中具有顶层 JAR 文件(在此情况下,为 reporter.jar),则当您部署客户机 JAR 时,该 JAR 的 MANIFEST 文件将覆写客户机 JAR 的 MANIFEST 文件。

解决方法

目前尚无解决方法。

不支持诸如 CGI-bin 和 SHTML 功能之类的动态内容技术。(ID 6373043)

不再支持诸如 CGI-bin 和 SHTML 之类的动态内容技术。

解决方法

使用 JSP 和 Web 服务技术代替。

数据库驱动程序

本节介绍已知的数据库驱动程序问题和相应的解决方法。

使用 DB2 类型 II 驱动程序时,空闲超时后 DB2 服务器连接数不断增加。(ID 2082209/5022904)

当从其他应用服务器接入应用程序后,在连接超时后无法正确关闭物理连接。当对同一 DB2 7.1.x 数据库服务器使用 DB2 8.1.x 版的客户机库(类型 II)驱动程序时,会出现该问题。

解决方法

SteadyPoolSizeMaxPoolSize 设置为相同的数值,另外,还要将 Idle Connection 超时值设置为 0(零)。这会禁用空闲连接的超时,而且用户将拥有一组完整的可用连接。

Deploytool

本节介绍已知的 Deploytool 问题和相应的解决方法。

Deploytool 通常不会在以下 Sun 部署描述符中创建 message-destination 元素 (ID 6197393):

解决方法

要编辑消息目标的现有 JNDI 名称,请执行以下步骤:

Procedure编辑现有 JNDI 名称

步骤
  1. 通过将“JNDI 名称”文本字段留空白并按 Enter 键来删除现有 JNDI 名称。

  2. 键入新的 JNDI 名称并按 Enter 键。

  3. 通过单击“工具”\>“描述符查看器”\>“Application Server 描述符”来查看 Sun 描述符。

  4. 通过单击“文件”\>“保存”来保存应用程序。

    如果 JNDI 名称没有保存到 Sun 描述符中,请执行以下步骤:

  5. 重新启动 deploytool。

  6. 在“消息目标”选项卡上选择消息目标或添加新消息目标。

  7. 在特定于 Sun 的“JNDI 名称”文本字段中输入消息目标的 JNDI 名称,然后按 Enter 键。

  8. 通过单击“工具”\>“描述符查看器”\>“Application Server 描述符”来查看 Sun 描述符。

  9. 通过单击“文件”\>“保存”来保存应用程序。

    除非是在 deploytool 会话期间第一次在“JNDI 名称”文本字段中输入值,否则每次需要在“消息目标”选项卡上的特定于 Sun 的“JNDI 名称”文本字段中输入值时均应重复以上步骤。

在简体中文版 Deploytool 中,"Home" 被错译为“安装目录”。(ID 6203658)

在 deploytool 中创建企业 Bean 后,浏览至此 Bean 节点的“事务”或“安全性”选项卡,可以看到 "Local Home" 和 "Remote Home" 标签分别被错译为“本地安装目录”和“远程安装目录”。

文档

本节介绍已知的文档问题和相应的解决方法。

某些记录的监视功能不适用于 Platform Edition。(ID 6202255)

有关 AMX (Application Server Management eXtenstions) 的文档部分中未指明某些监视功能在 Application Server Platform Edition 8.2 中不可用。具体来讲,在 Platform Edition 中不能监视的组件如下所示:

解决方法

无需解决方法。Platform Edition 不需要这些统计信息。

在文档中,AppservPasswordLoginModule 被引用为 AbstractPasswordLoginModule。(ID 6229682)

《Sun Java System Application Server Platform Edition 8.2 Developer’s Guide》中的第 2  章 “Securing Applications”中的《Sun Java System Application Server Platform Edition 8.2 Developer’s Guide》中的“Realm Configuration”一节错误地引用了扩展 com.sun.appserv.AbstractLoginModule,但是此类现命名为 com.sun.appserv.AppservLoginModule

解决方法

引用 com.sun.appserv.AppservLoginModule 而非 com.sun.appserv.AbstractLoginModule

在 8.2 PE 手册页中,--passwordfile 不正确地具有了简短选项 -W。(ID 6373588)

--passwordfile 不应具有简短选项。当前,在该手册页中记录的是 -W --passwordfile。这是不正确的。

解决方法

在 Application Server 8.2 Platform Edition 中,请勿尝试将 -W 选项与 --passwordfile 一起使用。计划在以后的 Application Server 发行版中添加此简短选项。

多个 AMX 接口和方法的 Javadoc 缺少或不正确(若干 ID):

安装

本节介绍已知的安装/卸载问题和相应的解决方法。

有时无法显示安装程序和卸载程序“欢迎”屏幕上的“下一步”导航按钮。(ID 4977191)

在 Solaris x86 平台上有时会报告此问题,但此问题也可能会影响 Solaris SPARC 和 Linux 平台。

此问题具体表现为:在安装程序或卸载程序的第一个屏幕上正确显示了全部文本以及“帮助”和“取消”按钮,但并未显示导航到下一个屏幕所需的“下一步”按钮。尽管未显示此按钮,但其所在区域仍处于活动状态。如果单击此区域,将正常地转至下一个屏幕。出现此问题的原因是间歇性 J2SE GUI 重画问题。

解决方法

一种解决方法是单击“帮助”按钮左侧相邻的“下一步”按钮区域。另一种解决方法是通过略微调整屏幕大小或最小化并还原安装程序窗口来强制重画此屏幕。重画之后,缺少的“下一步”按钮将显示出来。

在某些 Linux 系统上,单击“完成”按钮后安装结束过程挂起。(5009728)

已在多种 Linux 系统上发现此问题。此问题在 Java Desktop System 2 上最常见,但在 RedHat 分发软件中也发现了此问题。

在安装程序的最后一个屏幕上单击“完成”按钮后,安装程序无法启动包含产品“关于”页面或产品注册页面的浏览器窗口,同时安装程序将无限期地挂起并且不返回命令提示符。

解决方法

通过在启动安装程序的终端窗口中按 Ctrl+C 组合键来退出安装程序。执行此操作后,有时会启动包含产品“关于”页面或注册页面的浏览器窗口。如果不显示此窗口,请启动浏览器并输入以下 URL 以查看“关于”页面:

file://install_dir/docs/about.html

如果您还选择了用于注册产品的安装选项,请点击产品“关于”页面上提供的指向注册页面的链接。

在 Linux 上安装包装程序时,有时会出现 J2SE 检测和引导问题。(6172980)

启动 Linux 安装程序的 setup 可执行文件有时会挂起。包装程序不是解析 J2SE 位置并启动安装向导,而是挂起并返回以下消息:

Chcking available disk space....
Checking Java(TM) 2 Runtime Environment....
Extracting Java(TM) 2 Runtime Environment....
Deleting temporary files.....

仅在某些版本的 Linux 上发现了此问题。此问题好像与环境设置有关(特别是存在 JAVA_HOME 变量时)。

解决方法

要解决此问题,请执行以下步骤:

Procedure解决 Linux 上的引导问题

步骤
  1. 通过运行 unsetunsetenv(这取决于您的 shell)来取消设置 JAVA_HOME 变量。

  2. 运行带有 -javahome 选项的 setup 来指定安装程序使用的 JAVA_HOME

生命周期管理

本节介绍已知的生命周期管理问题和相应的解决方法。

ejb-timer-service 属性 minimum-delivery-interval 设置为 9000 之后,如果尝试将 ejb-timer-service 属性 redelivery-interval-in-mills 设置为 7000,将导致 set 命令失败,并显示以下错误消息:(ID 6193449)

[echo] Doing admin task set
[exec] [Attribute(id=redelivery-interval-internal-in-millis) : Redelivery-
Interval (7,000) should be greater than or equal to Minimum-delivery-
interval-in-millis (9,000)]
[exec] CLI137 Command set failed.

解决方法

使用这些属性的默认值,如下所示:

minimum-delivery-interval(default)=7000
redelivery-interval-in-millis(default)=5000

使用其他的值将导致产生错误。

日志记录

本节介绍已知的日志记录问题和相应的解决方法。

access.failure 设置调试语句会导致 Application Server 在启动时挂起。(ID 6180095)

为 JVM 设置 java.security.debug 选项会导致服务器实例的启动冻结并死锁;例如,在 domain.xml 中进行以下设置将导致出现此问题:

<jvm-options\>-Djava.security.debug=access,failure</jvm-options\>

解决方法

目前尚无解决方法。请避免设置此标志。

样例应用程序

本节介绍与 Application Server 8.2 产品附带的样例代码相关的已知问题和相应的解决方法。

managementws 样例需要将 MANIFEST.MF 引用从 castor-0.9.3.9-xml.jar 更新为 castor-0.9.9.1.jar。(ID 6363339)

<install_dir>/samples/webservices/jaxrpc/apps/managementws 上运行检验器时,将会出现以下警告消息:


[exec] WARNING: /var/tmp/exploded20051214111425/managementws/ \
managementwsEjb_jar contains library/castor-0.9.3.9-xml.jar in Class-Path 
manifest attribute, but it is not found in ear file
[exec] Dec 14, 2005 11:14:30 AM Archive getBundledArchives
[exec] WARNING: /var/tmp/exploded20051214111425/managementws/ \
managementwsEjb_jar contains library/castor-0.9.3.9-xml.jar in Class-Path
manifest attribute, but it is not found in ear file

已在 Application Server 8.2 发行版中更新了 Castor jar,因此对旧的 castor-0.9.3.9-xml.jar 的所有引用应更改为指向新的 castor-0.9.9.1.jar。具体来讲,需要将 MANIFEST.MF 文件中的引用更改为使用 castor-0.9.9.1.jar 而不是使用旧的 castor-0.9.3.9-xml.jar

解决方法

将以下对旧的 Castor jar 的引用更改为指向新的 Castor jar:

旧的:


src/conf/MANIFEST.MF:Class-Path: library/castor-0.9.3.9-xml.jar
src/conf/MANIFEST.MF:Name: library/castor-0.9.3.9-xml.jar
managementws-ejb/src/conf/MANIFEST.MF:Class-Path: \
library/castor-0.9.3.9-xml.jar

新的:


src/conf/MANIFEST.MF:Class-Path: library/castor-0.9.9.1.jar
src/conf/MANIFEST.MF:Name: library/castor-0.9.9.1.jar
managementws-ejb/src/conf/MANIFEST.MF:Class-Path: \
library/castor-0.9.9.1.jar

然后,清除 build.xml 文件,这样就不会通过该文件在部署期间将 Castor .jar 复制到 install_dir/lib,以及在取消部署期间删除 Castor .jar。以下是新旧 build.xml 文件的不同之处。

% cvs diff build.xml Index: build.xml
===================================================================
RCS file: /m/jws/samples/samples8x/webservices/jaxrpc/apps/managementws/ \
managementws-standalone-client/ Attic/build.xml,v retrieving revision \
1.1.2.3
diff -r1.1.2.3 build.xml
80,89d79
<   <target name="remove_castor_from_classpath">
<       <delete file="${com.sun.aas.installRoot}/lib/castor-0.9.9.1.jar"/>
<   </target>
<   <target name="add_castor_to_classpath">
<       <delete file="${com.sun.aas.installRoot}/lib/castor-0.9.9.1.jar"/>
<       <copy file="../lib/castor-0.9.9.1.jar" \
            todir="${com.sun.aas.installRoot}/lib" />
<   </target>
<
<   <target name="setup" depends="add_castor_to_classpath, restart.server"/>
<  jbenoit/galapago 196 >pwd
/net/galapago.east/files/share/8.2ws/samples/samples8x/webservices/jaxrpc \
/apps/managementws/managementws-standalone-client
jbenoit/galapago 197 >cd ..
jbenoit/galapago 198 >cvs diff build.xml
Index: build.xml
===================================================================
RCS file: /m/jws/samples/samples8x/webservices/jaxrpc/apps/managementws/ \
Attic/build.xml
v retrieving revision 1.1.2.4
diff -r1.1.2.4 build.xml
28,36d27
<   <target name="setup">
<       <ant antfile="build.xml" inheritAll="true" dir="${sample.name}$ \
{standalone-client-dir-suffix}" target="setup"/>
<   </target>
<   
<   <target name="unsetup">
<       <ant antfile="build.xml" inheritAll="true" dir="${sample.name}$ \
{standalone-client-dir-suffix}" target="remove_castor_from_classpath"/>
<   </target> 
<
<
53,54c44,45
<   <target name="deploy"   depends="select_binary_common, deploy_common, 
    setup" />
<   <target name="undeploy" depends="init,  undeploy_common, unsetup"/>
---
>   <target name="deploy"   depends="select_binary_common, deploy_common" />
>   <target name="undeploy" depends="init,  undeploy_common"/>

安全性

本节介绍已知的安全性问题和相应的解决方法。

WS 安全性:应用程序客户机容器无法与 JAXRPC 客户机运行时正确集成。(ID 6325469)

应用程序客户机无法将用户名和密码传递给其他 Web 服务客户机。

解决方法

如果需要,将用户名/密码组合显式传递给客户机程序,如下所示:

((Stub)yourWSPort)._setProperty(Stub.USERNAME_PROPERTY, "yourUsername");
((Stub)yourWSPort)._setProperty(Stub.PASSWORD_PROPERTY, "yourPassword");

升级实用程序

本节介绍已知的升级实用程序问题和相应的解决方法。

从 Application Server Platform Edition 8 升级到 Application Server Platform Edition 8.2 时,不会直接升级在自定义路径(而非 install_dir/domains 目录)中创建的域。(ID 6165528)

如果运行升级实用程序并将 install_dir 标识为源安装目录,则升级进程只升级在 install_dir/domains 目录下创建的域。在其他位置创建的域不会被升级。

解决方法

启动升级进程前,将所有域目录从其原有位置复制到 install_dir/domains 目录中。

从 8.0 Platform Edition 升级到 8.2 Platform Edition 后,启动 domain1samples 域时发生端口冲突。(ID 6202188)

升级具有多个域的 8.0 Application Server 后,这些域可能无法同时启动,这是由于为 JMX 连接器配置了相同的端口号。

解决方法

更改端口值。

Procedure更改端口值

步骤
  1. 检查 install dir/domains/domain1/config/domain.xml 文件中的以下条目:


    <jmx-connector accept-all="false" address="0.0.0.0" auth-realm-name=
    "admin-realm" enabled="true" name="system" port="8686" protocol="rmi_jrmp" 
    security-enabled="false"/\>" -- and in file <as 8.1 install dir\>
    /domains/domain1/samples/config/domain.xml, notice it used the same port 
    "8686", so it failed to start domain due to port conflict.
  2. 将端口值 8686 更改为 8687,然后重新启动 domain1

在某些 Linux 系统中,单击“启动升级向导”按钮之后,执行“就地升级”的安装程序无法启动升级工具。(6207337)

此问题已在多个 Linux 系统上出现,是 Java Desktop System 2 最常见的问题,而且在 RedHat 分发软件中也发现了此问题。

在安装程序的最终屏幕上单击“启动升级工具”按钮后,安装程序无法启动升级工具以完成升级过程,并且无限期挂起,而不会返回命令提示符。

解决方法

如果使用命令行安装模式来运行就地升级,将不会遇到此问题。

Procedure使用命令行安装模式

步骤
  1. 如果您以 GUI 模式运行就地升级并且遇到此问题,请通过在启动安装程序的终端窗口中按 Ctrl+C 组合键来退出安装程序。

  2. 使用以下命令从终端窗口启动升级工具:


    install_dir/bin/asupgrade --source install_dir/domains --target install_dir 
    --adminuser adminuser--adminpassword adminpassword --masterpassword changeit

    adminuseradminpassword 的值应与要升级的安装所使用的值匹配。

  3. 在升级工具完成升级过程后,您还可以启动浏览器并输入以下 URL 来查看“关于”页面:

    file://install_dir/docs/about.html

    如果您还选择了用于注册产品的安装选项,请点击产品“关于”页面上提供的指向注册页面的链接。

升级后在“结果”面板中出现乱码 (ID 6376140)

当从多语言版本的 Application Server 8.2 升级到使用某些语言环境的更新版本时,“结果”面板可能出现乱码,并且 /opt/SUNWappserver/domains/upgrade.log 文件也可能含有乱码。

解决方法

目前尚无解决方法。此问题将在未来的 Application Server 发行版中得到修复。

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 运行时部署的服务时,则会不正常地发生故障。

解决方法

可以使用以下解决方法: