Menu Close

第15章 Apache ActiveMQ との統合

概要

Apache ActiveMQ を JMS プロバイダーとして使用する場合は、宛先の JNDI 名を、キューまたはトピックの JNDI バインディングを動的に作成する特別な形式で指定できます。つまり、キューまたはトピックの JNDI バインディングを使用して JMS プロバイダーを事前に設定する必要はありません

最初のコンテキストファクトリー

Apache ActiveMQ と JNDI を統合するキーは ActiveMQInitialContextFactory クラスです。このクラスは、JNDI InitialContext インスタンスを作成するために使用され、JMS ブローカーの JMS 宛先にアクセスするために使用できます。

例15.1「Apache ActiveMQ に接続する SOAP/JMS WSDL」 は、Apache ActiveMQ と統合された JNDI InitialContext を作成するための SOAP/JMS WSDL エクステンションを示しています。

例15.1 Apache ActiveMQ に接続する SOAP/JMS WSDL

<soapjms:jndiInitialContextFactory>
  org.apache.activemq.jndi.ActiveMQInitialContextFactory
</soapjms:jndiInitialContextFactory>
<soapjms:jndiURL>tcp://localhost:61616</soapjms:jndiURL>

例15.1「Apache ActiveMQ に接続する SOAP/JMS WSDL」 では、Apache ActiveMQ クライアントは tcp://localhost:61616 にあるブローカーポートに接続します。

コネクションファクトリーの検索

JNDI InitialContext インスタンスの作成も、javax.jms.ConnectionFactory インスタンスにバインドされる JNDI 名を指定する必要があります。Apache ActiveMQ の場合、InitialContext インスタンスに事前定義されたバインディングがあり、JNDI 名 ConnectionFactoryActiveMQConnectionFactory インスタンスにマッピングします。例15.2「Apache ActiveMQ コネクションファクトリーを指定するための SOAP/JMS WSDL」 は Apache ActiveMQ 接続ファクトリーを指定するための SOAP/JMS エクステンション要素を示しています。

例15.2 Apache ActiveMQ コネクションファクトリーを指定するための SOAP/JMS WSDL

<soapjms:jndiConnectionFactoryName>
  ConnectionFactory
</soapjms:jndiConnectionFactoryName>

動的宛先の構文

キューまたはトピックに動的にアクセスするには、宛先の JNDI 名を、以下のいずれかの形式で JNDI 複合名として指定します。

dynamicQueues/QueueName
dynamicTopics/TopicName

QueueName および TopicName は、Apache ActiveMQ ブローカーが使用する名前です。これらは抽象 JNDI 名では ありません

例15.3「動的に作成されたキューを持つ WSDL ポートの指定」 は、動的に作成されたキューを使用する WSDL ポートを示しています。

例15.3 動的に作成されたキューを持つ WSDL ポートの指定

<service name="JMSService">
  <port binding="tns:GreeterBinding" name="JMSPort">
    <jms:address jndiConnectionFactoryName="ConnectionFactory"
                 jndiDestinationName="dynamicQueues/greeter.request.queue" >
      <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>

アプリケーションが JMS コネクションを開こうとすると、Apache ActiveMQ は JNDI 名 greeter.request.queue を持つキューが存在するかどうかを確認します。存在しない場合は、新しいキューを作成し、JNDI 名 greeter.request.queue にバインドします。