Auteur

Abderrazek CHINE

Chef de projet web Java/JEE, expérimenté sur de grands projets norme iso 900x, Abderrazek a découvert le monde Java à la fin des années 90 : JNI (Java Native Interface) et les premières applications JSP. Il a depuis réalisé et dirigé des projets JEE d'envergure (EJB2 et 3, Web Services, Spring  sur Tomcat, JBoss, Weblogic), en particulier chez des éditeurs et des clients institutionnels. Il rejoint Netapsys en octobre 2009 en qualité de chef de projet et intervient pour le compte du Ministère de la Santé.

Fil des billets

Par Abderrazek CHINE, le 04 mars 2010

Le développement logiciel, la confiance, l'arrogance et l'humilité


A la lecture de cet article en anglais, je me suis dit qu'il serait bon de partager l'essentiel avec vous.
Ce n'est pas une traduction mais plutôt une adaptation libre.
De plus, l'intérêt sur la vie des développeurs (nous le sommes tous) est bien évident.

Albert Einstein disait "The more I learn, the more I realize I don’t know" ce qui peut se traduire "Plus ta connaissance est grande, plus ton ignorance l'est aussi".
C'est justement ça la beauté de la science avec un grand S. "I have told you that you have to have a big intent to become a man of Science".

Allons donc à l'essentiel en quelques lignes.

Lire la suite
Par Abderrazek CHINE, le 30 janvier 2010
Catégorie : Java J2EE

JAX-RS web service REST avec Spring (implémentation RestEasy)

L'objet de ce billet: Illustrer avec un exemple assez complet la mise en pratique du web service REST (JAX-RS) s'appuyant sur l'implémentation RestEasy de JBoss avec Spring 2.5.
L'exemple repose sur les briques (api) suivantes. Notez bien la version lorsqu'elle est mentionnée.

  • RestEasy: L'implémentation Jboss de jax-rs (JSR 311),
  • Spring 2.5 et les annotations,
  • Hibernate pour la partie persistence
  • L'api Dozer v4.0 pour les DTO (Data Transfert Objetc) ou VO((Value Object).
  • Junit 4.4,
  • HttpUnit,
  • XMLUnit.


Nota:La version Dozer 4.0 a renommé complètement ses packages. Certains tutos sur le web sont donc caduques.
C'est à la fin de l'étape 5 que nous détaillons l'emploi de l'api Dozer.

Quelques repères:
REST (Representational State Transfer) développé par Roy Fielding qui est l’un des fondateurs du protocol HTTP.
JSR 311 est la spec JAX-RS: Java API for RESTful Web Service. Finalisée en mars 2008.

