14.5. WSDL を使用した JMS の設定
14.5.1. JMS WSDL Extension Namespance
JMS エンドポイントを定義するための WSDL 拡張機能は、名前空間 http://cxf.apache.org/transports/jms で定義されています。JMS 拡張機能を使用するには、例14.5「JMS WSDL 拡張名前空間」 に示す行をコントラクトの定義要素に追加する必要があります。
例14.5 JMS WSDL 拡張名前空間
xmlns:jms="http://cxf.apache.org/transports/jms"
14.5.2. 基本の JMS 設定
概要
JMS アドレス情報は、jms:address
要素とその子 (jms:JMSNamingProperties
要素) を使用して提供されます。jms:address
要素の属性は、JMS ブローカーおよび宛先を識別するのに必要な情報を指定します。jms:JMSNamingProperties
要素は、JNDI サービスへの接続に使用される Java プロパティーを指定します。
JMS 機能を使用して指定された情報は、エンドポイントの WSDL ファイルの情報を上書きします。
JMS アドレスの指定
JMS エンドポイントの基本設定は、jms:address
要素をサービスの port
要素の子として使用して行われます。WSDL で使用される jms:address
要素は、設定ファイルで使用されるものと同じです。その属性は、表14.2「JMS エンドポイント属性」 にリスト表示されます。
Attribute | 説明 |
---|---|
JMS 宛先が JMS キューまたは JMS トピックであるかどうかを指定します。 | |
JMS 宛先に接続するときに使用する JMS 接続ファクトリーにバインドされた JNDI 名を指定します。 | |
要求の送信先の JMS 宛先の JMS 名を指定します。 | |
応答が送信される JMS 宛先の JMS 名を指定します。この属性を使用すると、ユーザー定義の宛先を返信に使用できます。詳細は 「名前付き応答宛先の使用」 を参照してください。 | |
要求の送信先の JMS 宛先にバインドされた JNDI 名を指定します。 | |
応答が送信される JMS 宛先にバインドされた JNDI 名を指定します。この属性を使用すると、ユーザー定義の宛先を返信に使用できます。詳細は 「名前付き応答宛先の使用」 を参照してください。 | |
JMS ブローカーに接続するときに使用するユーザー名を指定します。 | |
JMS ブローカーに接続するときに使用するパスワードを指定します。 |
jms:address
WSDL 要素は、jms:JMSNamingProperties
子要素を使用して、JNDI プロバイダーへの接続に必要な追加情報を指定します。
JNDI プロパティーの指定
JMS および JNDI プロバイダーとの相互運用性を高めるために、jms:address
要素には子要素 jms:JMSNamingProperties
があり、JNDI プロバイダーへの接続時に使用されるプロパティーの設定に使用される値を指定できます。jms:JMSNamingProperties
要素には、name
と value
の 2 つの属性があります。name
は設定するプロパティーの名前を指定します。value
属性は、指定されたプロパティーの値を指定します。JMS:JMSNamingProperties
要素は、プロバイダー固有のプロパティーの仕様にも使用できます。
以下は、設定可能な一般的な JNDI プロパティーのリストです。
-
java.naming.factory.initial
-
java.naming.provider.url
-
java.naming.factory.object
-
java.naming.factory.state
-
java.naming.factory.url.pkgs
-
java.naming.dns.url
-
java.naming.authoritative
-
java.naming.batchsize
-
java.naming.referral
-
java.naming.security.protocol
-
java.naming.security.authentication
-
java.naming.security.principal
-
java.naming.security.credentials
-
java.naming.language
-
java.naming.applet
これらの属性で使用する情報の詳細は、JNDI プロバイダーのドキュメントを確認し、Java API リファレンス資料を参照してください。
例
例14.6「JMS WSDL ポート仕様」 は、JMS WSDL port
仕様の例を示しています。
例14.6 JMS WSDL ポート仕様
<service name="JMSService"> <port binding="tns:Greeter_SOAPBinding" name="SoapPort"> <jms:address jndiConnectionFactoryName="ConnectionFactory" jndiDestinationName="dynamicQueues/test.Celtix.jmstransport" > <jms:JMSNamingProperty name="java.naming.factory.initial" value="org.activemq.jndi.ActiveMQInitialContextFactory" /> <jms:JMSNamingProperty name="java.naming.provider.url" value="tcp://localhost:61616" /> </jms:address> </port> </service>
14.5.3. JMS クライアント設定
概要
JMS コンシューマーエンドポイントは、使用するメッセージタイプを指定します。JMS コンシューマーエンドポイントは、JMS ByteMessage
または JMS TextMessage
を使用できます。
ByteMessage
を使用する場合、コンシューマーエンドポイントは byte[]
を、JMS メッセージボディーからデータを保存し、取得する方法として使用します。メッセージが送信されると、フォーマット情報を含むメッセージデータは byte[]
にパッケージ化され、ネットワークに置かれる前にメッセージボディーに配置されます。メッセージが受信されると、コンシューマーエンドポイントは、メッセージボディーに格納されているデータを byte[]
にパックしたかのようにアンマーシャルしようとします。
TextMessage
を使用する場合、コンシューマーエンドポイントはメッセージボディーからデータを保存および取得するためのメソッドとして文字列を使用します。メッセージが送信されると、フォーマット固有の情報を含むメッセージ情報が文字列に変換され、JMS メッセージ本文に配置されます。メッセージを受け取ると、コンシューマーエンドポイントは、JMS メッセージボディーに格納されているデータを文字列にパックしたかのようにアンマーシャルしようとします。
ネイティブ JMS アプリケーションが Apache CXF コンシューマーと対話する場合、JMS アプリケーションはメッセージとフォーマット情報の解釈を担当します。たとえば、Apache CXF コントラクトで JMS エンドポイントに使用されるバインディングが SOAP であると指定され、メッセージが TextMessage
としてパッケージ化されている場合、受信側の JMS アプリケーションは、すべての SOAP エンベロープ情報を含むテキストメッセージを取得します。
メッセージタイプの指定
JMS コンシューマーエンドポイントによって許可されるメッセージの型は、オプションの jms:client
要素を使用して設定されます。jms:client
要素は WSDL port
要素の子であり、属性が 1 つあります。
メッセージデータを JMS メッセージとしてパッケージ化する方法を指定します。 |
例
例14.7「JMS コンシューマーエンドポイントの WSDL」 は、JMS コンシューマーエンドポイントを設定するための WSDL を示しています。
例14.7 JMS コンシューマーエンドポイントの WSDL
<service name="JMSService"> <port binding="tns:Greeter_SOAPBinding" name="SoapPort"> <jms:address jndiConnectionFactoryName="ConnectionFactory" jndiDestinationName="dynamicQueues/test.Celtix.jmstransport" > <jms:JMSNamingProperty name="java.naming.factory.initial" value="org.activemq.jndi.ActiveMQInitialContextFactory" /> <jms:JMSNamingProperty name="java.naming.provider.url" value="tcp://localhost:61616" /> </jms:address> <jms:client messageType="binary" /> </port> </service>
14.5.4. JMS プロバイダーの設定
概要
JMS プロバイダーエンドポイントには、設定可能な多くの動作があります。これには以下が含まれます。
- メッセージの相関方法
- 永続サブスクリプションの使用
- サービスがローカル JMS トランザクションを使用する場合
- エンドポイントによって使用されるメッセージセレクター
設定の指定
プロバイダーエンドポイントの動作は、オプションの jms:server
要素を使用して設定されます。jms:server
要素は WSDL wsdl:port
要素の子で、以下の属性があります。
Attribute | 説明 |
---|---|
JMS がメッセージ ID を使用してメッセージを関連付けるかどうかを指定します。デフォルトは | |
永続サブスクリプションの登録に使用される名前を指定します。 | |
使用するメッセージセレクターの文字列値を指定します。メッセージセレクターを指定するために使用される構文の詳細は、JMS1.1 仕様を参照してください。 | |
ローカル JMS ブローカーがメッセージ処理に関するトランザクションを作成するかどうかを指定します。デフォルトは | |
例
例14.8「JMS プロバイダーエンドポイントの WSDL」 は、JMS プロバイダーエンドポイントを設定するための WSDL を示しています。
例14.8 JMS プロバイダーエンドポイントの WSDL
<service name="JMSService"> <port binding="tns:Greeter_SOAPBinding" name="SoapPort"> <jms:address jndiConnectionFactoryName="ConnectionFactory" jndiDestinationName="dynamicQueues/test.Celtix.jmstransport" > <jms:JMSNamingProperty name="java.naming.factory.initial" value="org.activemq.jndi.ActiveMQInitialContextFactory" /> <jms:JMSNamingProperty name="java.naming.provider.url" value="tcp://localhost:61616" /> </jms:address> <jms:server messageSelector="cxf_message_selector" useMessageIDAsCorrelationID="true" transactional="true" durableSubscriberName="cxf_subscriber" /> </port> </service>