참조에 의해 JMS 메시지 페이로드를 전달하는 이유 및 시기

대용량 오브젝트 메시지 또는 바이트 메시지가 전송되면, 메시지 페이로드를 직렬화, 직렬화 해제 및 복사하는 데 사용하는 메모리 및 프로세서의 비용이 커질 수 있습니다. 연결 팩토리 또는 활성화 스펙에서 참조에 의한 메시지 페이로드 전달 특성을 사용하면, 기본 메시징 제공자가 JMS 1.1 스펙을 대체하고 이 데이터의 복사를 줄이거나 생략하도록 합니다.

백그라운드

JMS 1.1 스펙은 오브젝트 메시지가 값에 따라 전달됨을 나타냅니다. 이는 클라이언트 애플리케이션이 오브젝트를 설정한 후 수정하는 경우, WebSphere® Application Server의 기본 메시징 제공자와 같은 JMS 제공자가 오브젝트가 메시지 페이로드로 설정될 때 ObjectMessage에 있는 오브젝트를 복사해야 함을 의미합니다. 실제로 이는 복사하는 것이 가장 안전한 방법이므로 오브젝트를 직렬화함을 의미합니다. 또한 스펙은 이용자 애플리케이션이 메시지에서 데이터를 가져올 때 JMS 제공자가 해당 데이터의 사본을 작성 및 리턴해야 함을 의미합니다.

"참조에 의해 메시지 페이로드 전달" 특성을 사용하는 경우, JMS 메시징을 위한 메모리 및 성능 향상 효과를 얻을 수 있습니다.

경고:
  • 이러한 특성에 의해 생략된 JMS 스펙의 파트는 메시징 데이터의 무결성을 보장하도록 정의됩니다.
  • 이러한 특성을 사용하는 JMS 애플리케이션은 이 절에서 나중에 나오는 세부사항에 설명된 규칙을 엄격히 준수해야 합니다. 그렇지 않으면 데이터 무결성을 잃을 수 있습니다.
  • 이러한 특성을 사용하기 전에 전체 주제를 읽고 이해해야 합니다.
참조에 의해 메시지 페이로드를 전달하려면 특성을 연결 팩토리 및 활성화 스펙을 설정하십시오.
producerDoesNotModifyPayloadAfterSet(연결 팩토리의 경우) 또는 forwarderDoesNotModifyPayloadAfterSet(활성화 스펙의 경우)
이 특성이 사용 가능하면 연결 팩토리에 의해 생성되거나 활성화 스펙을 통해 전달된 오브젝트 또는 바이트 메시지는 메시지로 설정된 경우 복사되지 않으며 꼭 필요한 경우에만 직렬화됩니다. 이와 같은 메시지를 전송하는 애플리케이션에서는 데이터가 메시지로 설정된 후 이를 수정해서는 안 됩니다.
consumerDoesNotModifyPayloadAfterGet
이 특성이 사용 가능하면 연결 팩토리 또는 활성화 스펙을 통해 수신된 오브젝트 메시지가 꼭 필요한 경우에만 직렬화됩니다. 해당 메시지에서 얻어진 데이터는 애플리케이션에서 수정하지 않아야 합니다.

참조에 의한 메시지 페이로드 전달의 잠재적 이점

다음 테이블에는 "참조에 의한 메시지 페이로드 전달" 특성을 사용하여 성능의 이점을 얻을 수 있는 조건이 표시됩니다. 이 테이블에서는 다음과 같은 가정을 합니다.
  • JMS 애플리케이션은 이 주제의 다음 섹션에 설명된 규칙을 따라야 합니다.
  • 메시지 생성자 및 이용자 애플리케이션은 이러한 애플리케이션에 의해 사용된 대상을 호스트하는 메시징 엔진과 함께 동일한 JVM(서버)에서 실행됩니다.
참고:
  • 애플리케이션이 여러 서버 또는 z/OS® 플랫폼(WebSphere Application Server가 다중 JVM에서 실행되는 위치)에서 실행되는 경우, 오브젝트 메시지가 직렬화되며 이러한 메시지에 대한 성능의 이점은 없습니다. 바이트 메시지의 이점은 여전히 존재합니다.
  • 메시지를 직렬화할 수 있는 많은 내부 런타임 조건이 있어서 구성이 이 주제에 설명된 모든 조건을 충족시키는 경우에도 "참조에 의한 메시지 페이로드 전달" 특성을 사용하여 얻어지는 이점이 거의 없습니다.
표 1. 구성 및 런타임 요소가 복사되는 대상 데이터, 복사 시기 및 잠재적 성능 이점을 판별하는 방법. 첫 번째 열은 잠재적 성능 이점의 정도를 나열합니다. 두 번째 열은 잠재적 이점의 구성 및 런타임 이벤트를 포함합니다. 세 번째 열은 잠재적 이점의 구성 및 런타임 이벤트를 기반으로 복사되는 데이터와 데이터가 복사되는 시점 같은 정보를 제공합니다.
잠재적 성능 이점의 정도 구성 및 런타임 이벤트 데이터 복사 시기
잠재적 이점 없음

