Menu Close
13.2. JMS URI
概要
SOAP/JMS を使用する場合、JMS URI を使用してエンドポイントのターゲット宛先を指定します。JMS URI は、URI に 1 つ以上のオプションを追加して JMS コネクションを設定するために使用することもできます。これらのオプションは、IETF 標準仕様である Java Message Service 1.0 の URI スキーム で詳しく説明されています。それらは JNDI システム、応答宛先、使用する配信モード、およびその他の JMS プロパティーを設定するために使用できます。
構文
例13.4「JMS URI オプションの構文」 のように、JMS URI の末尾に 1 つ以上のオプションを追加するには、疑問符 (?
) で区切って宛先アドレスから分離します。複数のオプションはアンパサンド (&
) で区切られます。例13.4「JMS URI オプションの構文」 は、JMS URI で複数のオプションを使用するための構文を示しています。
例13.4 JMS URI オプションの構文
jms:variant:jmsAddress?option1=value1&option2=value2&_optionN_=valueN
JMS プロパティー
表13.2「URI オプションとして設定可能な JMS プロパティー」 は、JMS トランスポート層に影響する URI オプションを示しています。
表13.2 URI オプションとして設定可能な JMS プロパティー
プロパティー | デフォルト | 説明 |
---|---|---|
| [任意] コンジットが作成するすべての相関 ID の前に付けられる文字列値です。セレクターはこれを使用して返信をリッスンできます。 | |
|
|
JMS |
| [任意] コネクションのクライアント識別子を指定します。このプロパティーは、クライアントの代わりにプロバイダーが管理する状態とコネクションを関連付けるために使用されます。これにより、同じアイデンティティーを持つ後続のサブスクライバーは、前のサブスクライバーが残した状態でサブスクリプションを再開できます。 | |
| [任意] サブスクリプションの名前を指定します。 | |
|
| CXF によって使用される JMS メッセージ型を指定します。有効な値は次のとおりです。
|
| [任意] コネクション作成のパスワードを指定します。URI にこのプロパティーを追加することは推奨されません。 | |
|
| 0 (最低) から 9 (最高) までの範囲で JMS メッセージの優先度を指定します。 |
|
| リクエスト/リプライエクスチェンジが使用されるときにクライアントがリプライを待つ時間 (ミリ秒単位) を指定します。 |
|
| [CXF 3.0 で非推奨] 例外が発生したときにトランスポートを再接続するかどうかを指定します。 3.0 以降、例外が発生すると、トランスポートは常に再接続されます。 |
|
[任意] キューメッセージの返信先を指定します。返信先が このプロパティーの値は、JMS URI で指定されたバリアントに従って解釈されます。
| |
|
| トランザクション型を指定します。有効な値は次のとおりです。
|
|
|
JMS プロバイダーがメッセージを破棄するまでの時間 (ミリ秒単位) を指定します。 |
| [任意] トピックメッセージの返信先を指定します。このプロパティーの値は、JMS URI で指定されたバリアントに従って解釈されます。
| |
|
| コンジットの UUID をすべての相関 ID のプレフィックスとして使用するかどうかを指定します。
すべてのコンジットには一意の UUID が割り当てられるため、このプロパティーを |
| [任意] コネクションの作成に使用するユーザー名を指定します。 |
JNDI プロパティー
表13.3「URI オプションとして設定可能な JNDI プロパティー」 は、このエンドポイントの JNDI の設定に使用できる URI オプションを示しています。
表13.3 URI オプションとして設定可能な JNDI プロパティー
プロパティー | 説明 |
---|---|
| JMS コネクションファクトリーの JNDI 名を指定します。 |
|
JNDI プロバイダーの完全修飾 Java クラス名を指定します ( |
|
Spring、Blueprint、または JNDI で検索される JTA トランザクションマネージャーの名前を指定します。トランザクションマネージャーが見つかった場合、JTA トランザクションが有効になります。 |
|
JNDI プロバイダーを初期化する URL を指定します。 |
追加の JNDI プロパティー
プロパティー java.naming.factory.initial
および java.naming.provider.url
は、JNDI プロバイダーの初期化に必要な標準プロパティーです。しかし、JNDI プロバイダーは標準のプロパティーに加えて、カスタムプロパティーをサポートする場合があります。この場合、jndi-PropertyName
形式の URI オプションを設定することで、任意の JNDI プロパティーを設定できます。
たとえば、JNDI の SUN の LDAP 実装を使用している場合は、例13.5「JMS URI での JNDI プロパティーの設定」 のように JMS URI で JNDI プロパティー java.naming.factory.control
を設定できます。
例13.5 JMS URI での JNDI プロパティーの設定
jms:queue:FOO.BAR?jndi-java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
例
JMS プロバイダーがまだ設定されていない 場合は、オプションを使用して必要な JNDI 設定の詳細を URI に提供できます (表13.3「URI オプションとして設定可能な JNDI プロパティー」 を参照)。たとえば、Apache ActiveMQ JMS プロバイダを使用し、test.cxf.jmstransport.queue
というキューに接続するようにエンドポイントを設定するには、例13.6「JNDI コネクションを設定する JMS URI」 に示す URI を使用します。
例13.6 JNDI コネクションを設定する JMS URI
jms:jndi:dynamicQueues/test.cxf.jmstransport.queue ?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory &jndiConnectionFactoryName=ConnectionFactory &jndiURL=tcp://localhost:61616
サービスのパブリッシュ
JAX-WS 標準 publish()
メソッドを使用して SOAP/JMS サービスをパブリッシュできません。その代わりに、例13.7「SOAP/JMS サービスの公開」 のように Apache CXF の JaxWsServerFactoryBean
クラスを使用する必要があります。
例13.7 SOAP/JMS サービスの公開
String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3" + "?jndiInitialContextFactory" + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory" + "&jndiConnectionFactoryName=ConnectionFactory" + "&jndiURL=tcp://localhost:61500"; Hello implementor = new HelloImpl(); JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean(); svrFactory.setServiceClass(Hello.class); svrFactory.setAddress(address); svrFactory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID); svrFactory.setServiceBean(implementor); svrFactory.create();
例13.7「SOAP/JMS サービスの公開」 のコードは、以下を行います。
エンドポイントのアドレスを表す JMS URI を作成します。
JaxWsServerFactoryBean
をインスタンス化してサービスをパブリッシュします。
ファクトリー Bean の address
フィールドをサービスの JMS URI に設定します。
ファクトリーによって作成されたサービスが SOAP/JMS トランスポートを使用することを指定します。
サービスの消費
標準的な JAX-WS API は、SOAP/JMS サービスの消費には使用できません。その代わりに、例13.8「SOAP/JMS サービスの消費」 のように、Apache CXF の JaxWsProxyFactoryBean
クラスを使用する必要があります。
例13.8 SOAP/JMS サービスの消費
// Java public void invoke() throws Exception { String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3" + "?jndiInitialContextFactory" + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory" + "&jndiConnectionFactoryName=ConnectionFactory&jndiURL=tcp://localhost:61500"; JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setAddress(address); factory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID); factory.setServiceClass(Hello.class); Hello client = (Hello)factory.create(); String reply = client.sayHi(" HI"); System.out.println(reply); }
例13.8「SOAP/JMS サービスの消費」 のコードは、以下を行います。
エンドポイントのアドレスを表す JMS URI を作成します。
JaxWsProxyFactoryBean
をインスタンス化してプロキシーを作成します。
ファクトリー Bean の address
フィールドをサービスの JMS URI に設定します。
ファクトリーによって作成されたプロキシーが SOAP/JMS トランスポートを使用することを指定します。