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 的 Administration Console 或 CLI 來配置資源配接卡。方法和配置其他資源配接卡均相同。

配置通用資源配接卡

部署資源配接卡之前,應用程式伺服器應該能夠使用 JMS 用戶端程式庫。對某些 JMS 提供者而言,用戶端程式庫也能同時包含本機程式庫。在這種情況下,應用程式伺服器 JVM 也應能夠使用這些原生程式庫。

  1. 以部署連接器模組的方式來部署通用資源配接卡。

    如需執行這項作業的步驟,請參閱 Admin Console 線上說明。在部署期間,請確實將通用資源配接卡的位置指定為 install-dir/lib/addons/resourceadapters/genericjmsra/genericra.rar。另外,您也必須指定資源配接卡特性小節中說明的特性。

  2. 建立連接器連線池

    如需執行這項作業的步驟,請參閱 Admin Console 線上說明。在 [新建連接器連線池] 頁面上,從 [資源配接卡] 組合方塊中選取 genericra。另外,請在 [連線定義] 組合方塊中,選取 javax.jms.QueueConnectionFactory,並指定在ManagedConnectionFactory 特性小節中所說明的特性。

  3. 建立連接器資源。

    如需執行這項作業的詳細程序,可以參照 Admin Console 線上說明。在 [新建連接器資源] 頁面上,選取您在先前的步驟中建立的池。

  4. 建立管理物件資源。

    如需執行這項作業的詳細程序,可以參照 Admin Console 線上說明。在 [新建管理物件資源] 頁面上,選取 genericra 做為 [資源配接卡],以及 javax.jms.Queue 做為 [資源類型]。按 [下一步],並在第二頁按一下 [增加特性]。在 [其他特性] 表格中,指定帶有 Name\\=clientQueue 值且名為 DestinationProperties 的新特性。如需有關更多特性的資訊,請參閱受管理物件資源特性小節的說明。

  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 方法名稱。只有當 ProviderIntegrationModejavabean 時,才會用到這個特性。如果是 Sun Java System Message Queue,則此特性稱為 setProperty

UserName

JMS 使用者名稱 

無 

與 JMS 提供者連線時採用的使用者名稱。 

Password

JMS 使用者的密碼。 

無 

與 JMS 提供者連線時採用的密碼。 

RMPolicy

ProviderManagedOnePerPhysicalConnection

ProviderManaged

作業事件管理員使用 XAResource 上的 isSameRM 方法,來判斷由兩個 XAResources 所呈現的資源管理員實例是否相同。

RMPolicy 設定為 ProviderManaged (預設值) 時,由 JMS 提供者負責決定通用資源配接卡中的 RMPolicyXAResource 包裝程式,是否僅將 isSameRM 呼叫委託給訊息佇列提供者的 XA 資源實作。這應該非常適用於大部份的訊息佇列產品。

有些 XAResource 實作 (如 IBM MQ Series) 在進行每個實體連線時,都要仰賴資源管理員。單一作業事件中同一個佇列管理員進行內送和外送通訊時,會造成問題 (例如,當 MBD 傳送回應至目標時)。

RMPolicy 設定為 OnePerPhysicalConnection 時,通用資源配接卡中 XAResource 包裝程式實作的 isSameRM 會在委託至包裝物件前,檢查這兩個 XAResource 是否使用相同的實體連線。如需有關此特性的其他資訊,請參閱 Issue Tracker 資料庫中的問題 #5 (位於 Glassfish 網站)。

ManagedConnectionFactory 特性

ManagedConnectionFactory 特性是在 connector-connection-pool 建立時所指定。建立資源配接卡時指定的所有特性,都可在 ManagedConnectionFactory 中置換。其他只由 ManagedConnectionFactory 提供的特性如下所示。

特性名稱

有效值

預設值

說明

ClientId

有效的用戶端 ID 

無 

由 JMS 1.1 規格所指定的 ClientID

ConnectionFactoryJndiName

JNDI 名稱 

無 

連線工廠的 JNDI 名稱,而此連線工廠連結於 JMS 提供者的 JNDI 樹狀結構。 管理員應提供 JMS 提供者本身的所有連線工廠特性 (除了 clientID 之外)。只有當 ProviderIntegratinModejndi 時,才會用到此特性名稱。

ConnectionValidationEnabled

true/false 

FALSE 

若設定為 true,資源配接卡會使用異常偵聽程式來擷取任何連線異常,並傳送 CONNECTION_ERROR_OCCURED 事件至應用程式伺服器。

受管理物件資源特性

本小節所說明的特性會在建立受管理物件資源時指定。所有資源配接卡特性都可在受管理資源物件中置換。其他只有管理物件資源才可提供的特性如下所示。

特性名稱

有效值

預設值

說明

DestinationJndiName

JNDI 名稱 

無 

目標的 JNDI 名稱,而此目標連結於 JMS 提供者的 JNDI 樹狀結構。 管理員應提供 JMS 提供者本身的所有特性。只有當 ProviderIntegrationModejndi 時,才會使用這個特性名稱。

DestinationProperties

以逗號分隔的「名稱-值」對 

無 

這指定 JMS 用戶端的 javabean 特性名稱以及目標值。只有當 ProviderIntegrationModejavabean 時才會需要。

啟動規格特性

本小節所述特性在 MDB 的 Sun 專用部署描述元中,指定為 activation-config-properties。所有資源配接卡特性都可在 Activation Spec 中置換。其他只有 ActivationSpec 才可提供的特性如下所示。

特性名稱

有效值

預設值

說明

MaxPoolSize

整數 

資源配接卡為同步傳遞訊息,可在內部建立的伺服器階段作業池最大大小。這必須等於 MDB 物件最大的池大小。 

MaxWaitTime

整數 

資源配接卡自其內部池取得伺服器階段作業時,會等候此特性所指定的秒數。如果超過此限制,訊息傳遞就會失敗。 

SubscriptionDurability

長期或非長期 

非長期 

由 JMS 1.1 規格所指定的 SubscriptionDurability

SubscriptionName

 

無 

由 JMS 1.1 規格所指定的 SubscriptionName

MessageSelector

有效的訊息選擇器 

無 

由 JMS 1.1 規格所指定的 MessageSelector

ClientID

有效的用戶端 ID 

無 

由 JMS 1.1 規格所指定的 ClientID

ConnectionFactoryJndiName

有效的 JNDI 名稱 

無 

在 JMS 提供者中建立的連線工廠 JNDI 名稱。資源配接卡會使用此連線工廠來建立連線,以接收訊息。只有在 ProviderIntegrationMode 配置為 jndi 時才會使用。

DestinationJndiName

有效的 JNDI 名稱 

無 

在 JMS 提供者中建立的目標 JNDI 名稱。資源配接卡會使用此目標來建立連線,以接收訊息。只有在 ProviderIntegrationMode 配置為 jndi 時使用。

DestinationType

javax.jms.Queuejavax.jms.Topic

空 

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

時間 (以秒計) 

 

重新連線之間的間隔。