Développement d'applications utilisant l'API d'appel asynchrone sur Liberty

Vous pouvez utiliser l'API d'appel asynchrone pour transférer des événements à traiter dans le contexte d'une session d'application SIP (Session Initiation Protocol) vers un serveur d'un cluster, en fonction d'un identificateur de session d'application. L'API d'appel asynchrone transfère la tâche d'événement au serveur approprié.

Avant de commencer

Reportez-vous à la documentation de l'API pour des informations sur les classes de travail asynchrone suivantes :
  • com.ibm.websphere.sip.AsynchronousWork
  • com.ibm.websphere.sip.AsynchronousWorkListener

Pour en savoir plus sur les classes API, voir Interfaces de programmation (Javadoc).

Pourquoi et quand exécuter cette tâche

Lors de l'exécution de code hors unité d'exécution SIP, les développeurs d'applications peuvent utiliser l'API d'appel asynchrone pour créer un objet. Ils peuvent ensuite configurer le serveur pour exécuter cet objet sur une unité d'exécution différente du même conteneur ou sur un autre serveur si la session existe sur ce serveur.

L'exemple suivant montre la structure de classe de la classe AsynchronousWork, qui est la classe de base abstraite étendue lorsque vous utiliser l'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();
	}

Procédure

  1. Etendez la classe abstraite AsynchronousWork avec code SIP. L'implémentation étendue de la méthode doAsyncTask() est appelée sur le serveur cible contenant SipApplicationSession, et dont l'ID a été défini dans le constructeur qui implémente la classe AsynchronousWork. La classe d'implémentation doit transmettre l'ID session à la classe de base en appelant super dans le constructeur.
    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. Pour recevoir des informations sur l'achèvement de la tâche, implémentez la classe AsynchronousWorkListener, comme dans l'exemple ci-après. Le code de ces méthodes est appelé sur le serveur source.
    public class MyListener implements AsynchronousWorkListener
    {
    public void workCompleted(Serializeable myResponse)
    {
    ....
    }
    public void workFailed(int reasonCode, String reason)
    {
    }
    }
  3. Appelez l'appel asynchrone. Par exemple, lorsque vous recevez le message de propriété, utilisez cet échantillon de code comme exemple.
    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);
    }

Résultats

Le conteneur SIP garantit que la tâche est appelée sur le bon serveur et sur la bonne unité d'exécution, afin que l'application puisse éviter la synchronisation de niveau session.

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_sip_asynchinvo_api.html