42장. 컨텍스트 작업


초록

Cryostat-WS는 컨텍스트를 사용하여 메시징 체인을 통해 메타데이터를 전달합니다. 이 메타데이터는 해당 범위에 따라 구현 수준 코드에서 액세스할 수 있습니다. 구현 수준 아래의 메시지에서 작동하는 Cryostat-WS 핸들러에도 액세스할 수 있습니다.

42.1. 컨텍스트 이해

42.1.1. 개요

대부분의 경우 메시지에 대한 정보를 애플리케이션의 다른 부분에 전달해야 합니다. Apache CXF는 컨텍스트 메커니즘을 사용하여 이 작업을 수행합니다. 컨텍스트는 발신 또는 들어오는 메시지와 관련된 속성을 보유하는 맵입니다. 컨텍스트에 저장된 속성은 일반적으로 메시지에 대한 메타데이터이며 메시지를 전달하는 데 사용되는 기본 전송입니다. 예를 들어 HTTP 응답 코드 또는 JMS 상관 ID와 같은 메시지를 전송하는 데 사용되는 전송 특정 헤더는 Cryostat-WS 컨텍스트에 저장됩니다.

컨텍스트는 모든 수준의 Cryostat-WS 애플리케이션에서 사용할 수 있습니다. 그러나 메시지 처리 스택에서 컨텍스트에 액세스하는 위치에 따라 미묘한 방식이 다릅니다. Cryostat-WS Handler 구현은 컨텍스트에 직접 액세스할 수 있으며 설정된 모든 속성에 액세스할 수 있습니다. 서비스 구현에서는 컨텍스트를 삽입하여 액세스 권한을 적용하고 APPLICATION 범위에서 설정된 속성에만 액세스할 수 있습니다. 소비자 구현은 APPLICATION 범위에 설정된 속성에만 액세스할 수 있습니다.

그림 42.1. “메시지 컨텍스트 및 메시지 처리 경로” 컨텍스트 속성이 Apache CXF를 통과하는 방법을 보여줍니다. 메시지가 메시징 체인을 통과하면 연결된 메시지 컨텍스트가 함께 전달됩니다.

그림 42.1. 메시지 컨텍스트 및 메시지 처리 경로

메시지 컨텍스트는 클라이언트 및 서버 메시지 처리 체인을 통해 사용할 수 있습니다.

42.1.2. 컨텍스트에 속성을 저장하는 방법

메시지 컨텍스트는 javax.xml.ws.handler.MessageContext 인터페이스의 모든 구현입니다. MessageContext 인터페이스는 java.util.Map<String 키, Object value> 인터페이스를 확장합니다. map 오브젝트는 정보를 키 값 쌍으로 저장합니다.

메시지 컨텍스트에서 속성은 이름/값 쌍으로 저장됩니다. 속성의 키는 속성을 식별하는 문자열입니다. 속성 값은 Java 개체에 저장된 모든 값일 수 있습니다. 메시지 컨텍스트에서 값이 반환되면 애플리케이션은 예상 유형을 알고 적절하게 캐스팅해야 합니다. 예를 들어 속성의 값이 UserInfo 개체에 저장된 경우 메시지 컨텍스트에서 여전히 UserInfo 개체로 캐스팅해야 하는 Object 개체로 반환됩니다.For example, if a property's value is stored in a UserInfo object it is still returned from a message context as an Object object that must be cast back into a UserInfo object.

메시지 컨텍스트의 속성에도 범위가 있습니다. 범위는 메시지 처리 체인에서 속성에 액세스할 수 있는 위치를 결정합니다.

42.1.3. 속성 범위

메시지 컨텍스트의 속성은 범위가 지정됩니다. 속성은 다음 범위 중 하나에 있을 수 있습니다.

애플리케이션
APPLICATION 으로 범위가 지정된 속성은 Cryostat-WS Handler 구현, 소비자 구현 코드 및 서비스 공급자 구현 코드에서 사용할 수 있습니다. 처리기가 서비스 공급자 구현에 속성을 전달해야 하는 경우 속성의 범위를 APPLICATION 으로 설정합니다. 소비자 구현 또는 서비스 공급자 구현 컨텍스트에서 설정된 모든 속성은 자동으로 APPLICATION 으로 범위가 지정됩니다.
처리기
HANDLER 로 범위가 지정된 속성은 Cryostat-WS Handler 구현에서만 사용할 수 있습니다. Handler 구현에서 메시지 컨텍스트에 저장된 속성은 기본적으로 HANDLER 로 범위가 지정됩니다.

메시지 컨텍스트의 setScope() 메서드를 사용하여 속성 범위를 변경할 수 있습니다. 예 42.1. “MessageContext.setScope() 메서드” 메서드의 서명을 표시합니다.

예 42.1. MessageContext.setScope() 메서드

SetScopeStringMessageContext.Scope범위java.lang.IllegalArgumentException

첫 번째 매개 변수는 속성의 키를 지정합니다. 두 번째 매개 변수는 속성의 새 범위를 지정합니다. 범위는 다음 중 하나일 수 있습니다.

  • MessageContext.Scope.APPLICATION
  • MessageContext.Scope.HANDLER

42.1.4. 처리기의 컨텍스트 개요

Cryostat-WS Handler 인터페이스를 구현하는 클래스는 메시지의 컨텍스트 정보에 직접 액세스할 수 있습니다. 메시지의 컨텍스트 정보는 Handler 구현의 handleMessage(), handleFault()close() 메서드에 전달됩니다.

처리기 구현은 범위에 관계없이 메시지 컨텍스트에 저장된 모든 속성에 액세스할 수 있습니다. 또한 논리 처리기는 LogicalMessageContext 라는 특수 메시지 컨텍스트를 사용합니다. LogicalMessageContext 오브젝트에는 메시지 본문의 콘텐츠에 액세스하는 메서드가 있습니다.

42.1.5. 서비스 구현의 컨텍스트 개요

서비스 구현은 메시지 컨텍스트에서 APPLICATION 으로 범위가 지정된 속성에 액세스할 수 있습니다. 서비스 공급자의 구현 오브젝트는 WebServiceContext 오브젝트를 통해 메시지 컨텍스트에 액세스합니다.

자세한 내용은 42.2절. “서비스 구현에서 컨텍스트 작업” 에서 참조하십시오.

42.1.6. 소비자 구현의 컨텍스트 개요

소비자 구현은 메시지 컨텍스트의 콘텐츠에 대한 간접 액세스 권한을 갖습니다. 소비자 구현에는 두 가지 별도의 메시지 컨텍스트가 있습니다.

  • 요청 컨텍스트 - 발신 요청에 사용되는 속성의 사본을 보유하고 있습니다.
  • 응답 컨텍스트 - 들어오는 응답에서 속성의 사본을 보유하고 있습니다.

디스패치 계층은 소비자 구현의 메시지 컨텍스트와 Handler 구현에서 사용하는 메시지 컨텍스트 간에 속성을 전송합니다.

요청이 소비자 구현에서 디스패치 계층에 전달되면 요청 컨텍스트의 콘텐츠가 디스패치 계층에서 사용되는 메시지 컨텍스트로 복사됩니다. 서비스에서 응답이 반환되면 디스패치 계층에서 메시지를 처리하고 적절한 속성을 메시지 컨텍스트로 설정합니다. 디스패치 계층에서 응답을 처리하면 메시지 컨텍스트에서 APPLICATION 범위 모든 속성을 소비자 구현의 응답 컨텍스트에 복사합니다.

자세한 내용은 42.3절. “소비자 구현에서 컨텍스트 작업” 에서 참조하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.