Sun GlassFish Enterprise Server 2.1 管理ガイド

第 4 章 Java Message Service (JMS) リソースの設定

Enterprise Server は、Message Queue ソフトウェアを統合して、Enterprise Server に Java Message Service (JMS) API を実装します。基本的な JMS API 管理タスクには、Enterprise Server の管理コンソールを使用します。Message Queue クラスタの管理などの高度なタスクには、MQ-as-install/imq/bin ディレクトリに用意されたツールを使用します。Message Queue の管理の詳細については、『Message Queue Administration Guide』を参照してください。

この章では、Java Message Service (JMS) API を使用するアプリケーションのリソースを設定する方法について説明します。次の節で構成されています。

JMS リソース

JMS (Java Message Service) API は、次の 2 種類の管理対象オブジェクトを使用します。

オブジェクトは管理された上で作成され、その作成方法は JMS の実装に固有になります。Enterprise Server で、次のタスクを実行します。

JMS アプリケーションは、JNDI API を使用して接続ファクトリと送信先リソースにアクセスします。通常、JMS アプリケーションは 1 つ以上の接続ファクトリと 1 つ以上の宛先を使用します。作成するリソースを確認するには、アプリケーションを理解したり、アプリケーションの開発者の意見を確認したりすることをお勧めします。

接続ファクトリには次の 3 つのタイプがあります。

送信先には次の 2 種類があります。

