Red Hat Training

A Red Hat training course is available for Red Hat Fuse

42.4.3. JMS 속성 설정

초록

소비자 끝점에서 요청 컨텍스트를 사용하여 여러 JMS 메시지 헤더 속성 및 소비자 끝점의 제한 값을 설정할 수 있습니다. 이러한 속성은 단일 호출에 유효합니다. 서비스 프록시에서 작업을 호출할 때마다 다시 설정해야 합니다.

서비스에 헤더 속성을 설정할 수 없습니다.

42.4.3.1. JMS 헤더 속성

표 42.4. “settable JMS Header Properties” 소비자 엔드포인트의 요청 컨텍스트를 사용하여 설정할 수 있는 JMS 헤더의 속성을 나열합니다.

표 42.4. settable JMS Header Properties

속성 이름속성 유형setter Method

ID 상관 관계

string

setJMSCorralationID()

전송 모드

int

setJMSDeliveryMode()

우선 순위

int

setJMSPriority()

라이브 시간

long

setTimeToLive()

이러한 속성을 설정하려면 다음을 수행합니다.

  1. org.apache.cxf.transports.jms.context.JMSMessageHeadersType 오브젝트를 생성합니다.
  2. 표 42.4. “settable JMS Header Properties” 에 설명된 적절한 설정 방법을 사용하여 설정할 값을 채웁니다.
  3. org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_REQUEST_HEADERS를 첫 번째 인수로, 새 JMSMessageHeadersType 오브젝트를 두 번째 인수로 호출하여 요청 컨텍스트의 put() 메서드를 요청 컨텍스트로 설정합니다.

42.4.3.2. 선택적 JMS 헤더 속성

선택적 속성을 JMS 헤더로 설정할 수도 있습니다. 선택적 JMS 헤더 속성은 다른 JMS 헤더 속성을 설정하는 데 사용되는 JMSMessageHeadersType 오브젝트에 저장됩니다. 이러한 개체는 org.apache.cxf.transports.jms.context.JMSPropertyType 개체가 포함된 List 오브젝트로 저장됩니다. JMS 헤더에 선택적 속성을 추가하려면 다음을 수행합니다.

  1. JMSPropertyType 오브젝트를 생성합니다.
  2. setName() 을 사용하여 속성의 이름을 설정합니다.
  3. setValue() 를 사용하여 속성의 값 필드를 설정합니다.
  4. JMSMessageHeadersType.getProperty().add(JMSPropertyType) 를 사용하여 JMS 메시지 헤더에 속성을 추가합니다.
  5. 모든 속성이 메시지 헤더에 추가될 때까지 절차를 반복합니다.

42.4.3.3. client Receive Timeout

JMS 헤더 속성 외에도 소비자 엔드포인트가 시간 초과하기 전에 응답을 대기하는 시간을 설정할 수 있습니다. org.apache.cxf.transports.jms.JMSConstants.JMSConstants.JMSConstants.JMS_CLIENT_RECEIVE_TIMEOUT을 사용하여 요청 컨텍스트의 put() 메서드를 호출하고 소비자가 두 번째 인수로 대기하도록 시간(밀리초)을 나타내는 값을 설정합니다.

42.4.3.4. 예제

예 42.15. “요청 컨텍스트를 사용하여 JMS 속성 설정” 요청 컨텍스트를 사용하여 일부 JMS 속성을 설정하는 코드를 표시합니다.

예 42.15. 요청 컨텍스트를 사용하여 JMS 속성 설정

import org.apache.cxf.transports.jms.context.*;
 // Proxy greeter initialized previously
InvocationHandler handler = Proxy.getInvocationHandler(greeter);

BindingProvider bp= null;
if (handler instanceof BindingProvider)
{
  bp = (BindingProvider)handler;
  Map<String, Object> requestContext = bp.getRequestContext();

  JMSMessageHeadersType requestHdr = new JMSMessageHeadersType();
  requestHdr.setJMSCorrelationID("WithBob");
  requestHdr.setJMSExpiration(3600000L);


  JMSPropertyType prop = new JMSPropertyType;
  prop.setName("MyProperty");
  prop.setValue("Bluebird");
  requestHdr.getProperty().add(prop);

  requestContext.put(JMSConstants.CLIENT_REQUEST_HEADERS, requestHdr);

  requestContext.put(JMSConstants.CLIENT_RECEIVE_TIMEOUT, new Long(1000));
}

예 42.15. “요청 컨텍스트를 사용하여 JMS 속성 설정” 의 코드는 다음을 수행합니다.

변경하려는 JMS 속성이 있는 프록시의 InvocationHandler 를 가져옵니다.

InvocationHandlerBindingProvider 인지 확인합니다.

반환된 InvocationHandler 개체를 BindingProvider 개체로 캐스팅하여 요청 컨텍스트를 검색합니다. casts the returned InvocationHandler object into a BindingProvider object to retrieve the request context.

요청 컨텍스트를 가져옵니다.

새 메시지 헤더 값을 보유하는 JMSMessageHeadersType 오브젝트를 생성합니다.

Correlation ID를 설정합니다.

만료 속성을 60분으로 설정합니다.

JMSPropertyType 오브젝트를 생성합니다.

선택적 속성의 값을 설정합니다.

메시지 헤더에 선택적 속성을 추가합니다.

JMS 메시지 헤더 값을 요청 컨텍스트로 설정합니다.

클라이언트 수신 시간 초과 속성을 1초로 설정합니다.