Applications Session Initiation Protocol (SIP) dans Liberty
Une application SIP est un programme Java qui utilise au moins un servlet SIP (Session Initiation Protocol).
Un servlet SIP est un composant d'application Java™ qui est géré par un conteneur de servlet SIP et qui effectue la signalisation SIP. Tout comme les autres composants Java, les servlets sont des classes Java indépendantes de la plateforme qui sont compilées pour bytecode neutre à l'égard des plateformes et qui peuvent être chargées dynamiquement et exécutées par un serveur d'application SIP compatible Java tel que le serveur Liberty. Les conteneurs, parfois appelés moteurs de servlet, sont des extensions de serveur qui gèrent les interactions de servlet. Les servlets SIP interagissent avec les clients en échangeant des messages de demande et de réponse par l'intermédiaire du conteneur de servlets.
SIP permet d'établir, de modifier et de mettre fin à des sessions IP multimédias, comme la téléphonie IP, la fonction de présence et la messagerie instantanée. Dans ce contexte, le terme "présence" désigne le statut de l'utilisateur, tel que "Actif", "Absent" ou "Ne pas déranger." Le standard qui définit un modèle de programmation pour l'écriture d'applications de servlet fondés sur SIP est JSR 289. L'idée derrière cette spécification est de fournir une interface de programmation (API) Java similaire aux servlets HTTP qui fournit un modèle de programmation SIP facile à utiliser. Comme pour le modèle de programmation de servlet HTTP, la flexibilité se limite à optimiser la facilité d'utilisation et la rentabilité.
L'interface API de servlet SIP se distingue toutefois par de nombreux aspects des servlets HTTP en raison de la grande différence du protocole. Le protocole SIP est basé sur la réponse aux requêtes, mais il n'y a pas nécessairement une seule réponse à chaque requête. Compte tenu de cette complexité et de la nécessité d'une solution hautement performante, il a été plus facile de rendre les servlets nativement asynchrones. De plus, à la différence, des servlets HTTP, le modèle de programmation pour les servlets SIP visait à simplifier la création des demandes client parallèlement à l'autre logique car de nombreuses applications font office de client ou de proxy pour d'autres serveurs ou proxy.
Requêtes SipServlet
Comme les servlets HTTP, chaque servlet SIP développe une classe javax.servlet.sip.SipServlet de base. Tous les messages arrivent par la méthode de service que vous pouvez développer. Toutefois, en l'absence de mappage un à un des requêtes aux réponses dans le protocole SIP, la pratique conseillée consiste à développer les méthodes doRequest ou doResponse à la place. Lorsque vous étendez les méthodes doRequest ou doResponse methods, il est important d'appeler la méthode étendue pour que le traitement s'achève.
Chaque méthode de requête devant être prise en charge par les spécifications, dispose d'une méthode doxxx comme HTTP. Dans le protocole HTTP, les méthodes telles que doGet et doPost existent pour les requêtes GET et POST. Dans le protocole SIP, les méthodes doInvite, doAck, doOptions, doBye, doCancel, doRegister, doSubscribe, doNotify, doMessage, doInfo et doPrack existent pour chaque méthode de requête SIP.
Contrairement à un servlet HTTP, les servlets SIP disposent de méthodes pour chaque type de réponse pris en charge. Ainsi, les servlets SIP comprennent les réponses doProvisionalResponse, doSuccessResponse, doRedirectResponse et doErrorResponse. Plus particulièrement, les réponses provisoires (réponses 1xx) indiquent l'état, les réponses réussies (réponses 2xx) indiquent que l'exécution de la transaction a réussi, les réponses redirigées (réponses 3xx) permettent de rediriger le client vers une ressource ou une entité déplacée et les réponses d'erreur (réponses 4xx, 5xx et 6xx) indiquent un échec ou une erreur spécifique. Ces types de messages de réponse sont similaires à HTTP, mais comme le modèle de programmation de servlet SIP inclut également un modèle de programmation, les réponses doivent de même être traités à l'aide d'un programme.