SIP-Anwendungen in Liberty
Eine SIP-Anwendung ist ein Java-Programm, das mindestens ein SIP-Servlet (Session Initiation Protocol) verwendet.
Ein SIP-Servlet ist eine Java™-Anwendungskomponente, die von einem SIP-Servlet-Container verwaltet wird und SIP-Signale absetzt. Wie andere Java-Komponenten sind Servlets plattformunabhängige Java-Klassen, die in plattformunabhängigen Bytecode kompiliert werden, der dynamisch in einen Java-fähigen SIP-Anwendungsserver, wie z. B. einen Liberty-Server, geladen und von diesem ausgeführt werden kann. Container, die manchmal auch Servlet-Engines genannt werden, sind Servererweiterungen, die Servletinteraktionen bearbeiten. SIP-Servlets interagieren mit Clients durch den Austausch von Anforderungs- und Antwortnachrichten über den Servlet-Container.
SIP wird zum Aufbau, Ändern und Beenden von Multimedia-IP-Sitzungen, einschließlich IP-Telefonie, Anwesenheit und Echtzeitkommunikation, verwendet. "Anwesenheit" bezieht sich in diesem Kontext auf den Benutzerstatus, wie z. B. "Aktiv", "Abwesend" oder "Nicht stören". Der Standard, der ein Programmiermodell für das Schreiben von SIP-basierten Servletanwendungen definiert, ist JSR 289. Der Grundgedanke der Spezifikation ist es, eine HTTP-Servlets ähnelnde Java-API bereitzustellen, die ein benutzerfreundliches SIP-Programmiermodell bereitstellt. Wie beim HTTP-Servletprogrammiermodell ist die Flexibilität teils zur Optimierung der Benutzerfreundlichkeit und Wertschöpfungszeit eingeschränkt.
Die SIP-Servlet-API unterscheidet sich aber in vielerlei Hinsicht von HTTP-Servlets, weil das Protokoll ganz anders ist. SIP ist ein Anforderung/Antwort-Protokoll, aber es muss nicht notwendigerweise nur eine einzige Antwort auf eine Anforderung geben. Für diese Komplexität und, um den Bedarf nach einer Lösung mit hoher Leistung zu decken, war es einfacher, SIP-Servlets nativ asynchron zu gestalten. Anders als HTTP-Servlets hat das Programmiermodell für SIP-Servlets das Ziel, die Erstellung von Clientanforderungen neben der anderen Logik zu vereinfachen, weil viele Anwendungen als Client oder Proxy für andere Server oder Proxys fungieren.
SipServlet-Anforderungen
Genau wie HTTP-Servlets erweitert jedes SIP-Servlet eine javax.servlet.sip.SipServlet-Basisklasse. Alle Nachrichten gehen über die Servicemethode ein, die Sie erweitern können. Da es in SIP aber keine Eins-zu-eins-Zuordnung von Anforderungen und Antworten gibt, empfiehlt es sich, stattdessen die Methoden "doRequest" und "doResponse" zu erweitern. Wenn Sie die Methode "doRequest" oder die Methode "doResponse" erweitern, müssen Sie die erweiterte Methode aufrufen, damit die Verarbeitung durchgeführt wird.
Jede Anforderungsmethode, die von der Spezifikation unterstützt werden muss, hat genau wie HTTP eine doxxx-Methode. In HTTP sind für GET- und POST-Anforderungen Methoden wie "doGet" und "doPost" vorhanden. In SIP sind für jede SIP-Anforderungsmethode die Methoden "doInvite", "doAck", "doOptions", "doBye", "doCancel", "doRegister", "doSubscribe", "doNotify", "doMessage", "doInfo" und "doPrack" vorhanden.
Anders als HTTP-Servlets haben SIP-Servlets Methoden für jeden unterstützten Antworttyp. SIP-Servlets enthalten daher die Antworten "doProvisionalResponse", "doSuccessResponse", "doRedirectResponse" und "doErrorResponse". Genauer gesagt werden die vorläufigen Antworten (1xx-Antworten) zum Angeben von Status, die Antworten über den Erfolg (2xx-Antworten) zum Angeben eines erfolgreichen Abschlusses der Transaktion, die Umleitungsantworten (3xx-Antworten) zum Umleiten des Clients an eine verschobene Ressource oder Entität und die Fehlernachrichten (4xx-, 5xx- und 6xx-Antworten) zum Angeben von Fehlern oder einer bestimmten Fehlerbedingung verwendet. Diese Typen von Antwortnachrichten ähneln HTTP, aber da das SIP-Servletprogrammiermodell ein Clientprogrammiermodell enthält, müssen Antworten auch programmsteuert verarbeitet werden.