本部分包含了 Message Queue 4.2 中已知问题的列表。涵盖以下产品领域:
有关当前错误、错误的状态和解决方法的列表,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.2 相关的问题。
与 Message Queue 4.1 类似,Message Queue 4.2 是由相对较新的安装程序安装的,该安装程序还可安装并升级 Message Queue 所需的 Java Enterprise System (Java ES) 共享组件,例如,JDK、NSS 和 JavaHelp 等。
新 Message Queue 安装程序和旧 Java ES 安装程序(用于安装以前的 Message Queue 版本)不能共享同一个产品注册表。如果 Message Queue 安装程序删除随 Java ES 安装程序安装的 Message Queue 版本并升级到 Message Queue 4.2,Java ES 产品注册表可能会处于不一致的状态。因此,如果运行 Java ES 卸载程序,它可能会误删 Message Queue 4.2 及其依赖的共享组件,即使这些内容并不是它安装的。
升级 Java ES 安装程序所安装的 Message Queue 软件的最佳方法如下所示。
使用 Java ES 卸载程序删除 Message Queue 及其共享组件。
使用 Message Queue 安装程序安装 Message Queue 4.2。
在 Windows 上安装 Message Queue 时,请注意以下限制。
安装程序没有在“开始”>“程序”菜单中添加 Message Queue 条目。(错误 6567258)
解决方法:要启动管理控制台,请使用《Sun Java System Message Queue 4.2 Administration Guide》中的“Starting the Administration Console”所示的命令行。
安装程序没有将 IMQ_HOME\mq\bin 目录添加到 PATH 环境变量中。(错误 6567197)
解决方法:在调用 Message Queue 实用程序 (IMQ_HOME\mq\bin\ command) 时,用户需要将此条目添加到其 PATH 环境变量中,或者提供完整的路径名。
安装程序没有将条目添加到 Windows 注册表中,以表明安装了 Message Queue。(错误 6586389)
在无提示模式下使用应答文件运行安装程序时,该程序将立即返回。确实执行了安装;但用户无法知道无提示安装实际上是何时完成的。(错误 6586560)
如果尝试在 Windows 上以文本模式运行安装程序 (installer –t),则会导致以英语显示一条错误消息,即使安装程序在非英语环境中运行。Windows 上不支持文本模式。(错误 6594142)
默认情况下,安装程序不会在与安装操作系统相同的驱动器上安装 Message Queue。(错误 6673511)
对于 Windows 上的安装和卸载,用户无法运行 .bat 文件,也无法使用 Windows 控制面板中的“添加/删除程序”进行卸载。(错误 6673417)
在 Windows Vista 上,无法在 C:\Program Files 下安装 Message Queue,除非以管理员身份通过命令提示符进行安装。(错误 6701661)
解决方法:以管理员身份通过命令提示符进行安装:
1.“开始”->“程序”->“附件”->“命令提示符”。
2. 右键单击“命令提示符”。
3. 选择“以管理员身份运行”。
4. 转到 Message Queue 4.2 安装映像所在的目录。
5. 运行 installer.vbs。
在模拟运行模式下运行卸载程序 (uninstaller -n) 时,它将错误地执行卸载。(错误 6719051)
解决方法:使用以下命令执行无提示安装:
uninstaller -s
安装程序主目录页上的 "Install Home" 字符串没有进行本地化。(错误 6592491)
在模拟运行模式下运行安装程序 (installer –n ) 时,“摘要”屏幕将显示一些错误消息,并且还会显示“不完整”安装状态。此状态是错误的并且会误导用户;模拟运行并未在系统上安装任何内容;它仅创建一个可随后用于执行无提示安装的应答文件。(错误 6594351)
在无提示安装模式下使用应答文件运行安装程序 (installer -a filename -s) 时,该程序不执行 Sun Connection 注册。(错误 6710268)
在文本模式下运行安装程序时,以及在输入用户名或密码进行 Sun Connection 注册或创建联机帐户时,无法使用 Backspace 键更正用户名或密码。(错误 6673460)
解决方法:使用 Control-H 组合键而不是 Backspace 键,或者使用其他终端仿真器,如 dtterm 或 xterm。
安装程序上的“升级”屏幕并未始终正确报告现有的 Message Queue 安装版本或安装程序引擎版本。(错误 6679765)
如果在文本模式下使用安装程序并尝试使用无效的用户名和密码进行 Sun Connection 注册,安装程序将显示“无法注册”对话框、抛出 Null 指针异常并退出。(错误 6666365)
以下问题会影响 Linux 平台上的安装
在“JDK 选择”面板上,滚动列表仅显示一项。这使得在列表中选择其他 JDK 变得非常困难。(错误 6584735)
如果 JDK 是最新的,并且用户在“JDK 选择”屏幕上选择了“安装默认 JDK”,则安装程序仍会尝试安装 JDK,并报告无法安装软件包。尽管出现此问题,但安装已成功完成。(错误 6581310)
如果当前安装的 JDK 版本比 JDK 1.5.0_15(Message Queue 安装程序通常安装的版本)高,Message Queue 卸载程序将找不到默认的 IMQ_JAVAHOME 目录并返回错误。(错误 6673415)
解决方法:在运行 Message Queue 卸载程序之前,按如下所示手动安装 JDK 1.5。
# cd installImage/Product/UNIX/LINUX/X86/2.4/Packages
# rpm -i --force jdk-1.5.0_15–linux- arch.rpm
其中 arch 为 i586 或 amd64。
在模拟运行模式下运行安装程序 (installer –n) 时,“摘要”屏幕将显示一些错误消息,并且还会显示“不完整”安装状态。此状态是错误的并且会误导用户;模拟运行并未在系统上安装任何内容;它仅创建一个可随后用于执行无提示安装的应答文件。(错误 6594351)
这些问题会影响所有平台上的安装。
“准备安装”屏幕将产品名称显示为 "mq" 而不是 Sun Java System Message Queue 4.2。(错误 6650841)
当安装程序正在安装 Message Queue 4.2 并显示“进度”屏幕时,“取消”按钮处于活动状态。如果此时选择“取消”按钮,则会导致安装不完整或中断。(错误 6595578)
安装程序“摘要”屏幕包含一些链接,单击这些链接时将启动日志或摘要页面查看器。如果使用窗口关闭按钮 "X" 关闭此查看器窗口,而不是使用标有“关闭”的按钮, 则无法重新打开此查看器窗口。(错误 6587138)
解决方法:使用标有“关闭”的按钮关闭此窗口。
当计算机系统上装有旧版本的 Message Queue 和 NSS/NSPR 时,安装程序的“升级”屏幕仅列出需要升级的 Message Queue;它不会提到还需要升级 NSS 和 NSPR。不过,所有相关软件仍会得到升级(如“准备安装”屏幕所示,其中显示了正确信息)。(错误 6580696)
“JDK 选择”屏幕上的 JDK 列表处于活动状态,即使在未选择“选择 JDK”选项时。(错误 6650874)
安装程序未明确显示 Message Queue 版本信息。(错误 6586507)
在 Solaris 平台上,请参阅下表以确定安装程序所显示的 Message Queue 版本。
表 1–20 版本字符串转换
Solaris OS 上的安装程序显示的版本 |
对应的 Message Queue 发行版 |
---|---|
4.2.0.0 |
4.2 |
4.1.0.2 |
4.1 Patch 2 |
4.1.0.1 |
4.1 Patch 1 |
4.1.0.0 |
4.1 |
3.7.2.1 |
3.7 UR2 Patch 1 |
3.7.0.2 |
3.7 UR2 |
3.7.0.1 |
3.7 UR1 |
3.6.0.0 |
3.6 |
3.6.0.4 |
3.6 SP4 |
3.6.0.3 |
3.6 SP3 |
3.6.0.2 |
3.6 SP2 |
3.6.0.1 |
3.6 SP1 |
对于 3.6 SP4 修补程序发行版(如 3.6 SP4 Patch 1),安装程序显示的发行版字符串保持不变。您需要运行 imqbrokerd -version 命令以确定确切的版本。
在 Linux 平台上,安装程序显示的版本号采用以下格式。
majorReleaseNumber.minorReleaseNumber-someNumber
例如,3.7–22。它仅告诉我们这是 3.7 发行版之一,但没有指出具体的版本。要确定安装的 Message Queue 版本,请运行以下命令:
imqbrokerd -version。
以下问题与本地化问题有关。
在非英语语言环境中以文本模式运行安装程序 (installer –t) 时,多字节字符将显示为乱码。(错误 6586923)
在安装程序“进度”屏幕上,进度栏显示奇怪的字符。在非英语语言环境中,工具提示是固定编码的。(错误 6591632)
Windows 上不支持文本模式 (installer –t)。如果在 Windows 上以文本模式运行安装程序,则会显示错误消息。在非英语语言环境中运行安装程序时,不会本地化此消息。(错误 6594142)
无论在哪种语言环境中运行安装程序,安装程序的“许可证”屏幕都会显示英语许可证文本。(错误 6592399)
解决方法:要访问本地化的许可证文件,请查看 LICENSE_MULTILANGUAGE.pdf 文件。
未本地化安装程序使用帮助文本。(错误 6592493)
安装程序摘要 HTML 页上显示的字符串 "None" 是用英语固定编码的。(错误 6593089)
在德语语言环境中运行安装程序时,“欢迎”屏幕未显示在其他语言环境中看到的完整文本。(错误 6592666)
安装程序“安装主目录”屏幕上显示的字符串 "Install Home" 没有进行本地化。即使在非英语语言环境中运行安装程序,也会以英语显示该字符串。(错误 6592491)
在文本模式下运行安装程序 (installer –t) 时,无论在哪种语言环境中运行安装程序,都会使用英语响应选项 "Yes" 和 "No"。(错误 6593230)
安装程序“JDK 选择”屏幕上的浏览器按钮工具提示是使用英语固定编码的。(错误 6593085)
在以前版本的 Message Queue 中,可以对以下命令使用 —p 或 —password 选项以交互方式来指定密码:imqcmd、imqbrokerd 和 imdbmgr。从 4.0 版开始,将不再使用这些选项。
您可以创建一个密码文件以指定相关密码并使用 -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=passwordFileDirectory |
imq.passfile.name=passwordFileName |
使用相关命令的 -passfile 选项,例如:
imqbrokerd -passfile passwordFileName
以下是有关管理和配置 Message Queue 的问题
在 Windows 平台上,必须使用防火墙规则手动配置内置的 Windows 防火墙(默认情况下处于启用状态),以允许代理接受从客户端传入的连接。(错误 6675595)
在控制面板中双击“Windows 防火墙”。
必须在“用户帐户控制”对话框中单击“继续”才能打开“Windows 防火墙设置”对话框。
在“Windows 防火墙设置”对话框中,单击“例外”选项卡。
单击“添加程序”。
在“添加程序”对话框中,选择 java.exe,然后单击“浏览”。
Windows 将代理进程标识为 Java Platform SE 二进制文件。因此,请查找代理使用的 java.exe(通常位于 jdk1.5.0_15\jre\bin\java.exe)。
单击“更改范围”。
在“更改范围”对话框中,选择“任何计算机(包括 Internet 上的计算机)”。
单击“确定”。
在“添加程序”对话框中,单击“确定”。
在“Windows 防火墙设置”对话框中,单击“确定”。
在 Windows 平台上,当 CLASSPATH 包含双引号时,imqadmin 和 imqobjmgr 命令将抛出错误。(错误 5060769)
解决方法:打开命令提示符窗口并取消设置 CLASSPATH:
set classpath=
然后,在相同的命令提示符窗口中运行所需的命令,例如:
mqInstallHome\mq\bin\imqadmin
如果提供的值中包含空格,则所有 Solaris 和 Windows 脚本中的 -javahome 选项都不起作用。(错误 4683029)
Message Queue 命令和实用程序使用 javahome 选项来指定要使用的备用 Java 2 兼容运行时。但是,备用 Java 运行时的路径名不能包含空格。以下是包含空格的路径示例。
Windows:C:\jdk 1.4
Solaris: /work/java 1.4
解决方法:在不包含空格的位置或路径中安装 Java 运行时环境。
imqQueueBrowserMaxMessagesPerRetrieve 属性指定客户端运行时环境在浏览队列的内容时一次检索到的最大消息数。该属性影响将排队消息成批传送到客户端运行时环境的方式,而不会影响浏览的消息总数。该属性仅影响浏览机制,而不影响队列消息传送。(错误 6387631)
以下问题将影响 Message Queue 代理。
如果持久性数据存储库打开过多目的地,将无法访问代理。(错误 4953354)
解决方法:这种情况是由于代理达到了系统打开文件描述符限制所致。在 Solaris 和 Linux 上可使用 ulimit 命令来增加文件描述符限制。
目的地被销毁后,使用方将被孤立。(错误 5060787)
目的地被销毁后,活动的使用方将被孤立。使用方孤立后,他们将不再接收消息(即使重新创建了目的地)。
使用 HTTP 连接服务的 JMS 客户端突然终止时(例如,使用 Ctrl-C 组合键),代理要花费大约一分钟的时间才能释放客户端连接和所有关联的资源。
如果在这一分钟内客户端的另一个实例启动,并且该实例尝试使用同一个客户端 ID、长期订阅或队列,则可能会收到“客户端 ID 已经在使用”的异常。这实际上不是什么问题,只是上述终止过程的副作用。如果客户端在延迟约一分钟后启动,则应当一切正常。
将 MySQL 数据库用作数据存储库时,如果存储的消息超过 1 MB,则会抛出以下 SQL 异常:“查询数据包太大...”。(错误 6682815)
解决方法:启动 MySQL 服务器并将 --max_allowed_packet 选项的值设置为大于 1 MB(默认值)。例如,使用以下值:
--max_allowed_packet=60M
如果将 Java DB 数据库用作数据存储库,则会在存储消息时抛出以下 SQL 异常:“无法在请求的时间内获取锁定”。(错误 6691394)
解决方法:在代理的 config.properties 文件中添加以下属性值:
imq.persist.jdbc.derby.table.MYCONSTATE41.index.IDX2=CREATE INDEX &(index) ON $(name) (MESSAAGE_ID)
将 MySQL 数据库用作高可用性共享数据存储库时,需要使用一种机制将 MySQL 存储引擎配置为 NDBCLUSTER。(错误 6691394)
解决方法:在代理的 config.properties 文件中添加以下属性值:
imq.persist.jdbc.mysql.tableoption=EMGINE=NDBCLUSTER
以下问题影响代理群集。
本发行版中只支持完全连接的代理群集。这意味着群集中的每个代理均必须与群集中的其他所有代理直接通信。如果使用 imqbrokerd -cluster 命令行参数将代理连接到传统群集,请务必小心以确保包含了群集中的所有代理。
如果将客户端连接到高可用性代理群集中的代理,客户端运行时环境将尝试重新连接,直至成功为止(它忽略 imqAddressListIterations 连接工厂属性的值)。
客户端只能浏览位于其主代理上的队列内容。此客户端仍可以向任何队列发送消息,或使用来自群集中任何队列的消息,此限制只影响队列浏览。
在包含 4.2 版代理的传统群集中,所有代理必须为 3.5 或更高版本。
默认情况下,群集中的 Message Queue 4.2 和 4.1 代理无法与 Message Queue 3.7 或 3.6 代理进行互操作,因为这些版本的 imq.autocreate.queue.maxNumActiveConsumers 默认值并不相同。(错误 6716400)
解决方法:将 Message Queue 4.2 和 4.1 代理的 imq.autocreate.queue.maxNumActiveConsumers 默认值 -1 更改为以前版本的默认值 1。
在从传统群集转换为高可用性群集时,可以按照《Sun Java System Message Queue 4.2 Administration Guide》中的“Converting a Standalone Data Store to a Shared Data Store”所述,使用 Message Queue 数据库管理器实用程序 (imqdbmgr ) 将现有的基于 JDBC 的独立数据存储库转换为高可用性共享数据存储库。
使用 HADB 的代理无法处理大于 10 MB 的消息。(错误 6531734)
如果 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 时,才能使用这些文件。
以前,SAAJ 1.2 实现 .jar 直接引用 mail.jar。在 SAAJ 1.3 中删除了此引用,因此 Message Queue 客户端必须将 mail.jar 明确放入 CLASSPATH 中。