Atmosphere, atmosphere
Par Vincent Bostoen le lundi 23 novembre 2009, 13:30 - Java - Lien permanent
Au devoxx de cette année nous avons pu assister à la présentation du framework Atmosphere par Jean-François Arcand, créateur du framework et Paul Sandoz, contributeur sur le projet Jersey utilisé par Atmosphere en ce qui concerne les aspects REST.
Après une rapide présentation des concepts liés aux architectures PUSH pour les applications WEB. Les deux speakers sont rentrés dans le vif du sujet en développant en direct une petite application permettant de démontrer les possibilités offertes par Atmosphere.
Le PUSH ?
Dans les applications WEB, le
PUSH correspond à l'utilisation des protocoles WEB pour permettre aux
différents clients (navigateurs généralement) de se voir notifier des
informations de la part du serveur sans avoir à faire des requêtes périodiques
sur ce dernier. Comme son nom l'indique, les informations sont poussées du
serveur vers le(s) client(s) et non plus tirées par chaque client désireux d'y
avoir accès. L'intérêt d'une telle technique réside dans la possibilité de voir
se propager rapidement une modification de l'état du serveur et atteindre ainsi
un pseudo temps-réel tout en économisant des échanges réseaux inutiles. Avec le
PUSH on peut par exemple dans le cas d'un tchat, propager les nouveaux messages
d'une discussion du serveur vers les clients connectés de manière quasi
instantanée.
Lors de cette conférence
Jean-François nous a décrit les trois types de communications existantes dans
les applications WEB à savoir :
- Polling (technique traditionnelle)
- Ajax PUSH ou Long Polling : ce que propose Atmosphere
- Http Streaming : Une technique idéale théoriquement mais qui souffre de problème d'intégration avec les proxys notamment.
Atmosphere est un framework (le
premier) à base de POJO proposant aux développeurs d'applications PUSH une
couche de programmation masquant la complexité des serveurs Java dans ce
domaine.
Pour développer la partie serveur
d'une application, le framework est utilisable sur de nombreux serveurs : des
conteneurs legers (Tomcat, Jetty), certains serveurs d'applications comme
Glassfish et Weblogic, il est même disponible pour le Google App Engine.
Concernant ce dernier, on est en droit de se demander comment peut fonctionner
le Long Polling avec des requêtes censées durer moins de 30s ? Jean-François
nous a donné la solution en expliquant qu'Atmosphere implémente sont propre
système de continuation permettant de passer outre cette contrainte. Il faut
aussi noter la compatibilité d'Atmosphere avec les Servlets 3.0.
En ce qui concerne la partie cliente des applications, de nombreux frameworks sont supportés dont GWT et Wicket.
Lors de la présentation, les
speakers se sont focalisés sur une sous-partie du framework à savoir les
annotations disponibles pour les POJOs et les aspects REST intégrés via
Jersey.
Lors de la démo, les deux conférenciers ont pu nous démontrer la simplicité avec laquelle il est possible de créer une application WEB asynchrone utilisant le PUSH. Ils ont insisté sur le fait d'utiliser de simples POJO et de les rendre manipulables via REST. On obtient par exemple des classes ressemblant à ceci :
@Path("/{topic}")
@Produces("text/plain;charset=ISO-8859-1")
public class PubSub {
private
@PathParam("topic") Broadcaster topic;
@GET
@Suspend
public
Broadcastable subscribe() {
return new Broadcastable("OK",topic);
}
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Broadcast
public
Broadcastable publish(@FormParam("message") String message){
return new Broadcastable(message,topic);
}
}
L'idée principale de cette démo
était d'utiliser Atmosphere pour suspendre la connection client lorsqu'il
s'incrit à un topic "test" en appelant http://mon_serveur/test. Un autre client
peut alors publier des messages qui seront diffusés à tous les clients
connectés sur ce topic en soumettant un simple formulaire HTML contenant un
paramètre "message" sous forme textuelle.
Ce que nous aurons retenu
Atmosphere simplifie effectivement le travail des développeurs en ce qui concerne la gestion du PUSH dans une application Java. Il n'est pas nécessaire de refondre entièrement une application existante pour y intégrer Atmosphere, la plupart des problèmes d'intégration sont adressés par le framework (gestion des proxys pour les connections HTTP, les limitations de chacun des navigateurs).
Resources:
Les slides de la présentation : https://atmosphere.dev.java.net/conferences/2009/Devoxx/20091118_Devoxx.pdf
Le code de la présentation :
https://atmosphere.dev.java.net/nonav/xref/org/atmosphere/samples/pubsub/PubSub.html
Le site du projet : http://atmosphere.dev.java.net
Blogs :
Twitter :
@atmosphere_java
Ludovic Meurillon et Vincent Bostoen
