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

外部 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

时间(以秒为单位) 

 

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