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

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

开始之前

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

有关 API 类的更多信息,请参阅信息中心内的“参考”部分并单击“API - 应用程序编程接口”以查看产品 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。 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 容器确保在正确的服务器及正确的线程上调用该任务,以便应用程序可以避免在会话级别上进行同步。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tcea_asynch_invocation_api
文件名:tcea_asynch_invocation_api.html