Red Hat Training

A Red Hat training course is available for Red Hat Fuse

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 つあります。

表14.3 JMS クライアントの WSDL 拡張

messageType

メッセージデータを JMS メッセージとしてパッケージ化する方法を指定します。text は、データを TextMessage としてパッケージ化することを指定します。binary は、データを ByteMessage としてパッケージ化することを指定します。

例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>