Sun Java System Message Queue 4.2 发行说明

Message Queue 4.2 的新增功能

Sun Java System Message Queue 是一种功能全面的消息服务,提供符合 Java Messaging Specification (JMS) 1.1 的可靠、异步的消息传送功能。此外,Message Queue 还提供 JMS 规范之外的许多功能,以满足大型企业部署的需要。

Message Queue 4.2 是一个次要发行版,其中包含很多增强功能和错误修复程序。本部分介绍了如何安装或升级到 Message Queue 4.2,并说明了此发行版中包含的新增功能:

有关 Message Queue 4.0 和 4.1 中引入的功能的信息,请分别参见Message Queue 4.0 的新增功能Message Queue 4.1 的新增功能

为发布者或订阅者提供多个目的地

在 Message Queue 4.2 中,发布者现在可以将消息发布到多个主题目的地;订阅者可以使用多个主题目的地中的消息。此功能是通过使用包含通配符的主题目的地名称(表示多个目的地)来实现的。通过使用此类符号名称,管理员可以根据需要创建与通配符命名方案保持一致的其他主题目的地。发布者可自动将消息发布到所添加的目的地,订阅者可自动使用其中的消息。(通配符主题订阅者比发布者更常见。)


注 –

此功能不适用于队列目的地。


符号主题目的地名称的格式包含多个段,其中通配符(*、 ** 和 >)可以表示名称中的一个或多个段。例如,假定主题目的地命名方案如下所示:

size.color.shape

其中,主题名称段可以具有以下值:

Message Queue 支持以下通配符:

因此,可以采用以下方式表示多个主题目的地:

large.*.circle 表示:

large.red.circle
large.green.circle
...

**.square 表示以 .square 结尾的所有名称,例如:


small.green.square
medium.blue.square
...

small.> 表示以 small. 开头的所有目的地名称,例如:


small.blue.circle
small.red.square
...

要使用此多目的地功能,请采用与上述类似的命名方案创建主题目的地。之后,客户端应用程序便可使用符号目的地名称创建发布者或使用方。例如:

...
String DEST_LOOKUP_NAME = "large.*.circle";
Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME);
TopicPublisher myPublisher = mySession.createPublisher(t)
myPublisher.send(myMessage);
...
String DEST_LOOKUP_NAME = "**.square";
Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME);
TopicSubscriber mySubscriber = mySession.createSubscriber(t);
Message m = mySubscriber.receive();

在第一个示例中,代理将消息副本放在与符号名称 large.*.circle 匹配的所有目的地中。在第二个示例中,如果至少有一个目的地与符号名称 **.square 匹配,则会创建一个订阅者,它将从与该符号名称匹配的所有目的地中接收消息。如果没有与该符号名称匹配的目的地,则在此类目的地出现后,才会创建订阅者。

如果管理员创建与某个符号名称匹配的其他目的地,则使用此符号名称创建的通配符发布者随后会将消息发布到该目的地,使用此符号名称创建的通配符订阅者随后将从该目的地中接收消息。

此外,Message Queue 管理工具除了报告主题目的地的发布者(生成方)和订阅者(使用方) 总数外,还会报告通配符发布者(包括对应的符号目的地名称)和通配符订阅者(包括对应的符号目的地名称)数(如果有)。

XML 有效负荷消息的模式验证

通过使用 Message Queue 4.2 中的此新功能,可以在将消息发送到代理时针对 XML 模式验证文本(不是对象)XML 消息的内容。XML 模式 (XSD) 位置是作为 Message Queue 目的地属性指定的。如果未指定 XSD 位置,则使用 XML 文档中的 DTD 声明来执行 DTD 验证。(XSD 验证包括数据类型和值范围验证,它比 DTD 验证更严格。)

使用此新功能的客户端应用程序应将 Java SE 版本升级到 JRE 1.5 或更高版本。

要启用 XML 模式验证,请设置以下物理目的地属性:

表 1–5 用于 XML 模式验证的物理目的地属性

属性 

类型 

默认值 

描述 

validateXMLSchemaEnabled

Boolean 

false

是否启用 XML 模式验证? 

如果设置为 false 或未进行设置,则不会为目的地启用 XML 模式验证。

XMLSchemaURIList

String 

null 

以空格分隔的 XML 模式文档 (XML Schema Document, XSD) URI 字符串列表 

这些 URI 指向用于 XML 模式验证(如果启用)的一个或多个 XSD 的位置。 

如果指定多个 URI,应使用双引号将该值引起来。 

示例: 

"http://foo/flap.xsd http://test.com/test.xsd"

如果未设置此属性或将其设置为 null,并且启用了 XML 验证,则使用在 XML 文档中指定的 DTD 来执行 XML 验证。 

reloadXMLSchemaOnFailure

Boolean 

false

是否在失败时重新装入 XML 模式? 

如果设置为 false 或未进行设置,则不会在验证失败时重新装入该模式。 

在启用 XML 验证后,Message Queue 客户端运行时环境将尝试针对指定的 XSD(如果未指定 XSD,则针对 DTD)验证 XML 消息,然后将其发送至代理。如果找不到指定的模式或无法验证消息,则不会发送消息,而是将抛出异常。

可以在创建或更新目的地时分别使用 imqcmd create dstimqcmd update dst 命令设置 XML 验证属性。XML 验证属性应该在目的地处于非活动状态时进行设置:即,目的地没有使用方和生成方并且目的地中没有消息时。


注 –

如果在运行时无法访问 XSD,则可能需要在目的地处于活动状态时修改 XMLSchemaURIList


