Sun GlassFish Enterprise Server v3 管理ガイド

第 19 章 JMS (Java Message Service) の管理

Sun では、Sun GlassFishTM Message Queue ソフトウェアを Sun GlassFish Enterprise Server に統合することで、JMS (JavaTM Message Service) API を実装しています。この章では、asadmin コマンド行ユーティリティーを使用して、Enterprise Server 環境で JMS リソースを管理する手順について説明します。


注 –

JMS リソースは、Enterprise Server の Full Platform Profile のみでサポートされ、Web Profile ではサポートされません。


ここでは、次のテーマを取り上げます。

この章のタスクを 管理コンソール を使用して実行する場合の手順は、管理コンソールのオンラインヘルプで説明します。

JMS について

JMS API は、Java EE アプリケーションおよびコンポーネントで、メッセージの作成、送信、受信、および読み取りを可能にするメッセージング標準です。この API によって、緩やかに結合され、信頼性が高く、非同期の分散通信が可能となります。

一般的に、Enterprise Server の JMS メッセージングのサポートや、特にメッセージ駆動型 Bean のサポートでは、「JMS プロバイダ」が必要です。Enterprise Server は、Sun GlassFish メッセージキュー ソフトウェアをネイティブの JMS プロバイダとして使用し、透過的な JMS メッセージングのサポートを提供します。このサポートは、Enterprise Server では「JMS サービス」と呼ばれます。JMS で必要になるのは最低限の管理のみです。JMS クライアントが JMS 管理対象オブジェクトにはじめてアクセスするときに、クライアントの JVM が Enterprise Server から JMS 構成を受け取ります。

JMS リソースはコネクタの一種です。Message Queue は、「コネクタモジュール」によって Enterprise Server と統合されます。コネクタモジュールはリソースアダプタとも呼ばれ、Java EE Connector Architecture Specification 1.6 で定義されています。Enterprise Server に配備されるすべての Java EE コンポーネントは、コネクタモジュールによって統合された JMS プロバイダを使用して、JMS メッセージを交換します。JMS リソースが Enterprise Server に作成されるときに、コネクタリソースがバックグラウンドで作成されます。JMS 操作はそれぞれコネクタのランタイムを呼び出し、Message Queue コネクタモジュールをバックグラウンドで使用します。Enterprise Server は JMS 接続を自動的にプールします。

すべての JMS 接続で使用されるプロパティーを設定できます。これらのプロパティーを実行時に更新する場合は、プロパティーの更新後に作成された接続ファクトリのみに、更新した値が適用されます。既存の接続ファクトリは元のプロパティー値のままになります。ほとんどの値は、Enterprise Server を再起動して有効にする必要があります。手順については、「ドメインの再起動」を参照してください。Enterprise Server を再起動せずに更新できるプロパティーは、デフォルト JMS ホストだけです。

Message Queue ブローカのモード

Message Queue は、Enterprise Server に LOCAL、REMOTE、または EMBEDDED のモードで統合できます。これらのモードは、JMS の type 属性で表されます。

Message Queue の管理については、『Sun GlassFish Message Queue 4.4 Administration Guide 』を参照してください。

JMS 物理送信先の管理

メッセージは、JMS プロバイダの「物理送信先」を使用して、コンシューマにルーティングおよび配信されます。物理送信先は、管理対象オブジェクト (Topic または Queue 送信先リソースなど) によって識別およびカプセル化されます。アプリケーションコンポーネントはこのオブジェクトを使用して、生成しているメッセージの送信先と、消費しているメッセージの発信元を指定します。送信先リソースを設定する手順については、「接続ファクトリまたは送信先リソースを作成する」を参照してください。

メッセージ駆動型 Bean が配備され、この Bean が待機する物理送信先が存在しない場合、Enterprise Server は自動的に物理送信先を作成し、maxNumActiveConsumers プロパティーの値を -1 に設定します。ただし、あらかじめ物理送信先を作成しておく方がよい方法です。アプリケーションが最初に送信先リソースにアクセスすると、Message Queue は、送信先リソースの名前プロパティーで指定した物理送信先を自動的に作成します。物理送信先は一時的なものなので、Message Queue の構成プロパティーで指定した期限が切れると効力を失います。