『Java EE 5 Tutorial』の JMS に関する章では、これら 2 つの通信タイプと、JMS のほかの側面が説明されています (http://java.sun.com/javaee/5/docs/tutorial/doc/index.html を参照)。

リソースを作成する順序は重要ではありません。

Java EE アプリケーションでは、次の手順に従って Enterprise Server の配備記述子に接続ファクトリリソースと送信先リソースを指定します。

JMS リソースとコネクタリソースの関係

Enterprise Server は、jmsra という名前のシステムリソースアダプタを使用して JMS を実装します。JMS リソースを作成すると、Enterprise Server がコネクタリソースも自動的に作成します。コネクタリソースは、管理コンソール のツリービューで「コネクタ」ノードの下に表示されます。

ユーザーが作成する各 JMS 接続ファクトリに対して、Enterprise Server はコネクタ接続プールとコネクタリソースを作成します。ユーザーが作成する個々の JMS 送信先に対して、Enterprise Server は管理オブジェクトリソースを作成します。ユーザーがJMS リソースを削除するときに、Enterprise Server はコネクタリソースを自動的に削除します。

「JMS リソース」ノードの代わりに管理コンソールの「コネクタ」ノードを使用して、JMS システムリソースアダプタ用のコネクタリソースを作成できます。詳細は、第 7 章コネクタリソースを参照してください。

JMS 接続ファクトリ

JMS 接続ファクトリは、アプリケーションがプログラムでほかの JMS オブジェクトを作成できるようにするオブジェクトです。これらの管理対象オブジェクトは、ConnectionFactoryQueueConnectionFactory、および TopicConnectionFactory インタフェースを実装します。Enterprise Server 管理コンソールを使用して、JMS 接続ファクトリを作成、編集、または削除できます。新しい JMS 接続ファクトリの作成では、ファクトリのコネクタ接続プールとコネクタリソースも作成します。

コマンド行ユーティリティーを使用して、JMS 接続ファクトリを管理するには、create-jms-resourcelist-jms-resources、または delete-jms-resource コマンドを使用します。

JMS 送信先リソース

JMS 送信先は、メッセージのリポジトリとして機能します。管理コンソールを使用して、JMS 送信先リソースを作成、変更、または削除できます。新しい JMS 送信先リソースを作成するには、「リソース」>「JMS リソース」>「送信先リソース」の順に選択します。「送信先リソース」ページで、次を指定できます。

コマンド行ユーティリティーを使用して、JMS 送信先を管理するには、create-jms-resource または delete-jms-resource コマンドを使用します。


ヒント –

asadmin create-jms-resource コマンドの addresslist プロパティーを (host: mqport,host2: mqport,host3: mqport の形式で) 指定するには、 \\ を使用して : をエスケープします。たとえば、host1\\: mqport,host2\\: mqport,host3\\: mpqport のようになります。

エスケープ文字の使用の詳細については、asadmin(8) のマニュアルページを参照してください。


JMS 物理送信先

本稼動環境では、必ず物理送信先を作成する必要があります。ただし、開発およびテスト段階では、この手順は不要です。アプリケーションが最初に送信先リソースにアクセスすると、Message Queue は、送信先リソースの名前プロパティーで指定した物理送信先を自動的に作成します。物理送信先は一時的なものなので、Message Queue の設定プロパティーで指定した期限が切れると効力を失います。

管理コンソールから物理送信先を作成するには、「設定」>「Java メッセージサービス」>「物理送信先」の順に選択します。「新規」をクリックし、「新しい物理送信先」ページで、物理送信先の名前を指定し、送信先のタイプを topic または queue から選択します。「新しい物理送信先」ページのフィールドとプロパティーの詳細については、管理コンソールのオンラインヘルプを参照してください。

本稼動環境では、必ず物理送信先を作成する必要があります。ただし、開発およびテスト段階では、この手順は不要です。アプリケーションが最初に送信先リソースにアクセスするときに、Message Queue は、送信先リソースの Name プロパティーで指定した物理送信先を自動的に作成します。物理送信先は一時的なものなので、Message Queue の設定プロパティーで指定した期限が切れると効力を失います。

コマンド行ユーティリティーを使用して、JMS 物理送信先を管理するには、create-jmsdestflush-jmsdest、または delete-jmsdest コマンドを使用します。

JMS プロバイダのプロパティーの設定

管理コンソールの「Java メッセージサービス」ページを使用して、すべての JMS 接続で使用するプロパティーを設定します。管理コンソールで、「設定」 >「Java メッセージサービス」の順に選択します。「Java メッセージサービス」ページで、次の JMS サービスの一般設定を制御できます。

これらのすべてのプロパティーの値は実行時にも更新できます。ただし、更新された値を取得するのは、プロパティーの更新後に作成された接続ファクトリのみです。既存の接続ファクトリは元のプロパティー値のままになります。

コマンド行ユーティリティーを使用して JMS プロバイダを管理するには、set または jms-ping コマンドを使用します。

リモートサーバーへのアクセス

プロバイダとホストをリモートシステムに変更すると、すべての JMS アプリケーションがリモートサーバーで実行するようになります。ローカルサーバーと 1 つまたは複数のリモートサーバーを使用するには、リモートサーバーにアクセスする接続を作成する AddressList プロパティーを使用して、接続ファクトリリソースを作成します。

外部 JMS プロバイダ

JMS の汎用リソースアダプタは Java EE Connector 1.5 リソースアダプタで、IBM Websphere MQ、Tibco EMS、Sonic MQ などの外部 JMS プロバイダの JMS クライアントライブラリをラップできるため、任意の JMS プロバイダを Java EE アプリケーションサーバーに統合します。アダプタは、Enterprise Server の管理ツールを使用して配備および設定可能な .rar アーカイブです。

JMS の汎用リソースアダプタの設定

Enterprise Server の管理ツールを使用して、JMS の汎用リソースアダプタを配備および設定できます。この節では、Enterprise Server で JMS の汎用リソースアダプタを設定する方法を説明します。

全体として、JMS プロバイダが XA をサポートするかどうかを、リソースアダプタの設定により選択できます。さらに、JMS プロバイダで可能な統合のモードを選択することもできます。リソースアダプタでは、2 つの統合のモードをサポートしています。最初のモードは、統合の手段として JNDI を使用します。この場合、管理対象オブジェクトを JMS プロバイダの JNDI ツリーに設定し、汎用リソースアダプタがそれらを検索し、使用します。このモードが統合に適切でない場合は、JMS 管理対象オブジェクト JavaBean クラスの Java リフレクションを統合のモードとして使用することもできます。

管理コンソールまたはコマンド行を使用して、リソースアダプタを設定できます。これは、他のリソースアダプタの設定と変わりありません。

汎用リソースアダプタの設定

リソースアダプタを配備する前に、Enterprise Server で JMS クライアントライブラリを使用できるようにします。一部の JMS プロバイダでは、クライアントライブラリにネイティブライブラリも含まれている場合があります。このような場合は、これらのネイティブライブラリも JVM から使用できるようにします。

  1. コネクタモジュールを配備する場合と同じように、汎用リソースアダプタを配備します。

  2. コネクタ接続プールを作成します。

  3. コネクタリソースを作成します。

  4. 管理対象オブジェクトリソースを作成します。

  5. Enterprise 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 実装のクラス名。ProviderIntegrationModejavabean と指定されている場合に使用します。

XAConnectionFactoryClassName

アプリケーションサーバークラスパスで使用可能なクラス名。たとえば次のようになります。 

com.sun.messaging.XAConnectionFactory

なし 

JMS クライアントの javax.jms.ConnectionFactory 実装のクラス名。ProviderIntegrationModejavabean と指定されている場合に使用します。

XAQueueConnectionFactoryClassName

アプリケーションサーバークラスパスで使用可能なクラス名。たとえば次のようになります。 

com.sun.messaging.XAQueueConnectionFactory

なし 

JMS クライアントの javax.jms.XAQueueConnectionFactory 実装のクラス名。ProviderIntegrationModejavabean と指定されている場合に使用します。

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 実装のクラス名ProviderIntegrationModejavabean と指定されている場合に使用します。

SupportsXA

True/false

FALSE

JMS クライアントが XA をサポートするかどうかを指定します。 

ConnectionFactoryProperties

コンマで区切られた名前と値のペア 

なし 

javabean プロパティー名と JMS クライアントの ConnectionFactory の値を指定します。ProviderIntegrationModejavabean である場合にのみ必要です。

JndiProperties

コンマで区切られた名前と値のペア 

なし 

JMS プロバイダの JNDI への接続に使用する JNDI プロバイダのプロパティーを指定します。ProviderIntegrationModejndi である場合にのみ使用します。

CommonSetterMethodName

メソッド名 

なし 

一部の JMS ベンダーが管理対象オブジェクトにプロパティーを設定するために使用する一般的な setter メソッド名を指定します。ProviderIntegrationModejavabean である場合にのみ使用します。Sun Java System Message Queue の場合、このプロパティーの名前は setProperty になります。

UserName

JMS ユーザーの名前 

なし 

JMS プロバイダに接続するためのユーザー名。 

Password

JMS ユーザーのパスワード 

なし 

JMS プロバイダに接続するためのパスワード。 

RMPolicy

ProviderManaged または OnePerPhysicalConnection

ProviderManaged

XAResourceisSameRM メソッドは、トランザクションマネージャーで、2 つの XAResources によって表されたリソースマネージャーインスタンスが同じであるかどうかを判断するために使用されます。RMPolicyProviderManaged (デフォルト値) に設定すると、JMS プロバイダが、汎用リソースアダプタの RMPolicy ラッパーおよび XAResource ラッパーが isSameRM 呼び出しをメッセージキュープロバイダの XA リソースの実装に単に委任するかどうかを JMS プロバイダが決定します。これは、大半のメッセージキュー製品で最適に機能するべきです。

IBM MQ シリーズなどの XAResource の一部の実装では、物理接続ごとに 1 つのリソースマネージャーを使用します。これにより、単一のトランザクションで同じキューマネージャーに対するインバウンド通信とアウトバウンド通信がある (たとえば MDB が送信先に応答を送信するなど) 場合に問題が発生します。RMPolicyOnePerPhysicalConnection に設定されている場合、汎用リソースアダプタの XAResource ラッパーの実装の isSameRM は、ラッパー対象オブジェクトに委任する前に、両方の XAResources が同じ物理接続を使用するかどうかを確認します。

ManagedConnectionFactory プロパティー

ManagedConnectionFactory プロパティーは connector-connection-pool の作成時に指定します。リソースアダプタの作成時に指定されたすべてのプロパティーは、ManagedConnectionFactory でオーバーライドできます。ManagedConnectionFactory でのみ使用可能な追加のプロパティーを次に示します。

プロパティー名

有効な値

デフォルト値

説明

ClientId

有効なクライアント ID 

なし 

JMS 1.1 仕様に指定されている ClientID

ConnectionFactoryJndiName

JNDI 名 

なし 

JMS プロバイダの JNDI ツリーにバインドされた接続ファクトリの JNDI 名。管理者は、JMS プロバイダ自体にすべての接続ファクトリプロパティー (clientID を除く) を指定するようにしてください。このプロパティー名は ProviderIntegrationModejndi の場合にのみ使用されます。

ConnectionValidationEnabled

true/false 

FALSE 

true に設定した場合、リソースアダプタは例外リスナーを使用して、接続の例外をキャッチし、CONNECTION_ERROR_OCCURED イベントをアプリケーションサーバーに送信します。

管理対象オブジェクトリソースのプロパティー

このプロパティーは、管理対象オブジェクトリソースの作成時に指定します。リソースアダプタのすべてのプロパティーは、管理対象リソースオブジェクトでオーバーライドできます。管理対象オブジェクトでのみ使用可能な追加のプロパティーを次に示します。

プロパティー名

有効な値

デフォルト値

説明

DestinationJndiName

JNDI 名 

なし 

JMS プロバイダの JNDI ツリーにバインドされた送信先の JNDI 名。管理者は JMS プロバイダ自体にすべてのプロパティーを指定するようにしてください。このプロパティー名は ProviderIntegrationModejndi の場合にのみ使用されます。

DestinationProperties

コンマで区切られた名前と値のペア 

なし 

JMS クライアントの送信先の javabean プロパティー名と値を指定します。ProviderIntegrationModejavabean である場合にのみ必要です。

有効化仕様プロパティー

このプロパティーは、activation-config-properties として MDB の Sun 固有の配備記述子に指定されています。リソースアダプタのすべてのプロパティーは、有効化仕様でオーバーライドできます。有効化仕様のみで使用できるプロパティーを、次の表に示します。

プロパティー名

有効な値

デフォルト値

説明

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 名。この接続ファクトリはリソースアダプタが接続を作成し、メッセージを受け取るために使用します。ProviderIntegrationModejndi と設定されている場合にのみ使用します。

DestinationJndiName

有効な JNDI 名 

なし 

JMS プロバイダで作成された送信先の JNDI 名。この送信先は、リソースアダプタが接続を作成し、メッセージを受け取るために使用します。ProviderIntegrationMode が jndi と設定されている場合にのみ使用します。

DestinationType

javax.jms.Queue または javax.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

秒単位での時間 

 

再接続の間隔。