"참조에 의한 메시지 페이로드 전달" 특성을 사용할 수 없습니다(기본 동작).

오브젝트 메시지 데이터는 메시지로 설정되자마자 그리고 메시지에서 검색될 때 복사됩니다.

바이트 메시지 데이터는 메시지로 설정되자마자 그리고 메시지에서 검색될 때 복사됩니다.

일부 잠재적 이점
"참조에 의한 메시지 페이로드 전달" 특성을 사용할 수 있습니다. 다음 조건 중 하나 또는 모두 참입니다.
  • 전송 또는 수신 메시지가 처리됩니다.
  • 이용자는 메시지가 생성될 때 사용할 수 없습니다.

[AIX Solaris HP-UX Linux Windows][IBM i]오브젝트 메시지 데이터는 필요할 때만 복사됩니다.

바이트 메시지 데이터는 필요할 때만 복사됩니다.

최대의 잠재적 이점
"참조에 의한 메시지 페이로드 전달" 특성을 사용할 수 있으며 다음 조건 모두가 참입니다.
  • 전송 또는 수신 메시지 어느 쪽도 처리되지 않습니다.
  • 이용자는 메시지가 생성될 때 이를 대기하고 있습니다(예를 들어, 이용자가 메시지 구동 Bean인 경우).

[AIX Solaris HP-UX Linux Windows][IBM i]오브젝트 메시지 데이터는 복사되지 않습니다.

바이트 메시지 데이터는 필요할 때만 복사됩니다.

JMS 애플리케이션이 따라야 하는 규칙

"참조에 의해 메시지 페이로드 전달" 특성으로 생략되는 JMS 스펙의 파트는 메시지 데이터 무결성을 보장하도록 정의됩니다. JMS 애플리케이션이 다음 테이블에 주어진 규칙을 따르는 경우, 애플리케이션이 사용하는 연결 팩토리 및 활성화 스펙에서 "참조에 의한 메시지 페이로드 전달" 특성을 안전하게 사용할 수 있습니다.

해당 규칙을 따르지 않는 JMS 애플리케이션의 "참조에 의한 메시지 페이로드 전달" 특성을 사용하는 경우, 애플리케이션이 예외를 수신하거나 메시지 데이터의 무결성이 형성됩니다.

표 2. 애플리케이션 유형에 의해 JMS 애플리케이션이 따라야 하는 규칙. 첫 번째 열은 JMS 애플리케이션 유형을 나열합니다. 두 번째 열은 JMS 애플리케이션이 따라야 하는 규칙을 제공합니다.
애플리케이션 유형 규칙
JMS 생성자 애플리케이션

오브젝트 메시지를 전송하는 JMS 생성자 애플리케이션은 오브젝트가 메시지의 페이로드로 설정된 후 오브젝트를 변경해서는 안 됩니다.

바이트 메시지를 전송하는 JMS 생성자 애플리케이션은 다음과 같아야 합니다.
  • writeBytes(byte[])에 대한 단일 호출로 데이터를 메시지에 작성해야 합니다.
  • 데이터가 메시지에 작성된 후 바이트 배열을 변경해서는 안 됩니다.
JMS 이용자 애플리케이션

오브젝트 메시지를 수신하는 JMS 이용자 애플리케이션은 메시지에서 얻어지는 페이로드를 변경해서는 안 됩니다.

JMS 전달자 애플리케이션
참고: JMS 전달자 애플리케이션은 메시지를 수신한 후(연결 팩토리를 통해, 또는 메시지가 활성화 스펙을 통한 메시지 구동 Bean인 경우), 메시지 오브젝트를 다른 대상으로 전송합니다.
수신된 메시지의 페이로드를 새 페이로드로 대체하는 JMS 전달자 애플리케이션은 다음과 같아야 합니다.
  • (오브젝트 메시지의 경우) 오브젝트가 메시지의 페이로드로 설정된 후 오브젝트를 변경해서는 안 됩니다.
  • (바이트 메시지의 경우):
    • writeBytes(byte[])에 대한 단일 호출로 데이터를 메시지에 작성해야 합니다.
    • 데이터가 메시지에 작성된 후 바이트 배열을 변경해서는 안 됩니다.

오브젝트 메시지를 직렬화할 수 있도록 보장

보통 JMS 메시징 조건(즉, "참조에 의해 메시지 페이로드 전달" 특성이 사용 가능하지 않은 경우)에서 오브젝트 메시지의 데이터는 오브젝트가 예를 들어, 설정 또는 전송 시 메시징 시스템으로 전달되면 바로 직렬화됩니다. 메시지 페이로드를 직렬화할 수 없는 경우, 예외 메시지가 즉시 클라이언트 애플리케이션으로 리턴됩니다.

