13.2. JMS URI
13.2.1. 개요
SOAP/JMS를 사용하는 경우 JMS URI를 사용하여 끝점의 대상 대상을 지정합니다. URI에 하나 이상의 옵션을 추가하여 JMS 연결을 구성하는 데 JMS URI를 사용할 수도 있습니다. 이러한 옵션은 IETF 표준, Java Message Service 1.0용 URI Scheme에 자세히 설명되어 있습니다. JNDI 시스템, 응답 대상, 사용할 전달 모드 및 기타 JMS 속성을 구성하는 데 사용할 수 있습니다.
13.2.2. 구문
예 13.4. “JMS URI 옵션의 구문” 에 표시된 대로 대상의 주소에서 물음표(?
)로 구분하여 JMS URI 끝에 하나 이상의 옵션을 추가할 수 있습니다. 여러 옵션은 앰퍼샌드(&
amp;)로 구분됩니다. 예 13.4. “JMS URI 옵션의 구문” 는 JMS URI에서 여러 옵션을 사용하는 구문을 보여줍니다.
예 13.4. JMS URI 옵션의 구문
jms:variant:jmsAddress?option1=value1&option2=value2&_optionN_=valueN
13.2.3. JMS 속성
표 13.2. “URI 옵션으로 설정된 JMS 속성” 는 JMS 전송 계층에 영향을 주는 URI 옵션을 보여줍니다.
속성 | 기본값 | 설명 |
---|---|---|
| [선택 사항] conduit이 생성하는 모든 상관 관계 ID 앞에 있는 문자열 값입니다. 선택기는 이를 사용하여 응답을 수신할 수 있습니다. | |
|
|
JMS |
| [선택 사항] 연결의 클라이언트 식별자를 지정합니다. 이 속성은 공급자가 클라이언트를 대신하여 유지 관리하는 상태와 연결을 연결하는 데 사용됩니다.This property is used to associate a connection with a state that the provider maintains on behalf of the client. 이를 통해 후속 ID를 가진 구독자는 이전 구독자가 남겨 두었던 상태에서 서브스크립션을 재개할 수 있습니다. | |
| [선택 사항] 서브스크립션의 이름을 지정합니다. | |
|
| CXF에서 사용하는 JMS 메시지 유형을 지정합니다. 유효한 값은 다음과 같습니다.
|
| [선택 사항] 연결 생성을 위한 암호를 지정합니다. URI에 이 속성을 추가하는 것은 권장되지 않습니다. | |
|
| 0(최저)에서 9(최고) 사이의 범위인 JMS 메시지 우선 순위를 지정합니다. |
|
| 요청/복원 교환이 사용될 때 클라이언트가 응답을 기다리는 시간을 지정합니다.Specifies the time, in milliseconds, the client will wait for a reply when request/reply exchange are used. |
|
| [CXF 3.0에서 사용 중지됨] 예외가 발생할 때 전송이 다시 연결되는지 여부를 지정합니다. 3.0에서는 예외가 발생할 때 항상 전송이 다시 연결됩니다. |
|
[선택 사항] 큐 메시지의 응답 대상을 지정합니다. 응답 대상은 이 속성의 값은 JMS URI에 지정된 변형에 따라 해석됩니다.
| |
|
| 트랜잭션 유형을 지정합니다. 유효한 값은 다음과 같습니다.
|
|
|
JMS 공급자가 메시지를 삭제할 시간(밀리초)을 지정합니다. 값 0은 무한한 수명을 나타냅니다.A value of |
| [선택 사항] 주제 메시지의 응답 대상을 지정합니다. 이 속성의 값은 JMS URI에 지정된 변형에 따라 해석됩니다.
| |
|
| conduit의 UUID가 모든 상관 관계 ID의 접두사로 사용되는지 여부를 지정합니다.
모든 conduits에는 고유한 UUID가 할당되므로 이 속성을 |
| [선택 사항] 연결을 만드는 데 사용할 사용자 이름을 지정합니다. |
13.2.4. JNDI 속성
표 13.3. “URI 옵션으로 설정된 JNDI 속성” 는 이 엔드포인트에 대해 JNDI를 구성하는 데 사용할 수 있는 URI 옵션을 보여줍니다.
속성 | 설명 |
---|---|
| JMS 연결 팩토리의 JNDI 이름을 지정합니다. |
|
JNDI 공급자의 정규화된 Java 클래스 이름을 지정합니다(Java |
|
Spring, Blueprint 또는 JNDI에서 검색할 JTA 트랜잭션 관리자의 이름을 지정합니다. 트랜잭션 관리자가 발견되면 JTA 트랜잭션이 활성화됩니다. |
|
JNDI 공급자를 초기화하는 URL을 지정합니다. |
13.2.5. 추가 JNDI 속성
java.naming.factory.initial
및 java.naming.provider.url
의 속성은 JNDI 공급자를 초기화하는 데 필요한 표준 속성입니다. 그러나 JNDI 공급자는 표준 속성 외에도 사용자 정의 속성을 지원할 수도 있습니다. 이 경우 jndi-PropertyName
형식의 URI 옵션을 설정하여 임의의 JNDI 속성을 설정할 수 있습니다.
예를 들어, JNDI의 SUN의 LDAP 구현을 사용하는 경우 예 13.5. “JMS URI에서 JNDI 속성 설정” 과 같이 JMS URI에서 JNDI 속성 java.naming.factory.control
을 설정할 수 있습니다.
예 13.5. JMS URI에서 JNDI 속성 설정
jms:queue:FOO.BAR?jndi-java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
13.2.6. 예제
JMS 공급자가 아직 구성되지 않은 경우 옵션을 사용하여 URI에 필수 JNDI 구성 세부 정보를 제공할 수 있습니다( 표 13.3. “URI 옵션으로 설정된 JNDI 속성”참조). 예를 들어 Apache ActiveMQ JMS 공급자를 사용하도록 엔드포인트를 구성하고 test.cxf.jmstransport.queue
라는 큐에 연결하려면 예 13.6. “JNDI 연결을 구성하는 JMS URI” 에 표시된 URI를 사용합니다.
예 13.6. JNDI 연결을 구성하는 JMS URI
jms:jndi:dynamicQueues/test.cxf.jmstransport.queue ?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory &jndiConnectionFactoryName=ConnectionFactory &jndiURL=tcp://localhost:61616
13.2.7. 서비스 게시
JAX-WS 표준 publish()
메서드를 사용하여 SOAP/JMS 서비스를 게시할 수 없습니다. 대신 예 13.7. “SOAP/JMS 서비스 게시” 과 같이 Apache CXF의 JaxWsServerFactoryBean
클래스를 사용해야 합니다.
예 13.7. SOAP/JMS 서비스 게시
String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3" + "?jndiInitialContextFactory" + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory" + "&jndiConnectionFactoryName=ConnectionFactory" + "&jndiURL=tcp://localhost:61500"; Hello implementor = new HelloImpl(); JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean(); svrFactory.setServiceClass(Hello.class); svrFactory.setAddress(address); svrFactory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID); svrFactory.setServiceBean(implementor); svrFactory.create();
예 13.7. “SOAP/JMS 서비스 게시” 의 코드는 다음을 수행합니다.
끝점의 주소를 나타내는 JMS URI를 생성합니다.
JaxWsServerFactoryBean
을 인스턴스화하여 서비스를 게시합니다.
서비스의 JMS URI를 사용하여 팩토리 빈의 address
필드를 설정합니다.
팩토리에 의해 생성된 서비스가 SOAP/JMS 전송을 사용하도록 지정합니다.
13.2.8. 서비스 사용
표준 JAX-WS API는 SOAP/JMS 서비스를 사용하는 데 사용할 수 없습니다. 대신 예 13.8. “SOAP/JMS 서비스 사용” 과 같이 Apache CXF의 JaxWsProxyFactoryBean
클래스를 사용해야 합니다.
예 13.8. SOAP/JMS 서비스 사용
// Java public void invoke() throws Exception { String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3" + "?jndiInitialContextFactory" + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory" + "&jndiConnectionFactoryName=ConnectionFactory&jndiURL=tcp://localhost:61500"; JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setAddress(address); factory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID); factory.setServiceClass(Hello.class); Hello client = (Hello)factory.create(); String reply = client.sayHi(" HI"); System.out.println(reply); }
예 13.8. “SOAP/JMS 서비스 사용” 의 코드는 다음을 수행합니다.
끝점의 주소를 나타내는 JMS URI를 생성합니다.
JaxWsProxyFactoryBean
을 인스턴스화하여 프록시를 생성합니다.
서비스의 JMS URI를 사용하여 팩토리 빈의 address
필드를 설정합니다.
팩토리에서 생성한 프록시가 SOAP/JMS 전송을 사용하도록 지정합니다.