Archive pour la catégorie 'J2EE'

Hibernate 3.3

Mardi 26 août 2008

Le projet Hibernate propose une nouvelle version de leur framework de mapping objet-relationnel.

Il y a une dizaine de jours, l’équipe du projet Hibernate a annoncé la sortie de Hibernate Core 3.3.0 GA.

Cette nouvelle version est disponible en téléchargement. Elle n’apporte pas de gros changements puisque l’essentiel des nouveautés concerne le refactoring du projet. Le projet est maintenant construit avec Maven et a été découpé en plusieurs JARs pour réduire les dépendances. De plus, le cache de second niveau a subi quelques améliorations.

Eclipse 3.4 - Ganymede

Mardi 1 juillet 2008

Cela fait bien longtemps que je n’ai pas annoncé la sortie d’une nouvelle version d’Eclipse. Il me semble que la dernière, c’était pour la sortie d’Eclipse 3.2, il y a deux ans !

Et bien, voilà ! Le projet Eclipse avance toujours et a annoncé la semaine dernière (le 25 juin 2008 pour être exact) la sortie de la version 3.4. Comme à l’accoutumée, la liste des nouvelles fonctionnalités est disponible. Cette publication regroupe pas moins de 24 projets différents ! On peut noter l’intégration de Subversive dans l’IDE pour utiliser SVN. De plus, le système de mise à jour a été complètement revu et se nomme P2 (Provisioning Platform).

Cet IDE est disponible en téléchargement sur le site officiel.

Pour ceux d’entre vous qui souhaiteraient obtenir plus d’information, Xavlours a réalisé une synthèse pour présenter les principales nouveautés par projet que propose Ganymede.

Dites au revoir aux PermGen space

Vendredi 6 juin 2008

Vous travaillez sous Eclipse ? Vous utilisez un serveur d’applications intégrant Tomcat tel que JOnAS ou JBoss ? Et l’accès aux données est fait via Hibernate (même encapsulé dans la couche EJB3) ? Et pour finir, votre application contient un module web ?

Si vous avez répondu par l’affirmative à la majorité de ces questions, vous devez bien connaitre le message suivant :

PermGen space

Ceci se produit après quelques déploiements à chaud de votre application et provoque le blocage de votre serveur d’application. Après une telle erreur, il ne reste plus qu’à tuer le processus du serveur (le script d’arrêt ne fonctionnant plus) puis à le relancer.

Après avoir investigué sur le sujet, il semble que l’utilisation de bibliothèques externes qui font du chargement dynamique de classe ne soit pas compatible avec le redéploiement car l’URLClassLoader de Tomcat garde des références sur des objets dont les classes ont été chargées dynamiquement lors de l’exécution. Ce qui empèche le garbage collector de faire correctement son travail. ;-)

Or Hibernate utilise la bibliothèque CGLIB pour le chargement dynamique de classe (lazy=false).

Spécifique à la JVM Sun, le PermGen space est une zone mémoire qui contient tout ce qui n’est pas géré par le garbage collector; tout ce qui est relatif au classes (leur structure: méthodes, champs, annotations…), les champs static, les chaines littérales… On spécifie le PermGen space avec les propriétés -XX:PermSize=256m et -XX:MaxPermSize=256m par exemple. Plus on a de classes différentes plus il faut augmenter la taille de cette zone mémoire.

Pour résoudre le problème, enfin pour le repousser devrais-je dire, il est possible d’ajouter le paramètre suivant lors du lancement de votre serveur d’application : -XX:MaxPermSize=256m. La taille étant à définir selon votre utilisation. Par contre, il faut éviter de mettre le paramètre -noclassgc qui empêche le garbage collector de nettoyer l’espace du PermGen.

L’autre solution est d’utiliser la JVM d’IBM ou JRockit de BEA. Mais on ne fait pas de polémique ici. :-P

Les bonnes pratiques avec Struts 2 - afficher un double select horizontalement

