Journal Jetty mais costaud

Posté par (page perso) .
Tags :
23
19
jan.
2010
Dans la grande famille des serveurs Java, plusieurs objectifs se côtoient. Certains comme JBoss ou Glassfish jouent la carte de l'exhaustivité dans l'implémentation des fonctionnalités alors que d'autres se spécialisent. Parmi ces derniers, le serveur Jetty se distingue, lui, par son efficacité.

Avant toute chose, posons des bases saines : Jetty n'est pas exactement un serveur d'applications Java. En effet, il ne propose pas toutes les fonctionnalités nécessaires pour être appelé ainsi. Il n'y a par exemple pas de prise en charge native de la norme EJB : ceci peut être dévolu à des projets tiers comme par exemple OpenEJB ou EasyBeans en fonction des besoins de l'application cible. Jetty assume le rôle de serveur HTTP et de conteneur de servlets Java ce qui revient à une version très allégée d'un serveur d'applications. Cette particularité permet à Jetty de jouer la carte de la légèreté et de l'adaptabilité : après tout, rares sont les serveurs java qui peuvent se vanter à la fois d'être embarqués dans des téléphones, des systèmes distribués et participer à des programmes de calculs de sondes sur Mars !

Sur Terre, Jetty s'illustre par sa rapidité de lancement ainsi que par sa capacité à recharger des pages modifiées à chaud. Cette fonctionnalité est particulièrement utile aux développeurs qui n'ont de fait plus besoin de redémarrer leur serveur de test à chaque modification mineure d'une page.
Jetty dispose d'une intégration native dans Maven ce qui fait de lui un vrai bonheur quand il s'agit de l'ajouter à un projet Java comme on peut le voir dans certains tutoriels. L'intéressé est si léger qu'il a même été embarqué directement dans un plugin Eclipse ce qui résume son déploiement à trois clics dans le gestionnaire de mises à jour d'Eclipse via l'URL http://run-jetty-run.googlecode.com/svn/trunk/updatesite.

