Desarrollo de aplicaciones que utilizan la API de invocación asíncrona en Liberty

Puede utilizar la API de invocación asíncrona para transferir sucesos que requieren el proceso en el contexto de una sesión de aplicación SIP (Session Initiation Protocol) a cualquier servidor de un clúster basándose en el ID de la sesión de aplicación relacionada. La API de invocación asíncrona transfiere la tarea de suceso al servidor correcto.

Antes de empezar

Consulte la documentación de la API si desea información sobre las clases de trabajo asíncrono siguientes:
  • com.ibm.websphere.sip.AsynchronousWork
  • com.ibm.websphere.sip.AsynchronousWorkListener

Si desea más información sobre las clases API, consulte Interfaces de programación.

Acerca de esta tarea

Al ejecutar código fuera de una hebra SIP, los desarrolladores de aplicaciones pueden utilizar la API de invocación asíncrona para crear un objeto. A continuación, pueden configurar el servidor para ejecutar dicho objeto en una hebra diferente en el mismo contenedor, o en un servidor diferente, si ese es el lugar donde existe la sesión.

El ejemplo siguiente muestra la estructura de la clase AsynchronousWork, que es la clase base abstracta que se amplía cuando se utiliza la 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();
	}

Procedimiento

  1. Amplíe la clase abstracta AsynchronousWork con el código relacionado con SIP. La implementación ampliada del método doAsyncTask() se invoca en el servidor de destino que contiene la SipApplicationSession, y cuyo ID se ha establecido en el constructor que implementa la clase AsynchronousWork. La clase de implementación debe pasar el ID de sesión a la clase base llamando a super en el constructor.
    public class MyClass extends
    AsynchronousWork
    {
    String _sessionId;
    
    public MyClass(String sessionId) {
    super(sessionId);
    _sessionId = sessionId;
    }
    
    // Se invoca el código en la máquina o hebra de destino
    public Serializable doAsyncTask() {
    // El código de aplicación va aquí, por ejemplo:
    appSession = sessionUtils.getApplicationSession(_sessionId);
    appSession.createRequest().....
    
    Serializable myResponse = new MyResponse();
    myResponse.setStatus(200);
    return (myResponse);
    }
    }
  2. Para recibir información sobre la finalización de la tarea, implemente la clase AsynchronousWorkListener, como en el ejemplo siguiente. Se invoca el código de estos métodos en el servidor de origen.
    public class MyListener implements AsynchronousWorkListener
    {
    public void workCompleted(Serializeable myResponse)
    {
    ....
    }
    public void workFailed(int reasonCode, String reason)
    {
    }
    }
  3. Invoque la llamada asíncrona; por ejemplo, cuando se recibe el mensaje de propiedad, utilice este código de muestra como un ejemplo.
    public void onMyMessage()
    {
    // Obtener el ID de sesión del mensaje o
    // de otro lugar
    String sessionId = obtainIdFromMessage();
    
    // Crear la clase ejecutable
    MyClass myClass = new MyClass(sessionId);
    
    // Crear el escucha
    MyListener myListener = new MyListener();
    
    // Asignarlo
    myClass.dispatch(myListener);
    }

Resultados

El contenedor SIP asegura que la tarea invocada en el servidor correcto y en la hebra correcta, de forma que la aplicación puede evitar la sincronización en el nivel de sesión.

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_sip_asynchinvo_api.html