Liberty 에서 비동기 호출 API를 사용하는 애플리케이션 개발

비동기 호출 API를 사용하여 SIP(Session Initiation Protocol) 애플리케이션 세션의 컨텍스트에서 처리해야 하는 이벤트를 관련 애플리케이션 세션 ID를 기반으로 한 클러스터의 서버에 전송할 수 있습니다. 비동기 호출 API는 이벤트 태스크를 올바른 서버에 전송합니다.

시작하기 전에

다음 비동기 작업 클래스에 대한 작업은 API 문서를 참조하십시오.
  • com.ibm.websphere.sip.AsynchronousWork
  • com.ibm.websphere.sip.AsynchronousWorkListener

API 클래스에 대한 자세한 정보는 프로그래밍 인터페이스(API 및 SPI)의 내용을 참조하십시오.

이 태스크 정보

SIP 스레드의 외부에서 코드를 실행할 때 애플리케이션 개발자는 비동기 호출 API를 사용하여 오브젝트를 작성할 수 있습니다. 그런 다음 세션이 있는, 다른 서버 또는 동일한 컨테이너의 다른 스레드에서 해당 오브젝트를 실행하도록 서버를 구성할 수 있습니다.

다음 예는 API를 사용할 때 확장되는 추상 기본 클래스인 AsynchronousWork 클래스의 클래스 구조를 표시합니다.
	public abstract class AsynchronousWork implements Serializable
	{
	private String sessionId;
	public AsynchronousWork(String sessionId)
	{
	this.sessionId = sessionId;
	....
	}
	public void dispatch (AsynchronousWorkListener listener)
	{
	....
	}
	public abstract Serializable doAsyncTask();
	}

프로시저

  1. SIP 관련 코드로 추상 클래스 AsynchronousWork를 확장하십시오. doAsyncTask() 메소드의 확장 구현은 SipApplicationSession이 포함되어 있고 ID가 AsynchronousWork 클래스를 구현하는 생성자에 설정된 대상 서버에서 호출됩니다. 구현 클래스는 생성자에서 super를 호출하여 기본 클래스로 세션 ID를 전달해야 합니다.
    public class MyClass extends AsynchronousWork
    {
    String _sessionId;
    
    public MyClass(String sessionId) {
    super(sessionId);
    _sessionId = sessionId;
    }
    
    // This code is invoked on the target machine or thread
    public Serializable doAsyncTask() {
    // Application code goes here; for instance:
    appSession = sessionUtils.getApplicationSession(_sessionId);
    appSession.createRequest().....
    
    Serializable myResponse = new MyResponse();
    myResponse.setStatus(200);
    return (myResponse);
    }
    }
  2. 태스크 완료에 대한 정보를 수신하려면 다음 예와 같이 AsynchronousWorkListener 클래스를 구현하십시오. 이 메소드의 코드는 소스 서버에서 호출됩니다.
    public class MyListener implements AsynchronousWorkListener
    {
    public void workCompleted(Serializeable myResponse)
    {
    ....
    }
    public void workFailed(int reasonCode, String reason)
    {
    }
    }
  3. 비동기 호출을 호출하십시오. 예를 들어, 독점 메시지를 수신하는 경우 이 샘플 코드를 예로 사용하십시오.
    public void onMyMessage()
    {
    // Obtain the session ID from the message or
    // somewhere else
    String sessionId = obtainIdFromMessage();
    
    // Create the runnable
    MyClass myClass = new MyClass(sessionId);
    
    // Create the listener
    MyListener myListener = new MyListener();
    
    // Dispatch it
    myClass.dispatch(myListener);
    }

결과

SIP 컨테이너를 사용하면 태스크가 올바른 스레드 및 올바른 서버에서 호출되므로 애플리케이션이 세션 레벨에서 동기화를 피할 수 있습니다.

주제의 유형을 표시하는 아이콘 태스크 주제



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