Mercredi 4 juin 2008

Voici le second billet dans la série sur Les bonnes pratiques avec Struts 2.

Introduction

Struts 2 permet de gérer facilement des doubles listes déroulantes (tag <select> en HTML) avec le tag <s:doubleselect>. Le problème est que les listes déroulantes générées avec ce tag s’affichent toujours l’une au dessous de l’autre (ie. verticalement). Or, souvent il est souhaitable que ces listes soient affichées l’une à côté de l’autre (ie. horizontalement).

Solutions

En lisant le code du template par défaut de Struts 2, on se rend compte que le retour à la ligne entre les deux listes est forcé avec le tag <br />. Donc, il n’existe qu’une seule solution : réécrire le template pour le tag <s:doubleselect>. Enfin, il faut juste supprimer le tag <br /> présent dans le fichier doubleselect.ftl (ligne 32 dans la version 2.0.11 de Struts 2). ;-)

Conclusion

Encore une fois, on peut s’étonner de l’ajout par Struts 2 d’un <br /> entre les deux listes déroulantes. De plus, j’ai essayé d’ajouter un nouvel attribut au tag<s:doubleselect> pour paramétrer l’alignement (horizontal et vertical), mais je n’ai pas réussi. :-(

Les bonnes pratiques avec Struts 2 - construire des URLs avec les bons paramètres

Jeudi 20 mars 2008

Voici un premier billet dans la série sur Les bonnes pratiques avec Struts 2.

Introduction

Struts 2 permet de construire simplement des URLs avec le tag <s:url>. Le problème est que ce tag ajoute dans l’URL tous les paramètres passés dans l’URL de la page courante.

Solutions

Ce genre de comportement est rarement souhaité et ne concerne de quelques cas bien précis. Pour empêcher l’ajout des paramètres courants, il faut positionner l’attribut includeParams avec la valeur none de cette façon :

<s:url value="myurl" includeParams="none">
 <s:param name="myparam" value="myvalue" />
</s:url>

Cette méthode fonctionne bien. Cependant, dans la pratique, il devient vite pénible de devoir positionner cet attribut à chaque fois que l’on souhaite générer une URL. C’est pourquoi, il est préférable de modifier le fichier de configuration de Struts et d’ajouter dans le fichier struts.xml la ligne suivante :

<constant name="struts.url.includeParams" value="none" />

Conclusion

On peut s’étonner du choix de la valeur par défaut de l’attribut includeParams (qui peut prendre les valeurs none, get ou all). Néanmoins, vous voilà armé pour construire des URLs propres et sans aucun paramètre parasite.

Les bonnes pratiques avec Struts 2

Mercredi 19 mars 2008

Il y a quelques temps, j’ai commencé une série d’article sur Les bonnes pratiques avec Struts.

Or, mon dernier article sur un comparatif entre Struts 1 et Struts 2 laissait supposer un passage de Struts 1 à Struts 2. Donc, comme un changement en amène un autre, la série sur Les bonnes pratiques avec Struts devient Les bonnes pratiques avec Struts 2.

Les objectifs de cette série reste les mêmes :

  • réaliser un aide mémoire sur l’utilisation de Struts 2
  • partager et confronter les expériences de chacun sur ce framework MVC

Liste des billets :

En attendant strutsez-vous bien. ;-)

Geronimo certifié Java EE 5

Mardi 18 mars 2008

Ce n’est pas nouveau, Geronimo est certifié Java EE 5 depuis la version 2.0. Et il y a un peu moins d’un mois, la version 2.1 est sortie.

Cette nouvelle version apporte son lot d’améliorations, corrections et de nouvelles fonctionnalités dont :

  • Custom Server Assemblies : pour simplifier la construction d’un serveur sur-mesure
  • Flexible Administration Console : une console d’administration du serveur
  • GShell : un environnement d’exécution de ligne de commande supportant Groovy
  • WADI Clustering : permet de monter aussi bien des clusters de Jetty ou Tomcat
  • Monitoring support : accessible via la console d’administration, il permet de superviser l’état de l’ensemble des serveurs

