lundi 22 novembre 2010

DAO ou pas DAO ?

Le débat fait fureur dans les JUGs et autres endroits à la mode : est-ce que le pattern DAO est utile ou est-ce de la pollutions ? Le débat s'inscrit dans une tendance de simplification des architectures, à base de JavaEE 6, de Spring, de Play ! et de tous ces frameworks qui nous font dire que "non, ma petite dame, ce n'était pas mieux avant".

Pour comprendre les arguments des deux parties, revenons quelques années en arrière.

mercredi 27 octobre 2010

Devoxx Schedule dans Google Calendar

Les organisateurs de la conférence Devoxx 2010 ont mis à disposition le planning par une interface REST. Plusieurs clients ont été développés, en particulier pour des mobiles. A titre personnel, je n'ai ni iPhone ni Android, le plus pratique était donc d'avoir le planning complet dans Google Calendar. J'ai donc décidé de développer un petit programme, en ligne de commande qui lit le planning via l'API REST et qui génère un agenda Google.

lundi 11 octobre 2010

Environnement de développement JavaEE 6

J'ai voulu m'installer un environnement de développement JavaEE 6 virtuel. Une fois n'est pas coutume, j'ai utilisé beaucoup de produits Open Source d'Oracle dans cet environnement. J'en profite tant qu'on peut encore associer Oracle à Open Source, et j'espère qu'on pourra encore longtemps le faire. Mais ceci n'est pas le sujet de ce billet. Je voulais plutôt présenter le processus d'installation.

Voici donc de quoi est constitué mon environnement :

dimanche 10 octobre 2010

Tutoriel JSF, Spring et Hibernate

Mise en garde : ce tutoriel a été enregistré en 2008, beaucoup de choses ont changé depuis ; utilisez des version plus récentes des logiciels, APIs et librairies.

En rangeant mes affaires, je suis retombé sur une vidéo que j'avais enregistrée en 2008 pour le magazine "Linux Developer Journal". Ce numéro du magazine avait donné une part importante à Java, puisque Noël Perez y avait écrit un article et Antonio Goncalves y avait fait un edito. Tout ceci n'a pas vraiment porté chance au magazine puisque c'était le dernier numéro qui a été publié.

Cette vidéo est un tutoriel sur le développement Java avec JSF, Spring et Hibernate.


Tutoriel JSF, Spring et Hibernate from Alexis Hassler on Vimeo.

Le contenu associé à cette vidéo est disponible :
  • Les quelques slides qui me servent de fil conducteur sont sur slideshare.
  • Le script de création de la base de données peut être téléchargé.
  • Le code source de l'application peut être récupéré sur GitHub. Ce repository n'est pas exactement le résultat du tutoriel, mais une version mavenisée.
Si vous avez des problèmes de mise en oeuvre, postez une question sur le forum developpez.net et faites-moi signe par message privé. J'essaierai de répondre, mais c'est sans garantie.

vendredi 20 août 2010

VirtualBox 64bits sous MacOS X

Je suis totalement débutant avec MacOS, je découvre donc les détails de son fonctionnement au fur et à mesure... Je pensais avoir compris que la version 10.6 (Snow Leopard) fonctionnait en 64 bits. C'est donc avec beaucoup de confiance que j'ai commencé à installer un Window 7 64 bits dans une machine virtuelle VirtualBox. Et là j'ai eu une grosse désillusion : ma machine virtuelle ne supporterait pas les 64 bits...

mardi 10 août 2010

Premiers pas avec Git et GitHub

C'est l'été, l'activité baisse un peu, c'est donc l'occasion pour moi de démarrer un nouveau projet que j'avais en tête depuis quelques temps. J'aurai l'occasion de présenté le projet quand il aura un peu avancé. Comme je démarre d'une page blanche, j'ai la chance de pouvoir choisir complètement mon environnement de développement. J'ai donc choisi d'utiliser IDEA, pour lequel j'ai une licence grâce au LyonJUG, ainsi que Maven. La vrai nouveauté pour moi, c'est l'utilisation de Git.

vendredi 30 avril 2010

Déploiement de Silverpeas sur JOnAS

Voici la présentation que j'ai donnée pour OOsphère, en avril 2010, au sujet du déploiement de Silverpeas sur JOnAS et sous JBoss 5.

jeudi 8 avril 2010

SLF4J et JCL sous Jonas 5

Lors du déploiement d'une application JavaEE, la configuration des logs est un passage obligé. La principale contrainte vient du fait qu'au déploiement, on subit le choix des développeurs : Log4J, jakarta commons-logging (ou JCL), SLF4J ou d'autres encore que je m'abstiendrai de citer ici.

SLF4J associé à LogBack est probablement ce qui se fait de mieux aujourd'hui. Il propose d'ailleurs des mécanismes d'interopérabilité avec les autres APIs de Log. Par exemple, dans la dernière application que j'ai déployée, tous les logs envoyés à JCL sont interceptés par SLF4J grâce à la librairie jcl-over-slf4j.jar. A l'inverse, Jonas 5.1 renvoie tous les logs de SLF4J vers JCL.