ここでは、次のテーマを取り上げます。

ProcedureJMS 物理送信先を作成する

本稼動環境では、必ず物理送信先を作成する必要があります。ただし、開発およびテスト段階では、この手順は不要です。物理送信先を作成するには、リモートモードで create-jmsdest サブコマンドを使用します。

物理送信先は、実際にはサーバーオブジェクトというよりも Message Queue オブジェクトであるため、プロパティーを更新する場合は Message Queue ブローカのコマンドを使用します。Message Queue プロパティーの詳細は、『Sun GlassFish Message Queue 4.4 Administration Guide』を参照してください。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. create-jmsdest(1) サブコマンドを使用して、JMS 物理送信先を作成します。

    このサブコマンドのプロパティーについては、このマニュアルページに記載されています。

  3. (省略可能) 必要な場合は、サーバーを再起動します。

    プロパティーの中には、サーバーの再起動を求めるものもあります。「サーバーの再起動が必要な構成の変更」を参照してください。サーバーを再起動する必要がある場合は、「ドメインの再起動」を参照してください。


例 19–1 JMS 物理送信先の作成

この例では、PhysicalQueue という名前のキューを作成します。


asadmin> create-jmsdest --desttype queue --property 
User=public:Password=public PhysicalQueue
Command create-jmsdest executed successfully.

参照

コマンド行に asadmin help create-jmsdest と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJMS 物理送信先を一覧表示する

既存の JMS 物理送信先を一覧表示するには、リモートモードで list-jmsdest サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jmsdest(1) サブコマンドを使用して、既存の JMS 物理送信先を一覧表示します。


例 19–2 JMS 物理送信先の一覧表示

この例では、デフォルトサーバーインスタンスの物理送信先を一覧表示します。


asadmin> list-jmsdest
PhysicalQueue queue {} 
PhysicalTopic topic {}
Command list-jmsdest executed successfully.

参照

コマンド行に asadmin help list-jmsdest と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedure物理送信先からメッセージを消去する

指定したターゲットの JMS サービス構成の物理送信先からメッセージを消去するには、リモートモードで flush-jmsdest サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. flush-jmsdest(1) サブコマンドを使用して、JMS 物理送信先からメッセージを消去します。

  3. (省略可能) 必要な場合は、サーバーを再起動します。

    プロパティーの中には、サーバーの再起動を求めるものもあります。「サーバーの再起動が必要な構成の変更」を参照してください。サーバーを再起動する必要がある場合は、「ドメインの再起動」を参照してください。


例 19–3 JMS 物理送信先からのメッセージのフラッシュ

この例では、PhysicalQueue という名前のキューからメッセージを消去します。


asadmin> flush-jmsdest --desttype queue PhysicalQueue
Command flush-jmsdest executed successfully

参照

コマンド行に asadmin help flush-jmsdest と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJMS 物理送信先を削除する

指定した JMS 物理送信先を削除するには、リモートモードで delete-jmsdest サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jmsdest(1) サブコマンドを使用して、既存の JMS 物理送信先を一覧表示します。

  3. delete-jmsdest(1) サブコマンドを使用して、物理送信先を削除します。


例 19–4 物理送信先の削除

この例では、PhysicalQueue という名前のキューを削除します。


asadmin> delete-jmsdest --desttype queue PhysicalQueue
Command delete-jmsdest executed successfully

参照

コマンド行に asadmin help delete-jmsdest と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

JMS 接続ファクトリと送信先の管理

JMS API は、2 種類の管理対象オブジェクトを使用します。「接続ファクトリオブジェクト」は、アプリケーションがプログラムによってほかの JMS オブジェクトを作成できるようにします。「送信先オブジェクト」は、メッセージのリポジトリとして動作します。これらのオブジェクトがどのように作成されるかは、JMS の実装ごとに異なります。Enterprise Server では、次のタスクの実行により JMS が実装されます。

JMS アプリケーションは、Java Naming and Directory Interface (JNDI) API を使用して、接続ファクトリと送信先リソースにアクセスします。通常、JMS アプリケーションは 1 つ以上の接続ファクトリと 1 つ以上の宛先を使用します。アプリケーションについて確認するか、アプリケーション開発者に問い合わせることで、作成が必要なリソースを決定できます。リソースを作成する順序は重要ではありません。

