14.2. JMS 구성 빈 사용

14.2.1. 개요

JMS 구성을 단순화하고 더 강력하게 만들기 위해 Apache CXF는 단일 JMS 구성 빈을 사용하여 JMS 끝점을 구성합니다. 빈은 org.apache.cxf.transport.jms.JMSConfiguration 클래스에서 구현됩니다. 끝점을 직접 구성하거나 JMS 구성 및 대상을 구성하는 데 사용할 수 있습니다.

14.2.2. 구성 네임스페이스

JMS 구성 빈에서는 Spring p-namespace 를 사용하여 구성을 최대한 간단하게 만듭니다. 이 네임스페이스를 사용하려면 예 14.1. “Spring p-namespace 선언” 과 같이 구성의 루트 요소에 선언해야 합니다.

예 14.1. Spring p-namespace 선언

<beans ...
  xmlns:p="http://www.springframework.org/schema/p"
  ... >
  ...
</beans>

14.2.3. 설정 지정

org.apache.cxf.transport.jms.JMSConfiguration 클래스의 빈을 정의하여 JMS 구성을 지정합니다. 빈의 속성은 전송에 대한 구성 설정을 제공합니다.

중요

CXF 3.0에서는 JMS 전송에 더 이상 Spring JMS에 종속되지 않으므로 일부 Spring JMS 관련 옵션이 제거되었습니다.

표 14.1. “일반 JMS 구성 속성” 공급자와 소비자에게 공통된 속성을 나열합니다.

표 14.1. 일반 JMS 구성 속성

속성기본값설명

connectionFactory

 

[필수] JMS ConnectionFactory를 정의하는 빈에 대한 참조를 지정합니다.

wrapInSingleConnectionFactory

true [pre v3.0]

CXF 3.0에서 삭제

CXF 3.0 pre CXF 3.0 은 Spring SingleConnectionFactory 로 ConnectionFactory를 래핑할지 여부를 지정합니다.

연결을 풀링하지 않는 ConnectionFactory를 사용할 때 JMS 전송의 성능이 향상되므로 이 속성을 활성화합니다. JMS 전송에서 각 메시지에 대한 새 연결을 생성하고 연결을 캐시하려면 SingleConnectionFactory 가 필요하므로 재사용할 수 있습니다.

reconnectOnException

false

CXF 3.0에서 더 이상 사용되지 않는 CXF는 예외가 발생할 때 항상 다시 연결합니다.

pre CXF 3.0 예외 발생 시 새 연결을 만들지 여부를 지정합니다.

Spring SingleConnectionFactory 를 사용하여 ConnectionFactory를 래핑하는 경우:

  • True easingon an exception, create a new connection

    PooledConnectionFactory를 사용할 때는 이 옵션을 활성화하지 마십시오. 이 옵션은 pooled 연결만 반환하지만 다시 연결하지 않기 때문입니다.

  •  - 예외로, 다시 연결을 시도하지 마십시오.

targetDestination

 

대상의 JNDI 이름 또는 공급자별 이름을 지정합니다.

replyDestination

 

응답이 전송되는 JMS 대상의 JMS 이름을 지정합니다. 이 속성을 사용하면 응답에 사용자 정의 대상을 사용할 수 있습니다. 자세한 내용은 14.6절. “이름이 지정된 Reply Destination 사용” 에서 참조하십시오.

destinationResolver

DynamicDestinationResolver

Spring DestinationResolver 에 대한 참조를 지정합니다.

이 속성을 사용하면 대상 이름이 JMS 대상으로 확인되는 방법을 정의할 수 있습니다. 유효한 값은 다음과 같습니다.

  • DynamicDestinationResolver JMS 공급자의 기능을 사용하여 대상 이름 확인.
  • JndiDestinationResolver JNDI를 사용하여 대상 이름을 확인.

transactionManager

 

Spring 트랜잭션 관리자에 대한 참조를 지정합니다. 이를 통해 서비스는 JTA 트랜잭션에 참여할 수 있습니다.

taskExecutor

SimpleAsyncTaskExecutor

CXF 3.0에서 삭제

CXF 3.0 preCXF 3.0 Spring TaskExecutor에 대한 참조를 지정합니다. 이는 리스너에서 수신되는 메시지를 처리하는 방법을 결정하는 데 사용됩니다.

useJms11

false

CXF 3.0에서 제거된 CXF 3.0에서는 JMS 1.1 기능만 지원합니다.