jeudi 1 avril 2010

Tests unitaires pour Google App Engine

Les tests unitaires des applications GAE posent les problèmes classiques des applications déployées dans des conteneurs : peut-on tester les classes hors de son contexte cible, peut-on simuler le conteneur, ou faut-il déployer l'application pour la tester ?
La première solution est celle qui s'approche le plus de l'unicité du test, il doit donc être privilégié autant que possible, c'est la technique qui est utilisée pour les POJOs sans contexte d'exécution. En revanche, c'est tout à fait impossible si notre classe a besoin d'une API fournie par le conteneur ou, pire encore, hérite d'une classe ou implémente une interface fournie par celui-ci. Ces cas sont classiques en JavaEE. Dans ce domaine, la tendance a été de remplacer le conteneur par des objets mock ou fake.
Nous allons étudier ce qui est proposé par Google pour son App Engine.

mercredi 31 mars 2010

JRebel avec OpenJDK et Grizzly

Grâce au ParisJUG,j'ai pu obtenir une licence JRebel. JRebel est censé faire gagner du temps aux développeurs en leur évitant de redémarrer leur application ou serveur d'applications après chaque changement. Selon le serveur d'applications, le redéploiement à chaud peut répondre partiellement à ce besoin, mais JRebel semble aller plus loin, en rechargeant les classes au niveau de la JVM.

Dans un projet récent, j'ai eu à travailler avec Grizzly, OpenJDK et Jersey pour développer des services RESTful, et j'ai compris l'intérêt que pouvait avoir ce type d'outil car, en phase d'évaluation de la plateforme, je fais beaucoup de petites modifications dont je veux voir immédiatement l'effet. Si redémarrer Grizzly est très rapide, cela demande des clics à des endroits différents dans l'IDE, Eclipse en l'occurrence. J'ai donc décider d'inclure JRebel dans cet environnement.

lundi 15 février 2010

Silverpeas sur JBoss 5

Dans mon billet précédent, j'avais installé Silverpeas v5 dans JBoss 4, sur une machine Debian 5. Je vais maintenant m'attaquer à l'installation de Silverpeas v5 dans JBoss 5, sur la même machine. Ce n'est toujours pas mon but ultime, mais comme je connais bien ce serveur d'applications, je continue ainsi à me faire la main. Tout d'abord, je dois noter que je n'ai aucune garantie de réussite et que je devrai probablement faire des modifications à la configuration de Silverpeas pour l'adapter aux contraintes de cette version de JBoss.

Comme il n'y a pas de procédure prévue pour installer Silverpeas sur JBoss 5, je vais partir de mon installation sur JBoss 4, je vais récupérer les éléments (datasource, JMS, ear) et les modifier pour les adapter à JBoss 5.

jeudi 11 février 2010

Installation de Silverpeas

Pour aujourd'hui, je me lance dans une installation de Silverpeas v5, la première version libre. Je pars sur une installation standard, c'est à dire avec JBoss 4.0, le serveur d'application préconisé. Celui-ci est un peu vieillot, mais si ça fonctionne, ce sera un bon début. J'essaierai plus tard sur un JBoss plus récent et/ou un Jonas.

J'ai déroulé la procédure d'installation du début à la fin, sur une machine virtuelle vierge, sous Linux. J'ai utilisé une version de Silverpeas qui n'est pas finalisée, ce qui peut se ressentir à certaines étapes.

Script de création de machine virutelle VirtualBox

J'utilise régulièrement des machines virtuelles pour évaluer des produits ou pour élaborer des procédures d'installation. Ce procédé a plein d'avantages, comme pouvoir transférer le résultat sur d'autres machines, repartir facilement d'un environnement vierge ou ne pas polluer mon environnement de travail.

J'utilise un nombre restreint de configurations types. Par exemple, pour toutes les installations de type serveur (JBoss, Glassfish, Hudson CI,...), j'ai configuré une Debian avec Java, MySQL et quelques autres logiciels. Chaque fois que j'en ai besoin, je fais une copie de l'environnement étalon et je travaille sur cette copie.

Le principal défaut de cette procédure est que la duplication de disque virtuel est facile à réaliser, mais pas la duplication de la configuration. J'ai donc décidé de faire un script shell pour automatiser la création de nouvelles machines virtuelles à partir du disque étalon.

mardi 9 février 2010

Persistance dans Google App Engine : JDO, JPA ou ... ?