Les CINQ principes de REST

  • P1: Tout est ressource, un identifiant unique à chaque ressource (http://localhost:8888/clients/2 pointe sur le client ayant id=2),
  • P2: Utiliser les méthodes HTTP (HEAD/GET/POST/PUT/DELETE). Et les erreurs standards HTTP,
  • P3: Les échanges avec plusieurs représentations ( xml,(x)html, json,..),
  • P4: Échanges sans état (stateless),
  • P5: Lier les ressources entre elles.



PRÉ-REQUIS: Java5.

 
Lire la suite
Par Abderrazek CHINE, le 15 janvier 2010
Catégorie : Netapsys

Résolutions pour la nouvelle année


Le jour de mon anniversaire (oui Bénédicte, je l'avais oublié mais je te rassure : ça dure depuis un moment...). Il est 15:15, je me suis appliqué à écrire mes quinze moins quatre résolutions suite à la lecture de la lettre du père noël sur le blog .
Après réflexion, j'ai décidé de les partager avec vous.
Avec ces onze là, on est qualifié au mondial en Afrique du sud :).

Onze ça fait trop, impossible à tenir!
Aïe, ce n'est pas équitable ! Il y en a plus pour les développeurs que pour les CP ! Injuste !
Oui. c'est vrai ! Mais ça ne date pas d'aujourd'hui.

Voici ces résolutions (recommandations) réparties en trois groupes.


 
Lire la suite
Par Abderrazek CHINE, le 06 novembre 2009
Catégorie : Java J2EE

Framework de validation de Spring 2.5+ avec annotations Java 5 [1ère partie : Durée 20min]


En quatre actes, nous allons illustrer la puissance du framework de validation de Spring sans écrire la moindre classe de validation.
En effet, quelques annotations dans vos beans (POJO), trois lignes de configuration et une ligne de code java; et le tour est joué! Le résultat obtenu est impressionnant!
Vos objets sont validés. De plus, la validation est faite côté serveur et client.
Nous détaillerons tout cela sur un exemple intéressant un peu plus loin.
Ma découverte du framework de validation de Spring me fait dire :
Avec Spring, la vie des développeurs (et des chefs de projet) devient un fleuve tranquille de bonnes pratiques même si l'apprentissage, lui, est loin de l'être!

Sans rentrer dans le débat sur la nécessité de valider les objets et du côté client et du côté serveur, ce framework concilie et satisfait les deux avis.


La démonstration qui va être donnée contient deux projets:
- Le premier, projet web Spring MVC avec maven, détaille comment valider, côté client et serveur, nos objets avec les meilleures pratiques.
- Le second, projet java standalone, illustre un certain nombre d'annotations du framework de validation avec peu de lignes de configuration xml.
Et, le tout avec très peu de code java et en recourant aux validateurs prédéfinis de ce framework.
Le résultat est déconcertant!
Ce framework nous épargne des dizaines de lignes de code java (sans parler du temps à consacrer à les tester/déboguer!).
La démo ci-après repose et applique les deux grands principes:

  • Tout est POJO,
  • Séparation des préoccupations.


Passons à la pratique.....
Un seul pré requis nécessaire : connaître le framework de Spring et Spring MVC.


 
Lire la suite
Par Abderrazek CHINE, le 12 octobre 2009

Pratiquer le design-pattern Strategy en 15 min

Dans ce billet, nous poursuivons les notions de design-pattern (motifs de conception).
Après le design-pattern Observer, étudions un autre motif de conception Strategy qui appartient aussi au groupe de comportement.
Ce motif de conception permet de définir plusieurs algorithmes interchangeables dynamiquement.

Encore un motif de conception qui répond à la question : Comment faire simple quand on peut faire compliqué ?
En fait, cela reste simple si on n'oublie pas de le pratiquer tôt. Sinon, ce sont les développements, les tests et les évolutions qui deviennent compliqués.
Mais, la revue de code permet aussi d'éviter de rendre les développements plus compliqués et de tirer profit de la mise en place de ces design.

D'un point de vue théorique, il est facile de l'appréhender. Néanmoins, la mise en pratique (avec le langage Java) de ce design reste un peu moins évidente.

Beaucoup d'entre nous l'ont déjà pratiqué sans, forcément, le savoir.
Un exemple de l'API Java est la méthode Collections.sort ayant deux arguments dont le second est l'algorithme de comparaison pour effectuer le tri.
Ainsi, cette méthode est fournie avec une implémentation par défaut qui convient à bon nombre de types de données avec la possibilité de redéfinir dynamiquement de nouveaux algorithmes de tri.

Notons enfin que dans l'exemple d'illustration ci-après, nous allons comparer deux entreprises déclarées dans des répertoires différents
Et par conséquent, les codes de référence et libellés sont variés et distincts d'un répertoire à un autre.
La comparaison est basée sur un score de pertinence qui est une moyenne de(s) différente(s) note(s) calculée(s).

Un seul pré-requis pour ce billet : connaître la notion de composition en programmation objet.

 
Lire la suite
Par Abderrazek CHINE, le 18 août 2009

Pratiquer le design-pattern Observer en 15 min

Les design-pattern (ou motifs de conception) réalisent le principe de ne pas réinventer la roue en capitalisant les expériences.
En effet, un design-pattern décrit à la fois :

  • Les situations de conception que l'on rencontre trop souvent dans le développement de logiciels
  • Les solutions types (abstraites ou de haut niveau) identifiées pour ces problèmes (formelles ou non, indépendamment des langages objets)
  • Les bénéfices d'utiliser ces solutions dans le développement de logiciels.



Les design-pattern offrent donc une description complète des problèmes répétitifs et les solutions abstraites retenues en expliquant les conséquences à l'usage.
Cette description reste indépendante du langage objet et voire du métier développement de logiciels.
Néanmoins, notons que les design ne sont pas des briques logicielles.
Les design-pattern se divisent en trois groupes: les design de création, de structure et de comportement.
Dans ce billet, nous mettons en pratique le design-pattern "observer" faisant partie du dernier groupe.
L'exemple choisi est volontairement simpliste néanmoins il illustre bien une problématique réelle. L'exemple pratique s'appuie sur les classes/interfaces du package java.util
Le seul pré-requis est une petite dose d'abstraction.

Lire la suite
Par Abderrazek CHINE, le 03 juillet 2009
Catégorie : Java J2EE

Spring : Merger des collections

Ce billet aborde la notion de "merge" (fusion) des collections dans Spring. Cette notion, présente depuis la version Spring 2.0, repose sur l'héritage des définitions des Beans de Spring que nous expliquerons brièvement.
Les exemples donnés sont créés simplement dans un projet java sous eclipse (sans recours à maven).
Un seul pré-requis : connaître la déclaration des collections dans Spring.

Lire la suite
Par Abderrazek CHINE, le 23 juin 2009
Catégorie : Infrastructure

Script Shell : Formater des chaînes à l'intérieur des scripts


Dans le cadre de mes activités, j'ai écrit des scripts Shell ayant pour but de formater des chaînes de caractères à l'intérieur du script, je vous propose de les partager avec vous tout en introduisant des fonctions afin de vous faciliter la prise en main et la réutilisation.
N'étant pas expert du script Shell, tout commentaire est le bienvenu.
Les exemples de scripts donnés ci-après sont testés sous linux et hp-ux.
Le premier exemple étant simple, il prépare le second qui traite du formatage des chaînes. Ceux qui sont pressés peuvent juste jeter un œil sur la seconde partie de ce billet.

Lire la suite
Par Abderrazek CHINE, le 09 juin 2009
Catégorie : Java J2EE

Spring-Quartz : Planifier une tâche batch java en 30 minutes

L'objet de ce billet est de montrer comment planifier une tâche java avec Quartz et Spring et ce en n'ajoutant que quelques lignes de configuration xml.
Ce "QuickStart" introduisant Spring2.5+ et Quartz 1.6.5+ vous permet d'être opérationnel en 30 minutes.
Quartz est un ordonnanceur (scheduler) qui permet de planifier des tâches batch java (Job) à des intervalles spécifiés. Par exemple, réaliser des traitements lourds (génération de rapports, de statistiques) à des heures où les ressources du serveur sont suffisamment disponibles.
Quartz s’intègre assez facilement dans Spring (sauf peut être en mode Cluster, qui ne sera pas traité ici, pour lequel l'apprentissage est important!).
Afin de faciliter la mise en place de notre exemple, nous avons privilégié le mode RAMJobStore (les Jobs Quartz sont chargés en mémoire sans les persister).
Notre exemple est un projet web mais sachez qu'il est encore plus simple de prendre un projet java. Néanmoins le type de projet web est très instructif.
Nous terminerons ce billet en testant le Job exemple avec une classe JUnit4 avec Spring.
Tous les détails de configuration des dépendances Maven, de Spring et celles de Quartz dans Spring seront donnés.
Nous mentionnons, surtout à l'intérieur des codes, les explications utiles pour comprendre l'api Quartz et toutes les indications nécessaires afin d'éviter les quelques pièges de la configuration Spring-Quartz.
Un seul pré-requis nécessaire: connaître le framework Spring. La connaissance de Quartz peut s'acquérir de manière incrémentale.

 
Lire la suite
Par Abderrazek CHINE, le 25 mai 2009
Catégorie : Java J2EE

Spring MVC 2.5+ par l'exemple - Partie I

L'objet de ce billet est d'illustrer progressivement, pas à pas, par un exemple, simple mais pratique, la création d'une application web avec Spring MVC utilisant exclusivement (et abusivement) les annotations de Spring apparues depuis la version 2.5 ( ex. @Controller, @Autowired).
Ce billet s'inscrit dans une série d'articles nous permettant d'introduire Spring WebFlow 2.
Dans cette première partie de la série, nous mettons en place ensemble, pas à pas, l'environnement (Eclipse & Maven) et les dépendances nécessaires. Et nous terminons cette partie par écrire une classe JUnit pour tester le controller Spring MVC (seulement avec les annotations) afin de valider notre configuration et nous lançons le client navigateur afin de tester le déploiement sous jetty.
Nous enchaînons, dans un second billet, par expliciter les couches DAO (à base de jdbc template), service et l'approfondissement du controller Spring MVC qui consomme les méthodes de la couche service.
Pour ce faire, nous présentons progressivement l'exemple qui consiste à rechercher un client par son nom (obligatoire), le prénom(facultatif). Si un ou plusieurs clients existent, on affiche la liste puis lorsqu'un client est sélectionné, on affiche l'écran qui permet d'actualiser ses détails.
Si aucun client ne correspond à la recherche, on affiche un formulaire, pré-rempli, de création de ce client puis à la validation on lui renvoie l'écran de modification des détails.
Cet exemple nous servira pour introduire Spring WebFlow.
Vous pouvez télécharger les sources de la première partie springswf-partie1.

 
Lire la suite