本部分包含了 Message Queue 4.1 中已知问题的列表。涵盖以下产品领域:
有关当前错误、错误的状态和解决方法的列表,Java Developer Connection™ 成员应参见 Java Developer Connection Web 站点上的 Bug Parade 页。在报告新的错误之前请先查看该页。虽然未列出所有的 Message Queue 错误,但如果您想了解是否已报告了某个问题,可以将该页作为一个很好的起点。
http://bugs.sun.com/bugdatabase/index.jsp
可以免费获得 Java Developer Connection 成员资格,但需要进行注册。有关如何成为 Java Developer Connection 成员的详细信息,请访问 Sun 的 "For Developers" Web 页。
要报告新错误或提交功能请求,请向 imq-feedback@sun.com 发送电子邮件。
本部分介绍了与 Message Queue 4.1 版安装相关的问题。
Message Queue 4.1 版是由新安装程序安装的,它还安装并升级了 Message Queue 所需的共享组件;例如,JDK、NSS 库和 JavaHelp 等。此安装程序和 Java Enterprise System (JES) 安装程序并不共享相同的产品注册表。如果 Message Queue 安装程序删除随 JES 安装的 Message Queue 版本并升级到 Message Queue 4.1,JES 产品注册表可能会处于不一致的状态。因此,在运行 JES 卸载程序时,它可能会误删 Message Queue 4.1 及其所依赖的共享组件,这些内容并不是它安装的。
升级 JES 安装程序所安装的软件的最佳方法如下所示。
使用 JES 卸载程序删除 Message Queue 及其共享组件。
使用 Message Queue 安装程序安装 Message Queue 4.1。
在 Message Queue 4. 1 安装程序 JDK 选择屏幕中,您可以选择系统上的现有 JDK/JRE 以供 Message Queue 使用。遗憾的是,显示的列表还包含用于运行安装程序的 JRE。此 JRE 是安装程序包的一部分,并未实际安装在系统上。(错误 6585911)
安装程序使用的 JRE 可以通过其路径进行识别,该路径应该位于解压缩的安装程序目录中,并且应包括子目录 mq4_1–installer。例如:
some_directory/mq4_1–installer/usr/jdk/instances/jdk1.5.0/jre
不要选择此 JRE 以供 Message Queue 使用。而应选择系统上的其他 JDK。如果不存在其他 JDK,则针对您的平台执行相应的操作。
Solaris 或 Linux:选择“安装并使用默认 JDK”。
Windows:在运行 Message Queue 4.1 安装程序之前,下载并安装 JDK。
在 Windows 上安装 Message Queue 时,请注意以下限制。
安装程序没有在“开始”>“程序”菜单中添加 Message Queue 条目(错误 6567258)。要启动管理控制台,请使用 《Sun Java System Message Queue 4.1 Administration Guide》中的“Starting the Administration Console”所示的命令行。
安装程序没有将 IMQ_HOME\mq\bin 目录添加到 PATH 环境变量中。(错误 6567197)。在调用 Message Queue 实用程序 (IMQ_HOME\mq\bin\command) 时,用户需要将此条目添加到其 PATH 环境变量中,或者提供完整的路径名。
安装程序没有将条目添加到 Windows 注册表中,以表明安装了 Message Queue。
在无提示模式下运行时,安装程序将立即返回。确实执行了安装;但用户无法知道无提示安装实际上是何时完成的。(错误 6586560)
Windows 上不支持文本模式 (installer –t)。如果在 Windows 上以文本模式运行安装程序,则会显示错误消息。即使在非英语语言环境中运行安装程序,也会以英语显示此消息。(错误 6594142)
即使在非英语语言环境中运行安装程序,也会在安装程序安装主目录屏幕上以英语显示字符串 "Install Home"。(错误 6592491)
错误消息和“不完整”摘要状态会误导尝试使用installer-n 命令进行安装的用户。实际上,已成功执行了该命令。(错误 6594351)
以下问题会影响 Linux 平台上的安装
在“JDK 选择”面板上,滚动列表仅显示一项。这使得在列表中选择其他 JDK 变得非常困难。(错误 6584735)
如果 JDK 是最新的,并且用户在 JDK 选择屏幕上选择了“安装默认 JDK”,则安装程序仍会尝试安装 JDK,并报告无法安装软件包。尽管出现此问题,但安装已成功完成。(错误 6581310)
在模拟运行模式 (installer –n ) 下运行安装程序时,摘要屏幕将显示一些错误消息,并且还会显示“不完整”安装状态。此状态是错误的并且会误导用户;模拟运行并未在系统上安装任何内容;它仅创建一个可随后用于安装的应答文件。(错误 6594351)
如果系统上存在旧版本的 Message Queue 本地化 RPM,Message Queue 4.1 本地化 RPM 安装(在多语种软件包屏幕上选中“安装 Message Queue 多语种软件包”复选框时,会执行此类安装)将会失败。安装失败的原因是与以前 3.7 UR1 安装中的 Il8 软件包发生冲突。(错误 6594381)
解决方法 先使用 rpm –e 命令手动删除本地化 RPM,然后再运行 4.1 安装程序。要确定此处相关的 RPM,请参见《Sun Java System Message Queue 4.1 Installation Guide》中的“Message Queue Packages (RPMs)”。
这些问题会影响所有平台上的安装。
当安装程序正在安装 Message Queue 4.1 并显示进度屏幕时,“取消”按钮处于活动状态。如果此时选择“取消”按钮,则会导致安装不完整或中断。(错误 6595578)
安装程序摘要屏幕包含一些链接,单击这些链接时将启动日志或摘要页面查看器。如果使用窗口关闭按钮 "X" 关闭此查看器窗口,而不是使用标有“关闭”的按钮, 则无法重新打开此查看器窗口。(错误 6587138)
解决方法 使用标有“关闭”的按钮关闭此窗口。
当系统装有旧版本的 Message Queue 和 NSS/NSPR 时,安装程序升级仅列出需要升级的 Message Queue;它不会提到需要升级 NSS/NSPR。仅更新屏幕存在此问题,因为所有相关软件将作为安装过程的一部分进行升级(如安装就绪屏幕所示,其中显示了正确的信息)。(错误 6580696)
解决方法 不需要任何解决方法,因为如果 NSS/NSPR 文件不是最新的,则会安装这些文件并卸载旧版本。
在文本模式 (installer –t) 下运行安装程序或卸载程序时,摘要屏幕将显示包含日志/摘要文件的目录,但不会列出这些文件的名称。(错误 6581592)
如果具有指定名称的文件不存在,则会生成不一致且含糊不清的错误消息。(错误 6587127)
安装程序未明确显示 Message Queue 版本信息。(错误 6586507)
在 Solaris 平台上,请参阅下表以确定所安装的版本。
表 1–11 版本格式
安装程序所显示的版本 |
Message Queue 发行版 |
---|---|
4.1.0.0 |
4.1 |
3.7.0.1 |
3.7 UR1 |
3.7.0.2 |
3.7 UR2 |
3.7.0.3 |
3.7 UR3 |
3.6.0.0 |
3.6 |
3.6.0.1 |
3.6 SP1 |
3.6.0.2 |
3.6 SP2 |
3.6.0.3 |
3.6 SP3 |
3.6.0.4 |
3.6 SP4 |
对于 3.6 SP4 修补程序发行版(如 3.6 SP4 Patch 1),安装程序显示的发行版字符串保持不变。您需要运行 imqbrokerd –version 命令以确定确切的版本。
在 Linux 平台上,无法提供简单的格式转换。Linux 上的安装程序显示的版本号采用以下格式。
<majorReleaseNumber>.<minorReleaseNumber>-<someNumber>
例如,3.7–22。它告诉我们这是 3.7 发行版之一,但没有指出具体的版本。要确定该版本,请运行 imqbrokerd —version 命令。
以下问题与本地化问题有关。
在非英语语言环境中以文本模式 (installer –t) 运行安装程序时,多字节字符将显示为乱码。(错误 6586923)
用户可以在安装程序摘要屏幕中查看摘要报告。遗憾的是,在多字节语言环境中运行安装程序时,此报告(HTML 页)显示乱码。(错误 6587112)
解决方法 编辑 HTML 文件以纠正其中指定的字符集。HTML 文件应包含如下内容。
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8
将 "UTF-8" 替换为 locale_name.UTF-8。例如,Solaris 上的 ja_JA.UTF-8 或 ko.UTF-8;linux 上的 ja_JA.utf8 或 ko_KO.utf8。
在安装程序进度屏幕上,进度栏显示奇怪的字符。在非英语语言环境中,工具提示是固定编码的。(错误 6591632)
Windows 上不支持文本模式 (installer –t)。如果在 Windows 上以文本模式运行安装程序,则会显示错误消息。在非英语语言环境中运行安装程序时,不会本地化此消息。(错误 6594142)
无论在哪种语言环境中运行安装程序,安装程序的许可证屏幕都会显示英语许可证文本。(错误 6592399)
解决方法 要访问本地化的许可证文件,请查看 LICENSE_MULTILANGUAGE.pdf 文件。
未本地化安装程序使用帮助文本。(错误 6592493)
安装程序摘要 HTML 页上显示的字符串 "None" 是用英语固定编码的。(错误 6593089)
除了法语以外的语言环境均未本地化版权页面。(错误 6590992)
在德语语言环境中运行安装程序时,欢迎屏幕未显示在其他语言环境中看到的完整文本。(错误 6592666)
安装程序安装主目录屏幕上显示的字符串 "Install Home" 没有进行本地化。即使在非英语语言环境中运行安装程序,也会以英语显示该字符串。(错误 6592491)
在文本模式 (installer –t) 下运行安装程序时,无论在哪种语言环境中运行安装程序,都会使用英语响应选项 "Yes" 和 "No"。(错误 6593230)
安装程序 JDK 选择屏幕上的浏览器按钮工具提示是使用英语固定编码的。(错误 6593085)
在以前版本的 Message Queue 中,可以对以下命令使用 —p 或 —password 选项以交互方式来指定密码:imqcmd、imqbrokerd 和 imdbmgr。从 4.0 版开始,将不再使用这些选项。必须按照以下方式提供密码。
在仅用于存储密码的文件中将密码属性设置为所需的值。
使用以下语法在密码文件中指定密码。
PasswordPropertyName= MyPassword
使用 —passfile 选项传递密码文件的名称。
密码文件可以包含以下列出的一个或多个密码。
用于打开 SSL 密钥库的密钥库密码。可使用 imq.keystore.password 属性指定此密码。
LDAP 系统信息库密码,用于在非匿名连接的情况下与 LDAP 目录进行安全连接。可使用 imq.user_repository.ldap.password 属性指定此密码。
用于连接到符合 JDBC 的数据库的 JDBC 数据库密码。可使用 imq.persist.jdbc.vendorName.password 属性指定此密码。属性名称的 vendorName 组件是用于指定数据库供应商的变量。选项包括 hadb、derby、pointbase、oracle 或 mysql。
imqcmd 命令(用于执行代理管理任务)的密码。可使用 imq.imqcmd.password 属性指定此密码。
在以下示例中,将 JDBC 数据库的密码设置为 abracadabra。
imq.persist.jdbc.mysql.password=abracadabra
可以将代理配置为使用密码文件,该文件可通过以下任一方法创建。
在代理的 config.properties 文件中设置以下属性。
imq.passfile.enabled=true |
imq.passfile.dirpath=MyFileDirectory |
imq.passfile.name=MyPassfileName |
使用 imqbrokerd 命令的 —passfile 选项。
imqbrokerd —passfile MyPassfileName
本部分包含 Message Queue 4.1 中的一般问题。其中某些问题是以前的 Message Queue 版本引入的。
使用 HTTP 传输的 JMS 客户端突然终止时(例如,使用 Ctrl-C),代理要花费大约一分钟的时间才能释放客户端连接和所有关联的资源。
如果在这一分钟内客户端的另一个实例启动,并且该实例尝试使用同一个客户端 ID、长期订阅或队列,则可能会收到“客户端 ID 已经在使用”的异常。这实际上不是什么问题,只是上述终止过程的副作用。如果客户端在延迟约一分钟后启动,则应当一切正常。
SOAP 客户端。以前,用于引用 mail.jar 和 mail.jar 的 SAAJ 1.2 实现 jar 无需位于 CLASSPATH 中。在 SAAJ 1.3 中删除了此引用,因此 Message Queue 客户端必须将 mail.jar 明确放入 CLASSPATH 中。
以下是有关管理和配置 Message Queue 的问题
在 Windows 计算机上,当 CLASSPATH 包含双引号时,imqadmin 和 imqobjmgr 实用程序将抛出错误(错误号 5060769)。
解决方法 可以忽略此错误消息;代理会正确处理,并将任何错误通知使用方。 此错误不影响系统的可靠性。
如果所提供的值中包含空格,则所有 Solaris 和 Windows 脚本中的 -javahome 选项都不起作用(错误号 4683029)。
Message Queue 命令和实用程序使用 javahome 选项来指定要使用的备用 Java 2 兼容运行时。但是,备用 Java 运行时的路径名不能包含空格。以下是包含空格的路径示例。
Windows:C:/jdk 1.4
Solaris: /work/java 1.4
解决方法 请在不包含空格的位置或路径中安装 Java 运行时。
imqQueueBrowserMaxMessagesPerRetrieve 属性指定客户端运行时环境在浏览队列的内容时一次检索到的最大消息数。请注意,客户端应用程序始终可以获取队列上的所有消息。因此,imqQueueBrowserMaxMessagesPerRetrieve 属性会影响如何对排队的消息进行分块,以便传送到客户端运行时环境(消息较少时用较大的块,或消息较多时用较小的块),但不会影响所浏览的全部消息。更改此属性的值可能会对性能产生影响,但不会导致客户端应用程序获取的数据增加或减少(错误号 6387631)。
以下问题将影响 Message Queue 代理。
在如何为循环传送配置代理方面一直存在一些误区。解决方案非常简单,并且可以对其进行配置。
将目的地属性 maxNumActiveConsumers 设置为 -1。这会打开循环传送功能。
将目的地属性 consumerFlowLimit 设置为 1。这会指定在向下一个使用方传送消息之前传送到某个使用方的消息数。对于不同的消息分块方式,请将此属性设置为所需的值。默认情况下,为每个使用方传送 100 个消息。
如果持久性存储库打开过多目的地,将无法访问代理。(错误号 4953354)。
解决方法 这种情况是由于代理达到了系统打开文件描述符限制所致。在 Solaris 和 Linux 上可使用 ulimit 命令来增加文件描述符限制。
目的地被销毁后,使用方将被孤立(错误号 5060787)。
目的地被销毁后,活动的使用方将被孤立。使用方孤立后,他们将不再接收消息(即使重新创建了目的地)。
解决方法 此问题没有解决方法。
以下问题会影响群集代理。
本发行版中只支持完全连接的代理群集。这意味着群集中的每个代理均必须与群集中的其他所有代理直接通信。如果使用 imqbrokerd -cluster 命令行变量连接代理,请务必小心以确保包含了群集中的所有代理。
使用 HADB 的代理无法处理大于 10 MB 的消息。(错误 6531734)
如果客户端连接到高可用性代理,客户端运行时环境将尝试重新连接,直到成功时为止(无论将 imqAddressListIterations 设置为什么值)
与作为群集一部分的代理连接的客户端目前不能使用 QueueBrowser 来浏览位于该集群中远程代理上的队列。此客户端只能浏览位于直接连接的代理上的队列的内容。此客户端仍可以向任何队列发送消息,或使用来自集群中任何代理上的任何队列的消息,此限制只影响浏览。
在传统群集中,如果要将 4.1 代理和 3.x 代理放在一个群集中,必须为 4.1 代理设置属性 imq.autocreate.queue.maxNumActiveConsumers=1。否则,这些代理将无法建立群集连接。
在转换为高可用性群集时,可以使用 Message Queue 管理器实用程序 (imqdbmgr) 将现有的独立 HADB 持久性数据存储库转换为共享 HADB 存储库。这些命令如下所示。
imqdbmgr upgrade hastore
在下列情况下,您可以使用此实用程序。
从 4.0 独立 HADB 存储库移到 4.1 共享 HADB 存储库。在这种情况下,代理将自动升级存储库。可随后运行 imqdbmgr 命令,转换升级的数据存储库以进行共享使用。
从 4.1 独立 HADB 存储库移到共享 HADB 存储库。在这种情况下,您只需运行上面所示的 imqdbmgr 命令,转换数据存储库以进行共享使用。
由于此命令仅支持 HADB 存储库转换,因此,无法使用它将基于文件的存储库或其他 JDBC 存储库转换为共享 HADB 存储库。如果以前运行 3.x 版本的 Message Queue,则必须创建一个 HADB 存储库,然后手动将数据迁移到该存储库中以便使用高可用性功能。
如果 HADB 存储库存储的消息超过 10,000 个,则使用 imqdbmgr upgrade hastore 命令转换为 HADB 存储库的操作可能会失败,并显示“设置的锁定太多”消息。(错误号 6588856)。
(解决方法) 使用以下命令增加锁定数。
hadbm set NumberOfLocks=<desiredNumber>
有关其他信息,请参见 Sun Java System Application .Server 9.1 Enterprise Edition Troubleshooting Guide 中的 "HADB Problems"。
如果在一个事务中提交的远程消息超过 500 个,代理可能会返回错误“HADB-E-12815:表内存空间已用尽。”(错误号 6550483)
有关其他信息,请参见 Sun Java System Application .Server 9.1 Enterprise Edition Troubleshooting Guide 中的 "HADB Problems"。
在代理群集中,代理会对要传送到尚未启动的远程连接的消息进行排队(错误号 4951010)。
解决方法 一旦启动远程连接,这些消息将会由使用方接收。如果该使用方的连接关闭,这些消息将重新传送给另一个使用方。
如果在一个事务中使用多个来自远程代理的消息,则可能会在该代理中记录以下错误消息。该消息是无害的,可以将其忽略:
[26/Jul/2007:13:18:27 PDT] WARNING [B2117]: Message acknowledgement failed from mq://129.145.130.95:7677/?instName=a&brokerSessionUID=3209681167602264320: ackStatus = NOT_FOUND(404)\ Reason = Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed. AckType = MSG_CONSUMED MessageBrokerSession = 3209681167602264320 TransactionID = 3534784765719091968 SysMessageID = 8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690 ConsumerUID = 3534784765719133952\par [26/Jul/2007:13:18:27 PDT] WARNING Notify commit transaction [8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690, [consumer:3534784765719133952, type=NONE]] TUID=3534784765719091968 got response: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.r
如果 imq.txn.reapLimit 属性与一个事务中的远程消息数相比较小,当通知将事务中的后续消息提交到消息主代理时,将会记录此消息。(错误 6585449)
解决方法 要避免出现此消息,请增加 imq.txn.reapLimit 属性的值。
在 Windows 平台上,事务管理器监视 MBean 的 getTransactionInfo 方法将返回具有错误事务创建时间的事务信息(错误号 6393359)。
解决方法 请改用事务管理器监视 MBean 的 getTransactionInfoByID 方法。
您需要注意与 SOAP 支持有关的两个问题
从 Message Queue4.0 发行版开始,将不再为 SOAP 管理的对象提供支持。
SOAP 开发依赖于以下几个文件:SUNWjaf、SUNWjmail、SUNWxsrt 和 SUNWjaxp。在 Message Queue 4.1 版中,仅当运行带有 JDK 1.6.0 或更高版本的 Message Queue 时,才能使用这些文件。