samedi 30 janvier 2010

Le pattern "Stategy"

Selon le site dofactory, le pattern "Strategy" définie une famille d'algorithmes, encapsule chacun d'eux, et les rends inter-changeables. Il laisse l'algorithme varier indépendamment du client qui l'ulitise.
Il se base sur l'utilisation de la composition plus que de l'héritage.

Cet article détaille donc le design pattern Strategy, avec un exemple simple. Comment conserver le principe de "Un objet, une responsabilité" ? Donc, plutôt que de surcharger une classe, pourquoi ne pas utiliser la composition?
Il présente une classe dont le comportement doit évoluer au moment de quitter l'application.

mardi 26 janvier 2010

Les nouveautés de Java EE 6

L'article date du mois dernier, donc il serait temps de se réveiller. Il présente les nouveautés de Java EE 6, à savoir :

- JPA 2.0,
- les EJB 3.1,
- des ajouts d'annotations pour avoir un code plus concis,
- les servlets 3.0 et JSF 2.0.

pour ne citer que cela.
bonne lecture

dimanche 17 janvier 2010

Spring ROO 1.0

Spring Roo est un outil qui permet de générer du code CRUD, ou une application, capable de gérer la création, la modification et la suppression d'une entité. Sa version 1.0.0 est sortie le 31 décembre 2009. Une présentation vidéo est disponible ici.
Ce billet utilise un tutoriel présenté par Spring Source, en y ajoutant quelques remarques.


1. Installation et création d’un projet

Téléchargez la dernière version sur http://www.springsource.com/download/community. C'est un zip; une fois extrait vous obtiendrez l’arborescence suivante :

Ajoutez %INSTALL_DIRECTORY%\bin à votre PATH.

Puis j’ai suivi ce tutoriel : http://blog.springsource.com/2009/05/27/roo-part-2/.

Pour créer un projet, tapez la commande :

project --topLevelPackage

Cette commande initialise un projet avec les conventions maven. Il est quasiment vide, hormis l’applicationContext et le log4j.properties qui sont créés dans src/main/resources/META-INF/spring.

Trois types de persistence sont proposés : ECLIPSELINK, Hibernate et OpenJPA. J’ai choisi d’utiliser Hibernate. Plusieurs type de bases sont supportés MySQL, MSSQL, Oracle, POSTGre, pour ne citer que les plus utilisées.

Dans scr/main/META-INF, le fichier database.properties est créé, vous permettant de spécifier, l’url et les logins/mot de passe de la base à laquelle vous souhaitez vous connecter. Il y a des commandes roo qui vous permettront de modifier ce fichier depuis l’interface, mais vous pourrez très bien le faire à la main.

A cette étape, le pom est déjà très verbeux. Il faudra vous armer de patience si vous voulez le modifier. Pourtant, il se peut que vous en ayez besoin. Par exemple, le projet créé tire des dépendances vers les plugins tomcat et eclipse qui ne vous seront peut être pas utiles.

Autre information, le projet utiliser slf4j, avec le log4 over slf4.

2. Création d’une entité

Et là, je me dis tiens, je ne vais pas être original, je veux pouvoirs gérer des utilisateurs, je vais donc créer une entité User. Je tape donc la commande préconisée :

roo> entity --name ~.bo.User

Première erreur, ce n’est plus --name qu’il faut utiliser mais --class. Ce qui donne :

roo>entity –classe ~.bo.User

Retour à la réalité :

Reserved SQL keyword 'User' is not permitted as simple type name

Grrr ! Bon et bien on va mettre People. Ca passe, on continue.

La classe people a déjà plusieurs attributs, une version et un identifiant. Je choisi donc d’ajouter un simple champ email qui sera non null.

roo> field string email –notNull –sizeMax 30

Après avoir taper cette commande :

roo> test integration

Vous disposez d’une application qui permet de persister un objet et des classes de test correspondantes.

Attention, ROO utilise la programmation orientée aspect. Il peut donc être assez compliqué de faire des modifications si vous ne maitrisez cette technologie.

On peut, par exemple, penser à l’ajout d’un champ. Je pense qu’il sera préférable d’utiliser les commandes roo plutôt que de temps l’ajout manuel. J’ai ajouté des méthodes dans la classe que j’avais créée et le merge est effectué correctement. Je ne perds donc pas mes modifications. J’émettrais toutefois quelques réserves dans des cas plus compliqués que je n’ai pas testé.

Voici la commande que j’ai tapée :

roo> field number age --type java.lang.Integer --class ~.bo.People

On notera l’ajout de --class pour spécifier à quelle classe le champ doit appartenir.

Allé, on va un petit peu plus loin, Roo est capable de générer l’IHM, testons !


3. Génération de l’IHM

J’ai utilisé la commande fournit dans le tutoriel

roo> controller scaffold ~.web.PeopleController

La génération se passe sans souci. J’ai hate!

J’ai utilisé controller scaffold pour ne générer que l’interface de l’objet People, mais en mettant

roo>controller all ~.web

Roo aurait généré les IHM de toutes les entités.

Afin de customiser votre application, vous aurez peut être besoin de savoir à quoi correspondent, les différents dossiers générés. Voici la définition tirée du site de Spring Source :


4. Démarrage

Ensuite, on est presque au bout, alors : mvn clean install.

