Quelques petits liens pour coder Java sur un air de Java ;-)
Java - Sexe,
accordéon et alcool
Boris Vian - La Java Martienne
Boris
Vian - La Java des bombes atomiques
La Java bleue
mercredi 30 mai 2007
En java et en musique :)
Publié par Cédric Thiébault à l'adresse 11:12 1 commentaires Liens vers ce message
mercredi 23 mai 2007
Maven2 et MyEclipse
MyEclipse ne supporte pas officiellement Maven2 mais en utilisant le plugin
m2eclipse on peut s'en sortir assez facilement....
Selon le standard définit par Maven les classes devraient être compilées dans le répertoire
target, mais si l'on veut utiliser MyEclipse pour déployer l'application (Hot deployment) il faut que
nous compilions les classes vers
src/main/webapp/WEB-INF/classes.
L'idéal serait que MyEclipse supporte le déploiement des classes compilées dans différents
répertoires vers le serveur comme �a nous pourrions suivre le standard Maven et compiler vers
target mais ce n'est pas encore le cas...
Attention : lorsque l'on déploit avec MyEclipse, on perd la fonctionnalité des
filtres
de Maven :-(
Dans les propriétés du projet web, définir le
webrootdir à
src/main/webapp et configurer le fichier
.classpath comme suit :
-- .classpath -- <classpath> <classpathentry kind="src" path="src/main/java" output="src/main/webapp/WEB-INF/classes" /> <classpathentry kind="src" path="src/main/resources" output="src/main/webapp/WEB-INF/classes" /> <classpathentry kind="src" path="src/test/java" output="target/test-classes" /> <classpathentry kind="src" path="src/test/resources" output="target/test-classes" /> <classpathentry kind="output" path="src/main/webapp/WEB-INF/classes" /> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" /> <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER" /> </classpath>
Le plus gros problème dans tout ça, c'est que MyEclipse déploit tous les jars définis dans
le POM... même ceux qui ne servent qu'à la compilation (scope=provided). Par exemple les fichiers
servlet-api.jar et jsp-api.jar seront copiés dans
WEB-INF/lib et cela peut créer des problèmes au démarrage du serveur web.
En attendant le support officiel de Maven2 par MyEclipse, il nous reste à effacer ces fichiers manuellement ou
à ne pas les inclure dans le POM :(
La communauté des utilisateurs de MyEclipse pousse de plus en plus fort pour le support officiel de Maven2 et certains
proposent déjà des solutions qui ne semblent pas demander une tonne de code pour exploiter le plugin m2eclipse
(légèrement adapté) et déployer seulement les jar définis pour le runtime.... Patience donc!
Publié par Cédric Thiébault à l'adresse 12:43 0 commentaires Liens vers ce message
mardi 22 mai 2007
Mac vs PC.... Java vs Ruby
Dans le style des publicités Mac vs PC, voici Java vs Ruby vu par des adeptes de Ruby on rails... Evidemment :)
Publié par Cédric Thiébault à l'adresse 09:43 1 commentaires Liens vers ce message
Libellés : java
mercredi 16 mai 2007
Version des dépendances avec Maven2
Voici quelques petits trucs pratique pour alléger les POM de Maven2 dans les projets multi-modules...
Classiquement chaque POM défini ses dépendances comme suit :
-- pom.xml --
<project>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>2.0.5</version>
<exclusions>
<exclusion>
<groupId>struts</groupId>
<artifactId>struts</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
Si plusieurs modules utilisent Spring MVC, on ne veut pas dupliquer ce code dans chaque POM... On définit la configuration de la dépendance dans le POM parent et on inclus seulement la dépendance dans les modules sans spécifier la version ni les exclusions.
-- pom.xml parent --
<project>
<groupId>demo</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>child</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>2.0.5</version>
<exclusions>
<exclusion>
<groupId>struts</groupId>
<artifactId>struts</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
</project>
-- pom.xml child --
<project>
<artifactId>child</artifactId>
<parent>
<groupId>demo</groupId>
<artifactId>child</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
</dependencies>
</project>
Dernier petit truc pour simplifer la gestion des version des dépendances : au lieu de hardcoder la version de la dépendance dans sa définition, on peut utiliser des 'properties'. Par exemple pour Spring où l'on dépend de plusieurs jars, on peut facilement upgrader en modifiant seulement la propriété 'spring.version'.
-- pom.xml --
<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-dao</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-hibernate3</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<spring.version>2.0.4</spring.version>
</properties>
</project>
Au passage, le site mvnrepository.com est un bon outils pour trouver les jars publiés dans Maven2 et surtout pour trouver lesquels ont été déplacé...
Publié par Cédric Thiébault à l'adresse 15:24 0 commentaires Liens vers ce message
Libellés : maven
lundi 14 mai 2007
UTF-8 encoding
Après plusieurs heures passées à trouver mon erreur d'encodage UTF-8, voici un petite liste des points à vérifier sur une application web.
Mon environnement :
- MySQL
- Hibernate
- Spring MVC
- Velocity (pour les mails)
- Tomcat
MySQL
Vérifier que les tables et les champs textes utilisent le charset UTF-8 :
CREATE TABLE [...] DEFAULT CHARSET=utf8;
Hibernate
-- hibernate.cfg.xml --
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.characterEncoding">utf-8</property>
</session-factory>
</hibernate-configuration>
Spring framework
Utiliser le servlet filter
CharacterEncodingFilter
dans le web.xml afin de forcer l'encodage. Attention de bien positionner ce filtre en première position dans la
liste des différents filtres!
-- web.xml --
<web-app>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
</web-app>
Velocity et mails
Lors du load des templates Velocity, spécifier l'encodage UTF-8.
String content = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, fileName, "UTF-8", tokens);
Encoder aussi les mails. Dans mon cas avec
MimeMessageHelper
.
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
JSP
Définir l'encodage des JSP.
<%@ page contentType="text/html; charset=UTF-8"%> <%@ page pageEncoding="UTF-8"%>
Tomcat
Si après tout ça vous avez encore des problèmes, vous pouvez toujours essayer de configurer Tomcat mais je pense que ça ne changera pas grand chose...
-- server.xml --
<Server>
<Service>
<Connector URIEncoding="UTF-8" useBodyEncodingForURI="true" [...] />
</Service>
</Server>
Conclusion
Tous ces points ne sont surement pas nécessaire... il faut que je vérifie. Je pense que l'encodage au
niveau de la base de données, du web.xml et des mails (Velocity et MimeMessage) est suffisant mais cette liste
peut ammener des indices à d'autres qui rencontrent ce genre de problèmes...
Dans mon cas, le problème venait du servlet filter d'encodage de Spring : il n'était pas en
première position :-(
Publié par Cédric Thiébault à l'adresse 10:02 12 commentaires Liens vers ce message
Libellés : java