13.2. JMS URI
13.2.1. 개요
Cryostat/JMS를 사용하는 경우 JMS URI가 끝점의 대상 대상을 지정하는 데 사용됩니다. JMS URI는 URI에 하나 이상의 옵션을 추가하여 JMS 연결을 구성하는 데도 사용할 수 있습니다. 이러한 옵션은 IETF 표준, Java Message Service 1.0의 URI 스키마에 자세히 설명되어 있습니다. 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 |
| [optional] 연결에 대한 클라이언트 ID를 지정합니다. 이 속성은 공급자를 대신하여 유지 관리하는 상태와 연결을 연결하는 데 사용됩니다. 이를 통해 동일한 ID를 가진 후속 구독자는 이전 구독자가 서브스크립션을 종료한 상태에서 서브스크립션을 재개할 수 있습니다. | |
| [선택 사항] 서브스크립션의 이름을 지정합니다. | |
|
| CXF에서 사용하는 JMS 메시지 유형을 지정합니다. 유효한 값은 다음과 같습니다.
|
| [optional] 연결을 생성하기 위한 암호를 지정합니다. 이 속성을 URI에 추가하는 것은 권장되지 않습니다. | |
|
| 0(가장 낮음)에서 9(가장 높음)까지의 JMS 메시지 우선 순위를 지정합니다. |
|
| 요청/응답 교환이 사용될 때 클라이언트가 응답을 대기할 시간을 지정합니다. |
|
| [CXF 3.0에서 더 이상 사용되지 않음] 예외가 발생할 때 전송이 다시 연결해야 하는지 여부를 지정합니다. 3.0부터 예외가 발생할 때 전송이 항상 다시 연결됩니다. |
|
[optional] 큐 메시지의 응답 대상을 지정합니다. reply 대상은 이 속성의 값은 JMS URI에 지정된 변형에 따라 해석됩니다.
| |
|
| 트랜잭션 유형을 지정합니다. 유효한 값은 다음과 같습니다.
|
|
|
JMS 공급자가 메시지를 삭제하는 시간(밀리초)을 지정합니다. 값이 0이면 무한 수명입니다.A value of |
| [선택 사항] 주제 메시지에 대한 응답 대상을 지정합니다. 이 속성의 값은 JMS URI에 지정된 변형에 따라 해석됩니다.
| |
|
| conduit의 UUID가 모든 상관관계 ID의 접두사로 사용되는지 여부를 지정합니다.
모든 Conduits에는 고유한 UUID가 할당되므로 이 속성을 |
| [optional] 연결을 만드는 데 사용할 사용자 이름을 지정합니다. |
13.2.4. JNDI 속성
표 13.3. “URI 옵션으로 JNDI 속성 설정 가능” 에는 이 엔드포인트에 대한 JNDI를 구성하는 데 사용할 수 있는 URI 옵션이 표시됩니다.
속성 | 설명 |
---|---|
| JMS 연결 팩토리의 JNDI 이름을 지정합니다. |
|
JNDI 공급자의 정규화된 Java 클래스 이름을 지정합니다(Java |
|
Spring, 블루프린트 또는 JNDI에서 검색할 JTA 트랜잭션 관리자의 이름을 지정합니다. 트랜잭션 관리자가 발견되면 JTA 트랜잭션이 활성화됩니다. |
|
JNDI 공급자를 초기화하는 URL을 지정합니다. |
13.2.5. 추가 JNDI 속성
속성인 java.naming.factory.initial
및 java.naming.provider.url
은 JNDI 공급자를 초기화하는 데 필요한 표준 속성입니다. 그러나 경우에 따라 JNDI 공급자가 표준 속성 외에도 사용자 지정 속성을 지원할 수 있습니다. 이 경우 jndi-PropertyName
형식의 URI 옵션을 설정하여 임의의 JNDI 속성을 설정할 수 있습니다.
예를 들어, SUN's LDAP implementation of JNDI를 사용하는 경우 예 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. 서비스 게시
Cryostat-WS 표준 publish()
메서드는 Cryostat/JMS 서비스를 게시하는 데 사용할 수 없습니다. 대신 예 13.7. “Cryostat/JMS 서비스 게시” 에 표시된 대로 Apache CXF의 JaxWsServerFactoryBean
클래스를 사용해야 합니다.
예 13.7. Cryostat/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. “Cryostat/JMS 서비스 게시” 의 코드는 다음을 수행합니다.
엔드포인트의 주소를 나타내는 JMS URI를 생성합니다.
JaxWsServerFactoryBean
을 인스턴스화하여 서비스를 게시합니다.
서비스의 JMS URI를 사용하여 팩토리 빈의 주소
필드를 설정합니다.
팩토리에서 생성한 서비스가 Cryostat/JMS 전송을 사용하도록 지정합니다.
13.2.8. 서비스 사용
표준 Cryostat-WS API는 Cryostat/JMS 서비스를 사용하는 데 사용할 수 없습니다. 대신 예 13.8. “Cryostat/JMS 서비스 사용” 에 표시된 대로 Apache CXF의 JaxWsProxyFactoryBean
클래스를 사용해야 합니다.
예 13.8. Cryostat/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. “Cryostat/JMS 서비스 사용” 의 코드는 다음을 수행합니다.
엔드포인트의 주소를 나타내는 JMS URI를 생성합니다.
JaxWsProxyFactoryBean
을 인스턴스화하여 프록시를 생성합니다.
서비스의 JMS URI를 사용하여 팩토리 빈의 주소
필드를 설정합니다.
팩토리에서 생성한 프록시가 Cryostat/JMS 전송을 사용하도록 지정합니다.