Puis, démarrez de votre serveur d’application préféré, déployez l’application.

Tada :

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

mince !

J’utilise un jdk 1.5, pas de panique, c’est un bug connu, ouf !

Pour le résoudre, il faut ajouter deux dépendances dans votre pom.xml :

<dependency>

<goupId>javax.xml.bind</groupId>

<artifactId>jaxb-api</artifactId<

<version>2.1</version>

</dependency>

<dependency>

<goupId>com.sun.xml.bind</groupId>

<artifactId>jaxb-impl</artifactId<

<version>2.1.3</version>

</dependency>

Allé c’est reparti, mvn clean install, tout ca, tout ca.

Et là, c’est génial ca marche :


Il y a déjà des contrôles de surface, on clique sur save, et c’est persisté ! Une page est disponible pour lister le contenu de la table People. Et en plus la gestion de la langue est déjà prévue.

Il y a plein de petits trucs, par exemple, si on utilise un attribut de type Date, dans l’ihm il y a aura directement un calendrier de proposé.

5. Les logs

Le tutoriel nous donne la possibilité d’ajouter des loggers dans la partie Web. Il faut savoir que Roo est capable de l’ajouter dans les entités, dans l’AOP, bref, partout en fait !

6. La sécurité

La gestion simple de la sécurité passe aussi par une seule commande.

roo> security setup

Il faut noter qu’elle n’est disponible qu’au moment où vous aurez créé la couche Web. Je n’ai pu l’exécuter qu’une fois.

Je me suis arrêté là dans la lecture du tutoriel, et souhaite bon courage à ceux qui voudront en apprendre d’avantage.

En conclusion, je dirais que Spring Roo est simple à prendre en main, on peut tout à fait créer une application simple en 30 minutes. Mais la maintenance d’une application générée peut être complexe, encore plus quand on ne maitrise pas l’AOP.

Je m’interroge sur :

- Pourquoi un répertoire selenium avec des fichiers test* se trouve dans WEB-INF et sera donc déployé ?

- Aucune CSS n’est présente, il semble pourtant y avoir de la mise en page. L’IHM pourrait donc être à reprendre si vous voulez partir avec la génération d’IHM

- Je m’attendais à avoir des DAOs, c’est en regardant le chapitre sur l’architecture d’une application que j’ai eu la réponse.

- Qu’est ce qui se passe quand on veut créer un projet multimodule ? J’ai bien l’impression que la division doit être ensuite faite à la main, ce qui peut être très contraignant. Je n’ai pas trouvé d’informations sur ce sujet.

mercredi 13 janvier 2010

Des tutoriaux sur Struts 2

Vous voulez tenter l'expérience Struts 2?
Vous avez créer votre petite application Hello world, avec l'archetype maven, grâce à ce lien, car les archetypes maven par défaut ne vous donne pas satisfaction.
Puis, vous voulez en savoir plus. le site javaee trainer offre 17 tutoriaux pour Struts 2. Il semble être enrichie régulièrement, c'est donc une bonne base de départ.

lundi 11 janvier 2010

JPA 2.0 et Spring 3.0

Si vous souhaitez un court exemple utilisant JPA 2.0 avec Spring 3.0, le tout couplé à Maven,
cet article est fait pour vous.
Spring 3.0 est la nouvelle release de Spring sortie cette hiver.
JPA signifie Java Persistence API, c'est l'API Java de persistence de données.

L'exemple donné permet de se connecter à une table d'utilisateurs.

dimanche 10 janvier 2010

Des outils de tests

Et oui, chez vous aussi il neige, alors vous vous demandez ce que vous allez pouvoir faire de votre dimanche.
Ne cherchez plus!
Vous allez tester les applications, que vous développez chez vous, avec les outils qui sont décrits ici.
Plus de 50 outils Open Source vous permettant de faire des tests de charge, des tests d'endurance, bref d'y passer votre après-midi.
Amusez vous et proposez nous vos retours d'expérience.

Spring AOP - deuxième référence

Il y a deux, trois semaines, je postais un article de qui présentait Spring AOP.
Celui d'aujourd'hui vient enrichir les références vers cette technologie.
En premier lieu, je souhaitais comprendre quoi utiliser entre AspectJ et Spring AOP.
Ils peuvent se compléter, mais aussi s'opposer, et dans l'article suivant vous trouverez un début de piste pour vous aider à faire votre choix.

Vous avez choisi d'utiliser Spring AOP et le tutoriel prenant l'exemple des loggers vous a convaincu mais vous en voulez plus ?
Il y a un chapitre entier sur le site de Spring Source.
Lorsque vous en aurez fini avec la théorie, vous pourrez apprendre à vérifier l'état d'un objet avant de sauvegarder ses modifications.
En dernier lieu, un exemple plus complexe permettra de vous exercer à appliquer des services de sécurité lorsqu'un utilisateur se loggue.

lundi 4 janvier 2010

Une liste de livres gratuits sur GWT

Vous connaissez peu GWT, le Google Web Toolkit, et vous souhaitez vous y mettre.
Le site bookuter fournit quantité de livres gratuits, vous pourrez par exemple, en trouver une bonne vingtaine sur ce sujet.
Même si ce site à l'air récent vu le nombre d'ebooks disponibles, n'hésitez pas à fouiller vous trouverez surement des documents intéressants.