Le moteur de persistance de Google App Engine va m'obliger à sortir des sentiers battus. En effet, comme beaucoup de jeunes développeur de ma génération, j'ai toujours stocké mes données dans des bases relationnelles. Or Google nous fournit un stockage de nature NoSQL appelé BigTable. Cette technique est propriétaire et a été développée par Google pour le moteur de recherche et Google Earth. Au sein du projet Apache Hadoop!, une équipe a repris les spécifications publiées par Google pour créer un moteur similaire appelé Hbase!. Par conséquent, dans mon projet, il n'y aura pas de SQL, pas de JDBC, pas de Foreign Key,...
Google nous fournit une API de bas niveau pour accéder à ce stockage, et, pour nous simplifier la tâche, il nous propose aussi les APIs classiques JDO et JPA. Naturellement, je serais tenté d'utiliser JPA car je l'utilise régulièrement pour des projets en architecture plus traditionnelle. Il semble par contre que JDO est mieux supporté. Il apparait clairement que le choix n'est pas évident.

lundi 8 février 2010

Environnement de développement pour GAE

Avant de commencer le projet, il faut que je constitue un environnement de développement. Même si, pour l'instant, je n'ai pas besoin d'un environnement complet, avec outils de suivi de qualité ou intégration continue, il faut au moins que j'évalue les capacités des outils de développement, en me concentrant sur Netbeans et Eclipse, avec ou sans Maven ou Ant.

Il est possible de développer avec des outils rudimentaires : un JDK 5 ou 6, le SDK et un éditeur de texte. J'ai fait quelques essais dont j'ai rendu compte sur JTips. Ces essais m'ont juste servi à comprendre le fonctionnement du SDK avant d'étudier l'intégration avec les environnements de développement.

samedi 30 janvier 2010

Mon projet GAE

Bon, il est temps que je démarre mon nouveau projet : je dois développer une application pour gérer l'activité de formation de mon entreprise. Actuellement, le catalogue de formations est géré en ligne, avec une application développée en PHP avec SPIP. Cela a donné satisfaction pendant un temps, car l'objectif était surtout d'alimenter le site Web. Aujourd'hui, on se rend compte que ce mode de gestion est lourd car SPIP ne permet pas une structuration suffisante de l'information. Lorsque Google a annoncé son offre App Engine, je me suis dit que cela pourrait être intéressant : la gestion et la publication du catalogue ne sont pas des applications très gourmandes, on devrait donc rester en deçà des quotas, les données ne sont pas particulièrement confidentielle, et Java est le langage que je pratique depuis une bonne dizaine d'années. Donc, c'est parti...

Dans un premier temps, je vais devoir étudier un peu cette plate-forme GAE, et toutes les contraintes qui lui sont inhérentes. En vrac, les points que je vais devoir étudier sont :
  • Quel environnement de développement ? Ce sera probablement du Maven, avec Netbeans, sur des postes Ubuntu.
  • Quelle architecture et quels frameworks ? Je pense mettre un peu de Spring 3. Pour la couche présentation, Spring MVC tient la corde, mais sans plus. Pour la persistance, la question est encore plus ouverte car les spécificités de GAE sont importantes. Je vais d'ailleurs me pencher sur ce dernier point en priorité.
  • Quels autres librairies ? Si je mettais un peu de validation, avec Hibernate Validator ou Bean Validation ? Comment faire pour les fiches PDF ? Quels outils pour la recherche, Google ou Hibernate Search (ah non, celui-ci ne fonctionne pas sous GAE) ?
  • Comment tester ? Il va falloir que j'étudie les contraintes du framework GAE sur les tests unitaires. Pour les autres tests, on verra plus tard.
  • Comment faire la migration des données ? J'utiliserai probablement du REST pour transférer les données actuelles vers le nouveau stockage.
  • Comment gérer l'authentification ? Dois-je utiliser le système intégré ou Spring Security ?
Je crois que je dois oublier encore un ou deux points. Mais rien que pour ceux-ci, j'ai du pain sur la planche. Sachant que je vais faire ce travail dans les trous du planning, j'ai du mal à me fixer un objectif au niveau de la date. On verra bien...

Bon assez papoté , on y va...

vendredi 29 janvier 2010

Démarrage du blog

Je n'avais pas de blog. Il m'en fallait un sous peine d'être ridicule. Si vous n'êtes pas convaincu par mes motivations, je vais essayer de tourner cela autrement. C'est vrai que j'ai déjà des espaces pour m'exprimer :
  • un wiki dans lequel je consigne mes notes techniques sur Java, avec Olivier Hanny,
  • le site de Sewatech, ma société, sur lequel j'ai publié quelques articles,
  • le site du LyonJUG, sur lequel je réagis aux présentations auxquelles j'ai assistées.
Dans ces  conditions, quel est l'intérêt d'ouvrir ce blog ? Et bien tout simplement parce que le blog personnel est un espace d'expression différent. Il est plus approprié pour émettre un avis subjectif que le wiki et il n'implique que moi, à titre personnel, indépendamment de Sewatech et du JUG.

Si tout va bien, je devrais travailler sur un projet GAE ; je pense utiliser ce blog pour y consigner mes réactions et mes trouvailles. Une partie de l'information se retrouvera probablement aussi sur JTips, plus tard, et sous forme plus synthétique.