WSIFOperation - 비동기 상호작용 참조
WSIF(Web Services Invocation Framework)는 비동기 조작을 지원합니다. 이 조작 모드에서 클라이언트는 하나의 트랜잭션의 일부로 요청 메시지를 두고 실행의 스레드로 실행합니다. 개별 트랜잭션을 가진 응답 메시지가 다른 스레드에 의해 처리됩니다.
비동기 조작은 JMS 및 원시 JMS를 통해 SOAP에 대한 WSIF 제공자에 의해 지원됩니다.
WSIFPort 클래스는 supportsAsync 메소드를 사용하여 비동기 조작이 지원되는지 여부를 테스트합니다.
비동기 조작은 WSIFOperation 인터페이스 executeRequestResponseAsync 메소드로 시작됩니다. 이 메소드는 RPC(Remote Procedure Call) 메소드가 비동기적으로 호출되도록 합니다. 조작이 완료되기 전에 메소드가 리턴되지만 실행의 스레드는 계속됩니다.
비동기 요청에 대한 응답은 WSIFOperation 인터페이스 fireAsyncResponse 또는 processAsyncResponse 메소드에 의해 처리됩니다.
public WSIFCorrelationId executeRequestResponseAsync (WSIFMessage input, WSIFResponseHandler handler)
public WSIFCorrelationId executeRequestResponseAsync (WSIFMessage input)
- executeRequestResponseAsync(WSIFMessage input, WSIFResponseHandler handler)
이 메소드는 입력 메시지 및 WSIFResponseHandler 핸들러를 받습니다. 핸들러는 조작이 완료될 때 다른 스레드에서 호출됩니다. 이 메소드를 사용할 때, 클라이언트 리스너는 fireAsyncResponse 메소드를 호출합니다. 그런 다음, WSIFResponseHandler 인터페이스 executeAsyncResponse 메소드를 호출합니다.
- executeRequestResponseAsync(WSIFMessage input)
- 이 메소드는 입력 메시지만 받고 응답 핸들러를 사용하지 않습니다. 클라이언트 리스너는 WSIFOperation 인터페이스 processAsyncResponse 메소드를 호출하여 응답을 처리합니다. 이 프로세스는 요청의 결과로 WSIFMessage 출력 및 결함 메시지를 업데이트합니다.
WSIF는 비동기 요청 및 응답 사이의 상관을 지원합니다. 요청이 전송될 때, WSIFOperation 오브젝트가 WSIFCorrelationService 오브젝트에 직렬화됩니다. executeRequestResponseAsync 메소드는 직렬화된 WSIFOperation 오브젝트를 식별하는 WSIFCorrelationId 오브젝트를 리턴합니다. 클라이언트 리스너는 이를 사용하여 특정 요청에 대한 응답과 일치시킬 수 있습니다.
상관 서비스는 org.apache.wsif.utils 패키지에서 WSIFCorrelationServiceLocator 클래스 getCorrelationService() 메소드로 발견됩니다.
관리 컨테이너에서 기본 상관 서비스가 이름(java:comp/wsif/WSIFCorrelationService)을 사용하여 기본 JNDI(Java™ Naming and Directory Interface) 네임스페이스에 정의됩니다. 이 상관 서비스를 사용할 수 없으면 WSIF는 WSIFDefaultCorrelationService를 사용합니다.
WSIFCorrelationService 인터페이스에 대한 자세한 정보는 WSIF와 함께 제공되는 생성된 API 문서를 참조하십시오.
이는 상관자 ID입니다.
public interface WSIFCorrelator extends Serializable {
public String getCorrelationId();
}
클라이언트는 응답 메시지의 도착을 인식할 수 있도록 자체 응답 메시지 리스너 또는 메시지 데이터 기반을 구현해야 합니다. 이 클라이언트 구현은 비동기 응답 처리 메소드 중 하나의 요청 및 호출에 대한 응답 메시지의 상관을 관리합니다. 클라이언트 리스너에 대한 요구사항의 예제로서 다음 코드 단편이 JMS(Java Message Service) 리스너의 onMessage 메소드에 있을 수 있는 것을 표시합니다.
public void onMessage(Message msg) {
WSIFCorrelationService cs = WSIFCorrelationServiceLocator.getCorrelationService();
WSIFCorrelationId cid = new JmsCorrelationId( msg.getJMSCorrelationID() );
WSIFOperation op = cs.get( cid );
op.fireAsyncResponse( msg );
}