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 名 ConnectionFactory
を ActiveMQConnectionFactory
インスタンスにマッピングします。例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
にバインドします。