"참조에 의한 메시지 페이로드 전달" 특성을 사용할 수 있는 경우, 메시지 페이로드가 직렬화 시도 없이 클라이언트 애플리케이션에서 허용됩니다. 시스템에서 나중에 데이터를 직렬화할 수 없음이 발견되면, 시스템이 클라이언트 애플리케이션에 더이상 메시지가 전송되었음을 알릴 수 없습니다. 데이터가 직렬화할 수 없기 때문에 시스템에서는 완전한 메시지를 보존하거나 전송할 수 없습니다. 메시지 및 해당 특성이 저장되지만, 메시지 안의 사용자 데이터(페이로드)는 저장할 수 없고 폐기합니다. 시스템에서 오브젝트 메시지를 중개의 데이터 그래프로 변환할 때 직렬화 문제가 있는 경우, 메시지 페이로드가 버려지고 중개가 널(null)로 설정된 데이터 값 세트가 있는 메시지를 수신합니다.

데이터를 직렬화할 수 없는 경우, 손실됩니다. 따라서 "참조에 의한 메시지 페이로드 전달"을 사용하지 않고 먼저 구성을 테스트하여 시스템에 전송된 모든 데이터가 직렬화 가능한지 확인해야 합니다.

시스템이 오브젝트 메시지를 직렬화할 수 없음을 발견한 경우, 다음과 같은 오류 메시지(JMS_IBM_ExceptionMessage)를 SystemOut.log 파일에 작성합니다. 여기서, "{0}"은 실패한 오브젝트의 클래스 이름으로 대체됩니다.
참고: 이 주제는 하나 이상의 애플리케이션 서버 로그 파일을 참조합니다. 권장되는 대안은 분배 및 IBM® i 시스템에서 SystemOut.log, SystemErr.log, trace.logactivity.log 파일을 사용하는 대신 HPEL(High Performance Extensible Logging) 로그를 사용하고 인프라를 추적하도록 서버를 구성하는 것입니다. 원시 z/OS 로깅 기능과 연계하여 HPEL을 사용할 수도 있습니다. HPEL을 사용하는 경우 서버 프로파일 바이너리 디렉토리의 LogViewer 명령행 도구를 사용하여 모든 로그에 액세스하고 정보를 추적할 수 있습니다. HPEL 사용에 대한 자세한 정보는 HPEL을 사용한 애플리케이션 문제점 해결 정보를 참조하십시오.
CWSIK0200E: "{0}" 클래스의 오브젝트는 메시지 페이로드로 설정되어 있지만 직렬화할 수 없습니다.
설명: 연결 팩토리에서 사용 가능한 producerDoesNotModifyPayloadAfterSet 플래그와 함께 전송된 오브젝트 메시지는 시스템에서 직렬화할 수 없는 페이로드와 함께 전송됩니다. 이 메시지 데이터가 손실됩니다.
조치: 연결 팩토리에서 producerDoesNotModifyPayloadAfterSet를 사용 불가능하게 하십시오. 사용 가능한 플래그가 없는 경우, 오브젝트를 메시지로 설정하는 JMS 애플리케이션이 직렬화 예외를 즉시 수신합니다.
다음 예외 특성이 데이터 오브젝트를 직렬화하지 못하고 버림을 나타내는 데 사용됩니다. JMS 애플리케이션에서는 JMS_IBM_Exception 특성에서 발견된 내용을 찾을 수 있습니다. 중개는 JMS_IBM_ExceptionSI_Exception 특성에서 발견한 내용을 찾을 수 있습니다.
JMS_IBM_ExceptionReason
SIRCConstants.SIRC0200_OBJECT_FAILED_TO_SERIALIZE
JMS_IBM_ExceptionTimestamp
System.currentTimeMillis() 양식에서 오브젝트가 직렬화하는 데 실패한 시간입니다.
JMS_IBM_ExceptionMessage
이전에 설명된 메시지 CWSIK0200E입니다.
SI_ExceptionReason
SIRC0200_OBJECT_FAILED_TO_SERIALIZE
SI_ExceptionTimestamp
System.currentTimeMillis() 양식에서 오브젝트가 직렬화하는 데 실패한 시간입니다.
SI_ExceptionInserts
하나의 항목이 포함된 문자열 배열입니다. 항목이 오브젝트의 클래스 이름입니다.
참고: 데이터 오브젝트를 직렬화할 수 없는 가장 일반적인 이유는 writeObject() 또는 writeExternal() 메소드를 작성하고 모든 옵션(예: NullPointer 예외 또는 ArrayIndexOutOfBounds 예외)을 테스트하지 않았기 때문입니다.

주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_passbyref
파일 이름:cjn_passbyref.html