Anwendungen entwickeln, die die API für asynchrone Aufrufe im Liberty-Server verwenden

Sie können die API für asynchrone Aufrufe verwenden, um Ereignisse, die im Kontext einer SIP-Anwendungssitzung (Session Initiation Protocol) verarbeitet werden müssen, anhand der zugehörigen Anwendungssitzungs-ID an einen Server in einem Cluster zu übertragen. Die API für asynchrone Aufrufe überträgt die Ereignistask an den richtigen Server.

Vorbereitende Schritte

Ziehen Sie die API-Dokumentation zu Rate, um Informationen zu den folgenden asynchronen Arbeitsklassen zu erhalten:
  • com.ibm.websphere.sip.AsynchronousWork
  • com.ibm.websphere.sip.AsynchronousWorkListener

Weitere Informationen zu den API-Klassen finden Sie unter Programmierschnittstellen (APIs und SPIs).

Informationen zu diesem Vorgang

Wird Code außerhalb eines SIP-Threads ausgeführt, können Anwendungsentwickler die API für asynchrone Aufrufe verwenden, um ein Objekt zu erstellen. Anschließend können sie den Server so konfigurieren, dass dieses Objekt in einem anderen Thread in demselben Container oder auf einem anderen Server ausgeführt wird, wenn sich die Sitzung dort befindet.

Das folgende Beispiel zeigt die Klassenstruktur für die Klasse "AsynchronousWork", bei der es sich um die abstrakte Basisklasse handelt, 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 SIP-bezogenen Code. Die erweiterte Implementierung der Methode "doAsyncTask()" wird auf dem Zielserver aufgerufen, der die SIP-Anwendungssitzung (SipApplicationSession) enthält und dessen ID in dem Konstruktor festgelegt wurde, der die Klasse "AsynchronousWork" implementiert. Die Implementierungsklasse muss die Sitzungs-ID an die Basisklasse durch Aufrufen von super im Konstruktor übergeben.
    public class MyClass extends AsynchronousWork
    {
    String _sessionId;
    
    public MyClass(String sessionId) {
    super(sessionId);
    _sessionId = sessionId;
    }
    
    // Dieser Code wird auf der Zielmaschine oder im Zielthread aufgerufen
    public Serializable doAsyncTask() {
    // Anwendungscode wird hier angegeben, z. B.:
    appSession = sessionUtils.getApplicationSession(_sessionId);
    appSession.createRequest().....
    
    Serializable myResponse = new MyResponse();
    myResponse.setStatus(200);
    return (myResponse);
    }
    }
  2. Wenn Sie Informationen über den Taskabschluss erhalten möchten, implementieren Sie die Klasse "AsynchronousWorkListener" wie im folgenden 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()
    {
    // Sitzungs-ID aus der Nachricht oder
    // aus einer anderen Quelle abrufen
    String sessionId = obtainIdFromMessage();
    
    // Ausführbares Objekt erstellen
    MyClass myClass = new MyClass(sessionId);
    
    // Listener erstellen
    MyListener myListener = new MyListener();
    
    // Listener zuteilen
    myClass.dispatch(myListener);
    }

Ergebnisse

Der SIP-Container stellt sicher, dass die Task auf dem richtigen Server und im richtigen Thread aufgerufen wird, sodass die Anwendung keine Synchronisation auf Sitzungsebene durchführen muss.

Symbol das den Typ des Artikels anzeigt. Taskartikel



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