この章では、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 接続ファクトリ」ページで、「新規」をクリックします。
「JMS 接続ファクトリを作成」ページが表示されます。
「JNDI 名」フィールドに、接続ファクトリの名前を入力します。
JMS リソースのネーミングサブコンテキストのプレフィックス jms/ を使用することをお勧めします。次に例を示します。jms/ConnectionFactory1
「タイプ」ドロップダウンリストから、javax.jms.ConnectionFactory、javax.jms.QueueConnectionFactory、または javax.jms.TopicConnectionFactory を選択します。
実行時にリソースを有効にするには、「有効」チェックボックスにチェックマークを付けます。
「詳細」セクションで、接続ファクトリの属性として必要な値を変更します。
これらの属性の詳細については、「JMS 接続ファクトリリソースを編集する」を参照してください。Application Server は、接続ファクトリを作成するコネクタ接続プールにこれらの属性を適用します。
JMS 接続ファクトリリソースでは、トランザクションサポートの値を次のように指定します。
トランザクションスコープ内で複数のリソースの使用が必要となるトランザクションとして使用可能なリソースに XATransaction (デフォルト値) を指定します。
たとえば、このリソースには、JDBC リソース、コネクタリソース、またはその他の JMS 接続ファクトリリソースも含まれます。この値により、最高の柔軟性が提供されます。XATransaction として設定されるリソースは、2 フェーズコミットオペレーションに関与します。
トランザクションスコープ内でリソースが 1 つだけ必要となるトランザクションか、複数の XA リソースが必要となる分散トランザクションの直前のエージェントのいずれかとして使用可能なリソースに LocalTransaction を指定します。
この値により、大幅なパフォーマンスの向上が得られます。LocalTransaction として設定されるリソースは、2 フェーズコミットオペレーションに関与しません。
トランザクションにまったく関与しないリソースに NoTransaction を指定します。
この設定は JMS アプリケーションでの使用に限られます。
「追加プロパティー」セクションで、アプリケーションに必要なプロパティーの値を指定します。次の表には、使用可能なプロパティーが一覧表示されています。
プロパティー名 |
説明 |
---|---|
永続的なサブスクライバが使用する接続ファクトリのクライアント ID を指定します。 |
|
アプリケーションが通信するメッセージブローカインスタンスまたはインスタンスの名前 (およびオプションでポート番号) を指定します。リスト内の各アドレスは接続用のホスト名、およびオプションでホストポートと接続サービスを指定します。たとえば、earth や earth:7677 などの値を指定できます。メッセージブローカがデフォルト (7676) 以外のポートで実行している場合は、ポート番号を指定します。プロパティー設定で、クラスタ化された環境の複数のホストおよびポートが指定されている場合、AddressListBehavior プロパティーが RANDOM に設定されていないかぎり、リストで最初に利用できるホストが使用されます。 詳細については、『Message Queue Developer’s Guide for Java Clients』を参照してください。 デフォルト: ローカルホストおよびデフォルトポート番号 (7676) です。クライアントは、ローカルホストのポート 7676 のブローカへの接続を試行します。 |
|
AddressList と同じです。このプロパティー名は推奨されていません。代わりに AddressList を使用します。 |
|
接続ファクトリのユーザー名。 デフォルト: guest |
|
接続ファクトリのパスワード。 デフォルト: guest |
|
有効 (値を true) にすると、接続が失われたときに、クライアントランタイムがメッセージサーバー (または AddressList で指定したアドレスのリスト) に再接続を試みるように指定します。 デフォルト: true |
|
クライアントランタイムがリストの次のアドレスを試行する前に、AddressList に指定した各アドレスへの接続 (または再接続) を試行する回数を指定します。値 -1 は、再試行回数が無制限であることを示します。クライアントランタイムは、接続が成功するまで最初のアドレスへの接続を試みます。 デフォルト: 3 |
|
再接続を試行する間隔をミリ秒単位で指定します。この間隔は、AddressList で指定した各アドレスおよびリストの次のアドレスへの試行に適用されます。間隔が短すぎると、ブローカがリカバリする時間がなくなります。間隔が長すぎると、再接続が許容できない遅延を示す場合があります。 デフォルト: 30000 |
|
接続の試行を AddressList 属性で指定したアドレスの順序 (PRIORITY) で行うか、またはランダムな順序 (RANDOM) で行うかを指定します。 RANDOM は、再接続で AddressList から任意のアドレスが選択されたことを意味します。多数のクライアントが同じ接続ファクトリを使用して接続を試行する可能性がある場合は、RANDOM を指定すると、すべてのクライアントが同じアドレスに接続しないようにすることができます。 PRIORITY は、再接続が常に AddressList に指定した最初のサーバーのアドレスへの接続を試行し、最初のブローカが利用できない場合にのみほかのアドレスを使用することを意味します。 デフォルト: RANDOM |
|
接続の確立 (または再確立) のために、クライアントランタイムが AddressList を介して反復する回数を指定します。値 -1 は試行回数が無制限であることを示します。 デフォルト: 3 |
「ターゲット」領域で、次を実行します。
「了解」をクリックして、接続ファクトリを保存します。
create-jms-resource
ツリーコンポーネントで、「リソース」ノードを展開し、次に「JMS リソース」ノードを展開します。
「接続ファクトリ」ノードを展開します。
編集する接続ファクトリを選択します。
「JMS 接続ファクトリを編集」ページで、次のタスクを実行できます。
「説明」フィールドのテキストの変更。
「有効」チェックボックスの選択または選択解除による、リソースの有効化または無効化。
「詳細」セクションでの属性の値の変更。
プロパティーの追加、削除、または変更。
オプションで、「ターゲット」タブをクリックして、「JMS 接続ファクトリリソースターゲット」ページを表示します。このページで、次を実行します。
「保存」をクリックして変更を保存します。
ツリーコンポーネントで、「リソース」ノードを展開し、次に「JMS リソース」ノードを展開します。
「接続ファクトリ」ノードを選択します。
「JMS 接続ファクトリ」ページで、削除する接続ファクトリ名の横にあるチェックボックスにチェックマークを付けます。
「削除」をクリックします。
delete-jms-resource
ツリーコンポーネントで、「リソース」ノードを展開し、次に「JMS リソース」ノードを展開します。
「送信先リソース」ノードを選択します。
「JMS 送信先リソース」ページで、「新規」をクリックします。「JMS 送信先リソースを作成」ページが表示されます。
「JNDI 名」フィールドに、リソースの名前を入力します。
JMS リソースのネーミングサブコンテキストのプレフィックス jms/ を使用することをお勧めします。次に例を示します。jms/Queue
「タイプ」ドロップダウンリストから、javax.jms.Topic または javax.jms.Queue を選択します。
実行時にリソースを有効にするには、「有効」チェックボックスにチェックマークを付けます。
「追加プロパティー」セクションで、プロパティーの値を指定します。
次の表には、使用可能なプロパティーが一覧表示されています。
プロパティー名 |
説明 |
---|---|
(必須) リソースが参照する物理送信先の名前。 |
|
物理送信先の説明。 |
「ターゲット」領域で、次を実行します。
「了解」をクリックします。
create-jms-resource
ツリーコンポーネントで、「リソース」ノードを展開し、次に「JMS リソース」ノードを展開します。
「送信先リソース」ノードを展開します。
編集する送信先リソースを選択します。
「JMS 送信先リソースを編集」ページで、次のタスクを実行できます。
「保存」をクリックして変更を保存します。
オプションで、「ターゲット」タブをクリックして、「JMS 送信先リソースターゲット」ページを表示します。このページで、次を実行します。
ツリーコンポーネントで、「リソース」ノードを展開し、次に「JMS リソース」ノードを展開します。
「送信先リソース」ノードを選択します。
「JMS 送信先リソース」ページで、削除する送信先リソース名のチェックボックスにチェックマークを付けます。
「削除」をクリックします。
delete-jms-resource
本稼動環境では、必ず物理送信先を作成する必要があります。ただし、開発およびテスト段階では、この手順は不要です。アプリケーションが最初に送信先リソースにアクセスすると、Message Queue は、送信先リソースの名前プロパティーで指定した物理送信先を自動的に作成します。物理送信先は一時的なものなので、Message Queue の設定プロパティーで指定した期限が切れると効力を失います。
ツリーコンポーネントで、「設定」ノードを展開し、「Java メッセージサービス」ノードを展開します。
設定するインスタンスを選択します。
「物理送信先」ノードを選択します。
「物理送信先」ページで、「新規」をクリックします。
「物理転送先の作成」ページが表示されます。
「物理送信先名」フィールドに、送信先の名前 (PhysicalQueue など) を入力します。
「タイプ」ドロップダウンリストから、topic または queue を選択します。
「追加プロパティー」セクションで、「プロパティーを追加」をクリックしてプロパティーを追加します。
次の表に、現在使用可能な 1 つのプロパティーを示します。
プロパティー名 |
説明 |
---|---|
キュー送信先からの負荷分散された配信でアクティブ化できるコンシューマの最大数。値 -1 は、この数が無制限であることを示します。デフォルトは、送信先がスタンドアロンサーバーインスタンスに対して作成される場合は 1 であり、クラスタに対して作成される場合は -1 です。 |
このプロパティーの値を変更するか、またはほかの物理送信先プロパティーを指定するには、MQ-install-dir/imq/bin/imqcmd コマンドを使用します。詳細については、『Message Queue 管理ガイド』を参照してください。
「了解」をクリックします。
create-jmsdest
「物理送信先」ページに、有効期限が切れて配信不可能なメッセージをリダイレクトするシステムの送信先 (mq.sys.dmq という名前のキュー) が表示されます。この送信先に対して、送信先リソース、コンシューマ、およびブラウザを作成できます。この送信先を削除したり、メッセージを送信したりすることはできません。
ツリーコンポーネントで、「設定」ノードを展開し、「Java メッセージサービス」ノードを展開します。
設定するインスタンスを選択します。
「物理送信先」ノードを選択します。
「物理送信先」ページで、削除する送信先名のとなりのチェックボックスにチェックマークを付けます。
「削除」をクリックします。
システムの送信先 mq.sys.dmq を削除しようとすると、エラーメッセージが表示されます。
delete-jmsdest
「JMS サービス」ページを使用して、すべての JMS 接続で使用するプロパティーを設定します。
JMS サービスの設定の詳細については、『Application Server 開発者ガイド』を参照してください。
ツリーコンポーネントで、「設定」ノードを選択します。
設定するインスタンスを選択します。
「Java メッセージサービス」ノードを選択して、「JMS サービス」ページを開きます。
起動が中止されないように JMS サービスが開始するのを Application Server が待機する時間を変更するには、「起動時のタイムアウト」フィールドの値を編集します。
処理速度の遅いシステムやオーバーロードしたシステムでは、デフォルト値 (60) を大きくします。
「タイプ」ドロップダウンリストから、次のとおり選択します。
ローカルホストの JMS サービスにアクセスするには、LOCAL (server-config 設定のデフォルト) を選択します。JMS サービスは、Application Server によって起動および管理されます。
ほかのシステムまたはクラスタの JMS サービスにアクセスするには、REMOTE (default-config 設定のデフォルト) を選択します。REMOTE を選択すると、JMS サービスは次のサーバーの起動時に Application Server によって起動されません。その代わり、JMS サービスは Message Queue によって起動および管理されるため、Message Queue ブローカを別に起動する必要があります。ブローカの起動については、『Message Queue 管理ガイド』を参照してください。この値を選択し、かつリモートホストを使用している場合は、「JMS ホストを編集する」で説明する手順に従って、リモートホストの名前を指定します。
「起動引数」フィールドに、JMS サービスの起動をカスタマイズする引数を入力します。
MQ-install-dir/imq/bin/imqbrokerd コマンドで使用できる任意の引数を使用します。
「再接続」チェックボックスを使用して、接続が失われたときに JMS サービスがメッセージサーバーまたは AddressList で指定したアドレスのリストに再接続を試みるように指定します。
デフォルトで、再接続は有効です。
「再接続の間隔」フィールドに、再接続を試行する間隔を秒数で入力します。
この間隔は、AddressList で指定した各アドレスおよびリストの次のアドレスへの試行に適用されます。間隔が短すぎると、ブローカにリカバリする時間が与えられません。間隔が長すぎると、再接続が許容できない遅延を示す場合があります。
デフォルト値は 60 秒です。
「再接続の試行」フィールドで、クライアントランタイムがリストの次のアドレスを試行する前に、AddressList に指定した各アドレスへの接続 (または再接続) を試行する回数を入力します。
値 -1 は、再試行回数が無制限であることを示します。クライアントランタイムは、接続が成功するまで最初のアドレスへの接続を試みます。デフォルト値は 3 です。
「デフォルト JMS ホスト」ドロップダウンリストからホストを選択します。デフォルトは default_JMS_host です。
「アドレスリストの動作」ドロップダウンリストで、接続の試行を AddressList で指定したアドレスの順序 (priority) で行うか、またはランダムな順序 (random) で行うかを選択します。
priority は、再接続が常に AddressList に指定した最初のサーバーのアドレスへの接続を試行し、最初のブローカが利用できない場合だけにほかのアドレスを使用することを意味します。
多数のクライアントが同じ接続ファクトリを使用して接続を試行する場合は、すべてのクライアントが同じアドレスに接続しないように random を指定します。
デフォルトは random です。
「アドレスリストの繰り返し」フィールドで、接続の確立または再確立のために、AddressList を介して JMS サービスが反復する回数を入力します。
値 -1 は試行回数が無制限であることを示します。
デフォルト値は 3 です。
デフォルト以外のスキームまたはサービスを使用する場合は、「MQ スキーム」および「MQ サービス」フィールドに、Message Queue アドレススキーム名と Message Queue 接続サービス名を入力します。
メッセージサービスのアドレスのフル構文は次のとおりです。
scheme://address-syntax |
ここで、scheme と address_syntax は次の表に示すとおりです。
「MQ スキーム」と「MQ サービス」については、次の表の最初の 2 列に値が表示されています。
スキーム名 |
接続サービス |
説明 |
アドレス構文 |
---|---|---|---|
mq |
jms と ssljms |
Message Queue クライアントランタイムは、指定したホストとポートで MQ ポートマッパーへの接続を確立します。ポートマッパーは動的に確立された接続サービスポートのリストを返し、次に Message Queue クライアントランタイムは指定された接続サービスをホストするポートへの接続を確立します。 |
[hostName][: port][/serviceName ] デフォルト: hostName = localhost、port = 7676、serviceName = jms デフォルトは jms 接続サービスだけに適用されます。ssljms 接続サービスの場合、すべての変数を指定する必要があります。 例: mq:MyHost:7677/ssljms |
mqtcp |
jms |
Message Queue クライアントランタイムは、MQ ポートマッパーをバイパスして、指定したホストとポートに TCP 接続を確立します。 |
hostName:port /jms 例: mqtcp:localhost:7676/jms |
mqssl |
ssljms |
Message Queue クライアントランタイムは、MQ ポートマッパーをバイパスして、指定したホストとポートにセキュリティー保護された SSL 接続を確立します。 |
hostName:port /ssljms 例: mqssl:localhost:7676/ssljms |
http |
httpjms |
Message Queue クライアントランタイムは、指定された URL の Message Queue トンネルサーブレットに HTTP 接続を確立します。ブローカは、Message Queue の『管理ガイド』で説明されているとおり、HTTP トンネルサーブレットにアクセスするように設定する必要があります。 |
hostName:port /contextRoot/tunnel 複数のブローカインスタンスが同じトンネルサーブレットを使用している場合、無作為に選択されたブローカインスタンスではなく、特定のブローカインスタンスに接続するための構文は次のとおりです。http://hostName: port/contextRoot /tunnel?serverName =hostName:instanceName |
https |
httpsjms |
Message Queue クライアントランタイムは、指定された Message Queue トンネルサーブレット URL にセキュリティー保護された HTTPS 接続を確立します。ブローカは、Message Queue の『管理ガイド』で説明されているとおり、HTTPS トンネルサーブレットにアクセスするように設定する必要があります。 |
hostName:port /contextRoot/tunnel 複数のブローカインスタンスが同じトンネルサーブレットを使用している場合、無作為に選択されたブローカインスタンスではなく、特定のブローカインスタンスに接続するための構文は次のとおりです。http://hostName: port/contextRoot /tunnel?serverName =hostName:instanceName |
「追加プロパティー」セクションで、「プロパティーを追加」をクリックしてプロパティーを追加します。
次の表に、利用可能な Sun Java System Message Queue ブローカの設定プロパティーを一覧表示します。
プロパティー名 |
説明 |
---|---|
完全な Message Queue ブローカインスタンス名を指定します。デフォルトは imqbroker です。 |
|
完全な Message Queue ブローカインスタンス名に追加するサフィックスを指定します。サフィックスは、下線文字 (_ ) によってインスタンス名と区切られます。たとえば、インスタンス名が imqbroker の場合、サフィックス xyz を追加して、インスタンス名を imqbroker_xyz に変更します。 |
|
true の場合、下線文字 (_) が先行するメジャーバージョンおよびマイナーバージョン番号を完全な Message Queue ブローカインスタンス名に追加します。たとえば、インスタンス名が imqbroker の場合、バージョン番号を追加して、インスタンス名を imqbroker_8_0 に変更します。デフォルトは false です。 |
「保存」をクリックして変更を保存するか、または「デフォルトを読み込み」をクリックしてサービスのデフォルト値を復元します。
プロバイダとホストをリモートシステムに変更すると、すべての JMS アプリケーションがリモートサーバーで実行するようになります。ローカルサーバーと 1 つまたは複数のリモートサーバーを使用するには、リモートサーバーにアクセスする接続を作成する AddressList プロパティーを使用して、接続ファクトリリソースを作成します。「JMS 接続ファクトリリソースを作成する」を参照してください。
ツリーコンポーネントで、「設定」ノードを選択します。
設定するインスタンスを選択します。
「Java メッセージサービス」ノードを選択して、「JMS サービス」ページを開きます。
「Ping」をクリックします。
JMS サービスが稼働している場合は、「Ping が成功しました: JMS サービスは稼働中です」というメッセージが表示されます。
jms-ping
Application Server Platform Edition では、default_JMS_host というデフォルト名を持つ JMS ホストが 1 つだけ存在することが想定されています。追加のホストを作成することは可能ですが、Application Server はそれらのホストを認識できません。
ツリーコンポーネントで、「設定」ノードを展開します。
設定するインスタンスを選択します。
「Java メッセージサービス」ノードを展開します。
「JMS ホスト」ノードを選択します。
「JMS ホスト」ページで、「新規」をクリックします。「JMS ホストを作成」ページが表示されます。
「名前」フィールドにホスト名を入力します。次に例を示します。
NewJmsHost |
「ホスト」フィールドに、JMS ホストを実行するシステムの名前 (localhost またはローカルあるいはリモートシステムの名前) または IP (Internet Protocol) アドレスを入力します。
「ポート」フィールドに、JMS サービスのポート番号を入力します。
使用する JMS サービスをデフォルト以外のポートで実行する場合にのみ、このフィールドを変更してください。デフォルトのポートは 7676 です。
「管理ユーザー名」フィールドと「管理パスワード」フィールドに、Message Queue ブローカのユーザー名およびパスワードを入力します。
これらは、Application Server のユーザー名およびパスワードとは異なります。これらのフィールドを編集するのは、MQ-install-dir/imq/bin/imqusermgr コマンドを使って MQ ブローカの値を変更した場合に限ります。デフォルト値は admin と admin です。
「了解」をクリックします。
create-jms-host
ツリーコンポーネントで、「設定」ノードを展開します。
設定するインスタンスを選択します。
「Java メッセージサービス」ノードを展開します。
「JMS ホスト」ノードを選択します。
「JMS ホスト」ページで、編集するホストを選択します。
「JMS ホストを編集」ページで、次のタスクを実行できます。
「保存」をクリックして変更を保存するか、または「デフォルトを読み込み」をクリックしてホストのデフォルト値を復元します。
ツリーコンポーネントで、「設定」ノードを展開します。
設定するインスタンスを選択します。
「Java メッセージサービス」ノードを展開します。
「JMS ホスト」ノードを選択します。
「JMS ホスト」ページで、削除するホストのとなりのチェックボックスにチェックマークを付けます。
「削除」をクリックします。
JMS ホストを全部は削除しないでください。全部削除すると、Application Server が再起動しなくなってしまいます。少なくとも 1 つの JMS ホストを残しておく必要があります。
delete-jms-host