Enterprise Server は、次の接続ファクトリオブジェクトを提供します。

Enterprise Server は、次の送信先オブジェクトを提供します。

ここでは、次のテーマを取り上げます。

この節で使用するサブコマンドは、接続ファクトリリソースと送信先リソースのどちらの管理にも使用できます。物理送信先を管理する手順については、「JMS 物理送信先の管理」を参照してください。

Procedure接続ファクトリまたは送信先リソースを作成する

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

JMS 接続ファクトリリソースまたは送信先リソースを作成するには、リモートモードで create-jms-resource コマンドを使用します。


ヒント –

asadmin create-jms-resource コマンドで addresslist プロパティーを (host:mqport,host2:mqport,host3:mqport の形式で) 指定するには、コロン (:) を \\ を使用してエスケープします。たとえば、host1\\: mqport,host2\\: mqport,host3\\: mpqport のようになります。エスケープ文字の使用方法については、asadmin(1M) の概念のページを参照してください。


JMS 接続ファクトリを更新するには、更新する接続ファクトリのコネクタ接続プールに対して set サブコマンドを使用します。「コネクタ接続プールを更新する」を参照してください。

送信先を更新するには、管理オブジェクトリソースに対して set サブコマンドを使用します。「管理対象オブジェクトを更新する」を参照してください。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. create-jms-resource(1) コマンドを使用して、JMS リソースを作成します。

    このサブコマンドのプロパティーについては、このマニュアルページに記載されています。

  3. (省略可能) 必要な場合は、サーバーを再起動します。

    プロパティーの中には、サーバーの再起動を求めるものもあります。「サーバーの再起動が必要な構成の変更」を参照してください。サーバーを再起動する必要がある場合は、「ドメインの再起動」を参照してください。


例 19–5 JMS 接続ファクトリの作成

この例では、JNDI 名が jms/DurableConnectionFactoryjavax.jms.ConnectionFactory タイプの接続ファクトリリソースを作成します。ClientId プロパティーは、接続ファクトリのクライアント ID を設定し、接続ファクトリを永続サブスクリプションで使用できるようにします。JMS リソースの JNDI 名には、慣習的に jms/ のネーミングサブコンテキストを含めます。


asadmin> create-jms-resource --restype javax.jms.ConnectionFactory
--description "connection factory for durable subscriptions"
--property ClientId=MyID jms/DurableConnectionFactory
Command create-jms-resource executed successfully.


例 19–6 JMS 送信先の作成

この例では、JNDI 名が jms/MyQueue の送信先リソースを作成します。


asadmin> create-jms-resource --restype javax.jms.Queue 
--property Name=PhysicalQueue jms/MyQueue
Command create-jms-resource executed successfully.

参照

コマンド行に asadmin help create-jms-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJMS リソースを一覧表示する

既存の接続ファクトリと送信先リソースを一覧表示するには、リモートモードで list-jms-resources サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jms-resources(1) サブコマンドを使用して、既存の JMS リソースを一覧表示します。


例 19–7 すべての JMS リソースの表示

この例では、既存の JMS 接続ファクトリと送信先リソースをすべて表示します。


asadmin> list-jms-resources
jms/Queue
jms/ConnectionFactory
jms/DurableConnectionFactory
jms/Topic
Command list-jms-resources executed successfully


例 19–8 指定したタイプの JMS リソースの一覧表示

この例では、リソースタイプが javax のリソースを一覧表示します。


asadmin> list-jms-resources --restype javax.jms.TopicConnectionFactory 
jms/DurableTopicConnectionFactory 
jms/TopicConnectionFactory 
Command list-jms-resources executed successfully.

参照

コマンド行に asadmin help list-jms-resources と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedure接続ファクトリまたは送信先リソースを削除する

指定した接続ファクトリまたは送信先リソースを削除するには、リモートモードで delete-jms-resource サブコマンドを使用します。

始める前に