pre CXF 3.0 에서는 JMS 1.1 기능이 사용되는지 여부를 지정합니다. 유효한 값은 다음과 같습니다.

  • 정한 JMS 1.1 기능
  • false — JMS 1.0.2 features

messageIdEnabled

true

CXF 3.0에서 삭제

pre CXF 3.0 은 JMS 전송에서 JMS 브로커가 메시지 ID를 제공할지 여부를 지정합니다. 유효한 값은 다음과 같습니다.

  • True databind-broker는 메시지 ID를 제공해야 합니다.
  • false ECDHE-ECDHEbroker에 메시지 ID를 제공할 필요가 없습니다.

    이 경우 끝점은 메시지 생산자의 setDisableMessageID() 메서드를 true 로 호출합니다. 그러면 브로커에 메시지 ID를 생성하거나 엔드포인트의 메시지에 추가할 필요가 없다는 힌트가 제공됩니다. 브로커는 힌트를 수락하거나 무시합니다.

messageTimestampEnabled

true

CXF 3.0에서 삭제

CXF 3.0 pre CXF 3.0 은 JMS 전송에서 JMS 브로커가 메시지 타임스탬프를 제공할지 여부를 지정합니다. 유효한 값은 다음과 같습니다.

  • True ep-Progressbroker는 메시지 타임스탬프를 제공해야 합니다.
  • false databind-ECDHEbroker는 메시지 타임스탬프를 제공할 필요가 없습니다.

    이 경우 끝점은 메시지 생산자의 setDisableMessageTimestamp() 메서드를 true 로 호출합니다. 그러면 브로커가 타임스탬프를 생성하거나 엔드포인트의 메시지에 추가할 필요가 없다는 힌트가 제공됩니다. 브로커는 힌트를 수락하거나 무시합니다.

cacheLevel

-1( 기능 비활성화)

CXF 3.0에서 삭제

pre CXF 3.0 JMS 리스너 컨테이너가 적용할 수 있는 캐싱 수준을 지정합니다. 유효한 값은 다음과 같습니다.

  • 0 — CACHE_NONE
  • 1 — CACHE_CONNECTION
  • 2 — CACHE_SESSION
  • 3 — CACHE_CONSUMER
  • 4 — CACHE_AUTO

자세한 내용은 Class DefaultMessageListenerContainer를 참조하십시오.

pubSubNoLocal

false

주제를 사용할 때 자체 메시지를 수신할지 여부를 지정합니다.

  • True databind-Do not receive your own messages
  •  짓 - 자신의 메시지를 받을 수 있습니다.

receiveTimeout

60000

응답 메시지를 대기하는 시간(밀리초)을 지정합니다.

explicitQosEnabled

false

각 메시지(true)에 대해 QoS 설정(예: 우선 순위, 지속성, 시간)이 명시적으로 설정되는지 또는 기본값(false)을 사용할지 여부를 지정합니다.

deliveryMode

2

메시지가 영구적인지 여부를 지정합니다. 유효한 값은 다음과 같습니다.

  • 1 (NON_PERSISTENT)-messages는 메모리만 유지
  • 2 (PERSISTENT) - 디스크에 유지됨

priority

4

메시지 우선 순위를 지정합니다. JMS 우선 순위 값의 범위는 0 (최저)에서 9 (최고)입니다. 자세한 내용은 JMS 공급자 설명서를 참조하십시오.

timeToLive

0 (Indefinitely)

전송된 메시지가 삭제되기 전의 시간(밀리초)을 지정합니다.

sessionTransacted

false

JMS 트랜잭션이 사용되는지 여부를 지정합니다.

concurrentConsumers

1

CXF 3.0에서 삭제

pre CXF 3.0 은 리스너에 대한 최소 동시 소비자 수를 지정합니다.

maxConcurrentConsumers

1

CXF 3.0에서 삭제

pre CXF 3.0 은 리스너에 대한 최대 동시 소비자 수를 지정합니다.

messageSelector

 

들어오는 메시지를 필터링하는 데 사용되는 선택기의 문자열 값을 지정합니다. 이 속성을 사용하면 여러 개의 연결이 큐를 공유할 수 있습니다. 메시지 선택기를 지정하는 데 사용되는 구문에 대한 자세한 내용은 JMS 1.1 사양 을 참조하십시오.

subscriptionDurable

false

서버가 내구성 있는 서브스크립션을 사용하는지 여부를 지정합니다.

durableSubscriptionName

 

내구성 서브스크립션을 등록하는 데 사용되는 이름(문자열)을 지정합니다.

messageType

text

