Sun GlassFish Enterprise Server v3 发行说明

已知问题

本节说明 Sun GlassFish Enterprise Server v3 中的已知问题及其解决方法(如果有)。

[JDK_Issue] 因调用 setSoLingersetReuseAddress 导致性能降级(问题 7109)

描述

调用 setSoLinger 方法或 setReuseAddess 方法时,会出现性能降级并抛出以下异常:


[#|2009-01-26T00:33:56.325-0800|WARNING|sun-appserver9.1|
javax.enterprise.system.container.web|_ThreadID=17;
_ThreadName=SelectorReaderThread-8084;
_RequestID=11ae0030-c392-4217-8408-cfa7efe0a879;|setSoLinger
exception
java.net.SocketException: Invalid argument

该问题是由 JDK 软件的问题所导致的。JDK 版本 7 中已解决该问题。

有关更多信息,请参见问题报告

解决方法

无。

[JDK_Issue] 服务器重新启动时出现 null 指针异常(问题 8299)

描述

重新启动 Enterprise Server 有时会导致抛出 null 指针异常。


SEVERE: doSelect exception
java.lang.NullPointerException

该问题是由 JDK 软件的问题所导致的。JDK 版本 7 中已解决该问题。

有关更多信息,请参见问题报告

解决方法

无。

[JDK_Issue] 生命期测试期间产生 IO 异常:无效参数(问题 7529)

描述

在 HTTP 生命期测试期间,连续运行 42 小时后抛出以下异常:


[#|2009-04-05T17:41:26.537-0700|SEVERE|glassfish|javax.enterprise.system.core|
_ThreadID=15;_ThreadName=Thread-1;|doSelect
exception
java.io.IOException: Invalid argument

在运行期间仍可访问实例和应用程序。

该问题是由 JDK 软件的问题所导致的。JDK 版本 7 中已解决该问题。

有关更多信息,请参见问题报告

解决方法

无。

[JDK_Issue] 启动时出现 EPoll null 指针异常(问题 9472)

描述

在启动时,Enterprise Server 会抛出 null 指针异常:


java.lang.NullPointerException
        at sun.nio.ch.Util.atBugLevel(Util.java:326)
        at sun.nio.ch.SelectorImpl.<init>(SelectorImpl.java:40)
        at sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:47)

该问题与 Grizzly 有关,是 JDK 6 的问题。JDK 7 中已解决该问题。

有关更多信息,请参见问题报告

解决方法

无。Grizzly 尝试解决该问题,但该问题仍可能发生。

[JDK_ISSUE] Richacess:java.io.IOException:由 doSelect 产生的无效参数(问题 8573)

描述

会产生以下异常:


[#|2009-06-20T06:05:57.942-0700|SEVERE|glassfish|
com.sun.grizzly.config.GrizzlyServiceListener|
_ThreadID=21;_ThreadName=Thread-2;|doSelect
IOException
java.io.IOException: Invalid argument

这是 JDK 的问题,计划在 JDK 1.6.0_18 中修复。

有关更多信息,请参见问题报告

解决方法

将文件描述符的最大数量增加至 10000 或更多(Solaris 中默认为 64000)。JDK 1.6.0_18 一经发布,请立即安装。

域的 /applications 目录上的文件权限可导致 NullProcessException(问题 6545)

描述

如果域的 /applications 目录存在访问限制,或者使用的是来自受限目录的目录部署,则服务器无法读取扩展目录中的文件。部署期间会出现 NullProcessException 错误。

有关更多信息,请参见问题报告

解决方法

更改此类目录的文件访问设置,以授予服务器读取目录内容的权限。

Windows 安装程序日志文件不可读取(问题 4881)

描述

time-stamp-install.log 文件无法读取,因为所有写入到该文件的行全部串连到了单个长字符串中。

有关更多信息,请参见问题报告

解决方法

换用其他编辑器,然后手动打开 %TEMP% 目录下创建的安装日志文件。

访问新虚拟服务器的统计信息需要重新启动服务器(问题 6238 和 6422)

描述

只有在重新启动服务器之后,才能监视关于新增虚拟服务器的统计信息。

有关更多信息,请参见问题 6238问题 6422 的报告。

解决方法

添加虚拟服务器后,重新启动服务器以查看虚拟服务器的监视数据。

[Open Installer] Windows 上忽略了重定位日志文件的选项 -l(问题 10693)

描述

将用于重定位日志文件的选项 -l与选项 -a-s 一起使用时,该选项会被忽略,并且会在默认位置创建日志文件。

有关更多信息,请参见问题报告

解决方法

无。

Windows Vista 上启用 UAC 后,ZIP 分发出现问题(问题 10755)

描述

Windows Vista 上启用用户帐户控制 (User Account Control, UAC) 后,部分功能无法正常工作。例如无法启动管理控制台。

有关更多信息,请参见问题报告

解决方法

禁用 UAC 并重新引导。

com.sun.xml.wss.NonceManager.getInstance 抛出 null 指针异常(问题 11138)

描述

在启用 GlassFish 消息安全提供者的情况下测试 JAX-RPC Web 服务,会在服务器日志中抛出以下异常:


[#|2009-11-23T11:16:58.375+0005|SEVERE|glassfishv3.0|
javax.enterprise.resource.webservices.rpc.server.http|_ThreadID=25;_
ThreadName=http-thread-pool-8080-(2);|caught
throwable
java.lang.RuntimeException: com.sun.enterprise.security.jauth.AuthException

nonce 属性的默认值不起作用。

有关更多信息,请参见问题报告

解决方法

要在 JAX-RPC Web 服务中使用消息安全,则需要在配置中禁用 nonce 属性。请参见问题报告以获取解决方法的完整步骤。

[Open Installer] Windows Vista 和 Windows 2008 上“开始”菜单未显示,且随后该菜单为空(问题 5087)

描述

首次完成安装后未显示 Enterprise Server 的“开始”菜单组。如果注销后重新登录,则会显示菜单组,但是该菜单组为空。

有关更多信息,请参见问题报告

解决方法

无。

部署 specj 应用程序后,asadmin get --monitor=true "server.*" 会导致 I/O 错误(问题 11163)

描述

命令 asadmin get -m "server.*" 会返回与该服务器有关的所有监视数据。在部署很多应用程序后,数据量很大,可能需要很长的时间才能返回。客户端可能超时且出现以下客户端错误:


./asadmin get --monitor=true "server.*"
I/O Error: Read timed out
Command get failed.

有关更多信息,请参见问题报告

解决方法

尽可能地减少返回至客户端的数据量。

  1. 运行 asadmin list -m "server.*" 命令以返回顶层元素。

  2. 选择需要详细信息的顶层元素,并将其用作过滤器。例如:


    > ./asadmin list -m "server.*"
    ...
    server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-cache
    server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods
    server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.
    create-int-int-[Lorg\.spec\.jappserver\.supplier\.helper\.ComponentOrder
    
    server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.
    findByPrimaryKey-java\.lang\.Integer
    server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.generateXml
    server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.getEJBLocalHome
    ...
    
    >./asadmin get -m
    "server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.*"
    ...
    server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.remove.
    methodstatistic-name
    = MethodStatistic
    server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.remove.
    methodstatistic-starttime
    = 1259604209775
    ...

在 Solaris 上,独立更新工具失败,并且出现段故障(问题 11222)

描述

在 Solaris 上安装附加组件时,通过 updatetool 命令启动独立更新工具失败,并且出现段故障。

有关更多信息,请参见问题报告

解决方法

确保系统符合 Update Center 发行说明 中定义的独立更新工具修补程序要求。

管理控制台中的更新工具功能使用不同的基于 Java 的 Update Center API,因此不受该问题影响。

部署在上下文根目录上的 Ruby 应用程序无法与管理控制台配合使用(问题 10854)

描述

如果在上下文根目录 '/' 中部署了 Ruby 应用程序,然后访问管理控制台,则访问 Ruby 应用程序时会产生 404 错误。

有关更多信息,请参见问题报告

解决方法

无。

Java EE 6 受管 Bean 支持在使用 Java Web Start 启动的应用程序客户端中不可用(问题 11257)

描述

使用 Java Web Start 启动应用程序客户端后,无法识别应用程序客户端中的所有受管 bean。

有关更多信息,请参见问题报告

解决方法

使用 appclient 脚本启动应用程序客户端。可正常支持应用程序客户端中的受管 bean。

在具有 Apple Java 实现的 Mac OS X 上调用 appclient 脚本时出现警告消息(问题 8644)

描述

在已安装 Apple Java 的 Mac OS X 系统上调用 appclient 脚本时,两次出现以下栈跟踪信息(此处仅显示头几行信息):


Intentionally suppressing recursive invocation exception!
java.lang.IllegalStateException: recursive invocation
    at java.lang.ClassLoader.initSystemClassLoader(ClassLoader.java:1394)
    at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1377)
    at sun.security.jca.ProviderConfig$1.run(ProviderConfig.java:64)
...

有关更多信息,请参见问题报告

解决方法

不需要。

尽管出现警告消息,客户端仍会成功启动并正常运行。这些错误是由 Apple Java 实现中的问题造成的。

启动应用程序客户端可导致客户端的主类产生 ClassNotFound 错误(问题 11181)

描述

满足以下所有条件时会出现问题:

由于将某个在服务器上生成的文件放置在错误的服务器目录中,并且该文件覆写了另一个生成的文件,因此尝试启动应用程序客户端时会失败,并且出现以下错误:


java.lang.ClassNotFoundException:(main-class-for-the-client)

有关更多信息,请参见问题报告

解决方法

更改应用程序客户端的名称,使其不为 myAppClient.jar。具体而言:

  1. 编辑 myApp/META-INF/application.xml,使客户端的声明为 <java>myClient.jar</java>。请注意,可使用 myAppClient.jar 外的任何名称。

  2. myApp/myAppClient_jar 目录重命名为 myApp/myClient_jar。请注意,客户端的子目录名称必须与 application.xml 文件中的应用程序客户端 URI 一致,且 _jar 替换掉 .jar

  3. 部署应用程序:


    asadmin deploy --retrieve localdir myApp
    
  4. 运行应用程序客户端:


    appclient -client localdir/myAppClient.jar
    

需要重新启动服务器才能使对日志文件位置的更改生效(问题 11142)

描述

在管理控制台中的“Logger Settings”页面的“General”选项卡上对服务器日志值进行的更改不会立即生效。

有关更多信息,请参见问题报告

解决方法

重新启动服务器。在此页面上所有对值的更改都需要重新启动服务器才能生效。

无法在 Linux 和 Mac OS 上通过单击“Summary”屏幕上的链接来打开安装日志文件(问题 6621)

描述

图形化安装程序中的安装过程结束时会显示“Summary”页面,无法通过单击该页面上的链接来打开安装日志文件。

有关更多信息,请参见问题报告

解决方法

手动访问这些文件。安装日志和摘要文件的名称为 timestamp-install.logtimestamp-install-summary.html。在 Linux 和 Mac 系统上,这些文件在 $TMP 目录中生成。

在 Windows 上重新安装到同一安装目录后,updatetool 命令不工作(问题 8233)

描述

如果在同一安装目录中使用相同的默认值重新安装 Enterprise Server(带有更新工具),然后使用 updatetool 命令调用更新工具,则用户会收到消息,告知用户未安装更新工具,并且询问用户是否进行安装。该问题仅出现在 Windows 系统上。

有关更多信息,请参见问题报告

解决方法

在卸载后,手动删除残留的 .org* 目录,然后重新安装。

[Update Center] 访问非用户目录失败(Update Center 问题 1583)

描述

在 Windows 和 Mac OS 系统上会间歇性地出现该问题。在某些系统上,有时 pkg(5) 会不起作用。

有关更多信息,请参见更新中心问题报告

解决方法。

无。

内嵌帮助和 CLI 手册页在 X-Powered-By 中列出了不正确的 servlet 版本 2.4(问题 11011)

描述

内嵌帮助和 CLI 手册页在 X-Powered-By 字段中列出了 servlet 2.4。正确版本应为 servlet 3.0。

有关更多信息,请参见问题报告

解决方法

无。

[Embedded] 使用 uber-jar 部署包含有 activation-1.1.jar 的应用程序时失败(问题 11149)

描述

通过 glassfish-embedded-all-3.0-b73.jar 使用嵌入部分时,部署会失败,并且出现以下错误:


SEVERE: WEB9051: Error trying to scan the classes at
/private/var/folders/CV/CVhj8DvqEwGK5bdJKK9TaE   TI/-Tmp-
/gfembed6991712842235699248tmp/applications/xwiki-enterprise-web-2.0/
WEB-INF/lib/activation-1.1.jar for annotations in which a 
ServletContainerInitializer has expressed interest
java.util.zip.ZipException: error in opening zip file

出现该问题的原因是嵌入部分使用带加号 (+) 的文件夹,而在对路径进行解码时,路径中的加号被转换为空格字符 " "

有关更多信息,请参见问题报告

解决方法

已添加可设置临时目录位置的系统属性。该属性为 glassfish.embedded.tmpdir,可设置为不将临时域目录放置在用户目录中。

在 Solaris 上,passwordfile 中没有 AS_ADMIN_USER 时,create-service 无法创建服务(问题 11119)

描述

在 Solaris 上,passwordfile 中没有 AS_ADMIN_USER 时,create-service 无法创建服务。

有关更多信息,请参见问题报告

解决方法

无。

[Monitoring] 用于 connector-connection-pools 的附加监视视图不可用(问题 11256)

描述

Enterprise Server 使用树结构来跟踪可监视对象。在该树中,获取连接池统计信息时以下视图不可用:

server.connector-service.resource-adapter-name .connection-pool-name .*server.jms-service.connection-factories. connection-factory-name.*(适用于与 jms-ra 相关的池)。

有关更多信息,请参见问题报告

解决方法

使用 server.resources.* 视图获取统计信息。

有关监视的更多信息,请参见《Sun GlassFish Enterprise Server v3 Administration Guide》中的第 8  章 “Administering the Monitoring Service”

[EclipseLink] 可嵌入部分的 ElementCollections 问题(EclipseLink 问题 296606)

描述

启用编织 (weaving) 后,更新可嵌入部分的元素集合时可能抛出 null 指针异常。

有关更多信息,请参见 EclipseLink 问题报告

解决方法

有两个可用的解决方法:

  1. 在可嵌入部分添加注释 @ChangeTracking(DEFFERED),然后将 eclipselink.weaving.internal 属性设置为 false,或者

  2. 在持久性 XML 中将以下属性设置为 falseeclipselink.weaving.changetrackingeclipselink.weaving.internal

虚拟服务器启动两次(问题 11195)

描述

启动域并访问 localhost:4848 后,服务器日志中会出现以下消息:


[#|2009-11-27T16:21:57.091+1100|INFO|glassfishv3.0|
javax.enterprise.system.container.web.com.sun.enterprise.web|
_ThreadID=20;_ThreadName=Thread-1;|Created
virtual server server|#]

[#|2009-11-27T16:21:57.091+1100|INFO|glassfishv3.0|
javax.enterprise.system.container.web.com.sun.enterprise.web|
_ThreadID=20;_ThreadName=Thread-20;|Created
virtual server server|#]

这些消息会让用户感觉虚拟服务器 server 启动了两次。但事实并非如此。虚拟服务器只启动了一次,但消息却记录了多次。

有关更多信息,请参见问题报告

解决方法

无。

调试 JPA 的问题(问题 11274)

描述

因为来自服务器的消息有限,所以很难调试 JPA。

有关更多信息,请参见问题报告

解决方法

logging.properties 文件添加属性 org.eclipse.persistence.session.level=INFO。然后可使用管理控制台控制 EclipseLink 记录器。

当与目标 EJB 位于同一主机上时,远程 EJB 的 EJB 互操作性会中断(问题 11152)

描述

当与目标 EJB 位于同一主机上(另一个 Enterprise Server 域或另一个 Enterprise Server v3 实例)时,远程 EJB 的 EJB 互操作性会中断。

有关更多信息,请参见问题报告

解决方法

jvm-options 中设置以下属性:

-Dorg.glassfish.orb.iiop.orbserverid=:

在 Windows Vista 和 Windows 7 上,安装程序会间歇性地在 41% 处挂起(问题 11185)

描述

在 Windows Vista 和 Windows 7 上进行安装时,Enterprise Server 图形化安装程序会在 41% 处挂起。并非是每次安装时都会出现该问题。

有关更多信息,请参见问题报告

解决方法

该问题与 Windows Vista 和 Windows 7 中的自动调整功能相关,默认会启用该功能。

如果在初次安装 Enterprise Server 时或者在添加软件包或应用更新时出现挂起现象,则限制或禁用自动调整功能。

无法在系统间发送 JMS 消息(问题 11254)

描述

默认情况下,Enterprise Server 上的 JMS 服务的默认主机名为 localhost。可是,要从其他系统访问 JMS 服务时却必须更改主机名。可将其更改为实际主机名或更改为 0.0.0.0

有关更多信息,请参见问题报告

解决方法

要进行更改,可完成以下某个步骤:

  1. 使用管理控制台:展开“Configuration”、“Java Message Service”和“JMS Hosts”节点,选择 default_JMS_host,编辑“Host”字段;或者

  2. 使用 asadmin 子命令,如下所示:

    asadmin set server-config.jms-service.jms-host.default_JMS_host.host="0.0.0.0",或者

    asadmin set server-config.jms-service.jms-host.default_JMS_host.host="hostname"

Windows 系统菜单为空(问题 11239)

描述

使用图形化安装程序安装 Enterprise Server 时,成功完成安装后仅在 Windows 系统菜单中添加了顶层 GlassFish v3 条目,而且此菜单为空。该问题在本地化安装程序和英文安装程序中都会出现。

有关更多信息,请参见问题报告

解决方法

无。

deploy 命令手册页的 --dbvendorname 内支持的数据库列表中没有列出 mysql(问题 11328)

说明

deploy 命令手册页的 --dbvendorname 内支持的数据库列表中没有列出 mysql。这不正确。MySQL 是支持的数据库,应该将其列出。

有关更多信息,请参见问题报告

解决方法

无。

嵌入式 ACC 对于当前线程上下文类加载器的限制过于严格(问题 11427)

说明

ACC 预期当前线程的上下文类加载器为 ACCClassLoader。这过于严格。尽管 appclient 脚本和 Java Web Start 启动满足此条件,但嵌入式功能可能无法满足。ACC 内的其他功能要求类加载器为 URLClassLoader(或 URLClassLoader 的子类的实例),但加载器不需要为 ACCClassLoader

有关更多信息,请参见问题报告

解决方法

有两个可用的解决方法:

  1. 设置 -Djava.system.class.loader=org.glassfish.appclient.client.acc.ACCClassLoader,或

  2. 在 Java 程序中,实例化 ACCClassLoader 并使用 Thread.currentThread().setContextClassLoader 将其设置为当前线程的上下文类加载器,然后再使用嵌入式 ACC 类和接口。

MySQL 的 EJB 计时器服务配置问题(问题 11428)

说明

能够以用户的身份在 MySQL 中创建和存储 EJB 计时器,但当尝试为 MySQL 配置 EJB 计时器服务时,出现以下异常(SQLException 执行语句):


"CREATE TABLE EJB__TIMER__TBL (TIMERID
VARCHAR(255) NOT NULL, BLOB BLOB(64000), INITIALEXPIRATIONRAW BIGINT, SCHEDULE
VARCHAR(255), INTERVALDURATION BIGINT, OWNERID VARCHAR(255), STATE INTEGER,
LASTEXPIRATIONRAW BIGINT, PKHASHCODE INTEGER, CREATIONTIMERAW BIGINT,
CONTAINERID BIGINT, PRIMARY KEY (TIMERID))":
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in
your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near 'BLOB BLOB(64000), INITIALEXPIRATIONRAW BIGINT,
SCHEDULE VARCHAR(255), INTERVALDU' at line 1|#] 

有关更多信息,请参见问题报告

解决方法

确保为计时器池指定的 datasource-classname 表示 XA 数据源。

MySQL 特定步骤:

  1. 解压缩 glassfishv3/glassfish/lib/install/applications/ejb-timer-service-app.war

  2. 将以下内容添加到 WEB-INF/classes/__ejb_timer_mappings.xml 中的 <persistence-unit-metadata> 之后:

    <persistence-unit-defaults>
    <delimited-identifiers/>
    </persistence-unit-defaults>
  3. 重新打包 WEB-INF/classes/__ejb_timer_mappings.xml 文件。

  4. (只有当前安装已使用 EJB 计时器服务时,才需要此步骤。)在数据库中使用此 create 语句手动创建 EJB__TIMER__TBL

    CREATE TABLE `EJB__TIMER__TBL` (`TIMERID` VARCHAR(255) NOT NULL,
    `BLOB` BLOB(64000), `INITIALEXPIRATIONRAW` BIGINT, `SCHEDULE` VARCHAR(255),
    `INTERVALDURATION` BIGINT, `OWNERID` VARCHAR(255), `STATE` INTEGER,
    `LASTEXPIRATIONRAW` BIGINT, `PKHASHCODE` INTEGER, `CREATIONTIMERAW` BIGINT,
    `CONTAINERID` BIGINT, PRIMARY KEY (`TIMERID`))

deploy 子命令在安全服务器上失败(问题 11439)

说明

除非使用 --secure 选项,否则 deploy 子命令会在安全服务器上失败。

有关更多信息,请参见问题报告

解决方法

对安全服务器发出 deploy 子命令时,使用 --secure 选项。

Enterprise Server truststore 中的证书过期(问题 6852796)

说明

Enterprise Server truststore 中的某个授权证书将于 2010 年 1 月 7 日过期。该证书为 cacerts.jks。启动时将生成错误消息以表明该证书已过期:


Version: V1
  Subject: OU=Secure Server Certification Authority, O="RSA Data Security, Inc.", C=US
  Signature Algorithm: MD2withRSA, OID = 1.2.840.113549.1.1.2

  Key:  SunPKCS11-Solaris RSA public key, 1000 bits (id 17891456, session object)
  modulus: 
  public exponent: 
  Validity: [From: Tue Nov 08 19:00:00 GMT-05:00 1994,
               To: Thu Jan 07 18:59:59 GMT-05:00 2010]
  Issuer: OU=Secure Server Certification Authority, O="RSA Data Security, Inc.", C=US
  SerialNumber: [    02ad667e 4e45fe5e 576f3c98 195eddc0]

有关更多信息,请参见问题报告

解决方法

已在 Java SE 6 的更新 18 中删除过期的授权证书。该证书还将从 Enterprise Server truststore 将来的更新中删除。

可以忽略该错误消息并使用更新,也可以删除该错误消息。要停止接收错误消息,请使用密钥工具将证书从 Enterprise Server truststore 中删除:


=> cd domains/domainX/config
=> cp cacerts.jks cacerts.jks.save
=> keytool -delete -keystore cacerts.jks -alias verisignserverca
Enter keystore password:

要避免在后续创建的域中再次出现过期的证书,还应从模板 truststore 中删除该证书:


=> cd glassfish/lib/templates
=> cp cacerts.jks cacerts.jks.save
=> keytool -delete -keystore cacerts.jks -alias verisignserverca
Enter keystore password:

有关密钥库密码的更多信息,请参见《Sun GlassFish Enterprise Server v3 Administration Guide》中的“Authentication”中关于主密码和密钥库的信息。