本章介绍有关 Sun Java System Application Server Platform Edition 8.2 产品的已知问题和相应的解决方法。如果汇总说明未指明特定平台,则所有平台都可能出现此问题。本部分信息按以下内容进行组织:
默认情况下,在 $INSTALL/lib/package-appclient.xml 中有一个用于 domain1(由 asenv.conf 来指向)的 AS_ACC_CONFIG 变量的硬编码值。如果删除 domain1 并创建新域,将不会使用新域名更新 AS_ACC_CONFIG 变量,从而导致 package-appclient 脚本失败。
执行以下操作之一:
保持 domain1 不变,围绕它创建其他域。
删除 domain1 并用新域名替换 $INSTALL/lib/package-appclient.xml 中 domain1 的硬编码值。如果 domain1 不存在,则每次创建新域时,都必须执行此操作。
无法使用 backup-domain 和 restore-domain 命令对安装的同一 Application Server 上的域进行镜像,这是由于使用不同于原始名称的其他名称不能恢复域,即使 asadmin restore-domain 命令提供了重命名域的选项。重命名备份域似乎已成功,但尝试启动重命名的域时却会失败,原因是域配置中的条目并没有更改,并且 startserv 和 stopserv 仍然使用原始域名来设置路径。
用于 restore-domain 的域名必须与用于原始 backup-domain 命令的域名相同。Application Server 8.2 中的 backup-domain 和 restore-domain 命令仅用于在同一台计算机上备份和恢复同一个域。
可以在 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 模块,并试图对其进行重新部署或取消其部署,则将会收到以下错误消息:
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 模块。
使用管理控制台,转至虚拟服务器页面,将默认 Web 模块更改为空或指定其他 Web 模块。
使用 CLI,通过将 domain 指定为目标来取消 Web 模块的部署。
# asadmin undeploy --target domain <WEB-MODULE-NAME\> |
现在,管理控制台应该可以正常工作了,如果需要,可以再次部署 Web 模块。
如果使用 AMX API 在 PE 上部署了某个应用程序但未对其进行引用,则 Application Server GUI 在显示该应用程序时将抛出错误。AMX 要求显式引用应用程序。例如,部署应用程序时,需要显式创建 DeployedItemRefConfig。如果为了简化部署过程而假定在 PE 中进行了引用,则将导致 Application Server GUI 出现问题。
创建资源或应用程序后,始终创建对资源或应用程序的引用。
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 版本要求。
在当前 JDK 代码中,/dev/poll 选定器会将包含 8192 个 pollfd 条目的数组分配给该选定器使用。这将超出 nofiles ulimit,从而导致分配失败,并显示错误“参数无效”。selector.select() 的中断导致在启动期间连接至 MQ 的 Application Server 套接字服务失败,并抛出 IOException。
放宽对 pollfd 文件描述符的限制。有两种方法可完成此操作:
以 root 用户身份在 shell 上执行 ulimit -n 8193。
将文件描述符数目的严格限制增加为 8193 或更高:
使用 ulimit -n -H 检查严格限制。
如果小于 8193,请编辑 /etc/system,以添加 set rlim_fd_max=8193 命令。
重新引导计算机。
域的主密码包含百分比 (%) 字符时,域无法启动。
域的主密码不应包含百分比字符 (%)。创建新域或更改现有域的主密码时亦如此。
将以下内容添加到 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 中具有顶层 JAR 文件(在此情况下,为 reporter.jar),则当您部署客户机 JAR 时,该 JAR 的 MANIFEST 文件将覆写客户机 JAR 的 MANIFEST 文件。
目前尚无解决方法。
不再支持诸如 CGI-bin 和 SHTML 之类的动态内容技术。
使用 JSP 和 Web 服务技术代替。
本节介绍已知的数据库驱动程序问题和相应的解决方法。
当从其他应用服务器接入应用程序后,在连接超时后无法正确关闭物理连接。当对同一 DB2 7.1.x 数据库服务器使用 DB2 8.1.x 版的客户机库(类型 II)驱动程序时,会出现该问题。
将 SteadyPoolSize 和 MaxPoolSize 设置为相同的数值,另外,还要将 Idle Connection 超时值设置为 0(零)。这会禁用空闲连接的超时,而且用户将拥有一组完整的可用连接。
本节介绍已知的 Deploytool 问题和相应的解决方法。
sun-application-client.xml
sun-ejb-jar.xml
sun-web.xml
被指定为“消息目标”选项卡中的“JNDI 名称”的 JMS 目标资源可能不会保存到 Sun 描述符中。指定了“目标名称”(例如,PhysicalQueue,一个用 create-jmsdest 创建的物理目标)并按 Enter 键后,“目标名称”将显示在“显示名称”下,并且客户机或 Bean 名称将显示在“生产者”列表中。在特定于 Sun 的“JNDI 名称”文本字段中键入 jms/Queue 并按 Enter 键后,在标题栏中应用程序将不会显示为“(已更改)”,并且系统将向 ~/.deploytool/logfile 中写入错误消息。在保存了应用程序并返回到该选项卡后,“JNDI 名称”字段再次为空。使用“工具”\>“描述符查看器”\>“Application Server 描述符”查看 Sun 描述符时,<jndi-name\> 元素中的 <message-destination\> 元素尚未创建。
将出现以下问题:在 deploytool 会话期间,第一次为“消息目标 JNDI 名称”输入值后,该值在 Sun 描述符中显示正确,但是 org.netbeans.modules.schema2beans.BeanProp.setElement() 抛出 IllegalArgumentException。随后对同一应用程序或其他应用程序中的“消息目标 JNDI 名称”的更改或添加将不会保存到 Sun 描述符中。
要编辑消息目标的现有 JNDI 名称,请执行以下步骤:
通过将“JNDI 名称”文本字段留空白并按 Enter 键来删除现有 JNDI 名称。
键入新的 JNDI 名称并按 Enter 键。
通过单击“工具”\>“描述符查看器”\>“Application Server 描述符”来查看 Sun 描述符。
通过单击“文件”\>“保存”来保存应用程序。
如果 JNDI 名称没有保存到 Sun 描述符中,请执行以下步骤:
重新启动 deploytool。
在“消息目标”选项卡上选择消息目标或添加新消息目标。
在特定于 Sun 的“JNDI 名称”文本字段中输入消息目标的 JNDI 名称,然后按 Enter 键。
通过单击“工具”\>“描述符查看器”\>“Application Server 描述符”来查看 Sun 描述符。
通过单击“文件”\>“保存”来保存应用程序。
除非是在 deploytool 会话期间第一次在“JNDI 名称”文本字段中输入值,否则每次需要在“消息目标”选项卡上的特定于 Sun 的“JNDI 名称”文本字段中输入值时均应重复以上步骤。
在 deploytool 中创建企业 Bean 后,浏览至此 Bean 节点的“事务”或“安全性”选项卡,可以看到 "Local Home" 和 "Remote Home" 标签分别被错译为“本地安装目录”和“远程安装目录”。
本节介绍已知的文档问题和相应的解决方法。
有关 AMX (Application Server Management eXtenstions) 的文档部分中未指明某些监视功能在 Application Server Platform Edition 8.2 中不可用。具体来讲,在 Platform Edition 中不能监视的组件如下所示:
生产 Web 容器 (Production Web Container, PWC):
PWC HTTP 服务
PWC 连接队列
PWC 线程池
PWC DNS
PWC 保持活动
PWC 文件高速缓存
PWC 虚拟服务器
PWC 请求
Web 模块
SessionSize
ContainerLatency
SessionPersistTime
CachedSessionsCurrent
PassivatedSessionsCurrent
StatefulSessionStore
CheckpointCount
CheckpointSuccessCount
CheckpointErrorCount
CheckpointedBeanSize
CheckpointTime
无需解决方法。Platform Edition 不需要这些统计信息。
《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。
--passwordfile 不应具有简短选项。当前,在该手册页中记录的是 -W --passwordfile。这是不正确的。
在 Application Server 8.2 Platform Edition 中,请勿尝试将 -W 选项与 --passwordfile 一起使用。计划在以后的 Application Server 发行版中添加此简短选项。
ConnectorConnectionPoolStats 和 AltJDBCConnectionPoolStats 中缺少用于获得 NumConnAcquired 和 NumConnReleased 统计信息的 Getter 方法。这些 Getter 方法将以 getNumConnAcquired() 和 getNumConnReleased() 的形式添加到以后的版本中。
在 EJBCacheStats 中调用以下方法时将抛出异常:getPassivationSuccesses()、getExpiredSessionsRemoved()、getPassivationErrors() 和 getPassivations()。在以后的版本中将修复此问题。
服务器启动后,可能需要几秒钟才能注册和使用所有的 AMX MBean。在以后的版本中,将可以确定完全装入 AMX MBean 的时间。
常量 XTypes.CONNNECTOR_CONNECTION_POOL_MONITOR 拼写错误 ("NNN")。在以后的版本中将纠正此问题。
本节介绍已知的安装/卸载问题和相应的解决方法。
在 Solaris x86 平台上有时会报告此问题,但此问题也可能会影响 Solaris SPARC 和 Linux 平台。
此问题具体表现为:在安装程序或卸载程序的第一个屏幕上正确显示了全部文本以及“帮助”和“取消”按钮,但并未显示导航到下一个屏幕所需的“下一步”按钮。尽管未显示此按钮,但其所在区域仍处于活动状态。如果单击此区域,将正常地转至下一个屏幕。出现此问题的原因是间歇性 J2SE GUI 重画问题。
一种解决方法是单击“帮助”按钮左侧相邻的“下一步”按钮区域。另一种解决方法是通过略微调整屏幕大小或最小化并还原安装程序窗口来强制重画此屏幕。重画之后,缺少的“下一步”按钮将显示出来。
已在多种 Linux 系统上发现此问题。此问题在 Java Desktop System 2 上最常见,但在 RedHat 分发软件中也发现了此问题。
在安装程序的最后一个屏幕上单击“完成”按钮后,安装程序无法启动包含产品“关于”页面或产品注册页面的浏览器窗口,同时安装程序将无限期地挂起并且不返回命令提示符。
通过在启动安装程序的终端窗口中按 Ctrl+C 组合键来退出安装程序。执行此操作后,有时会启动包含产品“关于”页面或注册页面的浏览器窗口。如果不显示此窗口,请启动浏览器并输入以下 URL 以查看“关于”页面:
file://install_dir/docs/about.html
如果您还选择了用于注册产品的安装选项,请点击产品“关于”页面上提供的指向注册页面的链接。
启动 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 变量时)。
要解决此问题,请执行以下步骤:
通过运行 unset 或 unsetenv(这取决于您的 shell)来取消设置 JAVA_HOME 变量。
运行带有 -javahome 选项的 setup 来指定安装程序使用的 JAVA_HOME。
本节介绍已知的生命周期管理问题和相应的解决方法。
[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 是传送相同周期计时器之间的最小时间间隔。
redelivery-interval-in-mills 是计时器服务在 ejbTimeout 失败后尝试重新传送之前等待的时间。
问题在于描述重新传送时间间隔属性与最小传送时间间隔属性之间关系的逻辑不正确,使您无法使用 GUI 或 CLI 来设置使最小传送时间间隔大于重新传送时间间隔的任何值。
必须始终将 minimum-delivery-interval-in-millis 设置为等于或大于 ejb-timer-service 属性 redelivery-interval-in-millis。在 Application Server 中有一个错误的验证检查,用于验证 redelivery-interval-in-millis 的值是否大于 minimum-delivery-interval-in-millis 的值,这是产生上述问题的原因。
使用这些属性的默认值,如下所示:
minimum-delivery-interval(default)=7000 redelivery-interval-in-millis(default)=5000
使用其他的值将导致产生错误。
本节介绍已知的日志记录问题和相应的解决方法。
为 JVM 设置 java.security.debug 选项会导致服务器实例的启动冻结并死锁;例如,在 domain.xml 中进行以下设置将导致出现此问题:
<jvm-options\>-Djava.security.debug=access,failure</jvm-options\>
目前尚无解决方法。请避免设置此标志。
本节介绍与 Application Server 8.2 产品附带的样例代码相关的已知问题和相应的解决方法。
在 <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"/>
本节介绍已知的安全性问题和相应的解决方法。
应用程序客户机无法将用户名和密码传递给其他 Web 服务客户机。
如果需要,将用户名/密码组合显式传递给客户机程序,如下所示:
((Stub)yourWSPort)._setProperty(Stub.USERNAME_PROPERTY, "yourUsername"); ((Stub)yourWSPort)._setProperty(Stub.PASSWORD_PROPERTY, "yourPassword");
本节介绍已知的升级实用程序问题和相应的解决方法。
如果运行升级实用程序并将 install_dir 标识为源安装目录,则升级进程只升级在 install_dir/domains 目录下创建的域。在其他位置创建的域不会被升级。
启动升级进程前,将所有域目录从其原有位置复制到 install_dir/domains 目录中。
升级具有多个域的 8.0 Application Server 后,这些域可能无法同时启动,这是由于为 JMX 连接器配置了相同的端口号。
更改端口值。
检查 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. |
将端口值 8686 更改为 8687,然后重新启动 domain1。
此问题已在多个 Linux 系统上出现,是 Java Desktop System 2 最常见的问题,而且在 RedHat 分发软件中也发现了此问题。
在安装程序的最终屏幕上单击“启动升级工具”按钮后,安装程序无法启动升级工具以完成升级过程,并且无限期挂起,而不会返回命令提示符。
如果使用命令行安装模式来运行就地升级,将不会遇到此问题。
如果您以 GUI 模式运行就地升级并且遇到此问题,请通过在启动安装程序的终端窗口中按 Ctrl+C 组合键来退出安装程序。
使用以下命令从终端窗口启动升级工具:
install_dir/bin/asupgrade --source install_dir/domains --target install_dir --adminuser adminuser--adminpassword adminpassword --masterpassword changeit |
adminuser 和 adminpassword 的值应与要升级的安装所使用的值匹配。
在升级工具完成升级过程后,您还可以启动浏览器并输入以下 URL 来查看“关于”页面:
file://install_dir/docs/about.html
如果您还选择了用于注册产品的安装选项,请点击产品“关于”页面上提供的指向注册页面的链接。
当从多语言版本的 Application Server 8.2 升级到使用某些语言环境的更新版本时,“结果”面板可能出现乱码,并且 /opt/SUNWappserver/domains/upgrade.log 文件也可能含有乱码。
目前尚无解决方法。此问题将在未来的 Application Server 发行版中得到修复。
本节介绍已知的 Web 容器问题和相应的解决办法。
如果您在 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 文件,这样在重新启动服务器后,取消部署或重新部署便可以成功。
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 页面但是无法对其进行编译,并且服务器日志包含错误消息“无法执行命令”和以下堆栈跟踪消息:
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。
可以通过以下两种方式之一来实现:
在全局范围内,通过将 ${S1AS_HOME}/domains/domain1/config/default-web.xml 中 JspServlet 的 fork init 参数设置为 false:
<servlet\> <servlet-name\>jsp</servlet-name\> <servlet-class\>org.apache. jasper.servlet.JspServlet</servlet-class\> .... <init-param\> <param-name\> fork</param-name\> <param-value\>false</param-value\> </init-param\> .... </servlet\>
对于每个 Web 应用程序,将 sun-web.xml 中的 fork JSP 配置属性设置为 false:
<sun-web-app\> <jsp-config\> <property name="fork" value="false" /\> </jsp-config\> </sun-web-app\>
以上任何一种设置都将阻止 ant 产生用于 javac 编译的新进程。
Application Server PE 的默认配置在多 CPU 计算机上无法表现出最佳性能。可以交替使用以使启动更快,但这又会对 Web 应用程序的性能产生负面影响。
配置 Application Server 以使用以下 JVM 选项:
-Dcom.sun.enterprise.server.ss.ASQuickStartup=false
如果将不符合 Fast Infoset 编码的 SOAP 消息发送给 JAX-RPC 服务,则服务会发生响应故障,这是正常的。但将后续的符合 Fast Infoset 编码的 SOAP 消息发送到同一服务或使用同一 JAX-RPC 运行时部署的服务时,则会不正常地发生故障。
可以使用以下解决方法:
禁用客户机上的 Fast Infoset 支持,以便仅发送 XML 编码的 SOAP 消息。
重新启动部署服务的容器,以便可以发送符合 Fast Infoset 编码的 SOAP 消息。