Graine de kawa.

Java et les autres technologies de développement WEB !

DEVOXX

Filed under: conférence | Tags: | novembre 16th, 2011

Je crois bien que l’année prochaine c’est la bonne pour aller à DEVOXX :

Ne laissez pas aux internautes le pouvoir de détruire votre marque.

GreenIvory (ma boite ;-)  sort VoiceObserver en version Do It Yourself. J’ai participé au développement du produit, je me suis occupé de mettre en place Facebook connecte (avec GWT).

Le produit est vraiment bien, mais c’est un peu subjectif.

Pour le voir par vous même ou simplement pour en savoir plus, allez sur :

Amusez-vous bien !

Les APIs sur le « Server side » ne sont pas évidentes à définir. J’étais partie sur du JPA pour la persistance et Guice comme framework d’injection de dépendance (vous savez le fameux @Inject), ça me paraissait assez judicieux.

Sauf que je dois faire des compromis. JDO est mieux adapté à GAE. Guice n’est pas totalement supporté sur GAE et pour Spring je n’ai pas encore vraiment chercher les infos.

Donc je prend le postula de partir sur du DAO classique (Interface/classe Implémentation). Pour l’injection de dépendance on verra plus tard. Il y a une solution détourné avec Guice : importer les sources, modifier le try/catch d’une exception et l’embarquer.

Jour 2 : de la théorie à Go Go !

LAZY LOADING et FETCH

Jour 3 : Encore de la théorie : Le cache

A utiliser avec parcimonie, mais peut être utile quand on a déjà une application qui tourne. Alors il faut l’utiliser pour optimiser l’application après, longtemps après la 1ére mep ! voir ici

Formation Hibernate – Jour 1

Filed under: Hibernate | Tags: , | avril 19th, 2010

8h15 : je ne connait pas l’heure à laquelle la formation commence. J’entre dans la salle pour y trouver le formateur, seul, avec 4 PCs à configurer à lui tout seul. Il me dit que la formation est à 9h00. Mais il ne refuse pas mon aide pour brancher et démarrer les postes ;-) !

Hibernate et le Mapping Objet/Relationnel

Olivier Hanny, notre formateur, nous a fait le 1/3 du tour de la question ;) :

  • Qu’est-ce que la persistance ? Définitions de l’ORM…
  • Granularité Objet = Class (Table, idem select *) <> Granularité BDD = Column
  • Alternatives à Hibernates : JPA (Spécification dont Toplink est l’implémentation de référence, Hibernate en est aussi), JDO,  etc.

Puis il est rentré dans le détail de la configuration : hibernate.cfg.xml, … avec des TPs à la clé !

Pour conclure, dans l’après midi, sur des notions théoriques de modélisation/configuration (Objets vs Tables : one-to-many, many-to-one, one-to-one et tout ça en uni et/ou bidirectionnelle)

Bref, une journée théorique, mais aussi pratique. Le matin je me suis bien débrouillé en TP mais l’après-midi, il est vrai, que j’ai un peu trainé la patte. Beaucoup de notions pour un lundi, mais dans l’ensemble c’est très enrichissant et surtout utile !

J’ai hâte d’être à demain pour comprendre un peu mieux cette histoire du : « quand tu mets un LOG ça marche et quand tu l’enlèves, ça plante…;-) ». Il nous a donné une explication rapide (non-initialisation des objets détecté par Hibernate) mais je ne crois pas avoir tout compris…

Si vous voulez en savoir plus sur le contenu de la formation, cliquez-ici ! La formation est organisé par la société Orsys, et je trouve les supports de formation tout simplement géniaux.

Google vient d’annoncer une nouvelle version de sont GAE SDK (1.3.2), nouvelle méthode et accroissement de capacité pour les éléments suivant :
- Blobstore API
- URLFetch API
- Mail API
- Task Queue API

cloud

Gestion de stock de littérature…

Comme pour le site de mon association, un ami me demande de réfléchir à une solution de gestion de stock de livre, mais cette fois-ci pour son association.

J’ai plein d’idées !  Voici les technologies que je voudrais tester : Google App Engine (Java), GWT ou GXT, Play!Framework, Vaadin, … il y’a tellement de chose bien à faire avec ces différentes technos, pour la partie front-office…

Ensuite je pensai utiliser le JPA de base (celui fournit par Google App Engine) pour ce qui est du mapping objet / BigTable, ou Siena (persistance à la python), Spring comme conteneur léger…

Et PDFJet pour la sauvegarde des rapports dans un format pdf, seul outil entièrement supporté par GAE pour la création de PDF, pour le moment ;-) !

Enfin tout ça reste quand même à étudier. Je dois d’abord établir un petit modèle de donnée léger et qui colle bien avec la solution de stockage de chez Google.