Pour plus d’informations, vous pouvez consulter l’annonce officielle de publication de Geronimo 2.1.

Comme toujours, ce serveur d’applications open source est disponible en libre téléchargement sur la page du projet.

JSTL & EL - afficher l’identifiant de session

Jeudi 21 février 2008

Vous utilisez la JSTL et les EL. Vous avez banni les scriplets de vos pages JSP. Mais comment faire référence à l’identifiant de session HTTP dans vos pages JSP ?

C’est tout simple. Mais quand cela fait longtemps que l’on a pratiqué ce genre d’astuce, il est difficile de retrouver la bonne méthode. Alors, pour ne plus oublier, voici la page JSP permettant d’afficher l’identifiant de la session JSP (plus connu sous le doux nom de JSESSIONID) :

<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root
 xmlns:jsp="http://java.sun.com/JSP/Page”
 xmlns=”http://www.w3.org/1999/xhtml”
 version=”2.0″>
<jsp:directive.page
 language=”java”
 contentType=”text/html; charset=UTF-8″
 pageEncoding=”UTF-8″ />
<jsp:output
 omit-xml-declaration=”false”
 doctype-root-element=”html”
 doctype-public=”-//W3C//DTD XHTML 1.0 Strict//EN”
 doctype-system=”http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”/>
<html>
 <head>
 	<title>Display JSP session id</title>
 </head>
 <body>
 	Your jsessionid is ${pageContext.session.id} !
 </body>
</html>
</jps:root>

Et oui ! C’est aussi simple que ça. ;-)

Supprimer les warnings en Java

Mercredi 30 janvier 2008

Lors de l’étape de compilation, le Java permet de lever les warnings sur des portions de code qui sont corrects d’un point de vue syntaxique, mais qui peuvent poser des problèmes lors de leur exécution.

Le warning le plus courant est sûrement le suivant :

Type safety: Unchecked cast from Object to Collection<String>

Cependant, dans certains cas, le code est correct et ne posera pas de problème à l’exécution. Depuis Java 5.0, il est possible d’indiquer au compilateur, via les annotations, d’ignorer certains warnings sur des blocs de code donnés. Ceci est possible grâce l’annotation @SuppressWarnings.

Par exemple, dans le cas précédent et dans le cas moins évident présenté ci-dessous :

List is a raw type. References to generic type List<E> should be parameterized

Il faut utiliser, l’annotation de la façon suivante :

@SuppressWarnings("unchecked")

L’annotation @SuppressWarnings accepte un nombre important de paramètres. Damien Viel propose une liste des valeurs possibles.

Attention ! Cette annotation doit être utilisée à bon escient. Il est recommandé de se demander pourquoi le Java lève un warning à cet endroit et s’il peut réellement être ignoré…

Struts 1 ou Struts 2 ?

Jeudi 15 novembre 2007

Suite à l’arrivée de JSF, le projet Struts a dû se recadrer afin de ne pas de se disperser et de toujours proposer une offre cohérente et surtout compétitive. C’est alors que le projet a été découpé en trois :

  • Struts 1 : la version classique qui existe depuis de nombreuses années.
  • Struts 2 : la nouvelle version résultant de la fusion entre les projets Struts et Webwork.
  • Shale : la version JSF (si je puis dire).

Autant, il est facile de voir la différence entre la version “classique” de Struts et Shale. Autant, une distinction entre Struts 1 et Struts 2 n’est pas évidente pour tout le monde. C’est pourquoi Christophe Bonche de chez Clever Age dresse un portrait de ces deux versions. Dans sa présentation, il explique notamment le cycle de vie standard de ces deux frameworks. Mais l’objectif du document est d’aider le lecteur à choisir entre Struts 1 et Struts 2. Je vous laisse découvrir le résultat de l’analyse sans surprise. ;-)