本发行说明包含了发行 Sun Java™ System Message Queue 3.7 UR1 ("Message Queue") 时可用的重要信息。本说明主要介绍新增功能和增强功能、已知问题和限制以及其他信息。在使用 Message Queue 之前,请先阅读本文档。
本发行说明的最新版本位于 Sun 文档 Web 站点:http://docs.sun.com。请在安装和设置软件前仔细查阅此 Web 站点,完成安装和设置后也要定期查看最新的发行说明和产品文档。
本发行说明包含以下部分:
本文档引用了第三方 URL,并提供了其他相关信息。
Sun 对本文档中提到的第三方 Web 站点的可用性不承担任何责任。对于此类站点或资源中的(或通过它们获得的)任何内容、广告、产品或其他材料,Sun 并不表示认可,也不承担任何责任。对于因使用或依靠此类站点或资源中的(或通过它们获得的)任何内容、产品或服务而造成的或连带产生的实际或名义损坏或损失,Sun 概不负责,也不承担任何责任。
Sun Java System Message Queue 是一种功能全面的消息服务,它可以提供符合 Java Messaging Specification (JMS) 1.1 的可靠、异步的消息传送功能。此外,Message Queue 还提供了 JMS 规范之外的许多功能,以满足大型企业部署的需要。
Message Queue 3.7 UR1 是 Message Queue 3.6 的维护版本,它包含了一些错误修复和少量的增强功能。本部分包含以下信息:
以下各部分将介绍 Message Queue 3.7 UR1 的新增功能:
为了有效地简化产品的交付过程,我们已经将 Sun Java Message Queue 的 Platform Edition 和 Enterprise Edition 进行了合并。从 Message Queue 3.7 UR1 开始,只提供一个版本。该策略可有效排除独立发行版本的功能限制。希望此举能简化您对本产品的体验。
合并版本还可以让 Message Queue 更好地与 Solaris Enterprise System 配合使用,它提供了一种持久而广泛的权限,您无需支持、维护或进行任何功能补充,即可使用 Enterprise Edition 的功能。与早期发行版相同,我们提供了用于支持和维护服务的多种授权选项。Message Queue 仍将与 Java Enterprise System 和 Application Platform Suite 打包在一起。请查看在线商店(网址为 http://www.sun.com)或与销售代表联系,以找到最适合您的选项。下表描述了新单一版本的 Message Queue 的升级途径。
表 1–1 Message Queue 3.7 UR1 的升级途径
先前发行的版本 |
升级途径 |
注释 |
---|---|---|
Platform Edition |
Sun Java System Message Queue 3.7 UR1 |
现在这些用户可以使用所有功能。如果未购买许可证,则不提供任何支持选项。 |
Enterprise Edition |
Sun Java System Message Queue 3.7 UR1 |
功能未发生任何更改。提供了一定范围的授权和支持选项。 |
Platform Edition 支持合同 |
升级到 Enterprise Edition 支持合同 |
将继续续订先前发行的 Platform Edition 的现有支持合同。不会为先前发行的 Platform Edition 发布新的 Platform Edition 合同。 |
Enterprise Edition 支持合同 |
无更改。 |
继续续订现有合同。将会发布新的合同。 |
下表描述了各种 Message Queue 产品交付来源的更改。
表 1–2 Message Queue 产品交付来源的更改
产品 |
以前的交付来源 |
新的交付来源 |
注释 |
Message Queue |
不适用 |
Sun 下载中心产品页面 |
独立下载。仅支持社区。不提供支持合同。 |
Message Queue Platform Edition |
Sun 下载中心(通过 Message Queue 产品页面) |
不再提供 |
页面将全部指向单一版本的 Message Queue |
Message Queue Enterprise Edition 试用版(通过 Platform Edition) |
Sun 下载中心(通过 Message Queue 产品页面) |
不再需要试用版许可证 |
不再需要 |
Message Queue Enterprise Edition 90 天试用版(通过 Java Enterprise System 下载或 DVD) |
Java Enterprise System 下载中心,早于版本 3 GA(2006 年 3 月) |
Solaris Enterprise System 下载中心 |
Solaris Enterprise System 许可证。如果没有产品许可证,则不提供任何支持选项。 |
Message Queue Enterprise Edition(通过 SunStore、DVD、单个许可证、Java Enterprise System 许可证、Suite 许可证以及通过 Java Enterprise System 提供) |
Java Enterprise System 或 Suite 下载中心、介质 |
Solaris Enterprise System 或 Suite 下载中心、介质提供 |
无更改。 |
新函数:MQGetDestinationName()
MQGetDestinationName (const MQDestinationHandle destinationHandle, MQString * destinationName); |
使用此函数可以获取目的地的名称。返回的 destinationName 是一个副本,调用方通过调用 MQFreeString() 函数来负责释放该副本。
参数
要获取其名称的目的地的句柄。
名称的输出参数。
使用回复模式时,此函数会非常有用。可以使用 MQGetMessageReplyTo 函数获取要将消息发送到的目的地的句柄。然后可以使用 MQGetDestinationName 获取该目的地的名称。获取目的地名称之后,便可以根据此名称来处理消息。
新枚举值:MQ_MESSAGE
新的 MQMessageType (MQ_MESSAGE) 允许 C 客户端与其他使用 C 和 Java 的 Message Queue 客户端交换 Message 类型的 JMS 消息。
typedef enum _MQMessageType {MQ_TEXT_MESSAGE = 0, MQ_BYTES_MESSAGE = 1, MQ_MESSAGE = 3, MQ_UNSUPPORTED_MESSAGE = 2} MQMessageType; |
MQ_MESSAGE 类型用于标识具有标题和属性但没有消息主体的消息。使用 MQCreateMessage() 函数可创建此类型的消息。
新连接属性 MQ_UPDATE_RELEASE_PROPERTY,用于指定已安装的 Message Queue 的更新发行版本。使用 MQGetMetaData() 函数可获取版本信息。
为了提高性能,对 Message Queue 的持久性存储库格式进行了两处更改。一处是对文件存储库的更改,另一处是对 JDBC 存储库的更改。
文件存储库中的事务信息 - 已经对事务状态信息(存储在 Message Queue 的基于文件的持久性存储库中)的格式进行了更改,以减少磁盘 I/O 并提高 JMS 事务性能。
Oracle JDBC 存储库 - 在早期版本的 Message Queue 中,适用于 Oracle 的存储库结构使用 LONG RAW 数据类型来存储消息数据。在 Oracle 8 中,Oracle 引入了 BLOB 数据类型,不再使用 LONG RAW 类型。Message Queue 3.7 UR1 为此转而使用 BLOB 数据类型,以提高性能并提供更多支持。
由于这些更改会影响存储库的兼容性,因此存储库版本已由 350 更改为 370。Message Queue 3.7 UR1 支持将持久性存储库从早期的 200 和 350 版本自动转换为 370 版本(同时适用于 JDBC 存储库和基于文件的存储库)。imqbrokerd 首次启动时,如果实用程序检测到早期版本的存储库,则会将其迁移为新的格式,并保留早期的存储库。
如果需要回滚此升级,请首先卸载 Message Queue 3.7 UR1,然后重新安装以前运行的版本。由于未对存储库的早期副本进行任何更改,因此代理可以运行存储库的早期副本。
Sun Java Enterprise System 安装指南中提供了 Message Queue 的硬件和软件要求。
本部分介绍 Message Queue 3.7 UR1 中修复的错误。
表 1–3 在 Message Queue 3.7 UR1 中修复的错误
错误号 |
描述 |
---|---|
6193884 |
Message Queue 在非 C 语言环境下向系统日志输出垃圾消息。 |
6251450 |
在群集关闭过程中,connectList 抛出 ConcurrentModificationException。 |
6252763 |
java.nio.HeapByteBuffer.putLong/Int 中抛出 java.nio.BufferOverflowException。 |
6260076 |
使用 Oracle 存储库,在代理启动后的第一条消息发布完后,消息发布速度变得很慢。 |
6264003 |
队列浏览器显示未提交的消息。 |
6260814 |
对 JMSXUserID 进行处理的选择器始终得到 false 值。 |
6271876 |
关闭具有未使用消息的使用方时,连接流控制无法正常工作。 |
6284769 |
QueueBrowser 泄漏内存,即使为每个枚举创建一个新浏览器然后关闭该浏览器也是如此。 |
6294767 |
Message Queue 代理需要在其打开的网络套接字上设置 SO_REUSEADDR。 |
6304043 |
对于共享的非长期订阅,代理并不验证 clientID 是否为非 Null。 |
6307056 |
Txn 日志成为性能瓶颈。 |
6320138 |
Message Queue C API 无法通过回复标头确定队列的名称。 |
6320325 |
即使在 Solaris OS 上同时安装了 JDK 1.4 和 JDK 1.5,代理有时也会选取前者。 |
6321117 |
多代理群集初始化时抛出 java.lang.NullPointerException。 |
6330053 |
通过订户提交事务时,JMS 客户端抛出 java.lang.NoClassDefFoundError。 |
6340250 |
支持 C-API 中的 MESSAGE 类型。 |
6351293 |
添加对 Derby 数据库的支持。 |
6381693 |
对于重新传送到远程使用方(在该使用方的代理重新启动后)的消息,JMSRedelivered 标志被设置为 false。 |
6388049 |
无法清除不完整的 XA 事务。 |
6403968 |
添加基于使用方的流控制协议,以实现多个接收者的负载平衡。 |
6403958 |
当停用消息队列尝试删除最早的非持久性消息时引发代理异常。 |
6406862 |
代理错误“监视目的地错误 mq.metrics.destination.queue.Name”。 |
6415068 |
在 AS 8.1 UR2(JMS Message Queue 的通用资源适配器)中执行事务恢复时失败。 |
6421781 |
支持使用以下语法连接到代理 —b mqtcp://hostName:portNumber/serviceName |
6423696 |
Session.rollback 实际上不会在出现 COMMIT REPLY 错误之后回滚已使用的消息。 |
6314103 |
如果目录名称中包含空格,则无法安装 Message Queue。. |
6314088 6392963 |
如果目录名称的长度超过 6 个字符,则无法安装 Message Queue。例如,C:\Software\Sun。 |
本部分介绍核心产品文档中未包括的最新信息。本部分包含以下主题:
有关在 Solaris、Linux 和 Windows 平台上将 Message Queue 作为独立产品进行安装的预安装说明、升级步骤以及其他所有信息,请参阅《Sun Java System Message Queue 3.7 UR1 Installation Guide》。
有关在 Solaris、Linux、HPUX 和 Windows 操作系统上安装 Message Queue 产品(与 Java Enterprise System 捆绑在一起)的预安装说明和其他所有信息,请参阅 Sun Java Enterprise System 安装指南。
有关在 Solaris、Linux、HPUX 和 Windows 操作系统上升级到 Message Queue(作为 Java Enterprise System 的一部分)的升级和迁移说明的信息,请参阅 Sun Java Enterprise System 升级和迁移指南。
本部分包含 Message Queue 3.7 UR1 中的兼容性问题。
Message Queue 使用的许多接口可能会随着时间的变化而发生更改。《Sun Java System Message Queue 3.7 UR1 Administration Guide》中的附录 B “Stability of Message Queue Interfaces”针对接口的稳定性对其进行了分类。接口越稳定,在产品的后续版本中对其进行更改的可能性就越小。
在 Message Queue 下一个主要发行版中进行的某些更改可能会导致您的客户端与该发行版不兼容。现在提供此信息是为了让您针对这些更改做好准备。
作为 Sun Java System Message Queue 的一部分进行安装的个别文件的位置可能会发生更改。如果现有的应用程序依赖于某些 Message Queue 文件的当前位置,则经过调整后(即文件的位置发生更改),这些应用程序可能会中断。
3.5 及更早版本的代理可能无法继续在具有较高版本代理的群集中运行。
在以后的发行版中,Message Queue 客户端可能无法使用早于 1.3 的 JDK 版本。
以下部分介绍对 Message Queue 文档的更新和更改(而非较小的更正和增补)。
《Sun Java System Message Queue 3.7 UR1 Installation Guide》(Message Queue 独立版本的安装信息文档)已更新,以反映特定于平台的信息。
《Sun Java System Message Queue 3.7 UR1 Developer’s Guide for C Clients》已更新,以反映新增的 MQGetDestinationName 函数、MQ_Message 消息类型和 MQ_UPDATE_RELEASE_PROPERTYY 连接属性。
《Sun Java System Message Queue 3.7 UR1 Developer’s Guide for Java Clients》已更新,包含了有关设置安全客户端、以及客户端应如何处理自动重新连接期间所发生异常的信息。
《Sun Java System Message Queue 3.7 UR1 Administration Guide》已更新,提供了有关代理数据库表以及将代理配置为使用固定端口的信息。
本部分包含了 Message Queue 3.7 UR1 中已知问题的列表。涵盖以下产品领域:
有关当前错误、错误的状态和解决方法的列表,Java Developer ConnectionnSM 成员应参见 Java Developer Connection Web 站点上的 "Bug Parade" 页,其网址为 http://bugs.sun.com/bugdatabase/index.jsp。在报告新的错误之前请先查看该页。虽然未列出所有的 Message Queue 错误,但如果您想了解是否已报告了某个问题,可以将该页作为一个很好的起点。
可以免费获得 Java Developer Connection 成员资格,但需要进行注册。有关如何成为 Java Developer Connection 成员的详细信息,请访问 Sun 的 "For Developers" Web 页。
要报告新错误或提交功能请求,请向 imq-feedback@sun.com 发送电子邮件。
使用 SSL 的连接服务当前仅支持自签名服务器证书,即信任主机模式。
使用 HTTP 传输的 JMS 客户端突然终止时(例如,使用 Ctrl-C),代理要花费大约一分钟的时间才能释放客户端连接和所有关联的资源。
如果在这一分钟内客户端的另一个实例启动,并且该实例尝试使用同一个客户端 ID、长期订阅或队列,则可能会出现“客户端 ID 已经在使用”的异常。此异常只是上述终止过程中产生的副作用。如果推迟大约一分钟再启动客户端,则不会出现任何问题。
在 Message Queue 3.7 UR1 中,config.properties 文件的注释部分提供了将 LDAP 服务器作为用户系统信息库的示例代理配置。而 default.properties 文件中的 LDAP 用户系统信息库示例已被注释掉。
如果您以前使用示例 LDAP 用户系统信息库属性(在 default.properties 文件中指定)中的任何属性值,则当您升级到 Message Queue 3.7 UR1 时,如果 JMS 应用程序客户端尝试创建 JMS 连接,则会收到一个安全异常。
当 JMS 客户端尝试连接到 Message Queue 3.7 UR1 代理时,代理日志中会记录一个错误,且 JMS 客户端会收到以下异常:
SecurityException. 20/Aug/2004:11:16:41 PDT] ERROR [B4064]: Ldap repository ldap property .uidattr not defined for authentication type basic:com.sun.messaging.jmq.auth.LoginException: [B4064]: Ldap repository ldap property .uidattr not defined for authentication type basic
解决方法:请按照《Sun Java System Message Queue 3.7 UR1 Administration Guide》中的第 7 章 “Managing Security”中的说明来设置代理属性 imq.user_repository.ldap.uidattr。
以下各项内容与代理群集的使用相关。
本发行版中只支持完全连接的代理群集。因此群集中的每个代理都必须与群集中的其他所有代理直接通信。如果使用 imqbrokerd -cluster 命令行参数连接代理,请确保包含了群集中的所有代理。
如果客户端只与某个代理(属于群集的一部分)进行连接,则此客户端目前无法使用 QueueBrowser 来浏览位于该群集中远程代理上的队列。此客户端只能浏览位于直接连接的代理上的队列的内容,但仍可以向群集中任何代理上的任意队列发送消息或使用来自对方的消息。该限制只影响浏览。
如果代理群集中未使用主代理,则对于要添加到群集中的代理来说,其存储的持久性信息将不会传播到群集中的其他代理。
在代理群集中,代理会对要传送到尚未启动的远程连接的消息进行排队(错误号 4951010)。
解决方法:一旦启动远程连接,这些消息将会由使用方接收。如果该使用方的连接关闭,则这些消息将重新传送给另一个使用方。
以下是有关管理和配置 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 代理。
在 Windows 2000 中,HTTPS createQueueConnection 偶尔会抛出异常(错误号 4953348)。
解决方法:重试连接。
当使用 Ctrl-C 关闭代理时,事务可能会在存储库关闭后被清除(错误号 4934446)。
如果在处理消息或事务时关闭代理,代理可能会显示错误消息“存储库关闭后访问存储方法”。
解决方法:您可以忽略此错误消息,代理只是正确地向使用方通知所出现的任何错误。此错误不会影响系统的可靠性。
目的地销毁后,使用方会被孤立(错误号 5060787)。
目的地销毁后,活动的使用方将被孤立。使用方一旦孤立,他们将再也收不到消息(即使重新创建了目的地也是如此)。
解决方法:此问题没有解决方法。
无法使用 JMSMessageID 来选择消息(错误号 6196233)。
解决方法:更改选择器,将下面的表达式
JMSMessageID = "ID:message-id-string"
更改为
JMSMessageID IN (’ID:message-id-string’, ’message-id-string’)
Message Queue 3.7 UR1 不包含独立产品。对于此发行版,必须使用 Java Enterprise System 安装程序来安装 Message Queue。请参阅 Sun Java System 安装指南以获取说明信息。
Message Queue“菜单”->“索引”显示了错误的产品文档 URL 和自述文件位置(错误号 6515574)
描述:当用户通过 Windows“开始”菜单,选择 Message Queue 的文档项时,显示的内容是早期的文档。
解决方法:访问 http://docs.sun.com/app/docs/coll/1307.2 和 http://docs.sun.com/app/docs/coll/1391.2 Web 站点上的文档。
“添加/删除程序”控制面板列出了 Sun Java Enterprise System 而不是 Message Queue。
Config_MQ.txt 文件包含错误的信息。以下各项纠正了其中的一些错误:
Message Queue 中不提供“自动配置”和“手动配置”选项,并且不提供用于设置管理员密码的选项。
“自动配置”选项可以自动安装并启动 Message Queue 代理 Windows 服务。
“手动配置”选项允许您安装 Message Queue 代理,而无需将其作为一项 Windows 服务进行启动。
如果磁盘空间不足,则尝试在该磁盘上进行安装时会出现意义不明确的错误消息。例如,“错误:-1603 安装过程中出现致命错误。”
安装期间,没有将 mq/bin 添加到路径中(错误号 6515557)
描述:无法通过 Windows 命令提示找到 Message Queue 的可执行文件。例如,键入 imqcmd 将触发以下错误:无法将 'imqcmd' 识别为内部或外部命令、可操作的程序或批处理文件。
解决方法:将 install-MQ-directory/bin 加入 PATH 变量,或者在 install-MQ-directory/bin 目录下运行应用程序。
Message Queue 安装不支持自动安装共享的组件。
解决方法:使用 JDK 版本 1.6.0(SOAP 组件位于 1.6.0 中),或者在 Windows 上安装 Application Server,由 Application Server 安装 SOAP 共享的组件。
Sun Java System Message Queue 3.7 UR1 包含下面一组文件,您可以使用这些文件,并以二进制格式分发它们:
jms.jar |
libmqcrt.so (UNIX) |
imq.jar |
libmqcrt.so (HPUX) |
imqxm.jar |
mqcrt1.dll (Windows) |
fscontext.jar |
|
此外,还可以再分发 LICENSE 和 COPYRIGHT 文件。
欲获得自本介质发行以来所发布的辅助功能,请联系 Sun 以获取有关 "Section 508" 法规符合性的产品评估文档,以便确定哪些版本最适合部署辅助功能解决方案。可通过以下网址获取应用程序的更新版本:
http://sun.com/software/javaenterprisesystem/get.html
有关 Sun 在辅助功能方面所做出的努力,请访问 http://sun.com/access。
如果您在使用 Sun Java System Message Queue 期间遇到问题,请通过以下方式与 Sun 客户支持部门联系:
位于 http://www.sun.com/service/sunone/software 的 Sun 软件支持联机服务。
此站点包含一些链接,通过这些链接,您可以访问知识库、联机支持中心、Product Tracker,还可以了解维护方案以及支持部门的联系电话。
随维护合同一起分发的电话号码。
为了更好地帮助您解决问题,请在联系支持部门时提供以下信息:
问题描述,包括问题出现时的情况以及对您操作造成的影响。
计算机类型、操作系统版本和产品版本,包括可能影响此问题的所有修补程序和其他软件。
用来再现该问题的详细步骤。
所有错误日志或核心转储。
以下位置提供了一个 Sun Java System Message Queue 论坛:
http://swforum.sun.com/jive/forum.jspa?forumID=24
我们欢迎您的参与。
Java 技术论坛中有一个您可能会感兴趣的 JMS 论坛:
Sun 致力于提高其文档的质量,并十分乐意收到您的意见和建议。
要共享您的意见,请访问 http://docs.sun.com,然后单击“发送意见”(Send Comments)。在联机表单中,请提供文档标题和文件号码。文件号码包含七位或九位数字,您可以在书的标题页或在文档顶部找到该号码。例如,本书的标题为《适用于 Microsoft Windows 的 Sun Java System Message Queue 3.7 UR1 发行说明》,文件号码为 820-1811。
提出意见时,您还需要在表格中输入文档的英文文件号码和标题。本文档的英文文件号码是 819-5693,文档标题为《Sun Java System Message Queue 3.7 UR1 Release Notes for Microsoft Windows》。
从以下 Internet 位置可以找到有用的 Message Queue 信息:
文档
专业服务
软件产品和服务
软件支持服务
支持和知识库
Sun 支持和培训服务
咨询和专业服务
开发者信息
Sun 开发者支持服务
软件培训