Sun Java System Application Server Enterprise Edition 8.2 管理指南

第 4 章 配置 Java 消息服务资源

本章介绍了如何为使用 Java 消息服务 (Java Message Service, JMS) 的应用程序配置资源。它包含以下小节:

关于 JMS 资源

Application Server 中的 JMS 提供者

Application Server 通过将 Sun Java System Message Queue(以前的 SUN ONE Message Queue)软件集成到 Application Server 中,实现了 Java 消息服务 (Java Message Service, JMS) API。对于基本的 JMS API 管理任务,请使用 Application Server 管理控制台。对于高级任务(包括管理 Message Queue 群集),请使用 MQ-install-dir/imq/bin 目录中提供的工具。

有关管理 Messge Queue 的详细信息,请参见 Message Queue Administration Guide

JMS 资源

Java 消息服务 (Java Message Service, JMS) API 使用两种被管理对象:

这些对象是以管理方式创建的,创建对象的方式特定于每个 JMS 实现。在 Application Server 中,执行以下任务:

JMS 应用程序使用 JNDI API 来访问连接工厂和目的地资源。通常,JMS 应用程序至少使用一个连接工厂和一个目的地。要了解所需创建的资源,请仔细研究应用程序或向应用程序开发者进行咨询。

连接工厂分为三种类型:

目的地有两种类型:

The J2EE 1.4 Tutorial》中有关 JMS 的章节提供了这两种通信和 JMS 其他方面的详细信息(请参见 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html)。

创建资源的顺序并不重要。

对于 J2EE 应用程序,请在 Application Server 部署描述符中指定连接工厂和目的地资源,如下所示:

JMS 资源与连接器资源之间的关系

Application Server 通过使用名为 jmsra 的系统资源适配器实现 JMS。用户创建 JMS 资源时,Application Server 会自动创建连接器资源,这些资源将显示在管理控制台树视图的“连接器”节点下。

对于用户创建的每个 JMS 连接工厂,Application Server 都将为其创建连接器连接池和连接器资源。对于用户创建的每个 JMS 目的地,Application Server 都将为其创建管理对象资源。用户删除 JMS 资源时,Application Server 将自动删除连接器资源。

可以通过使用管理控制台的“连接器”节点(而不是“JMS 资源”节点)来为 JMS 系统资源适配器创建连接器资源。有关详细信息,请参见第 7 章,连接器资源

JMS 连接工厂

JMS 连接工厂是允许应用程序以编程方式创建其他 JMS 对象的对象。这些受管对象将实现 ConnectionFactoryQueueConnectionFactoryTopicConnectionFactory 接口。使用 Application Server 管理控制台,可以创建、编辑或删除 JMS 连接工厂。创建新的 JMS 连接工厂时还将为工厂创建连接器连接池并创建连接器资源。

要使用命令行实用程序管理 JMS 连接工厂,请使用 create-jms-resourcelist-jms-resourcesdelete-jms-resource 命令。

JMS 目的地资源

JMS 目的地充当消息的系统信息库。使用管理控制台,可以创建、修改或删除 JMS 目的地资源。要创建新的 JMS 目的地资源,请选择“资源”>“JMS 资源”>“目的地资源”。在“目的地资源”页面中,可以指定以下各项:

要使用命令行实用程序管理 JMS 目的地,请使用 create-jms-resourcedelete-jms-resource 命令。


提示 –

要为 asadmin create-jms-resource 命令指定 addresslist 属性(格式为 host:mqport,host2:mqport,host3:mqport),请使用 \\ 转义 :。例如,host1\\:mqport,host2\\:mqport,host3\\:mpqport

有关使用转义符的更多信息,请参见 asadmin(8) 手册页。


JMS 物理目的地

在生产阶段,始终需要创建物理目的地。但是,在开发和测试阶段,不需要执行此步骤。应用程序首次访问目的地资源时,Message Queue 会自动创建目的地资源的 Name 属性指定的物理目的地。该物理目的地是临时的,并且将在 Message Queue 配置属性指定的时间段后过期。

要在管理控制台中创建物理目的地,请选择“配置”>“物理目的地”。在“创建物理目的地”页面中,指定物理目的地的名称并选择目的地类型(可以为 topicqueue)。有关“物理目的地”页面中字段和属性的更多详细信息,请参阅管理控制台联机帮助。

要进行生产,务必创建物理目的地。但是,在开发和测试阶段,不需要执行此步骤。应用程序首次访问目的地资源时,Message Queue 会自动创建目的地资源的 Name 属性指定的物理目的地。该物理目的地是临时的,并且将在 Message Queue 配置属性指定的时间段后过期。

