Sun Java System Application Server 9.1 Update 1 和 9.1 Update 2 发行说明

第 3 章 已知问题和限制

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

管理

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

如果 domain1 不存在,package-appclient 脚本无法运行 (6171458)

说明

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

解决方法

执行以下操作之一:

  1. 保持 domain1 不变,围绕它创建其他域。

  2. 删除 domain1 并用新域名替换 as-install/lib/package-appclient.xml 中用于 domain1 的硬编码值。

如果 domain1 不存在,则每次创建新域时,都必须执行此操作。

不支持使用其他 JMX 代理启动 Application Server (6200011)

说明

J2SE 1.4.x, 5.0 或更高版本可以在 Application Server 上进行配置。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 虚拟机中启动新的 jmx-connector 服务器。此过程的副作用是会对管理功能造成不利影响,并且 Application Server 管理控制台和命令行界面可能会产生异常结果。出现此问题的原因在于内置 jmx-connector 服务器与新的 jmx-connector 服务器之间存在一些冲突。

解决方法

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

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


[#|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 9.1 Administration Guide》

无法使用任一 Web 服务的端点 URL 创建负载平衡器配置文件(6236544、6275436)

说明

如果某个应用程序具有可导出 Web 服务 URL 的 EJB 模块,则在用该应用程序设置负载平衡器配置时,Web 服务环境中的超级用户不会包含在结果文件 loadbalancer.xml 中。

解决方法

  1. 编辑 loadbalancer.xml 文件,按如下所示添加缺少的 Web 模块:


    <web-module context-root="context-root-name"
    disable-timeout-in-minutes="30" enabled="true"/>
  2. 用作为 EJB 提供的 Web 服务环境中的超级用户名称替换 context-root-name 的值。

使用 sun-appserv-admin 重新启动 Application Server 将导致 LoginException 错误 (6288893)

解决方法

  1. 将现有的 as-install/bin/asant 脚本重命名为 asant.bak

  2. as-install/lib/install/templates/ee(适用于 SE/EE 版本)中的 asant.template 文件复制到 as-install/bin/ 目录中,并将其重命名为 asant

  3. 编辑新复制的 as-install/bin/asant 脚本,用 as-install/config 替换 %CONFIG_HOME% 标记。

  4. 如果对原始 asant.bak 文件进行了任何手动更改,请将其并入新的 asant 脚本。

Application Server 文档中未介绍 .asadmintruststore 文件 (6315957)

说明

Application Server 文档中未介绍 .asadmintruststore 文件。如果服务器管理员的目录中不包含此文件,在升级该服务器上的某些应用程序时可能会出现严重错误。

解决方法

由于在访问 JMS 代理时超时,无法启动群集实例 (6523663)

说明

Application Server 群集实例的默认 MQ 集成模式为 LOCAL。如果将 Application Server 安装在长(即 "not short")位置 (PATH) 上,当群集实例启动时,imqbrokerscv.exe 会崩溃。此问题是 imqbrokersvc 中的内存分配问题。

解决方法

必须将群集实例的 JMS 服务类型从默认的 LOCAL 更改为 REMOTE。在此配置中,所有实例都指回 DAS 代理。请遵照下面的说明,以 REMOTE 模式配置群集。


注 –

使用 REMOTE 模式时,所有实例都使用一个代理 (DAS),因此当 Application Server 群集启动时,不会创建任何代理群集。有关更多信息,请参见 http://www.glassfishwiki.org/gfwiki/attach/OnePagersOrFunctionalSpecs/as-mq-integration-gfv2.txt 这一页上的第 4.1 条,第 iii 部分中的 "Auto-clustering"。上述功能将不可用!


Procedure使用命令行

开始之前

根据您的环境修改端口和密码文件。请注意,在以下说明中,群集名称为 racluster,DAS 管理端口为 5858,DAS JMS 端口为 7676

  1. 修改群集配置,将 JMS 类型更改为 REMOTE


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    as-install/bin/password_file racluster.jms-service.type=REMOTE
  2. 创建对应于 DAS JMS 主机的 JMS 主机。


    as-install/bin/asadmin.bat create-jms-host --port 5858 --user admin --passwordfile \
    as-install/bin/password_file --target racluster --mqhost localhost --mqport 7676 \
    --mquser admin --mqpassword admin dashost
  3. 将默认的 JMS 主机设置为在上一步骤中创建的 DAS JMS 主机。


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    as-install/bin/password_file racluster.jms-service.default-jms-host=dashost

Procedure使用管理 GUI

  1. 转至“配置”-> "cluster-name-config" ->“Java 消息服务”->“JMS 主机”。

  2. 单击“新建”以创建新的 JMS 主机,将其命名为 dashost

  3. 输入对应于 DAS JMS 服务的配置设置,默认设置如下所示:

    • 主机名:localhost

    • 端口:7676

    • 管理员用户:admin

    • 密码:admin

    根据您的 DAS JMS 服务修改这些设置。

  4. 导航回“Java 消息服务”选项卡,并将 JMS 服务类型更改为 REMOTE(默认为 LOCAL)。

  5. 从 "default-jms-host" 下拉式列表中,选择 "dashost"。

  6. 保存更改,然后启动节点代理或群集。

无法在 Netscape 8.1.3、Mozilla 1.7 和 Safari 2.0.4 浏览器中显示 jmaki 图表 (6543014)

说明

当尝试使用某些不支持的浏览器显示“日志统计信息监视”页中的图表时,可能会抛出以下错误:


Error loading jmaki.widgets.jmaki.charting.line.Widget : id=form1:jmaki_chart11
Script: http://easqelx5.red.iplanet.com:4848/resources/jmaki/charting/ \
line/component.js (line:5437).
Message: area.initialize is not a function

解决方法

使用支持的浏览器。有关 Application Server 9.1 Update 1 支持的浏览器的列表,请参阅浏览器

默认端口在每个 AS 主要发行版中都有所不同 (6566481)

说明

默认管理端口已在过去三个主要 Application Server 发行版中都有所不同。具体而言,7.x、8.x 和 9.x 中的默认管理端口如下所示:

解决方法

这不是错误,但是一个需要注意的事项。默认管理端口只是一个建议端口。希望在以后的 Application Server 版本中将保留默认 4848 端口。

在 AIX 中使用自定义主密码时 create-domain 命令失败 (6628170)

说明

在 AIX 操作系统上,尝试使用自定义主密码创建域失败,同时显示以下错误:


keytool error (likely untranslated): java.lang.NullPointerException
 Enter keystore password:  New keystore password:

Procedure解决方法:(AIX) 使用自定义主密码创建域


注 –

在接下来的过程中,仅提供每个步骤所要求的选项。如果您需要命令的其他选项,请在命令中指定这些选项。有关 Application Server 命令的信息,请参见《Sun Java System Application Server 9.1 Update 1-9.1 Update 2 Reference Manual 》


  1. 创建包含以下代码行的 shell 脚本:

    #!/bin/sh
    changeKeystorePass() {
      keytool -storepasswd -keystore ${KEYSTORE} -storepass ${OLD} -new ${NEW}
    }
    changeTruststorePass() {
      keytool -storepasswd -keystore ${TRUSTSTORE} -storepass ${OLD} -new ${NEW}
    }
    changeKeyPass() {
      keytool -keypasswd -alias s1as -keystore ${KEYSTORE} -storepass ${NEW} -keypass ${OLD} -new ${NEW}
    }
    changeDomainPasswordEntry() {
      keytool -storepasswd -storetype JCEKS -keystore ${DOMAINPASSWORDS} -storepass ${OLD} -new ${NEW}
    }
    deleteMasterPasswordFile() {
      if [ -f ${DOMAIN_PATH}/master-password ] ; then
        echo Deleting ${DOMAIN_PATH}/master-password
        rm -f ${DOMAIN_PATH}/master-password
      fi
    }
    DOMAIN_PATH=$1
    OLD=$2
    NEW=$3
    if [ $# != 3 ] ; then
      echo Usage: $0 domain-path old-master-pass new-master-pass
      exit 1
    fi
    echo Processing ...
    if [ ! -f ${DOMAIN_PATH}/config/domain.xml ] ; then
      echo "Domain with folder ${DOMAIN_PATH} does not exist, create it first"
      exit 2
    else
      KEYSTORE=${DOMAIN_PATH}/config/keystore.jks
      TRUSTSTORE=${DOMAIN_PATH}/config/cacerts.jks
      DOMAINPASSWORDS=${DOMAIN_PATH}/config/domain-passwords
      changeKeystorePass
      changeTruststorePass
      changeKeyPass
      changeDomainPasswordEntry
      deleteMasterPasswordFile
    fi
  2. 创建域,同时指定默认主密码。


    aadmin create-domain {--adminport aminportno|--portbase portbase} domain-name
    Please enter the admin user name>admin-user
    Please enter the admin password>admin-user-password
    Please enter the admin password again>admin-user-password
    Please enter the master password [Enter to accept the default]:>
    Please enter the master password again [Enter to accept the default]:>

    默认主密码为 changeit

  3. 更改您刚创建的域的主密码。

    要更改主密码,请运行您在步骤 1 中创建的脚本。


    script-name domain-path old-password new-password
    
  4. 启动您在步骤 2 中创建的域。


    asadmin start-domain domain-name
    

    由于域具有自定义主密码,因此系统将提示您输入主密码。

  5. 键入新的主密码作为对提示的响应。

  6. 对于配置为支持群集的域,创建并启动节点代理。

    1. 为您在步骤 2 中创建的域创建节点代理。


      asadmin create-node-agent --port portno --user admin-user
      
    2. 启动您在步骤 a 中创建的节点代理。


      asadmin start-node-agent
      

      由于域具有自定义主密码,因此系统将提示您输入主密码。

    3. 键入新的主密码作为对提示的响应。

另请参见

以下 Application Server 手册页:

AIX:0403-027 参数列表过长 (6625591)

说明

在 AIX 操作系统上,某些与 OS 相关的操作可能失败并显示以下错误:


0403-027 The parameter list is too long

与 OS 相关的操作示例包括部署应用程序和运行应用程序客户机容器。

此问题通常是由 CLASSPATH 环境变量中的长文件路径引起的。

解决方法

使用以下解决方法之一:

Procedure(AIX) 增加命令行的最大长度

ncargs 属性决定命令行(包括环境变量)的最大长度。在 AIX 操作系统上,ncargs 属性的默认值为 4 个 4 千字节块。要确保 Application Server 命令不超过命令行的最大长度,请将该值增加到 16 个 4 千字节块。


注 –

更改 ncargs 属性的值后,无需重新引导或刷新守护进程。


  1. 确定 ncargs 属性的值。


    lsattr -EH -l sys0 | grep ncargs
    
  2. 如果 ncargs 属性的值小于 16 个 4 千字节块,请将该值增加到 16。


    chdev -l sys0 -a ncargs=16
    

Apache 和负载平衡器插件

本节介绍 Apache Web 服务器和负载平衡器插件的已知问题和相应的解决方法。

《高可用性管理指南》中所包含的将 openssl 用于 Apache 的说明不正确 (6306784)

在编译和生成 openssl 时,请使用以下命令:

cd openssl-0.9.7e

config

make

另外,对于 Apache 1.3,mod_ssl 源的目录名称会因使用的 Apache 版本而异。例如,对于 Apache 1.3.33,该名称为 mod_ssl-2.8.22-1.3.33

《高可用性管理指南》中不包含使用 Apache 2.0 证书的说明 (6307976)

要运行 Apache 安全性,就必须使用证书。有关从证书授权机构获取证书的说明,请参见 modssl 常见问题解答 中有关证书的信息。

必须以超级用户的身份启动 Apache Web 服务器 (6308021)

在 Solaris 上,如果 Application Server 由超级用户安装,则必须以超级用户的身份启动 Apache Web 服务器。必须以超级用户的身份来安装 Java Enterprise System 软件。对于 Apache 2.0,在以超级用户的身份启动后,Apache 会切换到您指定的另一用户并以该用户的身份运行。可在 /conf/httpd.conf 文件中指定该用户。要以超级用户的身份启动,在很多系统中都必须编辑 httpd.conf 文件以指定正确的组。将行:

Group #-1

替换为:

Group nobody

有关用户/组使用的信息包含在 httpd.conf 文件中。

应用程序客户机

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

封装在应用程序客户机归档文件中的库 JAR 将覆盖 MANIFEST 文件 (6193556)

说明

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

解决方法

目前尚无解决方法。

ACC 始终尝试连接到 localhost:3700 (6527987)

说明

应用程序客户机始终尝试连接到 localhost:3700。问题在于在调用客户机代码之前,需要读取多个系统属性。

解决方法

将以下各项设置为系统属性(JAVA_CMD 中的 -D)。请在应用程序客户机代码中设置它们:


org.omg.CORBA.ORBInitialHost = server-instance-host
org.omg.CORBA.ORBInitialPort = server-instance-port

无法启动域,缺少 sunpkcs11.jar (6571044)

说明

如果在 64 位 Linux 上运行,则启动域时,会出现以下异常。问题在于 jdk1.5.0_11/jre/lib/ext/ 下缺少 sunpkcs11.jar

解决方法

这是 64 位 Linux 中的已知 JDK 错误,将在 JDK 1.5.0_13 中得以修正。

ASQuickStartup 中断了 SocketChannel.keyFor(),返回 null 而不是 SelectionKey(问题跟踪器 3027)

说明

在多个选择器上注册 SocketChannel 时,执行 socketChannel.keyFor(lastRegisteredSelector) 会返回 null 而不是 SelectionKey

解决方法

此问题与 JDK 错误 (6562829) 相关,希望在 6.0 U3 中得以修正。Application Server 9.1 Update 1 中已包括解决方法,因此,在调用 keyFor API 之前打开选择器。这样可使 keyFor 继续作用,直至 JDK 错误得以修正。

捆绑的 Sun JDBC 驱动程序

本节介绍已知的捆绑的 Sun JDBC 驱动程序问题和相应的解决方法。

PreparedStatement 错误 (6170432)

描述 1

如果应用程序在一个事务中生成 3000 个以上 PreparedStatement 对象,DB2 可能会发生以下错误:

[sunm][DB2 JDBC 驱动程序] 无更多可用语句。请重新创建具有较大 dynamicSections 值的软件包。

解决方法 1

将以下属性添加到连接池定义中,以使驱动程序可以重新绑定具有较大动态段值的 DB2 软件包:

createDefaultPackage=true replacePackage=true dynamicSections=1000

有关配置连接池的详细信息,请参见《Sun Java System Application Server 9.1 Administration Guide》

描述 2

可能抛出的与上述 PrepardStatement 错误相关的另一条错误消息为:

[sunm][DB2 JDBC 驱动程序][DB2] 虚拟存储或数据库资源不可用。

解决方法 2

增大 DB2 服务器的配置参数 APPLHEAPSZ。最佳值为 4096

描述 3

隔离级别为 TRANSACTION_SERIALIZABLE。如果应用程序使用隔离级别 TRANSACTION_SERIALIZABLE 并使用上面建议的某个参数,该应用程序可能会在获取连接时挂起。

解决方法 3

要为连接设置所需的隔离级别,必须以同一隔离级别创建相应的连接池。有关说明,请参见《Sun Java System Application Server 9.1 Administration Guide》

重新引导计算机或启动 Application Server 之后,无法启动 Java DB (6515124)

说明

重新引导主机系统或 Solaris 区域或者启动 Application Server 之后,捆绑的 Java DB 数据库无法自动重新启动。这不是错误,而是任何捆绑的应用程序或第三方应用程序的预期行为。问题在于必须在 Application Server 实例之前启动 Java DB。

解决方法

重新引导主机或 Solaris 区域之后,请务必在启动 Application Server 之前启动 Java DB,例如:


/opt/SUNWappserver/appserver/bin/asadmin start-database

有关 asadmin 命令选项的更多信息,请参阅《Sun Java System Application Server 9.1 Quick Start Guide》中的“Application Server Administration Tools”

部署

在群集上,自动部署有时失败 (6610527)

说明

在配置为支持群集的域中,计时问题有时会导致自动部署失败。在不支持群集的域中未发现此问题。

解决方法

使用以下解决方法之一:

文档

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

Javadoc 不一致(各种 ID)

缺少多个 AMX 接口和方法的 Javadoc 或该 Javadoc 不正确:

捆绑的 ANT 抛出 java.lang.NoClassDefFoundError (6265624)

说明

线程 "main" 中会抛出以下异常:java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher

解决方法

建议不要对 Application Server 外的对象使用捆绑的 ANT。

全球化

管理 GUI 中的 JBI UI 未本地化 (6692458)

说明

特定于 JBI 的管理 GUI 屏幕未本地化。

解决方法

最新的 JBI 内部版本包含本地化的内容。可以从 http://download.java.net/jbi/binaries/open-esb/branches/sierra/milestone/Build080602_1/ 获取最新的 JBI 内部版本。 "jbi-core-installer.jar" 文件是用来更新 JBI 运行时位的安装程序。可以在 "view the JBI core runtime installation instructions"(查看 JBI 核心运行时安装程序说明)链接中找到完整说明。

高可用性

本节介绍已知的高可用性数据库 (HADB) 问题和相应的解决方法。

使用双网络进行 HADB 配置(无 ID)

使用两个子网上的双网络进行配置的 HADB 可以在 Solaris SPARC 上正常工作。但是,由于操作系统或网络驱动程序在某些硬件平台上的问题,已发现在 Solaris x86 和 Linux 平台上并不总是能够正确处理双网络。这就导致 HADB 出现以下问题:

HADB 数据库创建失败(无 ID)

说明

创建新数据库可能会失败并出现以下错误,说明可用的共享内存段太少:

HADB-E-21054:系统资源不可用:HADB-S-05512:用关键字 "xxxxx" 连接共享内存段失败,操作系统状态=24,操作系统错误消息:打开的文件太多。

解决方法

请确认已配置共享内存且配置能正常工作。特别是在 Solaris 8 上,请检查文件 /etc/system,然后确定变量 shmsys:shminfo_shmseg 的值至少为每个主机的节点数的六倍。

hadbm set 无法检查资源可用性(磁盘和内存空间)(5091280)

说明

使用 hadbm set 增大设备或缓冲区大小时,管理系统会在创建数据库或添加节点时检查资源可用性,但在更改设备或主内存缓冲区大小时则不会检查是否有足够的可用资源。

解决方法

在增大 devicesizebuffersize 配置属性之前,确认所有主机上都有足够的可用磁盘空间/内存空间。

不支持 packagepath 的异构路径 (5091349)

说明

不能在不同主机上的不同位置使用相同名称注册同一个软件包;例如:


hadbm registerpackage test --packagepath=/var/install1 --hosts europa11
Package successfully registered.
hadbm registerpackage test --packagepath=/var/install2 --hosts europa12
hadbm:Error 22171: A software package has already been registered with 
the package name test.

解决方法

HADB 不支持数据库群集中节点之间的异构路径。确保 HADB 服务器的安装目录 (--packagepath) 在所有参与的主机上都相同。

createdomain 可能会失败(6173886、6253132)

说明

在具有多个网络接口的主机上运行管理代理时,如果所有网络接口不是在同一子网中,则 createdomain 命令可能会失败:


hadbm:Error 22020: The management agents could not establish a 
domain, please check that the hosts can communicate with UDP multicast.

管理代理将(如果不是采用其他配置)使用 UDP 多址广播的“第一个”接口(“第一个”接口由 java.net.NetworkInterface.getNetworkInterfaces() 的结果定义)。

解决方法

最佳解决方法是告诉管理代理要使用哪个子网(在配置文件中设置 ma.server.mainternal.interfaces,例如,ma.server.mainternal.interfaces=10.11.100.0)。此外,也可以配置子网之间的路由器,以便路由多址广播数据包(管理代理使用多址广播地址 228.8.8.8)。

在重试管理代理的新配置之前,可能需要清除管理代理系统信息库。停止域中的所有代理,并删除系统信息库目录(由管理代理配置文件中的 repository.dr.path 标识)中的所有文件和目录。必须先在所有主机上执行此操作,然后才能用新配置文件重新启动代理。

启动、停止和重新配置 HADB 可能会失败或挂起(6230792、6230415)

说明

在 Solaris 10 Opteron 上,使用 hadbm 命令启动、停止或重新配置 HADB 可能会失败或挂起,并产生以下错误消息:


hadbm:Error 22009: The command issued had no progress in the last 
300 seconds.
HADB-E-21070: The operation did not complete within the time limit, 
but has not been cancelled and may complete at a later time.

如果 clu_noman_srv 进程所使用的文件 (nomandevice) 存在不一致的读/写操作,就可能出现这种情况。通过在 HADB 历史文件中查找以下消息,可以检测到此问题:


n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Child process noman3 733 
does not respond.
n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Have not heard from it in 
104.537454 sec.
n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Child process noman3 733 
did not start.

解决方法

以下解决方法未经验证,原因是此问题尚未手动再现。但是,对受影响的节点运行此命令应该能解决此问题。


hadbm restartnode --level=clear nodeno dbname

请注意,该节点的所有设备都将重新初始化。在重新初始化之前可能必须停止该节点。

管理代理会终止并产生异常“IPV6_MULTICAST_IF 失败”(6232140)

说明

在运行 Solaris 8 且装有多个 NIC 卡的主机上启动时,如果混合启用了 IPv6 卡和 IPv4 卡,管理代理可能会终止并产生异常“IPV6_MULTICAST_IF 失败”

解决方法

将环境变量 JAVA_OPTIONS 设置为 -Djava.net.preferIPv4Stack=true;例如:


export JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true"

此外,也可以使用 Solaris 9 或更高版本,这些版本不会出现此问题。

clu_trans_srv 无法中断 (6249685)

说明

在 Red Hat Enterprise Linux 3.0 的 64 位版本中有一个错误,使 clu_trans_srv 进程在执行异步 I/O 时以不可中断模式结束。这意味着 kill -9 不起作用,必须重新引导操作系统。

解决方法

使用 Red Hat Enterprise Linux 3.0 的 32 位版本。

hadbm 不支持包含大写字母的密码 (6262824)

说明

当密码存储在 hadb 中时,其中的大写字母会转换成小写字母。

解决方法

请勿使用包含大写字母的密码。

从 HADB 版本 4.4.2.5 降级到 HADB 版本 4.4.1.7 会导致 ma 失败,并产生不同的错误代码 (6265419)

说明

降级到先前的 HADB 版本时,管理代理会失败并产生不同的错误代码。

解决方法

可以降级 HADB 数据库,但如果已经对系统信息库对象进行更改,则无法降级管理代理。在降级后,必须仍然使用来自最新 HADB 版本的管理代理。

安装/删除和 symlink 保留 (6271063)

说明

对于 HADB c 软件包 (Solaris: SUNWhadbc, Linux: sun-hadb-c) <m.n.u-p> 版的安装/删除,symlink /opt/SUNWhadb/<m> 在创建后不会有任何改动。因此,可能会存在孤立的 symlink

解决方法

除非正在使用 symlink,否则请在安装前或卸载后将其删除。

全局区域和局部区域中的管理代理可能会发生冲突 (6273681)

说明

在 Solaris 10 上,在全局区域中使用 ma-initd 脚本停止管理代理会导致局部区域中的管理代理也停止。

解决方法

请勿在全局区域和局部区域中都安装管理代理。

当会话对象在 MA 上已超时并被删除时,hadbm/ma 应该提供更准确的错误消息 (6275103)

说明

有时,服务器上的资源争用问题可能会导致管理客户机断开连接。在重新连接时,可能会返回误导性的错误消息“hadbm:错误 22184:必须提供密码才能连接到管理代理”

解决方法

有时,服务器上的资源争用问题可能会导致管理客户机断开连接。在重新连接时,可能会返回误导性的错误消息“hadbm:错误 22184:必须提供密码才能连接到管理代理”

检查服务器上是否存在资源问题,采取适当的措施(例如添加更多资源),然后重试操作。

非超级用户无法管理 HADB (6275319)

说明

与 Java Enterprise System 一起安装(以超级用户的身份)仅允许超级用户管理 HADB。

解决方法

要管理 HADB,请始终以超级用户的身份登录。

管理代理不应使用特殊用途的接口 (6293912)

说明

IP 地址类似于 0.0.0.0 的特殊用途的接口不应注册为可供管理代理中的 HADB 节点使用的接口。如果用户使用主机名称而不是 IP 地址发出 hadbm create 命令,将 HADB 节点设置到这些接口上,则注册这些接口可能会导致出现此问题。此后,节点将无法通信,从而导致 create 命令挂起。

解决方法

在具有多个接口的主机上使用 hadbm create 时,始终明确使用 DDN 表示法来指定 IP 地址。

在 Windows 上重汇编失败 (6291562)

说明

在具有某些配置和负载的 Windows 平台上,操作系统中可能会出现大量的重汇编失败。已经发现 20 多个节点的配置在并行运行多个表扫描 (select *) 时有此问题。症状可能是事务频繁地异常中止,修复或恢复会持续很长时间才能完成,系统的各个部分会频繁超时。

解决方法

要修复此问题,可将 Windows 注册表变量 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 设置为高于默认值 100 的值。建议将此值增大到 0x1000 (4096)。有关更多信息,请参见 Microsoft 支持页中的文章 811003

如果浏览器具有其他路径为 / 的 cookie,无法维护会话状态 (6553415)

说明

路径为 "/" 的 Cookie 与在 "/" 以外的上下文根目录中部署的高度可用 Web 应用程序(使用内存复制作为其持久性类型)的 Cookie 发生冲突,从而使高度可用的 Web 应用程序无法维护任何 HTTP 会话状态。通常,当使用同一浏览器访问管理 GUI(部署在 "/" 中)和高度可用的 Web 应用程序时,可能会出现这种情况。

解决方法

通过其他浏览器访问部署在 "/" 中的 Web 应用程序。

LB 无法使用 IIS 6;as-install/lib 下缺少 SASL32.DLLZLIB.DLL (6572184)

说明

负载平衡器使用 Windows IIS 6 时需要 SASL32.DLLZLIB.DLL 文件。当前在 as-install/lib 下没有这些文件。

解决方法

将这两个 DLL 文件手动复制到 as-install/lib。可以从以下网址下载这些文件:


http://download.java.net/javaee5/external/OS/aslb/jars/aslb-9.1-MS4-b5.jar

其中 OS 表示所需的平台,可以是以下值之一:

全局区域中存在 DAS 创建/启动和 HA 软件包传播问题 (6573511)

说明

在全局区域中安装或卸载具有高可用性软件包的 Application Server 时,会出现两个问题:

  1. 在所有区域中都安装 HA 软件包,这可能不是所希望的。

  2. 卸载时,将从所有区域中删除 HA、MQ、JDK 软件包,这可能不是所希望的。

从局部根区域中安装或卸载时,不会出现此问题。

解决方法

从局部根区域而不是全局区域执行安装和卸载。

部署在 "/" 中的高度可用的 Web 应用程序无法恢复在内存中复制的 HTTP 会话(问题跟踪器 2972)

说明

当使用内存复制作为其持久性类型时,部署在 "/" 中的高度可用的 Web 应用程序无法维护任何 HTTP 会话。

解决方法

将使用内存复制作为其持久性类型的高度可用的 Web 应用程序部署到 "/" 以外的上下文根目录中。如果要使此类 Web 应用程序位于 "/" 中,可以将其指定为 Web 应用程序已部署到的虚拟服务器的默认 Web 模块。

AS LB 安装程序未将 /usr/lib/mps 路径放在 apachectl LD_LIBRARY_PATH 中,无法启动 Apache SSL (6591878)

说明

在 Solaris 上针对 Apache 安装 Application Server 负载平衡器期间,安装程序将更新 apachectl 脚本中的 LD_LIBRARY_PATH。但是,安装程序未正确写入 /usr/lib/mps 路径。在 Solaris 上,如果 LD_LIBRARY_PATH 中没有此路径,则 Apache 安全性实例将无法启动。

解决方法

只有 Solaris 平台存在此问题。要解决此问题,请将 /opt/SUNWappserver/appserver/lib/lbplugin/lib 添加到 LD_LIBRARY_PATH

针对实例/群集启用/禁用 LB 应该显示正确的状态 (6595113)

说明

无论 domain.xml 中保存了哪些内容,在“群集/实例”常规页上,“启用负载平衡”按钮都始终处于启用状态。

解决方法

AS9.1 EE IFR b58f/JES5 UR1。无法安装 Registry Server,因为已检测到“不完整的”HA。(6602508)

说明

(仅 Solaris)在具有 HADB 的 SPARC Solaris 10 上安装 Application Server 9.1 Update 1 之后,启动 Application Server 并尝试安装具有 Registry Server 的 JES 5 UR1 时,可能会出现以下错误:


Dependency Error:  Installation can not proceed because the version of HA
Session Store 4.4.3 detected on this host is incomplete , and a compatible
version is required by Servervice Registry Deployment Support.

解决方法

在 Solaris 计算机上,不能使用 Application Server 9.1 Update 1 IFR 从 JES 5 UR1 安装 Registry Server。必须使用 pkgadd 命令从以下 JES5 UR1 分发目录手动安装 Registry Server 软件包:


path/OS/Products/registry-svr/Packages

特定于 IE 6.0 浏览器:导出负载平衡器配置文件会抛出错误 (6516068)

说明

(仅 Internet Explorer 6)当尝试从 Internet Explorer 6 导出负载平衡器配置文件 (loadbalancer.xml) 时,浏览器会显示错误消息,表示找不到 sun-loadbalancer_1_2.dtd DTD 文件。

解决方法

要保存此文件,请使用以下解决方法:

  1. 在 Internet Explorer 中,在“负载平衡器”页上单击“导出”

    将显示“XML page cannot be displayed”消息。

  2. 单击错误框,然后从 Internet Explorer 中选择“文件”->“另存为”

  3. loadbalancer.xml 文件保存到所选目录中。

安装

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

在某些 Linux 系统上,单击“完成”按钮之后,安装关闭会挂起 (5009728)

说明

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

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

解决方法

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


file://as-install/docs-ee/about.html

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

在 Windows 上,需要在安装期间创建 imq 目录 (6199697)

说明

刚刚在 Windows 上安装 Application Server Enterprise Edition 之后,Message Queue 代理启动失败,并显示一条消息,说明目录 drive:\as\domains\domain1\imq 不存在。

请注意,如果在启动 domain1 后启动该代理,则 Application Server 将创建该目录,因此不会出现上述问题。

解决方法

  1. 在创建代理之前创建 var_home_dir_location


    $imqbrokerd -varhome var_home_dir_location
    

    例如:


    $imqbrokerd -varhome D:\as\domains\domain1\imq

在 Windows Vista 上安装 SDK 时出现虚假警告 (6533646)

说明

在 Windows Vista 上安装捆绑的 SDK 时,可能会遇到错误“Unsupported Installation Platform Detected”。但是,安装却成功而没有出现任何问题。

解决方法

这实际上并不是问题。Application Server 在 Windows Vista 上运行,此错误消息将在以后的产品版本中删除。

卸载无法正确更新 productregistry 文件;无法使用无提示模式进行安装 (6571598)

说明

如果 Application Server productregistry 文件包含共享组件配置,则 Application Server 卸载过程无法正确更新 productregistry 文件,您将无法在后续安装中使用无提示模式,除非重命名或删除 productregistry 文件。按照设计,productregistry 文件中的共享组件条目保持不变,但是会导致与后续无提示安装发生混淆。

解决方法

通过卸载日志文件报告卸载成功之后,先删除 productregistry 文件,然后再运行后续安装。要检验先前的卸载是否已成功完成,请在 as-install 中查找 appserv_uninstall.class 文件。如果卸载成功,此文件将会存在。


注 –

如果卸载失败,请勿删除 productregistry


在 Solaris 上,productregistry 文件位于 /var/sadm/install 中;在 Linux 上,位于 /var/tmp 中。

IFR。无法在稀疏局部区域中安装 AS,MQ 软件包问题。(6555578)

说明

在稀疏局部区域中安装 Application Server 时,如果未先安装 Message Queue (MQ),安装便会失败。安装程序尝试安装 MQ,随后整个安装失败。

解决方法

在稀疏局部区域中安装 Application Server 之前,必须在全局区域中手动安装 MQ。此问题有两种解决方法:

  1. 通过包含 Application Server 9.1 Update 1 IFR 安装的媒体,在全局区域中手动安装 MQ 4.1,以获得最新的 MQ 软件包。

    1. 使用与您的平台相对应的安装程序:


      mq4_1-installer-SunOS.zip
      mq4_1-installer-SunOS_X86.zip
      mq4_1-installer-Linux_X86.zip
      mq4_1-installer-WINNT.zip
    2. 解压缩位并运行安装程序。

      安装程序将位于 mq4_1-installer 目录中。

  2. 在全局区域中安装任何 IFR 安装组件。此操作将检查 GZ 中的 MQ 版本,确定是否需要将其升级到 Application Server9.1 Update 1 IFR 中捆绑的版本。均等选择并安装样例应用程序组件将 MQ 升级到 IFR 版本。

    1. 在全局区域中运行 Application Server 安装,但是仅选择样例组件。

      样例组件安装也会在所有区域中安装 MQ 和 Application Server 共享组件。

    2. 再次运行 Application Server 安装,这次是在局部稀疏区域中。

      安装应该顺利完成,不出现任何问题。

必须删除 IFR 安装 -console 提示“Do you want to upgrade from previous Application?”(6592454)

说明

使用 —console 选项(命令行模式)运行 Application Server 9.1 Update 1 IFR 安装程序时,系统会对您进行以下提示:


Do you want to upgrade from previous Application Server version?

遗憾的是,IFR 安装程序不支持此升级,因此该提示是错误的。如果您对该提示回答是“是”,则安装将正常进行,但是不会出现表明已执行完整安装而不是升级的指示。

解决方法

如果要升级 Application Server 安装,请使用升级工具。

Java EE Tutorial

使用管理控制台创建资源时,使用“目标”选项卡将服务器指定为目标。如果使用命令行或 asant 目标,则该服务器为默认目标,无需其他操作。

Java Persistence

TopLink 期望 Collection 字段/属性可复制(问题跟踪器 556)

说明

如果 java.util.Arrays.asList() API 用于将 Object[] 转换为 Collection,则 JDK 将返回不可复制的 java.util.ArrayList 的实现。这将导致以下异常:


The method invocation of the method [protected native java.lang.Object 
java.lang.Object.clone() throws java.lang.CloneNotSupportedException] on the object 
[[pkg.A id = xxx]], of class [class java.util.Arrays$ArrayList], triggered an 
exception. Internal Exception: java.lang.reflect.InvocationTargetException Target 
Invocation Exception: java.lang.CloneNotSupportedException: 
java.util.Arrays$ArrayList

将在 https://glassfish.dev.java.net/issues/show_bug.cgi?id=556 中跟踪此问题。

解决方法

使用其构造函数创建其他集合,例如:


myCollection = new ArrayList(java.util.Arrays.asList(a))

GenerationType.IDENTITY 和与 SyBase 一起使用的 DataDirect 驱动程序(问题跟踪器 2431)

说明

如果与 SyBase 一起使用 DataDirect 驱动程序,则尝试插入使用 GenerationType.IDENTITY 的实体失败。由于 DataDirect 驱动程序为每一个参数化的预处理语句创建一个存储过程,因此该尝试失败。

解决方法

domain.xml 文件中,在相应的数据源上设置属性 PrepareMethod=direct

生命周期管理

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

设置 ejb-timer-service 属性会导致 set 命令失败 (6193449)

说明

ejb-timer-service 属性 minimum-delivery-interval 设置为 9000 之后,尝试将 ejb-timer-service 属性 redelivery-interval-in-mills 设置为 7000 会导致 set 命令失败,并出现以下错误:


[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.

问题在于描述重新传送时间间隔属性与最小传送时间间隔属性之间关系的逻辑不正确,使您无法使用 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

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

当列出非 DAS 配置中的 JMS 物理目的地时,会抛出错误 (6532532)

说明

如果要尝试使用 default-config 查看 JMS 物理目的地,将会出现错误消息。

解决方法

这是预期行为。在 Application Server 9.1 Update 1 中,default-config 是配置信息的模板,因此,无法针对 default-config 执行 JMS 操作(例如 listcreate)。但是,可以针对群集或独立实例的配置执行这些 JMS 操作。

仅 Win2003:非分页池泄漏内存,破坏 tcp 栈和丰富访问测试 (6575349)

说明

(仅 Windows 2003)在 Windows 2003 系统上,当执行丰富访问功能时,会出现内存泄漏。出现此问题是因为 Win32 非分页池不断增长,最终破坏整个 TCP/IP 栈。出现故障后,TCP/IP 栈将保持可恢复状态,并且仅可通过重新引导 Windows 2003 系统对其进行恢复。

解决方法

有两种方法可以解决该问题:

日志记录

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

设置 access,failure 的调试语句会导致 Application Server 启动挂起 (6180095)

说明

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


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

解决方法

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

Message Queue

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

在某些与时间相关的情况下,JMS 重新连接无法成功完成(6173308、6189645、6198481、6199510、6208728)

说明

多种问题均可导致在与时间相关的情况下重新连接失败。

解决方法

可以通过以下方法解决这些问题:

在 Linux 上,MQ 代理无法与群集配置文件一起启动 (6524871)

说明

在 Linux 系统上,创建具有群集配置文件的域之后,可能会遇到 java.lang.OutOfMemoryError: heap space 错误,并且服务器实例可能会因为 MQ 代理未启动而无法重新启动。出现此情况之后,系统便永不会恢复。问题在于 /etc/hosts 文件配置错误;具体而言,服务器主机名称正在指向回送地址 127.0.0.1

解决方法

按照设计,MQ 代理群集无法在网络设备配置为指向回送地址的情况下启动。这不是错误。解决方法是确保 Application Server 主机的 /etc/hosts 文件不指向 127.0.0.1

Monitoring

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

某些 HTTP 服务监视统计信息未提供有用的信息,应该被忽略 (6174518)

说明

查看 HTTP 服务的某些元素的监视统计信息时,显示的某些值与当前值并不对应或始终为 0。特别是,以下 HTTP 服务统计信息并不提供适用于 Application Server 的信息,应该被忽略:

解决方法

在以后的版本中,将删除这些监视器并将其替换为更适当的信息。

从管理 UI 打开 JNDI 浏览会在 server.log 中转储大量异常 (6591734)

说明

从管理 GUI 打开 JNDI 浏览器时,会抛出许多异常。

解决方法

目前尚无解决方法。

打包

本节介绍与打包 Application Server 9.1 Update 1 产品的软件代码相关的已知问题和解决方法。

AIX: monitor command doesn't work on AIX (6655731)

说明

不能在 AIX 操作系统上运行 monitor 命令,因为 libcliutil.so 库文件未打包到 Application Server 9.1 Update 1 中。

Procedure解决方法:安装缺失的 libcliutil.so 库文件

  1. 下载 appserv-native-9.1.1-b16a.jar 文件

  2. 转至在其中下载了 appserv-native-9.1.1-b16a.jar 文件的目录。


    prompt% cd destination-dir
    
  3. 提取 appserv-native-9.1.1-b16a.jar 文件的内容。


    prompt% jar xf appserv-native-9.1.1-b16a.jar
    
  4. libcliutil.so 文件复制到 as-install/lib 目录。


    prompt% cp libcliutil.so as-install/lib
    

样例

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

文件没有明确说明需要创建 JMS 资源 (6198003)

说明

文档没有明确说明在执行 asadmin 部署指令之后,需要在运行 MQ 故障转移样例应用程序之前创建 JMS 资源。

抛出的错误如下:


/opt/SUNWappserver/domains/domain1/config/sun-acc.xml -name 
MQFailoverTestClient -textauth -user j2ee -password j2ee
Nov 18, 2004 10:50:17 PM com.sun.enterprise.naming.NamingManagerImpl 
bindObjects
SEVERE: NAM0006: JMS Destination object not found: jms/durable/TopicA
Nov 18, 2004 10:50:18 PM com.sun.enterprise.naming.NamingManagerImpl 
bindObjects
SEVERE: javax.naming.NameNotFoundException
javax.naming.NameNotFoundException

文档没有明确说明如果使用 asadmin deploy 命令进行了手动部署则必须手动创建 JMS 资源,并且应使用提供的 ant 目标来部署样例应用程序。

解决方法

asant 部署目标用于 build.xml 脚本,该脚本用于创建运行应用程序所需的 JMS 资源。

在 Linux 上,在 Web 服务/安全性样例中创建证书期间,会显示运行时错误 (6198239)

说明

在 Linux 上,部署 as-install/samples/webservices/security 样例 (basicSSl) 时未创建证书,而抛出类似如下的错误:


generate_certs: [echo] ***Exporting certificate from NSS database 
[exec] Result: 1 [echo] ***Generating Java Keystore from generated 
certificate [exec] keytool error: java.lang.Exception: Input not an 
X.509 certificate [exec] Result: 1 [echo] ***Generating Java trust 
store from generated certificate [exec] keytool error: java.lang.
Exception: Input not an X.509 certificate [exec] Result: 1
.
.
.
generate_certs: [echo] ***Exporting server certificate from NSS database to 
a PKCS12 certificate file [exec] /opt/sun/appserver/lib/pk12util: /usr/lib/
libnss3.so: version `NSS_3.9' not found (required by /opt/sun/appserver/lib/
pk12util) [exec] /opt/sun/appserver/lib/pk12util: /usr/lib/libnss3.so: 
version `NSS_3.6' not found (required by /opt/sun/appserver/lib/pk12util) 
[exec] /opt/sun/appserver/lib/pk12util: /usr/lib/libnss3.so: version 
`NSS_3.7' not found (required by /opt/sun/appserver/lib/pk12util) [exec] 
Result: 1

问题在于 NSS 库在 Linux 安装上的位置与其在 Solaris 安装上的位置不同。在 Linux 上部署时,必须确保 LD_LIBRARY_PATH 指向正确的 NSS 库。在您的环境中或在 as-install/bin/asant shell 包装程序脚本中设置 LD_LIBRARY_PATH

解决方法

执行以下操作之一:

升级之后,AS9.1 样例和 JES5 Portal 样例将争用 Derby 端口 1527 (6574563)

说明

在 Windows 上,升级到 Application Server 9.1 Update 1 之后,样例和 JES5 Portal 样例将争用 Derby 端口 1527。具体而言,Application Server 9.1 Update 1 将自动在具有 APP:APP 的端口 0.0.0.0:1527 上启动 JavaDB,但是 JES5 Portal JavaDB 要绑定到具有 portal:portalhostnameIP:1527

此错误所描述的问题已在 JES 5 错误 6472173 中出现。错误 6472173 的解决方法在《Sun Java Enterprise System 5 Installation Guide for Microsoft Windows》有所记录。

解决方法

使用以下命令启动 Derby 数据库:


JES-installation-dir\appserver\bin\asadmin start-database --dbhome JES-installation-dir\portal\data\derby

安全性

本节介绍与 Application Server 及 Web 应用程序安全性和证书相关的已知问题和相应的解决方法。

AIX:由于服务器端证书验证错误,WSS 动态加密密钥测试失败 (6627379)

说明

在 AIX 平台上,动态加密中确定响应的加密密钥失败。在对服务器端证书进行验证的过程中发生该故障。

作为对该故障的响应,将以下错误消息写入服务器的日志文件 server.log


Unable to validate certificate

Error occurred while resolving key information
com.sun.xml.wss.impl.WssSoapFaultException: Certificate validation failed

解决方法

在 Application Server 9.1 Update 1 上安装 Metro 1.1

AIX:@RunAsAccessLocalException:客户机未授权 (6627385)

说明

企业 bean 中的一个方法(其 run-as 或传播的安全标识通过使用 @RunAs 注释定义)尝试调用另一个企业 bean 中的方法。如果在 sun-ejb-jar.xml 部署描述符文件中未定义 run-as 主体,则尝试可能失败并抛出 javax.ejb.AccessLocalException异常。


javax.ejb.AccessLocalException: Client not authorized for this invocation.

解决方法

sun-ejb-jar.xml 部署描述符文件中,在 principal-name 元素中定义为其指定了 run-as 角色的主体名称。

SSL 终止不起作用 (6269102)

说明

SSL 终止不起作用;如果为 SSL 终止配置了负载平衡器(硬件),则 Application Server 会在重定向过程中将协议从 https 更改为 http

解决方法

在硬件负载平衡器与 Application Server 之间添加软件负载平衡器。

SSL 出现套接字连接泄漏 (6492477)

说明

由于 JVM 错误,在 HTTP 侦听器上将 security-enabled 设置为 true 时,某些 JDK 版本会出现泄漏问题。具体而言,产生此错误的步骤如下:

  1. 在 HTTP 侦听器上,将 security-enabled 设置为 true


    <http-listener acceptor-threads="1" address="0.0.0.0" 
    blocking-enabled="false" default-virtual-server="server" enabled="true" 
    family="inet" id=" http-listener-1" port="8080" security-enabled="true" 
    server-name="" xpowered-by="true">
  2. 对在快速查找测试结束时停止域做出注释。

  3. 运行快速查找测试。

  4. 检查套接字使用情况:


    netstat -an | grep 8080

    以下显示的是处于使用状态的内容:


    *.8080               *.*                0      0 49152      0 LISTEN
    *.8080               *.*                0      0 49152      0 BOUND

此问题在 GlassFish 站点 https://glassfish.dev.java.net/issues/show_bug.cgi?id=849 上也有记录。

解决方法

升级到最新的 JDK 版本。

升级实用程序

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

无法直接升级在 as-install/domains 目录以外的自定义路径中创建的域 (6165528)

说明

从 Application Server Enterprise Edition 8 升级到 Application Server Enterprise Edition 8.1 时,不会直接升级在自定义路径而非 as-install/domains 目录中创建的域。

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

解决方法

启动升级进程前,将所有域目录从不同位置复制到 as-install/domains 目录中。

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

说明

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

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

解决方法

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

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

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


    as-install/bin/asupgrade --source as-install/domains --target 
    as-install --adminuser adminuser --adminpassword adminpassword 
    --masterpassword changeit

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

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


    file://as-install/docs-ee/about.html

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

从 8.0 Platform Edition (PE) 升级到 8.1 Enterprise Edition (EE) UR2 期间和之后,自签名证书都不受信任 (6296105)

解决方法

将以下条目从目标 domain.xml 删除(在升级后),然后重新启动服务器:

<jvm-options>-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}
/config/keystore.jks</jvm-options>-
<jvm-options>Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}
/config/cacerts.jks</jvm-options>

升级工具将覆盖实例(群集成员)的已修改 index.html 的内容 (6386451)

说明

升级工具将覆盖所有服务器实例的任何现有的 index.html 文件。

解决方法

在运行升级工具之前,备份现有的 index.html 文件,稍后恢复这些文件。

(sbs-manual、sbs-installer)抛出一个例外,说明“服务器实例”服务器没有名为 null 的系统连接器 (6545145)

说明

从 Application Server 8.0PE 升级到 9.1 Update 1 时,会抛出错误,说明服务器没有名为 null 的系统连接器,并且出现 sbs-manual 中所示的无效用户信息。即使在更改硬编码值之后,也会出现相同的错误消息。出现这种情况是因为 8.0 中的 domain.xml 在 9.1 中已更改。

解决方法

仅在从 8.0 PE 升级到 9.1 时才会遇到此错误。解决方法是先升级到 8.1、8.2 或 9.0,然后升级到 9.1。

使用不同的内部版本组合进行升级时,会丢失不同的域 (6546130)

说明

执行就地升级时,如果源中有多个域,则即使升级过程被中止,安装程序也会调用升级工具。以 GUI 模式进行调用时,便会出现这种情况。

解决方法

  1. 以 CLI 模式进行就地安装,当安装过程结束时,在安装程序提示您选择升级工具时退出。这不会删除域目录中的任何域。应该从 bin 目录手动调用升级工具。

  2. 以 GUI 模式进行就地安装时,对域根目录中的域进行备份,以免在安装过程中丢失任何域。当安装过程结束时,在安装程序提示您调用升级工具时退出。如果域已经丢失,请将所有备份域复制到域目录。手动启动升级工具以执行升级。

Solaris:在升级工具中预先输入的主密码是 AS9.1 (而不是 AS8.2) 中的主密码 (6565825)

说明

从 AS 8.2 升级到 9.1 时,9.1 安装中不会继承 8.2 安装中的主密码。这随后会导致在下次管理登录时出现验证错误。

解决方法

Application Server 9.1 Update 1 中的默认管理密码为 changeit。从 8.2 升级之后,要在登录到 9.1 服务器时避免出现问题,请执行以下三种操作之一:

AS9.1 IFR 升级工具未将 JES5U1 MQ 存储迁移到新的 var 主目录 (6573635)

说明

升级工具无法升级数据库或任何形式数据库表,以后也不会支持此类升级。将传输资源引用配置,Application Server 应该继续使用原始数据库和表。如果要更改数据库或传输数据库表,请使用可用于使用中的数据库的工具。

解决方法

执行以下步骤以迁移 MQ 存储:


注 –

请在关闭 AS 8.2 及运行 AS9.1 升级工具之后首次启动 AS9.1 之前执行以下步骤。如果已在 IFR 安装/升级之后启动了 AS 9.1,请勿执行这些步骤,因为它们可能会破坏 MQ 消息存储的稳定性。


  1. 将整个 domain-dir/imq 子目录从 AS 8.x domains 目录复制到 AS 9.1 domains 目录。

  2. 确保目录和文件归要运行 Application Server 的用户所有。

执行上述步骤之后,便可启动 Application Server 9.1 Update 1,并且 Application Server 9.1 Update 1. domains 目录中的 MQ 存储将从其 JES5 U1 格式迁移到 MQ 4.1 格式。请注意,执行此过程或者在 AS 9.1 启动 MQ4.1 时,将保留 AS 8.2 下的原始 JES5 U1 MQ 存储,不对其进行修改。

将 JES5 (AS 8.2) 升级到 AS 9.1。PS Community 样例会破坏,出现许多 javax.faces 错误 (6576700)

说明

从 JES5 (Application Server 8.2) 升级到 Application Server 9.1 Update 1 时,Portal Server Community 样例不再起作用,并且会抛出许多 javax.faces.application.ApplicationFactory 错误。

解决方法

如果使用 JES5 Portal Server 安装 Application Server 8.2,则不支持从 Application Server 8.2 升级到 9.1 Update 1。在 Application Server 升级到 9.1 Update 1 之前,需要将 Portal Server 升级到 Java ES 5 Update 1。

AS91 IFR b58,Linux:安装程序安装完新的 Java 之后,未更新 /usr/jdk/entsys-j2se 链接 (6591697)

说明

在 Linux 平台上,使用 IFR 安装程序从 Application Server 8.2 升级到 9.1 Update 1 时,如果选择“安装 JDK”选项,则在成功完成安装之后,大多数 JES 组件停止运行。

解决方法

此问题仅影响在 Linux 平台上进行的 Application Server 9.1 Update 1 IFR 安装,并且仅当选择“安装 JDK”选项时才会产生影响。要解决此问题,请在安装之后,立即将 /usr/jdk/entsys-j2se 手动链接到 /usr/java/jdk1.5.0_12 目录。

AS9.1 IFR Win 就地备份未与 asupdate.bat 窗体值集成,检查路径错误 (6596412)

说明

在 Windows 上执行 Application Server 9.1 Update 1 IFR 升级时,就地备份未正确与 asupdate.bat 窗体值集成。具体而言,如果在 ASupdate.bat GUI 屏幕中输入错误的信息,然后单击“下一步”,则升级安装程序将尝试检测它是否为就地升级。如果是,则在升级之前,会将 domain1 移至备份目录。继续升级时,由于信息不正确,会显示错误消息。当您尝试立即更正此错误时,会抛出路径错误,因为 domain1 已被移动。

解决方法

将源目录更改为 current-source-path/backup 中的 domain1_timestamp 目录,或者使用取消按钮退出安装程序并再次启动。

AS9.1 IFR Windows,内联升级,将 asupgrade.bat 与短路径和长路径一起使用时,会删除 Domain1 (6596394)

说明

(仅 Windows)如果在程序目录路径中使用特殊字符或 DOS 样式的短名称安装了早期版本的 Application Server,则在以后仍使用这些目录路径名称就地升级到 Application Server 9.1 Update 1 时,会导致升级失败。

例如,如果将 Application Server 8.2 安装在以下目录中:


C:\Program Files (x86)\dirs\appserver
c:\progra~2\dirs\appserver

尝试执行就地升级到 9.1 Update 1 将失败,因为安装程序无法将短名称或特殊字符转换为所需的长名称格式。

解决方法

安装 Application Server 时,强烈建议路径名称不要包含特殊字符或 DOS 样式的短名称截断(例如 progra~2),因为它会妨碍后续的升级安装。如果存在这样的安装,请在升级之前使用长路径名称重新安装,或者在全新的目录中安装新版本的 Application Server。

AS 9.1 IFR:Web UI 验证被破坏 (6569813)

说明

升级 Application Server 之后,<jsp:forward> 标记在 Authenticate.jsp 中未按预期那样发挥作用。<jsp:forward> 调用在服务器日志中生成一个错误,并在 WebUI 中显示空白页。问题在于 Authenticate.jsp 中的 <jsp:forward> 需要 <jsp:forward page="${redirectPage}"/> 之类的页面属性,但是,正在被传送的值却是相对路径(例如 /registry/thin/{pagename}.jsp),即使 Authenticate.jsp 是纯 JSP 页,此类路径也无效。

解决方法

完成 Application Server 升级之后,请使用 asadmin 工具运行以下命令,以在 domain.xml 中设置 <auth-realm>

  1. 转至 as-install/bin 并运行以下命令:


    ./asadmin delete-auth-realm --host localhost --port 6489 certificate

    这将删除旧的 auth-realm 证书(如果存在)。

  2. 运行以下命令:


    ./asadmin create-auth-realm --terse=false --echo=true --interactive=true \
    --user admin --host localhost --port 6489 --classname \
    com.sun.enterprise.security.auth.realm.certificate.CertificateRealm \
    --property assign-groups=have.client.cert  certificate

    这将创建具有 assign-groups 属性的新的 <auth-realm>

  3. 停止并重新启动 Application Server registry 域。

不存在 asupgrade GUI 的本地化联机帮助 (6610170)

说明

在非英语语言中运行 asupgrade GUI 时,没有针对所选的非英语语言对 GUI 联机帮助进行本土化。

解决方法

目前尚无解决方法。已计划使用所有非英语目标语言对联机帮助进行本地化。

对多个域进行升级(逆序)时,升级工具删除 nodeagents 目录 (6636871)

说明

对包含多个域的配置进行并行升级后,仅显示最后处理的域的节点代理。由于每次升级工具处理域时都会在目标中删除并重新创建 nodeagents 目录,因此发生此问题。

Procedure解决方法:在对多个域进行并行升级时保留所有节点代理

  1. 处理每个域后,创建 nodeagents 目录的 zip 文件。

  2. 处理完所有域后,解压缩您所创建的文件。

    此时将显示所有节点代理。

Web 容器

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

在 Windows 上,使用 --precompilejsp=true 部署应用程序会锁定应用程序中的 JAR 文件,从而导致以后的取消部署或重新部署失败 (5004315)

说明

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

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

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

解决方法

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

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

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

说明

web.xml 中的可选 load-on-startup servlet 元素表示相关的 servlet 将在启动对其进行声明的 Web 应用程序期间被加载和初始化。

此元素的可选内容是一个整数,用于表示该 servlet 相对于 Web 应用程序的其他 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 应用程序的部署失败。

向下兼容性问题。指定空的 <load-on-startup> 在基于 Servlet 2.3 的 web.xml 中仍起作用。

解决方法

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

无法在资源限定服务器上编译 JSP 页面 (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"。

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

以上任何一种设置都将阻止 ant 产生用于 javac 编译的新进程。

Application Server 不支持 auth-passthrough Web Server 6.1 附加软件 (6188932)

说明

Sun Java System Application Server 9.1 Update 1 添加了对 Sun Java System Application Server Enterprise Edition 7.1 中可用的 auth-passthrough 插件功能所提供的功能的支持。但是,在 Application Server 9.1 Update 1 中,auth-passthrough 插件功能的配置有所不同。

Application Server Enterprise Edition 7.1 中的 auth-passthrough 插件功能在双层部署方案中非常有用,其中:

在这种网络体系架构中,客户机连接到前端 Web 服务器,而该 Web 服务器配置有 service-passthrough 插件功能,会将 HTTP 请求转发到代理的 Application Server 实例以供处理。Application Server 只能从 Web 服务器代理接收请求,而决不会从任何客户机主机接收请求。因此,当部署在代理的 Application Server 实例上的任何应用程序查询客户机信息时,该应用程序将收到代理主机的信息(例如,当该应用程序查询客户机 IP 地址时,会收到代理主机的 IP),这是因为代理主机才是中继请求的真正发出主机。

解决方法

在 Application Server Enterprise Edition 7.1 中,可以在代理 Application Server 实例上配置 auth-passthrough 插件功能,以使该实例上所部署的所有应用程序可以直接获得远程客户机的信息,就像代理 Application Server 实例直接收到请求那样,而不是通过运行 service-passthrough 插件的中间 Web 服务器接收。

在 Application Server 9.1 Update 1 中,可以通过将 domain.xml<http-service> 元素的 authPassthroughEnabled 属性设置为 TRUE,来启用 auth-passthrough 功能,如下所示:


<property name="authPassthroughEnabled" value="true"/>

Application Server Enterprise Edition 7.1 中 auth-passthrough 插件功能的安全性注意事项同样也适用于 Application Server 9.1 Update 1 中的 authPassthroughEnabled 属性。由于 authPassthroughEnabled 使得能够覆盖可用于进行验证的信息(例如发出请求的 IP 地址或 SSL 客户机证书),因此,仅允许信任的客户机或服务器连接到 authPassthroughEnabled 设置为 TRUE 的 Application Server 9.1 Update 1 实例是非常重要的。作为一项预防措施,建议仅将公司防火墙之后的服务器的 authPassthroughEnabled 设置为 TRUE,而不要将可通过 Internet 访问的服务器的 authPassthroughEnabled 设置为 TRUE。

请注意,当代理 Web 服务器已配置了 service-passthrough 插件并且将请求转发到 authPassthroughEnabled 设置为 TRUE 的 Application Server 8.1 Update 2 实例时,Web 服务器代理上可能启用了 SSL 客户机验证,而在代理的 Application Server 8.1 Update 2 实例上却禁用了该验证。在这种情况下,代理的 Application Server 8.1 Update 2 仍会将请求当作通过了 SSL 验证,并向部署在其上的发出请求的所有应用程序提供客户机 SSL 证书。

Web 服务器

AS 9.1 b50e。Linux。无法在安装 AS LB 之后启动 WS:libjvm.so:cannot open shared (6572654)

说明

只有在 Linux 系统上将 Sun Java System Web Server 与 Application Server 9.1 和负载平衡器一起使用时才会出现此问题。在此情况下,安装 Application Server 和负载平衡器之后,Web Server 可能无法启动,因为 libicui18n.so.2libicuuc.so.2 发生冲突。这些库同时位于 /opt/sun/private/lib/opt/sun/appserver/lib 中。

解决方法

要使用的正确的库只能位于 /opt/sun/appserver/lib 中,因为 lbplugin 根据这些库生成。一旦从 /opt/sun/private/lib 中删除这两个库,Web Server 便应该能够顺利启动,不会出现任何错误。

或者,如果不希望从 /opt/sun/private/lib 中删除这些库,可以在 Web Server startserv 脚本的 LD_LIBRARY_PATH 中,将 /opt/sun/appserver/lib 放在 /opt/sun/private/lib 之前;也就是将:


# Add instance-specific information to LD_LIBRARY_PATH for Solaris and Linux
LD_LIBRARY_PATH="${SERVER_LIB_PATH}:${SERVER_JVM_LIBPATH}:${LD_LIBRARY_PATH}:
/opt/sun/appserver/lib:/opt/sun/appserver/lbplugin/lib"; export LD_LIBRARY_PATH 

替换为:


# Add instance-specific information to LD_LIBRARY_PATH for Solaris and Linux
LD_LIBRARY_PATH="/opt/sun/appserver/lib:/opt/sun/appserver/lbplugin/lib:
${SERVER_LIB_PATH}:${SERVER_JVM_LIBPATH}:${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH

Web 服务

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

Ant 任务 wsimport 不可用于 Java EE SDK b33d (使用 JDK 1.6),并出现 NoClassDefFoundError (6527842)

说明

当使用 Java EE SDK b33d 附带的 JDK 1.6 运行 JAX—WS 测试时,可能会遇到问题。测试将立即中止,并出现以下消息:


[wsimport] Exception in thread "main" java.lang.NoClassDefFoundError: \
com/sun/tools/ws/WsImport

即使 webservices-tools.jar 不包含 com/sun/tools/ws/WsImport.classcom/sun/tools/ws/ant/WsImport.classcom/sun/tools/ws/ant/WsImport2.class,也会发生此错误。而且,同一个测试工作区可以使用 1.5.0-10 JDK 运行,而不会出现任何问题。

解决方法

在运行 JAX-WS 测试之前,将 webservices-api.jar 复制到 $JAVA_HOME/jre/lib/endorsed

publish-to-registry 命令在 IFR EE 内部版本中失败 (6602046)

说明

JAXR 使用 SAAJ 将 SOAP 消息发送到注册表。在非 IFR 的情况下,SAAJ impl 类位于 lib/webservices-rt.jar 下。在 IFR 的情况下,SAAJ 类仍位于 lib/webservices-rt.jar 下。此外,saaj-impl.jar 位于 /usr/share/lib 目录中。此 jar 文件由 Application Server 拾取,并且其优先级高于 webservices-rt.jar 中的类。此 jar 文件不具有将 SOAP 消息发送到 Web 服务注册表所需的必要安全权限。此打包应该修改为向 /usr/share/lib 目录下的 jar 授予权限,或者与 /usr/share/lib jar 无关。

解决方法

将以下内容添加到 server.policy 文件:


grant codeBase "file:/usr/share/lib/saaj-impl.jar" {
   permission java.security.AllPermission;
};

在 JDK6 u4 b3 上 wscompile 失败并显示 "package javax.xml.rpc does not exist" (6638567)

说明

对于 JDK 6 Update 4 上的 Java EE SDK 9.1 Update 1,wscompile ant 任务失败。对于每个 JAX-RPC API 类,显示以下错误消息:


package package-name does not exist

解决方法

在运行 wscompile ant 任务之前,确保在类路径而不是 j2ee.jar 中指定 javaee.jar