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 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 は、Enterprise Server に LOCAL、REMOTE、または EMBEDDED のモードで統合できます。これらのモードは、JMS の type 属性で表されます。
「LOCAL モード」。Enterprise Server は、デフォルト JMS ホストとして指定された Message Queue ブローカを起動または停止します。Message Queue プロセスは、Enterprise Server プロセスとは別の仮想マシンで開始されます。Enterprise Server はブローカに追加ポートを提供し、ブローカはこのポートを使用して RMI レジストリを起動します。このポート番号は、そのインスタンス用に設定された JMS ポートの番号に 100 を足した値になります。たとえば、JMS ポート番号が 37676 である場合、この追加ポートの番号は 37776 になります。
LOCAL モードでは、「起動引数」属性を使用して Message Queue ブローカの起動パラメータを指定します。
「REMOTE モード」。type 属性が REMOTE に設定されている場合は、Message Queue ブローカを Enterprise Server から独立して起動および停止する必要があります。Message Queue のツールを使用して、ブローカを設定および調整する必要があります。この状況では、Enterprise Server は外部で設定されたブローカを使用するか、ブローカクラスタを使用します。「REMOTE」 の type 属性はクラスタ環境にもっとも適しています。
REMOTE モードでは、Message Queue のツールを使用して、Message Queue ブローカの起動パラメータを指定する必要があります。「起動引数」属性は無視されます。
「EMBEDDED モード」 (デフォルト)。JMS の type 属性が EMBEDDED に設定されている場合、Enterprise Server と JMS ブローカは同じ仮想マシンに共存します。JMS サービスは、Enterprise Server によってインプロセスで起動され管理されます。
EMBEDDED モードでは、JMS 操作はネットワークスタックの処理を省略するため、パフォーマンスが最適化されます。
Message Queue の管理については、『Sun GlassFish Message Queue 4.4 Administration Guide 』を参照してください。
メッセージは、JMS プロバイダの「物理送信先」を使用して、コンシューマにルーティングおよび配信されます。物理送信先は、管理対象オブジェクト (Topic または Queue 送信先リソースなど) によって識別およびカプセル化されます。アプリケーションコンポーネントはこのオブジェクトを使用して、生成しているメッセージの送信先と、消費しているメッセージの発信元を指定します。送信先リソースを設定する手順については、「接続ファクトリまたは送信先リソースを作成する」を参照してください。
メッセージ駆動型 Bean が配備され、この Bean が待機する物理送信先が存在しない場合、Enterprise Server は自動的に物理送信先を作成し、maxNumActiveConsumers プロパティーの値を -1 に設定します。ただし、あらかじめ物理送信先を作成しておく方がよい方法です。アプリケーションが最初に送信先リソースにアクセスすると、Message Queue は、送信先リソースの名前プロパティーで指定した物理送信先を自動的に作成します。物理送信先は一時的なものなので、Message Queue の構成プロパティーで指定した期限が切れると効力を失います。
ここでは、次のテーマを取り上げます。
本稼動環境では、必ず物理送信先を作成する必要があります。ただし、開発およびテスト段階では、この手順は不要です。物理送信先を作成するには、リモートモードで create-jmsdest サブコマンドを使用します。
物理送信先は、実際にはサーバーオブジェクトというよりも Message Queue オブジェクトであるため、プロパティーを更新する場合は Message Queue ブローカのコマンドを使用します。Message Queue プロパティーの詳細は、『Sun GlassFish Message Queue 4.4 Administration Guide』を参照してください。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
create-jmsdest(1) サブコマンドを使用して、JMS 物理送信先を作成します。
このサブコマンドのプロパティーについては、このマニュアルページに記載されています。
(省略可能) 必要な場合は、サーバーを再起動します。
プロパティーの中には、サーバーの再起動を求めるものもあります。「サーバーの再起動が必要な構成の変更」を参照してください。サーバーを再起動する必要がある場合は、「ドメインの再起動」を参照してください。
この例では、PhysicalQueue という名前のキューを作成します。
asadmin> create-jmsdest --desttype queue --property User=public:Password=public PhysicalQueue Command create-jmsdest executed successfully. |
コマンド行に asadmin help create-jmsdest と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
既存の JMS 物理送信先を一覧表示するには、リモートモードで list-jmsdest サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-jmsdest(1) サブコマンドを使用して、既存の JMS 物理送信先を一覧表示します。
この例では、デフォルトサーバーインスタンスの物理送信先を一覧表示します。
asadmin> list-jmsdest PhysicalQueue queue {} PhysicalTopic topic {} Command list-jmsdest executed successfully. |
コマンド行に asadmin help list-jmsdest と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
指定したターゲットの JMS サービス構成の物理送信先からメッセージを消去するには、リモートモードで flush-jmsdest サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
flush-jmsdest(1) サブコマンドを使用して、JMS 物理送信先からメッセージを消去します。
(省略可能) 必要な場合は、サーバーを再起動します。
プロパティーの中には、サーバーの再起動を求めるものもあります。「サーバーの再起動が必要な構成の変更」を参照してください。サーバーを再起動する必要がある場合は、「ドメインの再起動」を参照してください。
この例では、PhysicalQueue という名前のキューからメッセージを消去します。
asadmin> flush-jmsdest --desttype queue PhysicalQueue Command flush-jmsdest executed successfully |
コマンド行に asadmin help flush-jmsdest と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
指定した JMS 物理送信先を削除するには、リモートモードで delete-jmsdest サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-jmsdest(1) サブコマンドを使用して、既存の JMS 物理送信先を一覧表示します。
delete-jmsdest(1) サブコマンドを使用して、物理送信先を削除します。
この例では、PhysicalQueue という名前のキューを削除します。
asadmin> delete-jmsdest --desttype queue PhysicalQueue Command delete-jmsdest executed successfully |
コマンド行に asadmin help delete-jmsdest と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
JMS API は、2 種類の管理対象オブジェクトを使用します。「接続ファクトリオブジェクト」は、アプリケーションがプログラムによってほかの JMS オブジェクトを作成できるようにします。「送信先オブジェクト」は、メッセージのリポジトリとして動作します。これらのオブジェクトがどのように作成されるかは、JMS の実装ごとに異なります。Enterprise Server では、次のタスクの実行により JMS が実装されます。
接続ファクトリの作成。
送信先の作成。送信先の作成には、物理送信先の作成と、物理送信先が参照する送信先リソースの作成が必要です。
JMS アプリケーションは、Java Naming and Directory Interface (JNDI) API を使用して、接続ファクトリと送信先リソースにアクセスします。通常、JMS アプリケーションは 1 つ以上の接続ファクトリと 1 つ以上の宛先を使用します。アプリケーションについて確認するか、アプリケーション開発者に問い合わせることで、作成が必要なリソースを決定できます。リソースを作成する順序は重要ではありません。
Enterprise Server は、次の接続ファクトリオブジェクトを提供します。
ポイントツーポイント通信で使用する QueueConnectionFactory オブジェクト
パブリッシュ - サブスクライブ通信で使用する TopicConnectionFactory オブジェクト
ポイントツーポイント通信とパブリッシュ - サブスクライブ通信の両方で使用できる ConnectionFactory オブジェクト (新しいアプリケーションで推奨)
Enterprise Server は、次の送信先オブジェクトを提供します。
ポイントツーポイント通信で使用する Queue オブジェクト
パブリッシュ - サブスクライブ通信で使用する Topic オブジェクト
ここでは、次のテーマを取り上げます。
この節で使用するサブコマンドは、接続ファクトリリソースと送信先リソースのどちらの管理にも使用できます。物理送信先を管理する手順については、「JMS 物理送信先の管理」を参照してください。
作成する 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 サブコマンドを使用します。「管理対象オブジェクトを更新する」を参照してください。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
create-jms-resource(1) コマンドを使用して、JMS リソースを作成します。
このサブコマンドのプロパティーについては、このマニュアルページに記載されています。
(省略可能) 必要な場合は、サーバーを再起動します。
プロパティーの中には、サーバーの再起動を求めるものもあります。「サーバーの再起動が必要な構成の変更」を参照してください。サーバーを再起動する必要がある場合は、「ドメインの再起動」を参照してください。
この例では、JNDI 名が jms/DurableConnectionFactory の javax.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. |
この例では、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 と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
既存の接続ファクトリと送信先リソースを一覧表示するには、リモートモードで list-jms-resources サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-jms-resources(1) サブコマンドを使用して、既存の JMS リソースを一覧表示します。
この例では、既存の JMS 接続ファクトリと送信先リソースをすべて表示します。
asadmin> list-jms-resources jms/Queue jms/ConnectionFactory jms/DurableConnectionFactory jms/Topic Command list-jms-resources executed successfully |
この例では、リソースタイプが javax のリソースを一覧表示します。
asadmin> list-jms-resources --restype javax.jms.TopicConnectionFactory jms/DurableTopicConnectionFactory jms/TopicConnectionFactory Command list-jms-resources executed successfully. |
コマンド行に asadmin help list-jms-resources と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
指定した接続ファクトリまたは送信先リソースを削除するには、リモートモードで delete-jms-resource サブコマンドを使用します。
このサブコマンドを実行する前に、削除する JMS リソースへの参照をすべて削除する必要があります。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-jms-resources(1) サブコマンドを使用して、既存の JMS リソースを一覧表示します。
delete-jms-resource(1) サブコマンドを使用して、JMS リソースを削除します。
この例では、jms/Queue リソースを削除します。
asadmin> delete-jms-resource jms/Queue Command delete-jms-resource executed successfully |
コマンド行に asadmin help delete-jms-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
「JMS ホスト」は、Message Queue ブローカを表します。JMS には「JMS ホストリスト」 (AddressList プロパティー) が含まれ、このリストには Enterprise Server が使用するすべての JMS ホストが含まれます。JMS ホストリストには、指定した メッセージキュー ブローカのホストとポートが取り込まれ、JMS ホスト構成が変更されるたびに更新されます。JMS リソースを作成するとき、またはメッセージ駆動型 Bean を配備するときに、リソースまたは Bean が JMS ホストリストを継承します。
JMS ホストリスト内のホストの 1 つが、デフォルト JMS ホストに指定されます。Message Queue ブローカモードが LOCAL に設定されている場合は、Enterprise Server がデフォルト JMS ホストを起動します。
ここでは、次のテーマを取り上げます。
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』を参照してください。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
create-jms-host(1) サブコマンドを使用して、JMS ホストを作成します。
このサブコマンドのプロパティーについては、サブコマンドのマニュアルページを参照してください。
この例では、MyNewHost という名前の JMS ホストを作成します。
asadmin> create-jms-host --mqhost pigeon --mqport 7677 MyNewHost Command create-jms-host executed successfully. |
コマンド行に asadmin help create-jms-host と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
既存の JMS ホストを一覧表示するには、リモートモードで list-jms-hosts サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-jms-hosts(1) サブコマンドを使用して、JMS ホストを一覧表示します。
次のサブコマンドは、既存の JMS ホストを一覧表示します。
asadmin> list-jms-hosts default_JMS_host MyNewHost Command list-jmsdest executed successfully |
list-jms-hosts(1) サブコマンドを使用して、JMS ホストを一覧表示します。
set(1) サブコマンドを使用して、JMS ホストを変更します。
この例では、デフォルト JMS ホストの host 属性の値を変更します。この属性のデフォルト値は localhost です。
asadmin> set server-config.jms-service.jms-host.default_JMS_host.host= "archie.india.sun.com" |
コマンド行に asadmin help set と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
JMS ホストを JMS サービスから削除するには、リモートモードで delete-jms-host サブコマンドを使用します。JMS ホストだけを削除すると、新しい JMS ホストを作成するまで、Message Queue ブローカを起動できなくなります。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-jms-hosts(1) サブコマンドを使用して、JMS ホストを一覧表示します。
delete-jms-host(1) サブコマンドを使用して、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 と呼ばれます。
ここでは、次のテーマを取り上げます。
Enterprise Server は JMS 接続を自動的にプールします。JMS 接続プールが作成されるときに、ManagedConnectionFactory のインスタンスが 1 つ関連付けられます。AddressList プロパティーを ManagedConnectionFactory プロパティーとして設定すると、ManagedConnectionFactory 値の AddressList の構成が、Enterprise Server で定義された値よりも優先されます。
create-connector-connection-pool サブコマンドを使用して、既存のプールを管理します。手順については、「コネクタ接続プールの管理」を参照してください。
デフォルトでは、JMS サービス属性の addresslist-behavior が random に設定されます。この場合、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 プロパティーを使用して接続ファクトリリソースを作成します。これにより、リモートサーバーにアクセスする接続が作成されます。
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 アーカイブです。
汎用リソースアダプタを配備する前に、Enterprise Server が JMS クライアントライブラリを使用できるようにする必要があります。一部の JMS プロバイダでは、クライアントライブラリにネイティブライブラリが含まれている場合もあります。この場合は、これらのネイティブライブラリをすべての Enterprise Server JVM から使用できるようにする必要があります。
コネクタモジュールを配備する場合と同じように、汎用リソースアダプタを配備します。
コネクタ接続プールを作成します。
「コネクタ接続プールを作成する」を参照してください。
コネクタリソースを作成します。
「コネクタリソースを作成する」参照してください。
管理対象オブジェクトリソースを作成します。
「管理対象オブジェクトリソースを作成する」を参照してください。
セキュリティーの 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": |
Enterprise Sever の起動時に、JMS サービスは使用可能になっていますが、必要になる (たとえば、JMS リソースを作成するとき) まで読み込まれません。jms-ping(1) サブコマンドを使用して、JMS サービスが動作しているか確認し、動作していない場合はサービスを起動します。jms-ping サブコマンドが組み込みの JMS サービスと通信できない場合は、エラーメッセージが表示されます。
問題が起きた場合は、次の点を考慮してください。
Enterprise Server のログファイルを確認します。通常、ログファイルは domain-dir/logs/server.log にあります。
ログファイルで Message Queue ブローカがメッセージに応答していないことを確認できた場合は、ブローカを停止して再起動します。
ブローカのログファイルを確認します。通常、このファイルは as-install /domains/domain1/imq/instances/imqbroker/log/log.txt にあります。
JMS の REMOTE モードでは、Message Queue を起動したあとに Enterprise Server を起動する必要があります。
すべての Message Queue ブローカが停止している場合、JMS のデフォルト値を使用しているときは、Enterprise Server の停止または起動に 30 分かかります。このタイムアウトのデフォルト値は変更できます。次に例を示します。
asadmin set domain1.jms-service.reconnect-interval-in-seconds=5 |