Anwendungen implementieren, die die API für asynchrone Aufrufe verwenden

Verwenden Sie die Anwendungsprogrammierschnittstelle für asynchrone Aufrufe, um Ereignisse, die in einer SIP-Anwendungssitzung (Session Initiation Protocol) verarbeitet werden müssen, basierend auf einer Anwendungssitzungs-ID an einen Server in einem Cluster zu übertragen. Die API für asynchrone Aufrufe überträgt die Ereignistask zur Ausführung an den richtigen Server.

Vorbereitende Schritte

Lesen Sie in der API-Dokumentation die Informationen zu den folgenden asynchronen Arbeitsklassen:
  • com.ibm.websphere.sip.AsynchronousWork
  • com.ibm.websphere.sip.AsynchronousWorkListener

Informationen zu den API-Klassen finden Sie im Abschnitt "Referenzinformationen" im Information Center. Unter "APIs" finden Sie eine Liste der Spezifikationen für die Produkt-APIs.

Informationen zu diesem Vorgang

Wenn Anwendungsentwickler Code außerhalb eines SIP-Threads ausführen, können sie die API für asynchrone Aufrufe verwenden, um ein Objekt zu erstellen, und den Server so konfigurieren, dass sie dieses Objekt entweder in einem anderen Thread im selben Container bzw. auf einem anderen Server (falls die Sitzung sich hier befindet) ausführen.

Das folgende Beispiel zeigt die Klassenstruktur für die Klasse "AsynchronousWork", die abstrakte Basisklasse, die bei der Verwendung der API erweitert wird.
		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();
	}

Vorgehensweise

  1. Erweitern Sie die abstrakte Klasse AsynchronousWork um den zugehörigen SIP-Code. Die erweiterte Implementierung der Methode doAsyncTask() wird auf dem Zielserver aufgerufen, der die SipApplicationSession enthält und dessen ID in dem Konstruktor, der die Klasse AsynchronousWork implementiert, definiert wurde. Die Implementierungsklasse muss die Sitzungs-ID durch Aufruf von "super" im Konstruktor an die Basisklasse übergeben.
    public class MyClass extends AsynchronousWork
    {
    String _sessionId;
    
    public MyClass(String sessionId) {
    super(sessionId);
    _sessionId = sessionId;
    }
    
    // Dieser Code wird auf der Zielmaschine bzw. im Ziel-Thread aufgerufen
    public Serializable doAsyncTask() {
    // Anwendungscode ist hier aufgeführt. Beispiel:
    appSession = sessionUtils.getApplicationSession(_sessionId);
    appSession.createRequest().....
    
    Serializable myResponse = new MyResponse();
    myResponse.setStatus(200);
    return (myResponse);
    }
    }
  2. Implementieren Sie die Klasse AsynchronousWorkListener, um Informationen zum Abschluss der Task zu erhalten. Beispiel: Der Code in diesen Methoden wird auf dem Quellenserver aufgerufen.
    public class MyListener implements AsynchronousWorkListener
    {
    public void workCompleted(Serializeable myResponse)
    {
    ....
    }
    public void workFailed(int reasonCode, String reason)
    {
    }
    }
  3. Verwenden Sie den folgenden Beispielcode als Beispiel für einen asynchronen Aufruf, etwa beim Empfang der proprietären Nachricht.
    public void onMyMessage()
    {
    // Rufen Sie die Sitzungs-ID aus der Nachricht oder aus einer anderen Position ab
    String sessionId = obtainIdFromMessage();
    
    // Erstellen Sie das ausführbare Objekt
    MyClass myClass = new MyClass(sessionId);
    
    // Erstellen Sie den Listener
    MyListener myListener = new MyListener();
    
    // Teilen Sie den Listener zu.
    myClass.dispatch(myListener);
    }

Ergebnisse

Der SIP-Container stellt sicher, dass die Task im richtigen Server und im richtigen Thread aufgerufen wird, damit die Anwendung die Synchronisation auf Sitzungsebene vermeiden kann.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tcea_asynch_invocation_api
Dateiname:tcea_asynch_invocation_api.html