要使用命令行实用程序管理 JMS 物理目的地,请使用 create-jmsdestflush-jmsdestdelete-jmsdest 命令。

JMS 提供者

配置 JMS 提供者的常规属性

使用管理控制台中的“JMS 服务”页面配置所有 JMS 连接都要使用的属性。在管理控制台中,选择“配置”>“Java 消息服务”。在“JMS 服务”页面中,可以控制以下常规 JMS 设置。

所有这些属性的值也可以在运行时更新。但是,只有那些在属性更新之后创建的连接工厂才会获取已更新的值。现有连接工厂将继续保持原始属性值。此外,为了使几乎所有值都生效,需要重新启动应用服务器。唯一无需重新启动应用服务器即可更新的属性是默认 JMS 主机。

要使用命令行实用程序管理 JMS 提供者,请使用 setjms-ping 命令。

访问远程服务器

将提供者和主机更改到远程系统将使所有 JMS 应用程序在远程服务器上运行。要在使用本地服务器的同时使用一个或多个远程服务器,请使用 AddressList 属性创建连接工厂资源从而创建访问远程服务器的连接。

外部 JMS 提供者

JMS 通用资源适配器是 Java EE Connector 1.5 资源适配器,它可以包含外部 JMS 提供者(例如 IBM Websphere MQ、Tibco EMS 和 Sonic MQ 等)的 JMS 客户机库,从而将任何 JMS 提供者与 Java EE 1.4 应用服务器(例如 Sun Java System Application Server)进行集成。适配器是 .rar 归档文件,可以使用 Java EE 1.4 应用服务器的管理工具进行部署和配置。

配置 JMS 通用资源适配器

可以使用应用服务器的管理工具来部署和配置 JMS 通用资源适配器。本节介绍如何为 Sun Java System Application Server 配置 JMS 通用资源适配器。总体而言,可以配置资源适配器以指明 JMS 提供者是否支持 XA。还可以指明 JMS 提供者可以使用哪种集成模式。资源适配器支持两种集成模式。第一种模式使用 JNDI 作为集成方法。在这种情况下,在 JMS 提供者的 JNDI 树下设置受管对象,并查找这些对象以供通用资源适配器使用。如果此模式不适于集成,还可以使用 JMS 受管对象 javabean 类的 Java 反射作为集成模式。您可以使用 Sun Java System Application Server 的管理控制台或 CLI 来配置此资源适配器。这与配置任何其他资源适配器相同。

配置通用资源适配器

在部署资源适配器之前,应使应用服务器能够访问 JMS 客户机库。对于某些 JMS 提供者,客户机库也可以包括本地库。在此类情况下,也应使应用服务器 JVM 能够访问这些本地库。

  1. 按照与部署连接器模块相同的方式部署通用资源适配器。

    有关执行此操作的步骤,请参阅管理控制台联机帮助。在部署过程中,请确保将通用资源适配器的位置指定为 install-dir/lib/addons/resourceadapters/genericjmsra/genericra.rar。此外,还必须指定资源适配器属性部分中介绍的属性。

  2. 创建连接器连接池。

    有关执行此操作的步骤,请参阅管理控制台联机帮助。在“新建连接器连接池”页面中,从“资源适配器”组合框中选择 genericra。此外,在“连接定义”组合框中选择 javax.jms.QueueConnectionFactory。还应指定ManagedConnectionFactory 属性部分中介绍的属性。

  3. 创建连接器资源。

    有关执行此操作的详细过程,可以参阅管理控制台联机帮助。在“新建连接器资源”页面中,选择在上一步骤中创建的连接池。

  4. 创建受管对象资源。

    有关执行此操作的详细过程,可以参阅管理控制台联机帮助。在“新建管理对象资源”页面中,从“资源适配器”中选择 genericra,从“资源类型”中选择 javax.jms.Queue。单击“下一步”,然后在下一个页面中单击“添加属性”。在“其他属性”表中,指定名为 DestinationProperties 的新属性,并将其值设置为 Name\\=clientQueue。有关更多属性的信息,请参见受管对象资源属性部分。

  5. 在 Sun Java System Application Server 中,对安全性策略进行以下更改。

    • 修改 sjsas_home/domains/domain1/config/server.policy,向其中添加 java.util.logging.LoggingPermission "control"

    • 修改 sjsas_home/lib/appclient/client.policy,向其中添加 permission javax.security.auth.PrivateCredentialPermission "javax.resource.spi.security.PasswordCredential * \"*\"","read";

资源适配器属性

下表列出了创建资源适配器时要使用的属性。

属性名称

有效值

默认值

说明

ProviderIntegrationMode

javabean/jndi

javabean

