Liberty 上開發使用「非同步呼叫 API」的應用程式

您可以使用「非同步呼叫 API」,根據相關的應用程式階段作業 ID,將需要在「階段作業起始通訊協定 (SIP)」應用程式階段作業的環境定義中處理的事件,傳送到叢集中的任何伺服器。「非同步呼叫 API」會將事件作業傳送到正確的伺服器。

開始之前

請閱讀 API 說明文件,取得下列非同步工作類別的相關資訊:
  • com.ibm.websphere.sip.AsynchronousWork
  • com.ibm.websphere.sip.AsynchronousWorkListener

如需 API 類別的相關資訊,請參閱程式設計介面

關於這項作業

當程式碼是在 SIP 執行緒外執行時,應用程式開發人員可以使用「非同步呼叫 API」來建立物件。之後可以將伺服器配置成在相同儲存器中的不同執行緒上執行物件,或是在階段作業所在的不同伺服器上執行。

下列範例顯示 AsynchronousWork 類別的類別結構,這是您使用 API 時所延伸的抽象基礎類別。
	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。 在含有 SipApplicationSession,且其 ID 設定在實作 AsynchronousWork 類別的建構子中的目標伺服器上,會呼叫 doAsyncTask() 方法的延伸實作。實作類別必須呼叫建構子中的 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 儲存器可確保在正確伺服器和正確執行緒中呼叫作業,如此一來,應用程式就能避免在階段作業層次進行同步化。

指示主題類型的圖示 作業主題

檔名:twlp_sip_asynchinvo_api.html