Voilà donc, dans la longue liste des serveurs Java, un exemple intéressant d'une serveur qui a su tirer son épingle du jeu avec une politique de niche. A la vue de sa success story, on peut se dire que c'est une recette viable !
  • # Netty

    Posté par . Évalué à 5.

    A voir aussi, Netty http://www.jboss.org/netty. Niveau performance (de ce que j'ai pu tester rapidement) c'est bien rapide sans être gourmand en ressources
    • [^] # Re: Netty

      Posté par . Évalué à 6.

      Netty et Jetty ne jouent pas du tout sur le même terrain:
      - Netty c'est un framework pour développer des clients/serveurs réseaux à base d'I/O asynchrone.
      - Jetty c'est un container de servlet et un serveur HTTP.

      L'un te propose le paradigme servlet, et donc abstrait le protocole réseau, ne te donne aucun contrôle dessus, et te fournit des I/O synchrone. L'autre te propose de quoi développer ton propre protocole réseau et ne te fournis qu'un framework événementiel d'I/O asynchrone très bien foutu et rien au dessus.

      Pour faire simple; si tu as besoin de développer un site web classique avec des servlets et tout, tu vas te diriger vers Jetty.
      Si tu as besoin de fournir un service très particulier, tu repars du sol avec Netty. Ca peut être pour implémenter ton propre protocole ou par ce que ton cas d'utilisation est très particulier. Par exemple si tu veux fournir un service de vidéo en HTTP, Jetty n'est pas adapté et il vaut mieux construire ton propre serveur web.

      Cela dit les deux ont en commun leur très grande qualité technique, une prise en main facile et une bonne documentation. Très agréable de travailler avec ces deux là !
      • [^] # Re: Netty

        Posté par (page perso) . Évalué à 2.

        Pour adapter un serveur web, asyncweb est pas mal et le code simple a comprendre.
        • [^] # Re: Netty

          Posté par . Évalué à 2.

          Effectivement il y a beaucoup d'alternatives possibles. Il faut évaluer la pertinence de chacune en fonction de ses besoins.

          Tu as raison, pour faire un serveur web avec netty/mina/grizzly il faut avoir une bonne raison puisque ça implique de réimplemanter HTTP soit même (ou tout du moins la partie dont on a besoin). Asyncweb fait ce sale boulot en se basant sur mina pour fournir un outil adapté à cette problématique particulière.

          Au moins ce journal montre qu'en dehors des usines à gaz J2EE, il existe de très très bon projets qui simplifient vraiment la vie des développeurs.
      • [^] # Re: Netty

        Posté par . Évalué à 4.

        ton commentaire est [pertinent], je n'ai pas précisé cela, aveuglé que je suis par l'utilisation de restlet [http://www.restlet.org/] qui me permet de changer de connecteur http comme je veux. L'utilisation de l'un ou l'autre est transparente, et ils (me) servent de la même manière
  • # container de servlet VS serveur d'application

    Posté par . Évalué à 5.

    Tu compares deux choses différentes. D'un côté les serveurs HTTP/containers de servlet et de l'autre les serveurs d'application J2EE. Les seconds reposent sur les premiers et fournissent bien plus de fonctionnalités. Jetty se compare à tomcat. On peut le retrouver comme base de serveurs d'application tels que Geronimo, JBoss ou Jonas.

    Après je te suis totalement sur le fait que Jetty est super bien foutu et mérite son succès. Un plaisir à utiliser et lire son code. Ce n'est pas un hasard si énormément de projets ayant besoin de fournir un serveur HTTP l'embarquent ! C'est bien conçu, c'est fiable, tout est configurable et c'est léger.
  • # Pour la gestion des Datasources ?

    Posté par . Évalué à 2.

    Salut,
    Quand je crée un WAR et que je souhaite le déployer sur un nouveau serveur par un tiers ignorant en Servlet & Co. Je butte à chaque fois:
    - sur la gestion des datasources pour la connexion à la base de donnée.
    - ou le passage de paramètre de configuration.

    Avec Tomcat , j'ai plusieurs solutions qui me laissent sur ma faim:
    - l'édition manuel des fichiers XML de configuration
    - l'utilisation de l'applis web d'administrations. Un vrai clickodrome et buggé à l'époque où je l'ai utilisé 2005.
    - dans le war ou le déploiement du war en même temps qu'un context.xml via ANT
    - l'ajout d'un fichier META-INF/context.xml au war.

    Personnelement, j'ai opté pour la dernière qui est pratique mais imparfaite car elle est difficile à changer par l'utilisateur et elle pose des problèmes pour les mises à jours qui vont suivre.

    Cela offre quoi comme solution Jetty pour répondre à ce problème ?

    PS: J'avais essayé sur Websphère en 2005 (aussi :) ). Le côté "clickodrome" de l'époque était pire que l'application d'administration de Tomcat.
    • [^] # Re: Pour la gestion des Datasources ?

      Posté par (page perso) . Évalué à 2.

      Et JNDI???

      J'utilise Jetty dans mes projets, et c'est vraiment un superbe outil.
      Dans mes junits, j'initialise l'environnement jndi et lance le server d'application, puis je fais mes tests (appels webservice / requête http etc.).

      Avec le plugin dédié maven, ca passe parfaitement sur une plateforme d'intégration.

      Pour des raisons autres que techniques, le déploiement final se fera sous jboss, mais pour développer, debugger de manière efficace, je continue avec jetty, nettement plus rapide...
  • # il ne faut passe resin-ner

    Posté par . Évalué à 2.

    Resin, de Caucho ( http://www.caucho.com/ ), est également une excellent conteneur de Servlet à la "mode" Jetty (par "mode", j'entends conteneur léger capable d'être étendu pour se rapprocher du monde JEE).

    Mais entre ces micro-conteneurs qui peuvent grossir selon les besoins et les serveur applicatifs full-JEE qui s'allègent et se modularisent (voir Glassfish v3, une merveille) j'ai comme l'impression que l'on s'oriente lentement mais surement vers une convergence fonctionnelle. :)
  • # Argument peu convaincant

    Posté par (page perso) . Évalué à 4.

    Jetty s'illustre (...) par sa capacité à recharger des pages modifiées à chaud. Cette fonctionnalité est particulièrement utile aux développeurs qui n'ont de fait plus besoin de redémarrer leur serveur de test à chaque modification mineure d'une page.

    Heu, ça c'est une fonctionnalité de base de tout serveur digne de ce nom. Ça le fait très bien avec Tomcat, JBoss, GlassFish.

    Ce n'est certainement pas un argument à mettre particulièrement en avant.

    Sinon oui Jetty ça a l'air pas mal, comme concurrent de Tomcat.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.