如果在目的地处于活动状态时(例如,生成方已连接到目的地时)设置了任何 XML 验证属性,则在生成方重新连接到代理后,更改才会生效。同样,如果由于变更应用程序要求而更改了 XSD,则必须将基于更改的 XSD 生成 XML 消息的所有客户端应用程序重新连接到代理。

如果将 reloadXMLSchemaOnFailure 属性设置为 true 并且 XML 验证失败,Message Queue 客户端运行时环境将尝试重新装入 XSD,然后再次验证消息。如果无法使用重新装入的 XSD 进行验证,客户端运行时环境将抛出异常。

C-API 的分布式事务支持

根据 X/Open 分布式事务模型,分布式事务支持依赖于分布式事务管理器,后者跟踪并管理一个或多个资源管理器所执行的操作。在 Message Queue 4.2 中,Message Queue C-API 现在支持 XA 接口(位于分布式事务管理器和 Message Queue 之间,作为符合 XA 的资源管理器),以使分布式事务处理环境(如 BEA Tuxedo)中运行的 Message Queue C-API 客户端能够参与分布式事务。

这种分布式事务支持包含以下用于实现 XA 接口规范的新 C-API 函数(以及新参数和错误代码):

MQGetXAConnection()
MQCreateXASession()

如果要在分布式事务上下文中使用 C 客户端应用程序,该应用程序必须使用 MQGetXAConnection() 获取连接,并使用 MQCreateXASession() 创建会话以生成和使用消息。任何分布式事务的启动、提交和回滚操作都是通过分布式事务管理器提供的 API 进行管理的。

公共信息

X/Open XA 接口规范需要以下有关符合 XA 的 Message Queue 资源管理器的公共信息:

支持以下名称/值对:

表 1–6 Message Queue 资源管理器名称/值对

名称 

值 

描述 

默认值 

address 

host:port

代理的端口映射器服务的主机:端口。 

localhost:7676

username 

字符串 

用于连接到代理的用户名 

guest

password 

字符串 

用户名的密码 

guest

conntype 

TCP 或 SSL 

连接代理的协议类型 

TCP

trustedhost 

true/false 

代理主机是否可信(仅适用于 conntype=SSL) 

true

certdbpath 

字符串 

包含 NSS 证书和密钥数据库文件的目录的完整路径 

未设置 

clientid 

字符串 

仅对 JMS 持久订阅是必需的 

未设置 

reconnects 

整数 

重新连接到代理的尝试次数(0 表示不重新连接) 

0

编程示例

要编写使用分布式事务的应用程序,请创建一个在事务管理器环境中运行的服务器端服务,以及调用事务管理器 API 的客户端代码。Message Queue 4.2 提供了一些基于 Tuxedo 事务管理器的编程示例。这些示例位于每个平台 ./C/tuxedo 目录下的样例程序目录中。

此目录包含一个 README 文件,它说明了如何设置 Tuxedo 以使用 Message Queue 资源管理器,以及如何在 Tuxedo 环境中生成以下样例程序:

样例程序 

描述 

jmsserver.c

实现 Tuxedo 服务以通过 Message Queue 发送和接收消息。 

jmsclient_sender.c

使用 jmsserver.c 程序中的消息生成服务的 Tuxedo 客户端。

jmsclient_receiver.c

使用 jmsserver.c 程序中的消息接收服务的 Tuxedo 客户端。

async_jmsserver.c

实现 Tuxedo 服务以通过 Message Queue 异步使用消息。 

jmsclient_async_receiver.c

使用 async_jmsserver.c 程序中的异步消息使用服务的 Tuxedo 客户端。

安装程序的 Sun Connection 注册支持

Message Queue 安装程序已进行了改进,允许在 Sun Connection 中注册 Message Queue,这是 Sun 托管的一项服务,可帮助跟踪、管理和维护 Sun 硬件和软件。

在 Message Queue 安装过程中,您可以选择在 Sun Connection 中注册 Message Queue。安装的 Message Queue 的相关信息(如发行版本、主机名、操作系统、安装日期以及其他此类基本信息)将安全地传送到 Sun Connection 数据库。Sun Connection 清单服务可帮助您管理 Sun 硬件和软件;更新服务可通知您最新的可用安全修复程序、建议的更新以及增强功能。

在 Message Queue 4.2 中,为 Sun Connection 注册添加了以下安装程序屏幕:

Sun Connection 注册屏幕。

此注册要求您具有一个 Sun 联机帐户,或者您也可以创建一个帐户。如果您还没有帐户,安装程序将提供以下屏幕以创建 Sun 联机帐户:

用于创建 Sun 联机帐户的屏幕。

您可以在安装过程中使用上述屏幕注册 Message Queue,也可以等到安装完成后使用以下命令在仅限注册模式下运行安装程序:

# installer -r

仅限注册模式要求已安装了 Message Queue 4.2,并且它仅显示与注册相关的安装程序屏幕。

MySQL 数据库支持

Message Queue 4.2 支持将 MySQL 数据库作为基于 JDBC 的数据存储库。可以将 MySQL Cluster Edition 用作独立代理的 JDBC 数据库,以及高可用性代理群集所需的高可用性共享数据存储库。有关将 Message Queue 配置为使用 MySQL 的信息,请参见《Sun Java System Message Queue 4.2 Administration Guide》中的“Configuring a JDBC-Based Data Store”以及《Sun Java System Message Queue 4.2 Administration Guide》中的“High-Availability Cluster Properties”