确定资源适配器与 JMS 客户机之间的集成模式。 

ConnectionFactoryClassName

可用于应用服务器类路径中的类的名称,例如: 

com.sun.messaging.ConnectionFactory

无 

JMS 客户机的 javax.jms.ConnectionFactory 实现的类名。在 ProviderIntegrationModejavabean 时使用。

QueueConnectionFactoryClassName

可用于应用服务器类路径中的类的名称,例如: 

com.sun.messaging.QueueConnectionFactory

无 

JMS 客户机的 javax.jms.QueueConnectionFactory 实现的类名。在 ProviderIntegrationModejavabean 时使用此属性。

TopicConnectionFactoryClassName

可用于应用服务器类路径中的类的名称,例如: 

com.sun.messaging.TopicConnectionFactory

无 

JMS 客户机的 javax.jms.TopicConnectionFactory 实现的类名称。在将 ProviderIntegrationMode 指定为 javabean 时使用此属性。

XAConnectionFactoryClassName

可用于应用服务器类路径中的类的名称,例如: 

com.sun.messaging.XAConnectionFactory

无 

JMS 客户机的 javax.jms.ConnectionFactory 实现的类名。在 ProviderIntegrationMode 指定为 javabean 时使用此属性。

XAQueueConnectionFactoryClassName

可用于应用服务器类路径中的类的名称,例如: 

com.sun.messaging.XAQueueConnectionFactory

无 

JMS 客户机的 javax.jms.XAQueueConnectionFactory 实现的类名。在 ProviderIntegrationMode 指定为 javabean 时使用此属性。

XATopicConnectionFactoryClassName

可用于应用服务器类路径中的类的名称,例如: 

com.sun.messaging.XATopicConnectionFactory

无 

JMS 客户机的 javax.jms.XATopicConnectionFactory 实现的类名。在 ProviderIntegrationModejavabean 时使用此属性。

TopicClassName

可用于应用服务器类路径中的类的名称,例如: 

com.sun.messaging.Topic

无 

JMS 客户机的 javax.jms.Topic 实现的类名。在 ProviderIntegrationModejavabean 时使用此属性。

QueueClassName

可用于应用服务器类路径中的类的名称,例如: 

 

com.sun.messaging.Queue

无 

JMS 客户机的 javax.jms.Queue 实现的类名。在将 ProviderIntegrationMode 指定为 javabean 时使用此属性。

SupportsXA

True/false

FALSE

指定 JMS 客户机是否支持 XA。 

ConnectionFactoryProperties

以逗号分隔的名称值对。 

无 

此属性指定 JMS 客户机的 javabean 属性名称以及 ConnectionFactory 的值。仅当 ProviderIntegrationModejavabean 时才需要此属性。

JndiProperties

以逗号分隔的名称值对。 

无 

此属性指定连接到 JMS 提供者的 JNDI 时使用的 JNDI 提供者属性。仅当 ProviderIntegrationModejndi 时才使用此属性。

CommonSetterMethodName

方法名 

无 

此属性指定某些 JMS 供应商在设置其受管对象属性时使用的常见设置方法 (setter method) 名。仅当 ProviderIntegrationModejavabean 时才使用此属性。在 Sun Java System Message Queue 中,此属性名为 setProperty

UserName

JMS 用户的名称 

无 

连接到 JMS 提供者时使用的用户名。 

Password

JMS 用户的密码。 

无 

连接到 JMS 提供者时使用的密码。 

RMPolicy

ProviderManagedOnePerPhysicalConnection

ProviderManaged

事务管理器使用 XAResourceisSameRM 方法来确定两个 XAResource 所表示的资源管理器实例是否相同。

RMPolicy 设置为 ProviderManaged(默认值)时,JMS 提供者将负责确定通用资源适配器中的 RMPolicyXAResource 包装器仅将 isSameRM 调用委托给消息队列提供者的 XA 资源实现。这应该适用于大多数消息队列产品。

某些 XAResource 实现(例如 IBM MQ Series)在每个物理连接中依赖于一个资源管理器。如果在单个事务中与同一队列管理器同时进行入站和出站通信(例如,当 MDB 向目的地发送响应时),这会导致出现问题。

RMPolicy 设置为 OnePerPhysicalConnection 时,通用资源适配器中 XAResource 包装器实现的 isSameRM 将检查两个 XAResource 是否使用同一物理连接,然后再委托给被包装的对象。有关此属性的其他信息,请参阅 Glassfish Web 站点上 Issue Tracker 数据库中的问题 5。

ManagedConnectionFactory 属性

创建连接器连接池时,将指定 ManagedConnectionFactory 属性。可以在 ManagedConnectionFactory 中覆盖创建资源适配器时指定的所有属性。下面给出了仅可用于 ManagedConnectionFactory 中的其他属性。

