13.3. WSDL 확장

13.3.1. 개요

바인딩 범위, 서비스 범위 또는 포트 범위에서 WSDL 확장 요소를 계약에 삽입하여 JMS 전송의 기본 구성을 지정할 수 있습니다. WSDL 확장 기능을 사용하면 JNDI InitialContext 를 부트스트래핑하는 속성을 지정할 수 있습니다. 그러면 JMS 대상을 조회하는 데 사용할 수 있습니다. JMS 전송 계층의 동작에 영향을 미치는 일부 속성을 설정할 수도 있습니다.

13.3.2. SOAP/JMS 네임스페이스

SOAP/JMS WSDL 확장은 http://www.w3.org/2010/soapjms/ 네임스페이스에 정의되어 있습니다. WSDL 계약에서 이를 사용하려면 다음과 같은 설정을 wsdl:definitions 요소에 추가합니다.

<wsdl:definitions ...
    xmlns:soapjms="http://www.w3.org/2010/soapjms/"
  ... >

13.3.3. WSDL 확장 요소

표 13.4. “SOAP/JMS WSDL 확장 요소” JMS 전송을 구성하는 데 사용할 수 있는 모든 WSDL 확장 요소를 보여줍니다.

표 13.4. SOAP/JMS WSDL 확장 요소

요소기본값설명

soapjms:jndiInitialContextFactory

 

JNDI 공급자의 정규화된 Java 클래스 이름을 지정합니다. java.naming.factory.initial Java 시스템 속성을 설정하는 것과 동일합니다.

soapjms:jndiURL

 

JNDI 공급자를 초기화하는 URL을 지정합니다. java.naming.provider.url Java 시스템 속성을 설정하는 것과 동일합니다.

soapjms:jndiContextParameter

 

JNDI InitialContext 를 생성하기 위한 추가 속성을 지정합니다. namevalue 속성을 사용하여 속성을 지정합니다.

soapjms:jndiConnectionFactoryName

 

JMS 연결 팩토리의 JNDI 이름을 지정합니다.

soapjms:deliveryMode

PERSISTENT

JMS PERSISTENT 또는 NON_PERSISTENT 메시지 의미 체계를 사용할지 여부를 지정합니다. PERSISTENT 전달 모드의 경우 JMS 브로커는 메시지를 인증하기 전에 영구 스토리지에 저장합니다. 반면 NON_PERSISTENT 메시지는 메모리에만 유지됩니다.

soapjms:replyToName

 

[선택 사항] 큐 메시지의 응답 대상을 지정합니다. 응답 대상은 JMSReplyTo 헤더에 나타납니다. JMS 공급자가 지정되지 않은 경우 임시 응답 큐를 할당하므로 request-reply 의미가 있는 애플리케이션에 이 속성을 설정하는 것이 좋습니다.

이 속성의 값은 JMS URI에 지정된 변형에 따라 해석됩니다.

  • JNDI 변형 - JNDI로 확인된 대상 대기열의 이름입니다.
  • queue variant- JMS를 사용하여 확인된 대상 대기열의 이름입니다.

soapjms:priority

4

0(최저)에서 9(최고) 사이의 범위인 JMS 메시지 우선 순위를 지정합니다.

soapjms:timeToLive

0

시간(밀리초)은 JMS 공급자가 메시지를 삭제합니다. 값 0은 무한한 수명을 나타냅니다.A value of 0 represents an infinite lifetime.

13.3.4. 구성 범위

WSDL 계약을 배치하는 WSDL 요소는 계약에 정의된 끝점에 대한 구성 변경 범위에 영향을 미칩니다. SOAP/JMS WSDL 요소는 wsdl:binding 요소, wsdl:service 요소 또는 wsdl:port 요소의 자식으로 배치할 수 있습니다. SOAP/JMS 요소의 상위는 다음 중 구성이 배치되는 범위를 결정합니다.

바인딩 범위
wsdl: binding 요소 내에 확장 요소를 배치하여 바인딩 범위 에서 JMS 전송을 구성할 수 있습니다. 이 범위의 요소는 이 바인딩을 사용하는 모든 엔드포인트에 대한 기본 구성을 정의합니다. 바인딩 범위의 설정은 서비스 범위 또는 포트 범위에서 재정의할 수 있습니다.
서비스 범위
wsdl: service 요소 내에 확장 요소를 배치하여 서비스 범위 에서 JMS 전송을 구성할 수 있습니다. 이 범위의 요소는 이 서비스의 모든 엔드포인트에 대한 기본 구성을 정의합니다. 서비스 범위의 모든 설정은 포트 범위에서 재정의할 수 있습니다.
포트 범위
wsdl: port 요소 내에 확장 요소를 배치하여 포트 범위 에서 JMS 전송을 구성할 수 있습니다. 포트 범위의 요소는 이 포트에 대한 구성을 정의합니다. 서비스 범위 또는 바인딩 범위에서 정의된 동일한 확장 요소의 기본값을 재정의합니다.

13.3.5. 예제

예 13.9. “WSDL과 SOAP/JMS 구성의 계약” SOAP/JMS 서비스에 대한 WSDL 계약을 보여줍니다. 바인딩 범위, 서비스 범위에서 메시지 전달 세부 정보 및 포트 범위의 응답 대상에서 JNDI 계층을 구성합니다.

예 13.9. WSDL과 SOAP/JMS 구성의 계약

<wsdl:definitions ...
    xmlns:soapjms="http://www.w3.org/2010/soapjms/"
  ... >
  ...
  <wsdl:binding name="JMSGreeterPortBinding" type="tns:JMSGreeterPortType">
    ...
    <soapjms:jndiInitialContextFactory>
      org.apache.activemq.jndi.ActiveMQInitialContextFactory
    </soapjms:jndiInitialContextFactory>
    <soapjms:jndiURL>tcp://localhost:61616</soapjms:jndiURL>
    <soapjms:jndiConnectionFactoryName>
      ConnectionFactory
    </soapjms:jndiConnectionFactoryName>
    ...
  </wsdl:binding>
  ...
  <wsdl:service name="JMSGreeterService">
    ...
    <soapjms:deliveryMode>NON_PERSISTENT</soapjms:deliveryMode>
    <soapjms:timeToLive>60000</soapjms:timeToLive>
    ...
    <wsdl:port binding="tns:JMSGreeterPortBinding" name="GreeterPort">
      <soap:address location="jms:jndi:dynamicQueues/test.cxf.jmstransport.queue" />
      <soapjms:replyToName>
        dynamicQueues/greeterReply.queue
      </soapjms:replyToName>
      ...
    </wsdl:port>
    ...
  </wsdl:service>
  ...
</wsdl:definitions>

예 13.9. “WSDL과 SOAP/JMS 구성의 계약” 의 WSDL은 다음을 수행합니다.

SOAP/JMS 확장의 네임스페이스를 선언합니다.

바인딩 범위에서 JNDI 연결을 구성합니다.

JMS 전달 스타일을 비영구로 설정하고 각 메시지를 1분 동안 활성으로 설정합니다.

대상 대상을 지정합니다.

응답 메시지가 greeterReply.queue 큐에 전송되도록 JMS 전송을 구성합니다.