메시지 데이터를 JMS 메시지로 패키징하는 방법을 지정합니다. 유효한 값은 다음과 같습니다.

  • 텍스트: 데이터가 TextMessage로 패키징됨을 나타냅니다.
  • 바이트 배열( byte [] )으로 데이터가 패키징됨을 나타냅니다.Indicates that the data will be packaged as an array of bytes (byte[])
  • 바이너리 - 데이터가 ByteMessage로 패키지됨을 나타냅니다.

pubSubDomain

false

대상 대상이 항목 또는 큐인지 여부를 지정합니다.Specifies whether the target destination is a topic or a queue. 유효한 값은 다음과 같습니다.

  • true additionaltopic
  • false — queue

jmsProviderTibcoEms

false

JMS 공급자가 Tibco EMS인지 여부를 지정합니다.

true 로 설정하면 보안 컨텍스트의 보안 주체가 JMS_TIBCO_SENDER 헤더에서 채워집니다.

useMessageIDAsCorrelationID

false

CXF 3.0에서 삭제

JMS에서 메시지 ID를 사용하여 메시지의 상관 관계를 유지할지 여부를 지정합니다.

클라이언트는 true 로 설정하면 클라이언트는 생성된 상관관계 ID를 설정합니다.

maxSuspendedContinuations

-1( 기능 비활성화)

CXF 3.0 JMS 대상이 보유할 수 있는 최대 중단된 연속 수를 지정합니다. 현재 숫자가 지정된 최대값을 초과하면 JMSListenerContainer가 중지됩니다.

reconnectPercentOfMax

70

CXF 3.0maxSuspendedContinuations 를 초과하기 위해 JMSListenerContainer를 다시 시작할 시기를 지정합니다.

현재 일시 중단된 연속 수가 (maxSuspendedContinuations * reconnectPercentOfMax/100) 이하인 경우 리스너 컨테이너가 재시작됩니다.

예 14.2. “JMS 구성 빈” 에 표시된 대로 빈의 속성은 빈 요소에 대한 속성으로 지정됩니다. 모두 Spring p 네임스페이스에 선언됩니다.

예 14.2. JMS 구성 빈

<bean id="jmsConfig"
      class="org.apache.cxf.transport.jms.JMSConfiguration"
      p:connectionFactory="jmsConnectionFactory"
      p:targetDestination="dynamicQueues/greeter.request.queue"
      p:pubSubDomain="false" />

14.2.4. 끝점에 구성 적용

JMSConfiguration 빈은 Apache CXF 기능 메커니즘을 사용하여 서버 및 클라이언트 끝점 모두에 직접 적용할 수 있습니다. 이렇게 하려면 다음을 수행합니다.

  1. 끝점의 address 속성을 jms:// 로 설정합니다.
  2. jaxws:feature 요소를 엔드포인트의 구성에 추가합니다.
  3. 유형 org.apache.cxf.transport.jms.JMSConfigFeature 의 빈을 기능에 추가합니다.
  4. 요소의 p:jmsConfig-ref 속성을 JMSConfiguration 빈의 ID로 설정합니다.

예 14.3. “JAX-WS 클라이언트에 JMS 구성 추가”예 14.2. “JMS 구성 빈” 의 JMS 구성을 사용하는 JAX-WS 클라이언트를 표시합니다.

예 14.3. JAX-WS 클라이언트에 JMS 구성 추가

<jaxws:client id="CustomerService"
              xmlns:customer="http://customerservice.example.com/"
              serviceName="customer:CustomerServiceService"
              endpointName="customer:CustomerServiceEndpoint"
              address="jms://"
              serviceClass="com.example.customerservice.CustomerService">
  <jaxws:features>
    <bean xmlns="http://www.springframework.org/schema/beans"
          class="org.apache.cxf.transport.jms.JMSConfigFeature"
          p:jmsConfig-ref="jmsConfig"/>
  </jaxws:features>
</jaxws:client>

14.2.5. 전송에 구성 적용

JMSConfiguration 빈은 jms:jmsConfig-ref 요소를 사용하여 JMS 구성 및 JMS 대상에 적용할 수 있습니다. jms:jmsConfig-ref 요소의 값은 JMSConfiguration 빈의 ID입니다.

예 14.4. “JMS 구성에 JMS 구성 추가”예 14.2. “JMS 구성 빈” 의 JMS 구성을 사용하는 JMS 구성을 보여줍니다.

예 14.4. JMS 구성에 JMS 구성 추가

<jms:conduit name="{http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit">
  ...
  <jms:jmsConfig-ref>jmsConf</jms:jmsConfig-ref>
</jms:conduit>