Obtenir le numéro de la semaine et l’année en Java

Obtenir le numéro de semaine est parfois bien difficile et il existe de nombreux pièges à éviter.

Par exemple, il faut savoir le 1er Janvier n’est pas toujours la première semaine de l’année. Elle peux être la dernière semaine de l’année précédente. C’est le principe inversé pour le 31 Décembre.

De plus, certains calendriers (américain notamment) commencent leur semaine le Dimanche, ce qui peut provoquer des anomalies dans la comparaison avec un calendrier Français. Pire, le même programme peut parfois retourner 2 numéros de semaines différents pour la même car il prend en compte le calendrier système de la machine.

Pour éviter tout ces problèmes, il existe une norme qui permet de mettre tout le monde d’accord. Il s’agit de la norme  ISO sur la numérotation des semaines.

Lire la suite

L’outil Sonar ne se lance pas en localhost avec ma base MySQL

Sonar est un outil open-source qui permet d’obtenir des statistiques avancés sur l’état de votre projet (Java le plus souvent). Il utilise pour cela les rapports générés par les différents plugins de report utilisés par votre projet Maven. Pour plus de précision, vous pouvez aussi lire cet article  sur le contrôle qualité de Sonar.

L’installation est relativement simple, il suffit de télécharger le dernier zip disponible sur le site Sonar et de suivre les instructions d’installation.

L’installation se déroule sans problème avec la base derby utilisée par défaut. Mais impossible de l’installer avec une base MySQL pourtant installé localement? Avez-vous une erreur JNDI?

INFO  org.sonar.INFO  JDBC datasource bound to JNDI, name=jdbc/sonar

Lire la suite

Choisir dans MySQL entre le type ENUM et une table externe avec une jointure

La plupart des utilisateurs ne connaissent pas ou peu les avantages et les inconvénients du Type ENUM proposé par la base de données MySQL. Résultat:  par peur de l’inconnu, les développeurs n’utilisent tout simplement pas cette fonctionnalité qui permet pourtant une amélioration significative des performances (dans certains cas)  sans  perdre en simplicité. Opposé à la contrainte CHECK connu par nos amis ORACLE, son utilisation et son fonctionnement est très différent, et ces 2 fonctionnalités ne font tout simplement pas la même chose. Cet article devrait vous permettre de savoir dans quel cas il est intéressant d’utiliser le type ENUM, et surtout dans quel cas ne pas utiliser le type ENUM.

Lire la suite

Oracle gagne contre Apache, mais la victoire est amère

Larry Ellison

Le mois dernier, je vous avais fais part de l’ultimatum lancé par la fondation Apache à l’encontre du géant américain Oracle. La fondation Apache menaçait en effet de voter contre la feuille de route des nouvelles versions 7 et 8 du langage Java s’il elle n’obtenait pas des garanties sur la validation de son projet Harmony.  Depuis le rachat de Sun par Oracle, rien ne va plus au pays des bases de données, et c’est bien toute la communauté open-source dans son ensemble qui en pâtit à commencer par Apache qui se retrouve contraint et forcé de tenir parole et donc de quitter la Java Community Process. Le résultat de ce bras de fer entre David et Goliath était certes prévisibles et ce, malgré le soutien de Google. Oracle ne semble pas capable depuis des décennies d’associer la notion d’open-source à celle de profit. Et comme nous ne parlons pas seulement d’Oracle mais aussi de son patron Larry Ellison, on se doute assez rapidement de quel côté l’emporte sur l’autre.

Lire la suite

Performance de la fonction SQL batchUpdate de Spring

Cette semaine, j’ai du mettre à jour un batch d’import de données d’un fichier plat dans une base de données. L’optimisation de ce script n’ayant jamais été une priorité, le batch importait environ 60000 lignes et prenait entre 15 et 20 minutes. En quelques ajustement, j’ai réussit à importer plusieurs centaines milliers de lignes en à peine quelques minutes. Aussi étonnant que cela puisse paraître, l’optimisation d’un tel script ne nécessite pas de connaissances particulières ni même de mettre en place une solution de multi-threading utilisant les ordinateurs de la NASA ou ceux de Google. Tout est proposé de manière native au sein de la librairie JDBC (depuis la version 2) et permet le traitement par lot des requêtes SQL . Par conséquent, toute les solutions reposant sur cette API de connexion à un base de donnée peuvent également utiliser cette fonctionnalité, que ce soit JdbcTemplate pour Spring ou encore Hibernate.

Lire la suite