15장. Apache ActiveMQ와 통합
15.1. 개요
Apache ActiveMQ를 JMS 공급자로 사용하는 경우 대상의 JNDI 이름을 큐 또는 토픽에 대해 동적으로 JNDI 바인딩을 생성하는 특수 형식으로 지정할 수 있습니다. 즉, 대기열 또는 토픽에 대한 JNDI 바인딩을 사용하여 JMS 공급자를 미리 구성할 필요가 없습니다.
15.2. 초기 컨텍스트 팩토리
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
에 있는 브로커 포트에 연결합니다.
15.3. 연결 팩토리 검색
JNDI InitialContext
인스턴스를 생성하고 javax.jms.ConnectionFactory
인스턴스에 바인딩된 JNDI 이름을 지정해야 합니다. Apache ActiveMQ의 경우 JNDI 이름 ConnectionFactory
를 ActiveMQConnectionFactory
인스턴스에 매핑하는 InitialContext
인스턴스에 사전 정의된 바인딩이 있습니다. 예 15.2. “Apache ActiveMQ 연결 팩토리 지정을 위한 SOAP/JMS WSDL” Apache ActiveMQ 연결 팩토리를 지정하기 위한 SOAP/JMS 확장 요소.
예 15.2. Apache ActiveMQ 연결 팩토리 지정을 위한 SOAP/JMS WSDL
<soapjms:jndiConnectionFactoryName> ConnectionFactory </soapjms:jndiConnectionFactoryName>
15.4. 동적 대상의 구문
대기열 또는 토픽에 동적으로 액세스하려면 대상의 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
에 바인딩합니다.