在 Liberty 上开发使用异步调用 API 的应用程序

可使用异步调用 API 以将需要在会话启动协议 (SIP) 应用程序会话上下文中进行处理的事件传输至基于相关应用程序会话标识的集群中的任何服务器。异步调用 API 将事件任务传输至正确服务器。

开始之前

阅读 API 文档以了解有关以下异步工作类的信息:
  • com.ibm.websphere.sip.AsynchronousWork
  • com.ibm.websphere.sip.AsynchronousWorkListener

有关 API 类的更多信息,请参阅编程接口(API 和 SPI)

关于此任务

在 SIP 线程外部运行代码时,应用程序开发者可使用异步调用 AIP 来创建对象。然后,他们可配置服务器以在同一容器中的另一线程上运行该对象,或在另一服务器(如果该会话存在于该服务器上)上运行该对象。

以下示例显示 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。 doAsyncTask() 方法的扩展实现是在包含 SipApplicationSession 的目标服务器上调用的,其标识是在实现 AsynchronousWork 类的构造函数中设置的。实现类必须通过在构造函数中调用 super 以将会话标识传递至基本类。
    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