この章では、Java Message Service (JMS) API を使用するアプリケーションのリソースを設定する方法について説明します。次の項があります。
Application Server は、Sun Java System Message Queue (従来の Sun ONE Message Queue) を Application Server に統合することによって Java Message Service (JMS) API を実装します。基本的な JMS API 管理タスクの場合は、Application Server の管理コンソールを使用します。Message Queue クラスタの管理など、高度なタスクの場合は、MQ-install-dir/imq/bin ディレクトリに用意されたツールを使用します。
Message Queue の管理の詳細については、『Message Queue 管理ガイド』を参照してください。
JMS (Java Message Service) API は、次の 2 種類の管理対象オブジェクトを使用します。
接続ファクトリ。アプリケーションがプログラムでほかの JMS オブジェクトを作成できるようにするオブジェクトです。
送信先。メッセージのリポジトリとして機能します。
オブジェクトは管理された上で作成され、その作成方法は JMS の実装に固有になります。Application Server で、次のタスクを実行します。
JMS アプリケーションは、JNDI API を使用して接続ファクトリと送信先リソースにアクセスします。JMS アプリケーションは、通常接続ファクトリと送信先を少なくとも 1 つずつ使います。作成するリソースを確認するには、アプリケーションを理解したり、アプリケーションの開発者の意見を確認したりすることをお勧めします。
接続ファクトリには次の 3 つのタイプがあります。
ポイントツーポイント通信で使用する QueueConnectionFactory オブジェクト
パブリッシュ - サブスクライブ通信で使用する TopicConnectionFactory オブジェクト
ポイントツーポイント通信とパブリッシュ - サブスクライブ通信の両方で使用できる ConnectionFactory オブジェクト。新しいアプリケーションでの使用をお勧めします。
送信先には次の 2 種類があります。
ポイントツーポイント通信で使用する Queue オブジェクト
パブリッシュ - サブスクライブ通信で使用する Topic オブジェクト
『J2EE 1.4 Tutorial』の JMS に関する章では、この 2 つの通信タイプについての詳細および JMS のほかの側面が説明されています (http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html を参照)。
リソースを作成する順序は重要ではありません。
J2EE アプリケーションでは、次の手順に従って Application Server の配備記述子に接続ファクトリリソースと送信先リソースを指定します。
接続ファクトリ JNDI 名は resource-ref または mdb-connection-factory 要素に指定します。
送信先リソース JNDI 名は、メッセージ駆動型 Bean の ejb 要素と message-destination 要素に指定します。
物理送信先名は、Enterprise JavaBean 配備記述子の message-driven 要素または message-destination-ref 要素のいずれかにある message-destination-link 要素に指定します。さらに、message-destination 要素にも指定します。message-destination-ref 要素は、新しいアプリケーションで推奨されない resource-env-ref 要素から置き換わります。Application Server 配備記述子の message-destination 要素で、物理送信先名と送信先リソース名をリンクします。
Application Server は、jmsra という名前のシステムリソースアダプタを使用して JMS を実装します。JMS リソースを作成すると、Application Server がコネクタリソースも自動的に作成します。コネクタリソースは、管理コンソールのツリービューに表示される「コネクタ」ノードの下に表示されます。
ユーザーが作成する各 JMS 接続ファクトリに対して、Application Server はコネクタ接続プールとコネクタリソースを作成します。ユーザーが作成する個々の JMS 送信先に対して、Application Server は管理オブジェクトリソースを作成します。ユーザーがJMS リソースを削除するときに、Application Server はコネクタリソースを自動的に削除します。
「JMS リソース」ノードの代わりに管理コンソールの「コネクタ」ノードを使用して、JMS システムリソースアダプタ用のコネクタリソースを作成できます。 詳細については、第 7 章「コネクタリソース」を参照してください。
JMS 接続ファクトリは、アプリケーションがプログラムでほかの JMS オブジェクトを作成できるようにするオブジェクトです。これらの管理対象オブジェクトは、ConnectionFactory、QueueConnectionFactory、および TopicConnectionFactory インタフェースを実装します。 Application Server 管理コンソールを使用して、JMS 接続ファクトリを作成、編集、または削除できます。新しい JMS 接続ファクトリの作成では、ファクトリのコネクタ接続プールとコネクタリソースも作成します。
コマンド行ユーティリティーを使用して、JMS 接続ファクトリを管理するには、create-jms-resource、list-jms-resources、または delete-jms-resource コマンドを使用します。
JMS 送信先は、メッセージのリポジトリとして機能します。管理コンソールを使用して、JMS 送信先リソースを作成、変更、または削除できます。新しい JMS 送信先リソースを作成するには、「リソース」>「JMS リソース」>「送信先リソース」の順に選択します。「送信先リソース」ページで、次を指定できます。
リソースの JNDI 名。JMS リソースのネーミングサブコンテキストのプレフィックス jms/ を使用することをお勧めします。次に例を示します。jms/Queue
リソースタイプ。javax.jms.Topic または javax.jms.Queue です。
送信先リソースの追加プロパティー。これらのすべての設定と追加のプロパティーの詳細については、管理コンソールのオンラインヘルプを参照してください。
コマンド行ユーティリティーを使用して、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) のマニュアルページを参照してください。
本稼動環境では、必ず物理送信先を作成する必要があります。ただし、開発およびテスト段階では、この手順は不要です。アプリケーションが最初に送信先リソースにアクセスすると、Message Queue は、送信先リソースの名前プロパティーで指定した物理送信先を自動的に作成します。物理送信先は一時的なものなので、Message Queue の設定プロパティーで指定した期限が切れると効力を失います。
管理コンソールから物理送信先を作成するには、「設定」>「物理送信先」の順に選択します。「現在の物理送信先」ページで、物理送信先の名前を指定し、送信先のタイプを選択します。これは topic または queue です。「物理送信先」ページのフィールドとプロパティ?の詳細については、管理コンソールのオンラインヘルプを参照してください。
本稼動環境では、必ず物理送信先を作成する必要があります。ただし、開発およびテスト段階では、この手順は不要です。アプリケーションが最初に送信先リソースにアクセスすると、Message Queue は、送信先リソースの名前プロパティーで指定した物理送信先を自動的に作成します。物理送信先は一時的なものなので、Message Queue の設定プロパティーで指定した期限が切れると効力を失います。
コマンド行ユーティリティーを使用して、JMS 物理送信先を管理するには、create-jmsdest、flush-jmsdest、または delete-jmsdest コマンドを使用します。
管理コンソールの「JMS サービス」ページを使用して、すべての JMS 接続で使用するプロパティーを設定します。管理コンソールで、「設定」>「Java メッセージサービス」の順に選択します。「JMS サービス」ページで、次の JMS サービスの一般設定を制御できます。
「起動タイムアウト」の間隔を選択します。これは、起動が中止されないように JMS サービスが開始するのを Application Server が 待機する時間を示します。
「JMS サービス」のタイプを選択します。これは、JMS サービスをローカルホストで管理するか、リモートホストで管理するかを指定します。
「起動引数」を指定して、JMS サービスの起動をカスタマイズします。
「再接続」チェックボックスを選択して、接続が失われたときに JMS サービスがメッセージサーバーまたは AddressList で指定したアドレスのリストに再接続を試みるように指定します。
「再接続間隔」を秒数で指定します。この間隔は、AddressList で指定した各アドレスおよびリストの次のアドレスへの試行に適用されます。間隔が短すぎると、ブローカにリカバリする時間が与えられません。間隔が長すぎると、再接続が許容できない遅延を示す場合があります。
再接続の試行回数を指定します。このフィールドに、クライアントランタイムがリストの次のアドレスを試行する前に、AddressList に指定した各アドレスへの接続 (または再接続) を試行する回数を入力します。
デフォルトの JMS ホストを選択します。
「アドレスリストの動作」ドロップダウンリストで、接続の試行を AddressList で指定したアドレスの順序 (priority) で行うか、またはランダムな順序 (random) で行うかを選択します。
「アドレスリストの繰り返し」フィールドで、接続の確立または再確立のために、AddressList を介して JMS サービスが反復する回数を入力します。
デフォルト以外のスキームまたはサービスを使用する場合は、「MQ スキーム」および「MQ サービス」フィールドに、Message Queue アドレススキーム名と Message Queue 接続サービス名を入力します。
これらのすべてのプロパティーの値は実行時にも更新できます。ただし、更新された値を取得するのは、プロパティーの更新後に作成された接続ファクトリのみです。既存の接続ファクトリは元のプロパティー値のままになります。さらに、ほとんどすべての値を有効にするには、アプリケーションサーバーを再起動する必要があります。アプリケーションサーバーを再起動しなくても更新可能なプロパティーは、デフォルトの JMS ホストのみです。
コマンド行ユーティリティーを使用して JMS プロバイダを管理するには、set または jms-ping コマンドを使用します。
プロバイダとホストをリモートシステムに変更すると、すべての JMS アプリケーションがリモートサーバーで実行するようになります。ローカルサーバーと 1 つまたは複数のリモートサーバーを使用するには、リモートサーバーにアクセスする接続を作成する AddressList プロパティーを使用して、接続ファクトリリソースを作成します。
JMS の汎用リソースアダプタは Java EE Connector 1.5 リソースアダプタで、IBM Websphere MQ、Tibco EMS、および Sonic MQ などの外部 JMS プロバイダの JMS クライアントライブラリをラップできるため、任意の JMS プロバイダを Sun Java System Application Server などの Java EE 1.4 アプリケーションサーバーに統合します。アダプタは Java EE 1.4 アプリケーションサーバーの管理ツールを使用して配備および設定可能な .rar アーカイブです。
アプリケーションサーバーの管理ツールを使用して、JMS の汎用リソースアダプタを配備および設定できます。ここでは、Sun Java System Application Server を使用して、JMS の汎用リソースアダプタを設定する方法を説明します。概して、リソースアダプタを設定して、JMS プロバイダが XA をサポートするかどうかを示すことができます。さらに、JMS プロバイダで可能な統合のモードを示すこともできます。リソースアダプタでは、2 つの統合のモードをサポートしています。最初のモードは、統合の手段として JNDI を使用します。この場合、管理対象オブジェクトを JMS プロバイダの JNDI ツリーに設定し、汎用リソースアダプタがそれらを検索し、使用します。このモードが統合に適切でない場合は、JMS 管理対象オブジェクト JavaBean クラスの Java リフレクションを統合のモードとして使用することもできます。Sun Java System Application Server の管理コンソールまたは CLI を使用して、リソースアダプタを設定できます。これは、他のリソースアダプタの設定と変わりありません。
リソースアダプタを配備する前に、アプリケーションサーバーで JMS クライアントライブラリを使用できるようにします。一部の JMS プロバイダでは、クライアントライブラリにネイティブライブラリも含まれている場合があります。そのような場合は、これらのネイティブライブラリもアプリケーションサーバー JVM から使用できるようにします。
コネクタモジュールを配備する場合と同じように、汎用リソースアダプタを配備します。
この手順については、管理コンソールのオンラインヘルプを参照してください。配備時に、汎用リソースアダプタの場所として install-dir/lib/addons/resourceadapters/genericjmsra/genericra.rar を指定してください。さらに、「リソースアダプタのプロパティー」の節で説明するプロパティーを指定する必要があります。
コネクタ接続プールを作成します。
この手順については、管理コンソールのオンラインヘルプを参照してください。「コネクタ接続プールを作成」ページの「リソースアダプタ」コンボボックスから、genericra を選択します。さらに、「接続定義」コンボボックスで、 javax.jms.QueueConnectionFactory を選択します。また、「ManagedConnectionFactory のプロパティー」の節で説明するプロパティーを指定します。
コネクタリソースを作成します。
この詳細な手順については、管理コンソールのオンラインヘルプを参照してください。「コネクタリソースを作成」ページで、前の手順で作成したプールを選択します。
管理対象オブジェクトリソースを作成します。
この詳細な手順については、管理コンソールのオンラインヘルプを参照してください。「管理オブジェクトリソースを作成」ページで、「リソースアダプタ」として genericra を、「リソースタイプ」として javax.jms. Queue を選択します。「次へ」をクリックし、2 番目のページで、「プロパティーを追加」をクリックします。「追加プロパティー」テーブルで、値 Name\\=clientQueue を持つ DestinationProperties という新しいプロパティーを指定します。その他のプロパティーについては、「管理対象オブジェクトリソースのプロパティー」を参照してください。
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"; を追加します。
次の表に、リソースアダプタの作成時に使用するプロパティーを示します。
ManagedConnectionFactory プロパティーは connector-connection-pool の作成時に指定します。リソースアダプタの作成時に指定されたすべてのプロパティーは、ManagedConnectionFactory でオーバーライドできます。 ManagedConnectionFactory でのみ使用可能な追加のプロパティーを次に示します。
プロパティー名 |
有効な値 |
デフォルト値 |
説明 |
---|---|---|---|
ClientId |
有効なクライアント ID |
なし |
JMS 1.1 仕様に指定されている ClientID |
ConnectionFactoryJndiName |
JNDI 名 |
なし |
JMS プロバイダの JNDI ツリーにバインドされた接続ファクトリの JNDI 名。管理者は、JMS プロバイダ自体にすべての接続ファクトリプロパティー (clientID を除く) を指定するようにしてください。このプロパティー名は ProviderIntegratinMode が jndi の場合にのみ使用されます。 |
ConnectionValidationEnabled |
true/false |
FALSE |
true に設定した場合、リソースアダプタは例外リスナーを使用して、接続の例外をキャッチし、CONNECTION_ERROR_OCCURED イベントをアプリケーションサーバーに送信します。 |
このプロパティーは、管理対象オブジェクトリソースの作成時に指定します。リソースアダプタのすべてのプロパティーは、管理対象リソースオブジェクトでオーバーライドできます。管理対象オブジェクトでのみ使用可能な追加のプロパティーを次に示します。
プロパティー名 |
有効な値 |
デフォルト値 |
説明 |
---|---|---|---|
DestinationJndiName |
JNDI 名 |
なし |
JMS プロバイダの JNDI ツリーにバインドされた送信先の JNDI 名。管理者は JMS プロバイダ自体にすべてのプロパティーを指定するようにしてください。このプロパティー名は ProviderIntegrationMode が jndi の場合にのみ使用されます。 |
DestinationProperties |
コンマで区切られた名前と値のペア |
なし |
これは JMS クライアントの送信先の javabean プロパティー名と値を指定します。ProviderIntegrationMode が javabean である場合にのみ必要です。 |
このプロパティーは、activation-config-properties として MDB の Sun 固有の配備記述子に指定されています。すべてのリソースアダプタのプロパティーは有効化仕様でオーバーライドできます。有効化仕様でのみ使用可能な追加のプロパティーを次に示します。
プロパティー名 |
有効な値 |
デフォルト値 |
説明 |
---|---|---|---|
MaxPoolSize |
整数 |
8 |
並行メッセージ配信用のリソースアダプタによって、内部で作成されるサーバーセッションプールの最大サイズ。これは MDB オブジェクトの最大プールサイズに等しくなるべきです。 |
MaxWaitTime |
整数 |
3 |
リソースアダプタは、その内部プールからサーバーセッションを取得するために、このプロパティーに指定された秒単位の時間を待機します。この制限を超えると、メッセージ配信が失敗します。 |
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.Queue または javax.jms.Topic |
null |
MDB が待機する送信先のタイプ。 |
DestinationProperties |
コンマで区切られた名前と値のペア |
なし |
これは JMS クライアントの送信先の javabean プロパティー名と値を指定します。ProviderIntegrationMode が javabean である場合にのみ必要です。 |
RedeliveryAttempts |
integer |
MDB でメッセージによって実行時例外が発生した場合に、メッセージが配信される回数。 |
|
RedeliveryInterval |
秒単位での時間 |
MDB でメッセージによって実行時例外が発生した場合に、配信を繰り返す間隔。 |
|
SendBadMessagesToDMD |
true/false |
false |
配信の試行回数を超えた場合に、リソースアダプタがデッドメッセージ送信先にメッセージを送信すべきかどうかを示します。 |
DeadMessageDestinationJndiName |
有効な JNDI 名。 |
なし |
JMS プロバイダによって作成された送信先の JNDI 名。これは、デッドメッセージのターゲット送信先です。これは ProviderIntegrationMode が jndi の場合にのみ使用します。 |
DeadMessageDestinationClassName |
送信先オブジェクトのクラス名。 |
なし |
ProviderIntegrationMode が javabean の場合に使用します。 |
DeadMessageDestinationProperties |
コンマで区切られた名前と値のペア |
なし |
これは JMS クライアントの送信先の javabean プロパティー名と値を指定します。これは ProviderIntegrationMode が javabean の場合のみ必要です。 |
ReconnectAttempts |
integer |
例外リスナーが接続時のエラーをキャッチした場合に試行される再接続の回数。 |
|
ReconnectInterval |
秒単位での時間 |
再接続の間隔。 |