Ensuite je ferais le trie des frameworks, outils et autres machins bien sympa a connaître ! De quoi avoir une petite expérience sur ces sujets. Et surtout faire du dév, concevoir, créer, rêver, refaire le monde quoi !

Tout en répondant au besoin, bien sûr :-| !!!

Je ferais peut-être un petit tour au niveau des langages dynamiques supportés par la JVM : Groovy (avec Gaelic), Scala, et autre ? Histoire de faire du zèle…

Après il faut voir les performances de tout cet ensemble de super nouvelles technologies ?!

Je vous détaillerai mes choix au fur et a mesure de mes recherches et de la réalisation.

_____________

* GWT :  Google Web Toolkit, IHM écrit en Java, traduit en Javascript et compréhensible quasiment par tous les fureteurs (browser, exit IE5 et 6)

* GXT : GWT + ExtJS, la super librairie js

* Play!Framework : enfin le framework Java purement orienté Web, full-stack et qui ne « hack » pas les protocoles déjà bien établis : HTTP ;-)


Google améliore son datastore (curseur, résultat de requête > 1000 lignes, etc.) et fournit un outil de test dans sa dernière release (1.3.1) pour son offre de cloud « gratuite » nommé Google App Engine pour les langages Python et Java !

app-engine-patchJ’attends les retours d’expérience de la part de la communauté app-engine-patch avant de l’intégrer dans mon projet de site associatif. Il faut jouer la carte de la sagesse dans ces cas là, Wait & See !

Pour plus d’information :

http://googleappengine.blogspot.com/2010/02/app-engine-sdk-131-including-major.html

http://blog.xebia.fr/2010/02/15/revue-de-presse-xebia-147/#GoogleAppEngineSDKAmliorations

Maven 2 au ChtiJUG et dans Lescastcodeurs !

Filed under: Maven | Tags: , | février 12th, 2010

maven« On ne présente plus Maven ! »

Et pourtant, je m’aperçois que beaucoup (moi y compris) ont du mal avec ce super outil !!

Maven est un outil de build né de l’expérience acquise sur le marché des outils de build comme Makefile, Ant etc. Il en reprend les fonctionnalités principales en y ajoutant d’autres presque indispensables : test automatique, génération de rapport et j’en passe et des meilleurs.

En juin 2009, Arnaud Héritier (commiter chez Apache Maven) est venu nous présenter le projet Maven 2 au ch’ti JUG. Je souhaite vous faire part de ce que j’en ai retenu. Histoire de rallier quelques développeurs Java à la communauté utilisatrice de l’outil.

D’abord pourquoi Maven ?

  • Éviter les reconstructions manuelles
  • Automatiser le maximum
  • Standard de la chaîne de construction
  • Gestion des dépendances (librairies, API, dependencyManagement, scope import)
  • Découplage en différent module
  • Maven n’est pas seulement un outil de construction, et pas seulement le remplaçant de Ant

Et pourquoi pas Ant ?

  • Script trop long (grande taille de fichier) et trop complexe
  • Faiblesse du point de vu de la maintenance
  • Problème de lecture du à l’import d’autre script

Pourquoi l’utiliser en entreprise ?

  • Standard de fait !
  • Rationalisation du coût de construction
  • Facilité de l’intégration continue
  • Utilisation des fonctions de qualité de code
  • Automatisation du processus de release (passage de tests, construction du WAR)
  • Partager le paramétrage : juste descriptif, logique d’héritage avec le Pom parent

Mise en place de Maven :

  • KISS : Keep It Simple, Stupid !
  • Partir de rien !
  • Éviter la « sur architecture » !
  • Créer des référentiels (proxy) pour sécurisez : gestionnaire de proxy, pour éviter le problème réseaux lors de téléchargement de nouvelle librairies par les équipes de développement
  • Utiliser Sonatype Nexus ou Frog Artefact (ou Apache Archiva) pour gérer le proxy
  • Industrialiser au maximum
  • Utiliser les plugins pour modifier le comportement de maven, oser créer des plugins
  • Partager les modèles entres les équipes
  • Utiliser les tests, et le reporting :
    • JUnit, TestNG – tests unitaires
    • Selenium, Cannoo – tests d’IHM
    • Fitnesse, Greenpepper – tests fonctionnels
    • SOAUI – Tests des webservices
  • Démarche de qualité :
    • Checkstyle – Uniformisation du code (Attention au différence entre règles IDE et règles Maven)
    • PMD, Findbug, Clirr – Déceler les mauvaises pratiques
    • Cobertura, Clover – Couverture de code par les tests
  • Deux visions de démarche de qualité :
    • Le contrôle : la construction ne passe pas si certain critère ne sont pas atteints
    • Le reporting : site web ou serveur dédié, Exemple : Sonar ; ne casse pas le build par des contraintes

