第15章 Apache ActiveMQ との統合
概要
Apache ActiveMQ を JMS プロバイダーとして使用する場合、宛先の JNDI 名を、キューまたはトピックの JNDI バインディングを動的に作成する特別な形式で指定できます。つまり、キューまたはトピックの JNDI バインディングを使用して事前に JMS プロバイダーを設定する必要はありません。
The initial context factory
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」 ApacheActiveMQ 接続ファクトリーを指定するための 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 name greeter.request.queue
にバインドします。