28
juin/09
0

Ecriture d’un plugin maven en groovy

build avec maven
J’ai eu la chance d’avoir il y a peu une formation à la création de plugin maven par arnaud grand gourou maven. Cependant, je n’avais pas encore eu l’occasion de mettre vraiment la main à la pâte. Je dois bosser la semaine prochaine sur un plugin maven codé en groovy et j’ai besoin de passer par la case départ pour bien comprendre comment cela fonctionne. Cet article est ma case départ…

20
juin/09
0

Livre Java EE 6 (in english in the text) en dédicace ce samedi à Paris

livre JEE6
Antonio Goncalves :
»  Je vous propose de nous retrouver samedi 20 juin à la librairie Le Monde En Tique de 15h50 à 18h pour une séance de dédicace. Le principe est simple : vous venez, vous achetez un exemplaire du livre (ou plusieurs exemplaires pour offrir à votre femme et à vos parents), et je vous écris un petit mot doux. C’est un bon deal non ? « 
En savoir +

15
mar/09
0

Feedburner, rediriger vos flux avec .htaccess

Feedburner, rediriger vos flux avec .htaccess

feedburner Si comme moi vous avez navigué entre une dizaine de CMS, et proposé à vos utilisateurs des flux RSS avec des URL diverses et variées, vous vous retrouvez alors avec des utilisateurs qui suivent votre flux RSS avec google Reader, Netvibes ou bien leur propre butineur perso.

Seulement maintenant, vous souhaitez, à la fois économiser la bande passante consommée par les X bots, tout en utilisant les statistiques assez fournies mises à disposition par l’application de google : feedburner.

1
mar/09
2

JSF2 (JSR 314) , les nouveautés

jsf21JSF ou Java server Faces est le framework java de présentation web présent dans la version actuelle de JavaEE 5, et le sera également dans la prochaine version de javaEE 6 qui devrait sortir courant juin 2009. JSF était en version 1.2 (JSR 252) pour JAVAEE 5 et la prochaine version, JSF 2 (JSR 314) fera partie de javaEE6. A cette fin, ce framework a eu droit à une nouvelle version majeure, et donc, s’est vu dôté de nouvelles fonctionnalités. Cet article a but de vous faire une présentation rapide des nouveautés de JSF2. Je reviendrais plus en détail sur les nouveautés un peu plus tard.

23
fév/09
1

Hibernate, sous le capot, il fait quoi ?

200447958-001Hibernate est un formidable outil pour les développeurs, mais il a cependant un inconvénient, il éloigne le développeur de ce qu’il se passe réellement entre son application et sa base de données. Ce post a juste pour objectif de vous donner quelques pistes que j’utilise pour comprendre un peu mieux ce que fait hibernate derrière mon dos.

29
jan/09
0

ILife 09, premières impressions