このサブコマンドを実行する前に、削除する JMS リソースへの参照をすべて削除する必要があります。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jms-resources(1) サブコマンドを使用して、既存の JMS リソースを一覧表示します。

  3. delete-jms-resource(1) サブコマンドを使用して、JMS リソースを削除します。


例 19–9 JMS リソースの削除

この例では、jms/Queue リソースを削除します。


asadmin> delete-jms-resource jms/Queue
Command delete-jms-resource executed successfully

参照

コマンド行に asadmin help delete-jms-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

JMS ホストの管理

「JMS ホスト」は、Message Queue ブローカを表します。JMS には「JMS ホストリスト」 (AddressList プロパティー) が含まれ、このリストには Enterprise Server が使用するすべての JMS ホストが含まれます。JMS ホストリストには、指定した メッセージキュー ブローカのホストとポートが取り込まれ、JMS ホスト構成が変更されるたびに更新されます。JMS リソースを作成するとき、またはメッセージ駆動型 Bean を配備するときに、リソースまたは Bean が JMS ホストリストを継承します。

JMS ホストリスト内のホストの 1 つが、デフォルト JMS ホストに指定されます。Message Queue ブローカモードが LOCAL に設定されている場合は、Enterprise Server がデフォルト JMS ホストを起動します。

ここでは、次のテーマを取り上げます。

ProcedureJMS ホストを作成する

Enterprise Server では、デフォルト JMS ホストの default_JMS_host が提供されます。デフォルト JMS ホストは、JMS 送信先の作成や削除など、メッセージキュー ブローカのすべての管理操作を実行するために、Enterprise Server によって使用されます。

通常は、新しい JMS ホストを作成する必要はありません。このタスクは上級ユーザー向けのタスクです。追加の JMS ホストを作成するには、リモートモードで create-jms-host サブコマンドを使用します。

JMS は、実際にはサーバーオブジェクトというよりも Message Queue オブジェクトであるため、プロパティーを更新する場合は Message Queue ブローカのコマンドを使用します。Message Queue プロパティーの詳細は、『Sun GlassFish Message Queue 4.4 Administration Guide』を参照してください。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. create-jms-host(1) サブコマンドを使用して、JMS ホストを作成します。

    このサブコマンドのプロパティーについては、サブコマンドのマニュアルページを参照してください。


例 19–10 JMS ホストの作成

この例では、MyNewHost という名前の JMS ホストを作成します。


asadmin> create-jms-host --mqhost pigeon --mqport 7677 MyNewHost
Command create-jms-host executed successfully.

参照

コマンド行に asadmin help create-jms-host と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJMS ホストを一覧表示する

既存の JMS ホストを一覧表示するには、リモートモードで list-jms-hosts サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jms-hosts(1) サブコマンドを使用して、JMS ホストを一覧表示します。


例 19–11 JMS ホストの一覧表示

次のサブコマンドは、既存の JMS ホストを一覧表示します。


asadmin> list-jms-hosts
default_JMS_host
MyNewHost
Command list-jmsdest executed successfully

ProcedureJMS ホストを更新する

  1. list-jms-hosts(1) サブコマンドを使用して、JMS ホストを一覧表示します。

  2. set(1) サブコマンドを使用して、JMS ホストを変更します。


例 19–12 JMS ホストの更新

この例では、デフォルト JMS ホストの host 属性の値を変更します。この属性のデフォルト値は localhost です。


asadmin>  set server-config.jms-service.jms-host.default_JMS_host.host=
"archie.india.sun.com"

参照

コマンド行に asadmin help set と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJMS ホストを削除する

JMS ホストを JMS サービスから削除するには、リモートモードで delete-jms-host サブコマンドを使用します。JMS ホストだけを削除すると、新しい JMS ホストを作成するまで、Message Queue ブローカを起動できなくなります。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jms-hosts(1) サブコマンドを使用して、JMS ホストを一覧表示します。

  3. delete-jms-host(1) サブコマンドを使用して、JMS ホストを削除します。


例 19–13 JMS ホストの削除

この例では、MyNewHost という名前の JMS ホストを削除します。


asadmin> delete-jms-host MyNewHost
Command delete-jms-host executed successfully.

参照

コマンド行に asadmin help delete-jms-host と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

接続のアドレス指定の管理

