13.2. JMS URI
概要
SOAP/JMS を使用する場合、JMS URI を使用してエンドポイントのターゲット宛先を指定します。URI に 1 つ以上のオプションを追加すると、JMS 接続の設定に JMS URI を使用することもできます。これらのオプションは、IETF 標準、URI Scheme for Java Message Service 1.0 で説明されています。これらを使用して、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 オプションを示しています。
プロパティー | デフォルト | 説明 |
---|---|---|
| [オプション] コンジットが作成するすべての相関 ID の前に付けられる文字列値。セレクターはこれを使用して応答をリッスンできます。 | |
|
|
JMS |
| [オプション] オプション接続のクライアント識別子を指定します。このプロパティーは、プロバイダーがクライアントに代わって維持する状態に接続を関連付けるために使用されます。これにより、同じアイデンティティーを持つ後続のサブスクライバーが残りの状態でサブスクリプションを再開できます。 | |
| (必要に応じて) サブスクリプションの名前を指定します。 | |
|
| CXF によって使用される JMS メッセージタイプを指定します。有効な値は以下のとおりです。
|
| [オプション] 接続を作成するためのパスワードを指定します。URI にこのプロパティーを追加することは推奨されません。 | |
|
| 0(最低) から 9(最高) の範囲の JMS メッセージ優先度を指定します。 |
|
| 要求/応答交換が使用されるときにクライアントが応答を待機する時間をミリ秒単位で指定します。 |
|
| [CXF3.0 での非推奨] 例外が発生したときにトランスポートを再接続するかどうかを指定します。 3.0 の時点では、例外の発生時に常にトランスポートが再接続されます。 |
|
[任意] キューメッセージの応答先を指定します。応答宛先が このプロパティーの値は、JMS URI で指定されたバリアントに従って解釈されます。
| |
|
| トランザクションタイプを指定します。有効な値は以下のとおりです。
|
|
|
JMS プロバイダーがメッセージを破棄するまでの時間をミリ秒単位で指定します。 |
| [オプション] トピックメッセージの返信先を指定します。このプロパティーの値は、JMS URI で指定されたバリアントに従って解釈されます。
| |
|
| コンジットの UUID をすべての相関 ID の接頭辞として使用するかどうかを指定します。
すべての Conduits に一意の UUID が割り当てられているため、このプロパティーを |
| [オプション] 接続の作成に使用するユーザー名を指定します。 |
JNDI プロパティー
表13.3「URI オプションとして設定可能な JNDI プロパティー」 は、このエンドポイントの JNDI を設定するために使用できる URI オプションを示しています。
プロパティー | 説明 |
---|---|
| JMS 接続ファクトリーの JNDI 名を指定します。 |
|
JNDI プロバイダーの完全修飾クラス名を指定します ( |
|
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 プロバイダーが まだ 設定されていない場合は、オプションを使用して URI で必要な JNDI 設定の詳細を提供できます (表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 トランスポートを使用することを指定します。