Les serveurs d’intégration continue :

  • But : prévenir les bogues, améliore le cycle de développement en réduisant les corrections en phase de robustesse
  • Intégration, test, contrôle de qualité
  • Lancement de la construction à chaque commit possible ou paramétré avec un délai
  • Les logiciels :
    • Hudson : coder à la base pour le projet Glassfish, très en vogue et très intuitif, facile à mettre en œuvre. Pour le tester en local : java –jar hudson.war (déployer sur http://localhost:8080/)
    • Bamboo : payant
    • Teamcity de Jetbrain, « build incassable »
    • Continuum : Apache, vieux produit pas très conviviale mais bien intégrer avec maven
    • CruiseControl : vieux produit !

Comment planter son projet avec Maven ?

  • En n’utilisant pas les conventions de Maven 2 (target, héritage, répertoires src…)
  • En ayant trop de sous modules avec des version différentes (naissance de nouveaux projets involontairement)
  • En ayant trop de modules dans le même projet : pénalise la performance
  • En confondant dependencies et dependencyManagement
  • En confondant plugins et pluginManagement
  • En utilisant massivement antrun : empêche la réutilisation
  • En utilisant à outrance les profils : rend dépendant de l’environnement
  • En utilisant trop le reporting de qualité sur des projets déjà existant
  • En mettant tout et n’importe quoi dans le POM
  • En faisant des releases à la main

Comment réussir son projet avec Maven ?

  • Utiliser l’héritage « naturel »
  • Bien définir les dépendances, être minimaliste !
  • Fixer les dépendances dans le dependencyManagement
  • On peut utiliser aussi le plugin reactor pour ne compiler que ce qui as été modifié

Les concurrents de Maven :

  • ANT + IVY
  • Easy Ant
  • Gant
  • Gaddle

Remarque : ils utilisent tous une logique de scripting (la souplesse au prix du sacrifice de la standardisation).

Maven 2.1.0 et après :

  • Sortie de Maven 2.2 : prochainement, avant ou pendant l’été (Java 5 obligatoire pour l’exécution de Maven)
  • Maven 3 en cours de développement (Non, ne fuit pas !) :
    • (car) Compatibilité ~ 100 % avec Maven 2
    • Correction de l’écueil : encapsulation au IDE (Eclipse en particulier)
    • Cycle de vie prédictible
    • Refonte de la gestion des Artifacts (Mercury)
    • Gestion http / WebDav
    • Abstraction du descripteur de projet
    • Migration du framework d’injection de dépendance Plexus vers Guice (de Google, se prononce « Juice »), ou XBeans (XBR ?)

La documentation :

Ne pas hésiter à créer s’est propre plugin Maven :

Connaissance général sur Maven :

  • POM : Project Object Model
  • Phase principales dans le cycle de vie de Maven = compile, test, package, install, deploy
  • Convention de répertoire (source wikipedia) :
    • /src : les sources du projet
    • /src/main : code source et fichiers source principaux
    • /src/main/java : code source
    • /src/main/resources : fichiers de ressources (images, fichiers annexes..)
    • /src/test : fichiers de test
    • /src/test/java : code source de test
    • /src/test/resources : fichiers de ressources de test
    • /src/site : informations sur le projet et/ou les rapports générés suite aux traitements effectués
    • /src/webapp : webapp du projet
    • /target : fichiers résultat, les binaires (du code et des tests), les packages générés et les résultats des tests

Personnellement j’utilise Maven 2 dans ma société et j’en suis très content, les deux seul soucis que je peut reproché à l’outil c’est qu’il est long à exécution et que le pom.xml peut devenir vite très complexe.

NEWS !

  • Un livre en français vient de sortir sur le sujet chez Pearson : Apache Maven.
  • Arnaud H.  dans lescastcodeurs nous parle de Maven dans la rubrique « Les mains dans le cambouis » .

Trésorier adjoint d’une association qui n’est pas encore présente sur le WEB, je suis amené à créer leur site. L’idée est de construire une vitrine, avec comme services : la newsletter, l’agenda, la prise de contact, etc. Un grand classique dans le monde du Web me direz-vous.

J’ai étudier la question et les différentes possibilitées :

  • CMS ou un moteur de blog parait être une solution adapter à ce genre de problème : Joomla, Drupal, WordPress ou Dotclear.
  • Le développement maison, tout à la main comme un codeur fou ! :)

J’ai opté pour la deuxième solution. Malgré la lenteur de réalisation , elle donne plus de souplesse. Et en plus elle me permet de découvrir un nouveau langage et des nouvelles technologies : ça c’est cool !

Mon choix  s’est porté sur Google App Engine (offre « gratuite » de cloud par Google) pour l’hébergement et Django pour le framework Web (Python) avec un projet « Patch » qui permettait d’associer les deux : app-engine-patch.