Ce billet discute de la réalisation d'un web service REST avec JAXB dans le contexte d'un code existant. Dans ce cadre, REST/JAXB est elle la solution la plus simple ?
Auteur
Jean-Baptiste Defard
Jean-Baptiste a fêté en 2007 ses 20 ans de développement en informatique. Il s'est spécialisé dans la mise en œuvre d'architectures objet. Tombé dans la marmite du C++ tout petit, il travaille aujourd'hui essentiellement en Java depuis quelques années dans le domaine des applications d'entreprise. Il a rejoint Netapsys en 2007 et a pris en charge sa direction technique en 2008.
Web service REST avec JAXB. Simple vraiment ?
Apache Camel - Transformation des données d'un fichier texte
Une erreur d'appréciation fréquente concernant Apache Camel est de croire que son utilisation est réservée à des contextes client/serveur du style mise en oeuvre de Webservice, ou d'une messagerie JMS... Il est vrai que c'est pour ce genre de besoins que bien souvent on l'utilise la première fois. A l'usage, on découvre rapidement qu'il permet de faire beaucoup d'autres choses sympathiques.
Apache Camel - Configuration des timeouts HTTP
La mise en œuvre d'une requête HTTP avec Camel est assez simple. Après avoir ajouté le composant camel-http.jar au classpath, la route suivante fait une requête de recherche sur Google.
from("direct:start").
to("http://www.google.com/search?q=netapsys).to("mock:result");
Un simple appel dans un test Camel permet de s'assurer que tout s'exécute comme prévu :
@Test
public void test()
throws Exception
{
this.template.sendBody("direct:start", null);
.../...
}
Le composant s'appuie sur la librairie commons-httpclient-3.x.jar pour l'implémentation. Pour la configuration des temporisations HTTP, un petit tour dans la documentation, montre qu'il existe (au moins) deux solutions :
- Soit, on passe en paramètre la valeur du délai sur la route. Dans ce cas, la route précédente devient :
from("direct:start").
to("http://www.google.com/search?q=netapsys&httpClient.soTimeout=5000").to("mock:result");
- Soit, on configure le composant directement en injectant un objet ClientConnectionManager correctement paramétré. Si, comme c'est mon cas, vous utilisez Spring comme registre Camel, il suffit de déclarer un bean correspondant au composant et de le paramétrer. Par analogie avec :
final MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); final HttpConnectionManagerParams params = connectionManager.getParams(); params.setConnectionTimeout(6000); connectionManager.setParams(params); HttpClient client = new HttpClient(connectionManager));
Cela revient dans un contexte Spring, aux déclarations :
<bean id="http.connection.manager.params"
class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
<property name="connectionTimeout" value="6000" />
<property name="soTimeout" value="4000" />
</bean>
<bean id="http.composant" class="org.apache.camel.component.http.HttpComponent">
<property name="httpConnectionManager">
<bean
class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
<property name="params" ref="http.connection.manager.params" />
</bean>
</property>
</bean>
Il y a même plus court et surtout plus souple. La configuration précédente présente l'inconvénient de fixer les valeurs de temporisation pour l'ensemble des routes utilisant le composant HTTP. Pour une configuration "par route" à la demande, on peut utiliser le paramétrage par référence. Avec les déclarations Spring suivantes :
<bean id="clientConnectionManager2" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"> <property name="params"> <bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams"> <property name="connectionTimeout" value="5000" /> <property name="soTimeout" value="2000" /> </bean> </property> </bean> <bean id="clientConnectionManager3" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"> <property name="params"> <bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams"> <property name="connectionTimeout" value="10000" /> <property name="soTimeout" value="12000" /> </bean> </property> </bean>
Il suffit de configurer les routes avec la référence du bean souhaité :
from("direct:start1").
to("http://www.google.com/search?q=netapsys&clientConnectionManager=#clientConnectionManager2").to("mock:result");
from("direct:start2").
to("http://www.google.com/search?q=netapsys&clientConnectionManager=#clientConnectionManager3").to("mock:result");
Il existe un composant Camel utilisant la version 4.x d'HttpClient que je n'ai pas encore eu l'occasion d'utiliser. La configuration doit être probablement légèrement différente.
Lightning pour Thunderbird 3.1.x sous Linux 64 bits.
Suite à une mise à jour de Thunderbird (en version 3.1.7 chez moi), je n'ai plus accès à mes calendriers, car le composant Lightning refuse de se lancer. Après recherche, je n'ai pas trouvé une version toute prète du composant pour mon Ubuntu 64 bits. La solution restante et qui marche ;-) est de compiler le composant en local. Voila la procédure.
Installation des paquets nécessaires :
sudo apt-get build-dep thunderbird firefox sudo apt-get install mercurial libasound2-dev libcurl4-openssl-dev libnotify-dev libiw-dev autoconf2.13 cvs sudo apt-get install yasm mesa-common-dev
Récupération des sources :
mkdir mozilla cd mozilla hg clone http://hg.mozilla.org/releases/comm-1.9.2/ src cd src python client.py checkout
Dans le répertoire src, il faut créer le fichier .mozconfig avec le contenu suivant :
ac_add_options --enable-application=mail ac_add_options --enable-calendar mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-tb-release
Et enfin, construire la chose :
make -f client.mk
Après un bon café et un roulement de tambour, les binaires sont dans : src/objdir-tb-release/mozilla/dist Il ne reste plus qu'a installer les .xpi avec le gestionnaire de modules complémentaires de Thunderbird (Menu: /outil/modules complémentaires/ installer).
L'intégration continue au JUG de Tours
Pour sa rentrée, le JUG de Tours organise le 10 septembre une soirée autour de l'intégration continue que j'aurai le plaisir d'animer. La présentation se veut très pratique et orientée retour d'expériences. Après un rappel des principes, je présenterai l'infrastructure d'intégration articulée autour d'Hudson que nous utilisons chez Netapsys. Une dernière partie traitera de l'intégration de Sonar comme un exemple de la contribution potentielle de l'environnement à la mise en oeuvre d'une démarche d'assurance qualité.
Si vous êtes intéressés par cette discussion, dans une ambiance détendue et conviviale, il ne vous reste plus qu'a vous inscrire ;-).
Nouvelle version de Sonar
La version 1.3RC1 est sortie la semaine dernière. J'ai retardé la mise en production car dans l'infrastructure test la migration depuis la version 1.2.1 supprimait des mesures. Renseignement pris (merci Simon), il semblerait qu'il faille relancer une collecte pour que les mesures réapparaissent. Je suis vraiment très content de l'évolution du logiciel. Il s'améliore à chaque nouvelle version.
Les nouveautés :
- Possibilité de déployer sous Tomcat
- Détails des mesures par paquetage (très pratique :-))
- Nouveaux ratios pour les commentaires et le code dupliqué
- Amélioration des performances de l'ensemble
Pour les notes de releases c'est par ici. Un site de démonstration a été ouvert en même temps que la release de la 1.3RC1.
La prochaine version (1.3) devrait sortir au début du mois de juin et semble bien avancée.
Maven au ParisJUG
J'ai assisté mardi soir dernier à la présentation, par Arnaud Heritier, de Maven au Paris JUG . C'était une présentation vraiment intéressante. Arnaud a répondu avec beaucoup d'intelligence et de gentillesse à un certain nombre de questions concernant la communauté, l'organisation des repositories, les plugins et l'avenir du projet. Il a présenté les principales nouveautés de la version 2.0.9 et l'actualité de la communauté.
But Sierra 1, azimut 15, distance 3000...
Contrairement à ce que pourrait laisser suggérer le titre, je n'ai pas l'intention de commenter le dernier techno-thriller maritime sorti en librairie... Sonar est un outil de suivi des indicateurs de qualité produits par des outils comme PMD, Checkstyle, Cobertura, JavaNCSS. C'est beau, c'est simple à installer et c'est facile à mettre en œuvre dans une intégration continue. Surtout, Sonar permet d'afficher et de comparer les évolutions chronologiques des indicateurs, sur autant de projets que l'on souhaite. Un superbe outil, à mon avis. L'équipe de développement a décidé de sortir une release environ tous les mois, la version 1.3 ne devrait donc plus tarder.