Jetty : démarrage rapide
Jetty est un serveur d’application léger, très léger. Il est en plus rapide et complètement intégré à Maven 2. Si vous voulez déployer une application Web sans devoir installer un serveur séparément, suivez le guide.
Avantages
Les avantages de Jetty sont :
- Lancement très rapide : sur ma machine : moins de 10 secondes au total (initialisation de la DataSource, contexte spring…) ;
- Rechargement de l’application ultra-rapide : moins de 4 secondes pour qu’une modification d’une classe java puisse être testée dans le navigateur ;
- Compilation à la volée des JSP ;
- Intégration directe dans le pom.xml avec peu de configuration.
Lancement
Pour lancer Jetty, sans avoir fait aucune configuration préalable, il suffit de lancer la commande suivante depuis la racine de votre projet Web Maven :
$ mvn jetty:run
Cette commande démarre Jetty qui va utiliser la configuration de Maven pour savoir où est situé le code source et les ressources. Rendez-vous sur http://localhost:8080/ pour voir votre application déployée.
Il est impressionnant de voir que Maven télécharge les dépendances de Jetty, configure son contexte et permet d’avoir un serveur d’application fonctionnel en quelques secondes.
Datasource, Mail Session, Url Resource
Maintenant, passons aux choses sérieuses. Si vous avez besoin d’une DataSource, d’une Session mail ou d’une URL (pour par exemple externaliser la configuration de votre application), il suffit de créer un fichier de configuration qui contient ces déclarations.
Pour cela, il suffit d’ajouter au pom.xml de l’application Web :
<profiles>
<profile>
<id>jetty</id>
<build>
<defaultGoal>jetty:run</defaultGoal>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<scanIntervalSeconds>2</scanIntervalSeconds>
<jettyEnvXml>
${basedir}\jetty\jetty-env.xml
</jettyEnvXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.experlog</groupId>
<artifactId>xapool</artifactId>
<version>1.5.0</version>
</dependency>
</dependencies>
</profile>
</profiles>
Cette configuration fait référence au fichier jetty-env.xml. Ce fichier est placé dans le répertoire jetty à la racine du projet. Le fichier webdefault.xml peut être ignoré, il permet de configurer Jetty en profondeur.
Nous avons également ajouté une dépendance vers com.experlog.xapool qui offre les classes nécessaires à Jetty pour avoir un pool de connexion. Le driver JDBC doit être présent dans votre projet en tant que dépendance, il n’est pas montré ici.
Voici un exemple de fichier jetty-env.xml :
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <Configure class="org.mortbay.jetty.webapp.WebAppContext"> <New id="myDataSource" class="org.mortbay.jetty.plus.naming.Resource"> <Arg>jdbc/myDataSource</Arg> <Arg> <New class="org.enhydra.jdbc.standard.StandardDataSource"> <Set name="DriverName">com.microsoft.sqlserver.jdbc.SQLServerDriver</Set> <Set name="Url">jdbc:sqlserver://server:1433;databaseName=TOMSQUESTDB</Set> <Set name="User">tomsquest</Set> <Set name="Password">********</Set> </New> </Arg> </New> <New id="mySession" class="org.mortbay.jetty.plus.naming.Resource"> <Arg>mail/mySession</Arg> <Arg> <Call name="getInstance" class="javax.mail.Session"> <Arg> <New class="java.util.Properties"> <Call name="setProperty"> <Arg>mail.smtp.host</Arg> <Arg>mail.tomsquest.com</Arg> </Call> </New> </Arg> </Call> </Arg> </New> <New id="myConfig" class="org.mortbay.jetty.plus.naming.Resource"> <Arg>url/myConfig</Arg> <Arg> <New class="java.net.URL"> <Arg>file:////home/tom/projects/tomsquest/config.properties</Arg> </New> </Arg> </New> </Configure>
Conclusion
Quelques minutes de configuration pour avoir un serveur Web opérationnel qui se relance en quelques secondes ? Oui, c’est possible. Nous avons vu comment configurer Jetty de manière complète et sans douleur.


September 11th, 2008 at 22:49
Très intéressant, on oublie que Jetty est si simple et si pratique pour développer rapidement. Merci pour ton article.
Nicolas
October 3rd, 2008 at 14:28
GlassFish propose désormais une API “embedded” qui permet d’avoir un serveur d’application complet dans les même conditions avec un temps de démarrage tout aussi intéressant:
http://blogs.sun.com/alexismp/entry/bundling_glassfish_v3_prelude_xwiki1
December 7th, 2009 at 10:30
[...] 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 [...]
December 10th, 2009 at 17:18
Salut !
Je cherche un moyen de lancer Jetty en utilisant des profils de test déclarés dans un pom parent au projet web que je veux tester.
Ceci est-il possible ? Il ne me semble pas que l’héritage de profil existe dans Maven.
Du coup, j’utilise plutôt le plugin tomcat qui permet de lancer le serveur en se placant sur le projet parent (détecte automatiquement les modules web qui en dépendent) et visiblement ceci n’est pas possible avec jetty (obligé de lancer le plugin sur un projet war)
Une idée ?
Merci
December 12th, 2009 at 12:26
Bonjour Anthony,
Je n’ai pas eu ce cas d’utilisation avec les profils Jetty en dehors d’un Pom War.
Si tu as trouvé une solution, je suis preneur.
Tom