属性名称

有效值

默认值

说明

ClientId

有效的客户机 ID 

无 

由 JMS 1.1 规范指定的 ClientID

ConnectionFactoryJndiName

JNDI 名称 

无 

JMS 提供者的 JNDI 树中绑定的连接工厂的 JNDI 名称。管理员应在 JMS 提供者本身中提供所有连接工厂属性(clientID 除外)。仅当 ProviderIntegratinModejndi 时才使用此属性名称。

ConnectionValidationEnabled

true/false 

FALSE 

如果设置为 true,资源适配器将使用异常侦听器捕捉任何连接异常,并向应用服务器发送 CONNECTION_ERROR_OCCURED 事件。

受管对象资源属性

创建受管对象资源时,将指定本节中的属性。可以在受管资源对象中覆盖所有资源适配器属性。下面给出了仅可用于受管对象资源中的其他属性。

属性名称

有效值

默认值

说明

DestinationJndiName

JNDI 名称 

无 

JMS 提供者的 JNDI 树中绑定的目的地的 JNDI 名称。管理员应在 JMS 提供者本身中提供所有属性。仅当 ProviderIntegrationModejndi 时才使用此属性名称。

DestinationProperties

以逗号分隔的名称值对 

无 

此属性指定 JMS 客户机的 javabean 属性名称以及目的地值。仅当 ProviderIntegrationModejavabean 时才需要此属性。

激活规范属性

可以在 Sun 的特定 MDB 部署描述符中将本节中的属性指定为激活配置属性。可以在激活规范中覆盖所有资源适配器属性。下面给出了仅可用于激活规范中的其他属性。

属性名称

有效值

默认值

说明

MaxPoolSize

整数 

资源适配器为了实现并发消息传送而在内部创建的服务器会话池的最大大小。此大小应该等于 MDB 对象的最大池大小。 

MaxWaitTime

整数 

资源适配器将等待此属性所指定的时间(以秒为单位)后,才能从其内部池中获得服务器会话。如果超过此限制,消息传送将失败。 

SubscriptionDurability

Durable 或 Non-Durable 

Non-Durable 

由 JMS 1.1 规范指定的 SubscriptionDurability

SubscriptionName

 

无 

由 JMS 1.1 规范指定的 SubscriptionName

MessageSelector

有效的消息选择器 

无 

由 JMS 1.1 规范指定的 MessageSelector

ClientID

有效的客户机 ID 

无 

ClientID 由 JMS 1.1 规范指定。

ConnectionFactoryJndiName

有效的 JNDI 名称 

无 

在 JMS 提供者中创建的连接工厂的 JNDI 名称。资源适配器将使用此连接工厂创建连接以接收消息。仅当 ProviderIntegrationMode 配置为 jndi 时才使用。

DestinationJndiName

有效的 JNDI 名称 

无 

在 JMS 提供者中创建的目的地的 JNDI 名称。资源适配器将使用此目的地创建连接以接收消息。仅当 ProviderIntegrationMode 配置为 jndi 时才使用。

DestinationType

javax.jms.Queuejavax.jms.Topic

null 

MDB 将侦听的目的地的类型。 

DestinationProperties

以逗号分隔的名称-值对 

无 

此属性指定 JMS 客户机的 javabean 属性名称以及目的地值。仅当 ProviderIntegrationModejavabean 时才需要。

RedeliveryAttempts

整数 

 

当消息在 MDB 中导致运行时异常时,传送消息的次数。 

RedeliveryInterval

时间(以秒为单位) 

 

当消息在 MDB 中导致运行时异常时,重复传送之间的时间间隔。 

SendBadMessagesToDMD

true/false 

false 

指示当超过传送尝试次数时,资源适配器是否应将消息发送到停用消息目的地。 

DeadMessageDestinationJndiName

有效的 JNDI 名称。 

无 

在 JMS 提供者中创建的目的地的 JNDI 名称。这是停用消息的目的地。仅当 ProviderIntegrationModejndi 时才使用此属性。

DeadMessageDestinationClassName

目的地对象的类名。 

无 

仅当 ProviderIntegrationModejavabean 时才使用。

DeadMessageDestinationProperties

以逗号分隔的名称值对 

无 

此属性指定 JMS 客户机的 javabean 属性名称以及目的地值。仅当 ProviderIntegrationModejavabean 时才需要此属性。

ReconnectAttempts

整数 

 

当异常侦听器捕捉到连接错误时进行重新连接的尝试次数。 

ReconnectInterval

时间(以秒为单位) 

 

重新连接之间的时间间隔。