一部の JMS リソースは、JMS ホストリスト (AddressList) の構成を使用します。このリストは、Enterprise Server で定義されている JMS ホストのホスト名とポートを指定します。JMS ホスト構成が変更されるたびに、JMS ホストリストは更新されます。JMS ホストリストは、JMS リソースの作成時およびメッセージ駆動型 Bean の配備時に、リソースまたは Bean によって継承されます。

メッセージキュー ソフトウェアでは、AddressList プロパティーは imqAddressList と呼ばれます。

ここでは、次のテーマを取り上げます。

JMS 接続プールの設定

Enterprise Server は JMS 接続を自動的にプールします。JMS 接続プールが作成されるときに、ManagedConnectionFactory のインスタンスが 1 つ関連付けられます。AddressList プロパティーを ManagedConnectionFactory プロパティーとして設定すると、ManagedConnectionFactory 値の AddressList の構成が、Enterprise Server で定義された値よりも優先されます。

create-connector-connection-pool サブコマンドを使用して、既存のプールを管理します。手順については、「コネクタ接続プールの管理」を参照してください。

デフォルトでは、JMS サービス属性の addresslist-behaviorrandom に設定されます。この場合、ManagedConnectionFactory から作成された各物理送信先 (ManagedConnection) は、主ブローカを AddressList プロパティーからランダムに選択します。

接続が失われたときに Enterprise Server が主ブローカに再接続を試みるかどうかを指定するには、set(1) サブコマンドを使用して、JMS サービスの reconnect-enabled 属性を設定します。再試行の回数と間隔を指定するには、それぞれ reconnect-attempts 属性と reconnect-interval-in-seconds 属性で設定します。

再接続が有効な場合に主ブローカで障害が発生すると、Enterprise Server は JMS ホストリスト (AddressList) の別のブローカに再接続を試みます。スキャンのロジックは、addresslist-behavior addresslist-iterations の 2 つの JMS サービス属性で決定されます。これらの設定は、JMS 接続ファクトリ設定を使用してオーバーライドできます。Sun GlassFish メッセージキュー ソフトウェアは、フェイルオーバーが発生したときに、負荷を別のブローカに透過的に転送します。JMS のセマンティクスはフェイルオーバー中も維持されます。

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

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

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

Enterprise Server は、jmsra という名前のシステムリソースアダプタを使用して JMS を実装します。JMS リソースを作成するときに、Enterprise Server は自動的にコネクタリソースを作成します。リソースアダプタの設定により、JMS プロバイダが XA をサポートするかどうかを指定できます。JMS プロバイダで可能な統合のモードを指定することもできます。

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

JMS の汎用リソースアダプタ 1.6 は、外部 JMS プロバイダ (IBM WebSphere MQ、Tibco EMS、Sonic MQ など) の JMS クライアントライブラリをラップできる Java EE コネクタ 2.0 リソースアダプタです。これにより、すべての JMS プロバイダは Sun GlassFish Enterprise Server などの Java EE 6 アプリケーションサーバーに統合されます。アダプタは、Java EE 6 アプリケーションサーバーの管理ツールを使用して配備および設定可能な .rar アーカイブです。

Procedure汎用リソースアダプタを設定する

汎用リソースアダプタを配備する前に、Enterprise Server が JMS クライアントライブラリを使用できるようにする必要があります。一部の JMS プロバイダでは、クライアントライブラリにネイティブライブラリが含まれている場合もあります。この場合は、これらのネイティブライブラリをすべての Enterprise Server 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 ファイルに、次のアクセス権を追加します。


      javax.security.auth.PrivateCredentialPermission 
      "javax.resource.spi.security.PasswordCredential ^ \"^\"","read":

JMS に関するトラブルシューティング

Enterprise Sever の起動時に、JMS サービスは使用可能になっていますが、必要になる (たとえば、JMS リソースを作成するとき) まで読み込まれません。jms-ping(1) サブコマンドを使用して、JMS サービスが動作しているか確認し、動作していない場合はサービスを起動します。jms-ping サブコマンドが組み込みの JMS サービスと通信できない場合は、エラーメッセージが表示されます。

問題が起きた場合は、次の点を考慮してください。