dimanche 14 juin 2009

Sortie de Pojo Maker

Je viens de publier la première mouture de Pojo Maker, mon second projet SourceForge. Ce petit utilitaire permet de créer des objets java avec une simple ligne de commande. Pour l'utiliser, c'est assez simple. Il suffit de mettre quelques paramètres à la ligne de commande et les objets sont créés selon la structure de répertoire du package configuré. Par exemple:

pojomaker --package-name=net.sf.projet.entities --connection=jdbc:derby:dossier_bd

Créera la structure de dossier suivante dans le répertoire en cours: net/sf/project/entities. Les fichiers de classes seront enregistrés dans ce dossier et auront comme nom de package net.sf.project.entities (je crois que c'était évident).

L'application offre quelques fonctionnalités intéressantes. Entre autre, les colonnes en lecture seules se voient créées avec un mutateur protected, ce qui empêche qu'on ne modifie une colonne auto incrémentée lors de l'exécution. De plus, si une colonne de type varchar est détectée, une verification sera faite au moment de l'exécution pour savoir si on dépasse la capacité du champs de base de données et une constante est créée pour indiquer la taille maximale du champs. Quand un dépassement est détecté, selon le paramètre saisi à la ligne de commande, un avertissement est envoyé à la console de débogage, une exception est lancée ou le dépassement de capacité n'est pas vérifié, selon le cas.

J'ai fait ce programme dans l'esprit de Bridge to Babylone, mon premier projet SourceForge. Je prévoir que les deux projets seront parfaitement alignés d'ici quelques semaines.

mercredi 11 février 2009

SerialVersionUID

Qu'arrive-t-il quad on implémente l'interface Serializable en Java? Qu'arrive-t-il quad un étend une classe qui elle-meme implément Serializable? C'est simple, si on ne fait pas attention, le compilateur nous rappelera sans cesse d'ajouter un champs serialVersionUID avec ce doux message:
The serializable class MaClasse does not declare a static final serialVersionUID field of type long
Il y a deux façon que je connaisse de se débarrasser du message en question. Soit on ajoute l'annoation @SupressWarnings("serial") ou encore on obéit et on met en place le champs demandé.

Dans la documentation de l'API de Java, on recommande au programmeur de déclarer ce champs de façon privée. Si ce champs n'est pas déclaré, le compilateur se chargera d'en générer un d'office. Ce numéro peut varier d'un compilateur à l'autre ou suite à une modification mineur de la classe qui ne touche pas ses champs internes. Ce changement causera alors une exception si on tente de désérialiser un objet qui avait été sauvegardé avec une compilation précédente. On désire évidemment éviter cette situation. Voilà pourquoi il vaut mieux que le programmeur contrôle ce champs et modifie sa valeur quand c'est vraiment nécessaire.

Suite à quelques recherches, j'ai remarqué deux écoles de pensées. La première consiste à commencer la numérotation à 1 et avancer selon les besoins et selon les classes. J'ai rencontré cet situation dans plusieurs exemples sur le Web. Alors que si on regarde dans les source de Sun, la valeur est immense :

public final class Copies extends IntegerSyntax
implements PrintRequestAttribute, PrintJobAttribute {

private static final long serialVersionUID = -6426631521680023833L;
...
}

La seule explication possible c'est que ce numéro est généré aléatoirement et est unique pour chaque classe ou version de classe. Je me suis creusé la tête un moment pour arriver à ce genre de numéro. Je me suis même fait un programme pour le faire à ma place. Jusqu'à ce que e trouve un site extraordinaire: www.random.org. Ce site offre un service de génération de nombre aléatoire basé sur un principe physique appelé bruit atmosphérique. Pour les besoins de ma cause, le fait que ce générateur soit de classe cryptographique n'était pas son plus grand avantage. Son service me permettrait de créer une page web qui générerait des numéro de série automatiquement. Il ne me restait plus qu'à copier-coller la ligne ainsi générée dans mes classes sérializable.

Je partage donc ma trouvaille avec vous. C'est à la fois un petit utilitaire pour Java et ma première expérience Ajax. N'hésitez pas à faire vos commentaires.

Générateur de serialVersionUID



mardi 20 janvier 2009

Patterns and Practices

Je viens d'un monde Microsoft... J'ai travaillé pendait cinq ans sur la plateforme .Net et je dois avouer que le C# me va comme un gant. Cependant, j'ai toujours caressé l'idée de planter mes crocs dans le Java. En 2007 j'ai eu la chance de me faire offrir un emploi dans cet univers, avec une bonne augmentation de salaire en prime. J'ai fait le saut.

Afin de rentabiliser l'investissement de mon nouvel employeur, je me suis afféré à parcourir le web à la recherche de l'équivalent des "Patterns and Practices" de Microsoft, une espèce de "Sun Microsystem Enterprise Library". Je n'ai pas trouvé un équivalent mais bien des équivalents, des tas de librairies éparses et différentes. En gros, j'ai découvert que :
  1. le monde Java est gigantesque;
  2. le monde Java est éparse et peu cohérent;
  3. la majorité des bonne librairies actuellement disponible en .Net sont une refonte d'excellentes librairies de Java.
Je n'ai pas encore trouvé l'équivalent de la Microsoft Enterprise Library. Cependant, voici quelques bribes de savoir que j'ai pu récolter. Ce sont des outils, des librairies ou des approches du génie logiciel supporté par une application java.
  • Eclipse est un formidable environnement de programmation supporté par RedHat et IBM.
  • Apache Commons est un ensemble de composants cohérents supportés par une organisation sérieuse.
  • Maven est un ensemble de processus ombrelle, on parle ici d'une tentative remarquable de rassembler ce qui se fait de mieux dans le monde Java en terme de génie logiciel. Ce projet est chapeauté par le groupe Apache.
  • J2EE c'est la librairie d'entreprise de Java. Pleine de fonctionnalités et pas toujours facile à comprendre pour le néophyte.
  • GlassFish est un système de serveur d'application open source. Beaucoup de fonctionnalités et très complexe.
Ce sont les éléments les plus notables de ma recherche. Globalement, je vous recommande chaudement de vous pencher sur Maven. Si vous êtes du monde Java et que vous êtes passionné de bonnes pratiques et de génie logiciel, vous devez conaître Maven, c'est une must.

dimanche 18 janvier 2009

Mon premier blog

C'est mon premier blog à vie. Passé la trentaine, ça fat maintenant sept ans que je suis sorti de l'école d'ingénierie. Je suis spécialisé en génie logiciel et je suis passionné par tous les aspects de la programmation. Je programme depuis que j'ai 14 ans.

Depuis mes premiers pas, je suis passé par tout plein de langages tels que qbasic, c++, pascal, vb4-5-6, le sublime c# et depuis deux ans Java. Je programme au travail mais aussi à la maison où je m'affère à atteindre mon idéal de ce qui devrait être un bon programme via des projets personnels et depuis peu, un projet sur SourceForge.net.

Je cherche à travers ce blogue à exprimer mon point de vue sur la pratique du génie logiciel et à partager mes trouvailles. J'espère suciter de bons débats basés sur vos commentaires, qu'ils soient positifs ou négatifs. Mon but étant de m'améliorer (et non d'épater la galerie) et de trouver d'autre personnes qui come moi n'ont pas assez du 8 à 5 barbant avec ses budgets et ses dates de livraisons.