Après des années de bon & loyaux services sous windows. Après avoir monté mes propres machines pour essayer d’optimiser un tant soit peu ma machine, et ainsi avoir des performances décentes sur mon ordinateur personnel, j’ai cherché un alternative, qui me permettrait d’utiliser mon ordinateur pour produire du contenu (code, articles, media…). Je travaille actuellement dans un service de geek, et une bonne partie d’entre eux, n tarit pas d’éloge sus macintosh. J’ai donc fait un POC Imac, qui a réussi avec succès. Depuis novembre, j’ai également craqué en achetant un macbook pro unibody. Je suis maintenant un utilisateur assidu d’iphoto et d’iMovie (ma chère et tendre monte d’ailleurs elle-même les vidéos familliales. Cet article est là pour vous sentiments après l’arrivée toute fraiche de cette nouvelle version. Mes remarques seront cependant limitées à imovie et iphoto, car ce sont les seuls produits de la gamme ilife que j’utilise.

25
jan/09
0

Java, valider votre code html avec jtidy

Pour les adeptes de cet addon assez connu des développeurs web soucieux de leur conformité html, il existe également une version java de cet outil. Ce petit exemple de code montre comment parser la home de ce site, et également d’en afficher le rapport.

25
jan/09
1

Introduction au Framework MVC Spring

Le design pattern MVC est un modèle de conception adapté à la séparation des couches.

Cette méthode impose de séparer présentation, traitements et données.

En respectant cette méthodologie, le travail en équipe sera facilité par le découpage des tâches et des fichiers. La maintenance du code sera améliorée du fait de sa spécialisation. Bref, que des avantages.

Le Framework Spring implémente ce design pattern.

Dans cet article qui lui est consacré, nous allons mettre en pratique cette séparation des couches en utilisant un MultiActionController, qui me semble plus simple pour commencer.

25
jan/09
0

Réécriture des URL / URL Rewriting en java


url-rewriting
L’URL rewriting est aujourd’hui le garant d’un meileur référencement pour les sites web dynamiques.

En effet, les moteurs de recherche n’indexent pas ou moins bien les url dotées d’un grand nombre de paramètres.

Les url telles que http://www.monsite.com/index.php ?param1=1234&param2=abcd ne sont pas très parlantes alors que www.monsite.com/rewriting-ur… est humainement lisible et davantage mémorisable.

Et pour finir, le fait de pouvoir placer des mots clés dans l’url sera bien sûr bénéfique au référencement de celle-ci.

<filter>
  <filter-name>UrlRewriteFilter</filter-name>
  <filter-class>
    org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
  </filter-class>
</filter>
<param-name>logLevel</param-name>
<param-value>DEBUG</param-value>
<!-- pattern des url qui vont etre reecrites -->
<filter-mapping>
  <filter-name>UrlRewriteFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Toutes les url demandées seront filtrées car nous avons utilisé le pattern /* mais nous pourrions aussi utiliser d’autres patterns tels que *.htm, *.html…

Maintenant nous allons écrire notre première règle :

<urlrewrite>
  <rule enabled="true">
   <from>^/([0-9]+)\-([0-9]+)\-([a-z0-9\-\.]+)\.htm$</from>
   <to>index.jsp ?param1=$1&amp;param2=$2</to>
  </rule>
</urlrewrite>

Cette règle transforme une url du type http://www.monsite.com/1234-9876-url-rewriting.htm en une url du type www.monsite.com/index.jsp?param1=1234&param2=9876 qui sera utilisable par la webapp.

Il est bien sûr possible de multiplier les règles selon les besoins de l’application.

Voilà, notre filtre est prêt, nous pouvons désormais utiliser des url du type :

http://www.cestpasdur.com:8080/demo_rewriting/1-2-url-rewriting.htm
http://www.cestpasdur.com:8080/demo_rewriting/12345-098765-url-rewriting-tuckey.htm

Il existe d’autres solutions qui permettent la réécriture des url, par exemple, apache est doté d’un mod_rewrite qui fonctionnant de concert avec un .htaccess permettra d’effectuer les mêmes manipulations d’URL, certainement de manière plus performante, mais peut être, un peu moins dynamique.

24
jan/09
0

Webapp avec maven et JSF

Pourquoi JSF ?

Si je n’avais droit qu’à une phrase pour répondre à cette question, je dirais “Simplifier le développement rapide d’interface riche, tout en facilitant la maintenance”. Et maintenant que je ne suis plus limité à une seule phrase, je dirais :

Système de templating évolué (myFaces),
Rendre une application web riche (R.I.A.) avec RichFaces,
Développement rapide grâce aux composants html fournis (liste extensible)
Application M.V.C
Bien d’autres encore…

Mise en place de la servlet JSF

web.xml

…
<servlet>
 <servlet-name>Faces Servlet</servlet-name>
 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
 <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
 <servlet-name>Faces Servlet</servlet-name>
 <url-pattern>*.htm</url-pattern>
</servlet-mapping>

Dans la plupart des exemples, on peut voir des patterns d’urls du types *.faces, je ne vois pas vraiment l’intérêt de faire connaître à nos visiteurs le type de technologie utilisées. Question sécurité de l’application, mieux vaut en dire le moins possibles, donc, j’ai utilisés *.htm (même si ce n’est pas du contenu statique).

Les dépendances suivantes sont à ajouter dans pom de la webapp (nécessaires pour le bon fonctionnement de la servlet

Pom.xml (webapp)

…
<dependency>
  <groupId>javax.faces</groupId>
  <artifactId>jsf-impl</artifactId>
  <version>1.2_08</version>
</dependency>
<dependency>
  <groupId>javax.faces</groupId>
  <artifactId>jsf-api</artifactId>
  <version>1.2_08</version>
</dependency>
…

Première page JSF helloWorld (index.jsp)

<%@ taglib uri=”http://java.sun.com/jsf/html” prefix=”h” %>
<%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f” %>
<html>
 <head>
  <title>Hello World</title>
 </head>
<body>
 <f:view>
  <h1>Hello world</h1>
 </f:view>
</body>
</html>

Mettre en place une redirection pour la première page

Lorsque l’on tape dans son navigateur http://localhost:8080/seriestv-war/, et si notre première page JSF s’appelle index.jsp, le serveur essaye de nous afficher directement la page index.jsp, ce qui nous envoie au final l’exception java.lang.RuntimeException : Cannot find FacesContext. En gros, il nous manque le contexte JSF, un peu normal, nous ne sommes pas passé par la servlet (pour rappel le filtre est *.htm), mettre le filtre à *.jsp ne fonctionne pas non plus. Nous allons donc ajouter deux choses pour que cela fonctionne :

web.xml

…
<welcome-file-list>
  <welcome-file>default.jsp</welcome-file>
</welcome-file-list>
…

et le code de notre page default.jsp

<jsp:forward page=”index.htm”/>

Afficher la valeur d’un managed bean dans une page JSF

Afin de pouvoir afficher les valeurs des propriétés d’un managed bean dans une page JSF il faut auparavant déclarer celui-ci dans le fichier de configuration JSF (faces-config.xml)

…
<managed-bean>
 <managed-bean-name>serieBean</managed-bean-name>
 <managed-bean-class>com.cestpasdur.seriestv.managedbeans.SerieBean</managed-bean-class>
 <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
…

Ensuite ce managed bean doit être un pojo, donc ces propriétés doivent être accessibles via … des accesseurs.

Vous pouvez ajouter une propriété bidon ainsi que ses accesseurs dans notre managed bean afin de vérifier que notre application JSF fonctionne correctement.

…
private String test="damien";

public String getTest() {
  return test;
}

public void setTest(String test) {
  this.test = test;
…
}

Maintenant que tout est prêt, nous devons maintenant afficher cette propriétés dans notre page JSF :

<h:outputText value="#{serieBean.test}"/>

Pas besoin de redémarrer le serveur, normalement jetty a pris en compte à chaud vos modifications, actualisez la page, ca marche.

C’est ok, sur jetty, mais nous voudrions voir si c’est portable sur un serveur d’application plus usité en production comme jboss

Au démarrage du serveur, nous obtenons l’exception suivante :

java.lang.ClassCastException : com.sun.faces.config.WebConfiguration

Boss inclut déjà dans son classPath sa propre implémentation de JSF, mais jetty lui en a besoin pour fonctionner. Afin que les deux cas fonctionnent, nous allons ajouter un profil, qui nous permettra selon son activation ou non, de faire certaines adaptations. Pour jboss, nous devons juste surcharger le scope qui est a compile par defaut avec les lignes suivantes dans le pom du war :

<profiles>
<!–- profil permettant de surcharger les scopes lors de la création du war pour jboss -–>
<profile>
  <id>jboss</id>
  <dependencies>
   <dependency>
    <groupId>javax.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>1.2_08</version>
    <scope>provided</scope>
   </dependency>
   <dependency>
    <groupId>javax.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>1.2_08</version>
    <scope>provided</scope>
   </dependency>
</dependencies>
</profile>
</profiles>

Afin de l’utiliser, nous allons utiliser la commande suivante :

mvn clean install -Pjboss

Le war passe de 1 Mo à 8 ko, je pense que c’est bon. Si on teste sur jboss, désormais, çà fonctionne…

A ce point je vous encourage à continuer et ajouter une dataTable dans votre page JSF ainsi que les données correspondantes dans le managed bean.

Ajouter le support de richFaces

Ajouter le repository suivant dans le pom parent du projet :

<!–- Needed for RichFaces -–>
<repository>
 <id>jboss.org</id>
 <url>http://repository.jboss.org/maven2/</url>
</repository>

Afin de récupérer les dépendances dont nous avons besoin, nous devons ajouter dans le pom du war :

<!-- dependances richfaces -->
<dependency>
 <groupId>org.richfaces.ui</groupId>
 <artifactId>richfaces-ui</artifactId>
 <version>3.2.0.GA</version>
</dependency>

Afin de nettoyer le classPath et télécharger les dépendances nécessaires :

mvn clean eclipse:eclipse
…
<!-- Filter added for richfaces -->
<filter>
 <display-name>RichFaces Filter</display-name>
 <filter-name>richfaces</filter-name>
 <filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
 <filter-name>richfaces</filter-name>
 <servlet-name>Faces Servlet</servlet-name>
 <dispatcher>REQUEST</dispatcher>
 <dispatcher>FORWARD</dispatcher>
 <dispatcher>INCLUDE</dispatcher>
</filter-mapping>
…

Maintenant afin ajouter dans notre page un composant que je trouve assez sympa sur richfaces, le calendar, nous devons ajouter une taglib à celui-ci :

<%@taglib uri=”http://richfaces.org/rich” prefix=”rich”%>

Et maintenant, afin d’afficher le calendar dans la page JSF, nous ajouterons :

…
<f:view>
…
<rich:calendar></rich:calendar>
…
</f:view>
…

Je vous invite à consulter le 3 ème lien en référence afin de voir la démo de ce que l’on peut faire avec richfaces Accès au code source :

Le code source complet est disponible ici :