jeudi 30 septembre 2010

les avantages et inconvénients de Mockito

Cet article vous présente les avantages et les inconvénients de Mockito.
De plus, une comparaison est disponible avec EasyMock.

Je ne connais qu'EasyMock, j'ai pu l'utiliser avec PowerMock.
Je trouvais le code très verbeux et assez complexe à appréhender.
Il semblerait que Mockito permette de gagner quelques lignes de code.
Si vous désirez un petit comparatif entre les deux, c'est disponible ici.

mardi 14 septembre 2010

Terracotta et la gestion du Garbage collector

Comment se passer des limites du garbage collector de la JVM ?
En utilisant Terracotta!

La définition du module "BigMemory" s'insère dans le fichier de configuration d'ehcache.
Leurs tests montre qu'il est possible d'avoir un garbage collector de 200Go.

Ce module sera disponible en octobre.

Plus d'info ici et ici aussi.

mardi 31 août 2010

Des tests JUnit plus lisibles

Dans une classe, on arrive vite à des assert longs et parfois compliqués.
A la fin, il faut bien l'avouer, les tests unitaires deviennent vite verbeux, rendant la compréhension difficile.
Hamcrest est une librairie qui simplifie l'écriture des assert.
Par exemple, on peut vérifie qu'une liste contient une valeur en faisant :

assertThat(aList, hasItem("aString"));
Vous trouverez plus de détails ici.
Le projet est hébergé sur google code.

jeudi 22 juillet 2010

Le top ten des problèmes de performance

Voici un lien vers le top ten des problèmes de performances.
1) Trop d'appels aux bases de données
2) Trop de synchronisation
3) manque d'attention au traffic réseau (latence, sérialisation)
4) Mauvais usage du mapping objet/relationnel
5) fuite mémoire
6) l'utilisation de dépendances problématique ou mal maitrisée
7) gaspillage des ressources
8) des applications "bouffies" qui chargent des ressources mal dimensionnées (images, javascript...)
9) mauvaise stratégie de cache
10) problèmes intermittents

L'intérêt de ce billet est qu'il donne des pistes pour résoudre chacun d'eux.

vendredi 16 juillet 2010

différences entre les caches JPA 2.0 et Hibernate

Cet article présente les différences entre les caches de JPA 2.0 et ceux d'Hibernate.
Agrémentés d'exemple, les niveaux L1 et L2 de JPA sont présentés.
Puis c'est une introduction aux caches d'Hibernate qui est décrite.

D'après cet article, et sachant qu'Hibernate 3.5 supporte toutes les fonctionnalités de JPA 2,
il serait plus intéressant d'utiliser Hibernate que JPA seul.

Mais à vous de vous forger un avis.
Si vous ne connaissez pas JPA, je vous conseille ce tutoriel sur Spring 3, maven et JPA.

Java performance monitoring

Il y a quelques temps, ibm avait sorti un premier billet sur le monitoring d'applications Java.
En début de semaine est sorti le deuxième volet avec de courtes présentation de :
- jhat : analyse de la heap
- jmap : dump de la heap
- jstack : stack trace de thread
- jstat : statistiques de performances
- jps : des infos sur la JVM

J'en profite pour mettre un lien sur les séries des '5 choses que vous ne savez pas à propos de...' sur le site d'IBM.

mardi 6 juillet 2010

L'introspection

L'introspection ou "Reflection" en anglais est utilisé dans la majorité des frameworks les plus célèbres (Struts, Spring, etc.).
Pourtant, on peut penser que l'utilisation de l'introspection se fait au détriment des performances.
Cet article présente la manière d'optimiser les appels et les cas dans lesquels cette méthode peut être utilisé.

l'optimisation de sites web

Ce billet donne quelques clés pour optimiser vos sites web.
Ou fait-il chercher, que faut-il analyser et comment et avec quels outils le faire ?
Le temps de chargement des pages, le nombre de ressources à télécharger, le temps de latence, ces éléments sont à prendre en compte pour optimiser l'expérience utilisateur de votre site.

vendredi 2 juillet 2010

Comparaisons de frameworks MVC

Si vous voulez avoir des élements de comparaisons entre :
- Spring MVC
- Struts 2
- Stripes
- GWT

cet article est fait pour vous.
Apparemment Spring MVC serait le moins convaincant lors des tests...
Il m'est difficile de donner un avis n'ayant testé que Struts 2 et Spring MVC.
Néanmoins je m'étonne de voir GWT plus convaincant que Spring MVC.

mercredi 30 juin 2010

Le monitoring d'applications Java

Sur le site d'ibm, vous trouverez une suite d'articles sur le monitoring d'applications Java.
Pour l'instant, seul le premier de la série est disponible.

Il porte sur JConsole et son utilisation.

Des webservices avec Android

Vous trouverez ici un article très court présentant l'appel de webservices avec le SDK android.

C'est la librairie kSOAP2 qui est utilisé. C'est une librairie pour l'appel au webservices SOAP dans des environnements "contraignants" comme les applets ou les applications J2ME.

lundi 28 juin 2010

Test de charde d'un site Web - JMeter

JMeter est l'outil de mise en place de tests de performances d'Apache.
Ce billet, décrit en 4 étapes la mise en place d'un test :
- description du projet à tester
- déclaration du scénario
- affinage du scénario
- exécution.

Clair et détaillé, il vous permettra une prise en main rapide de l'outil.

lundi 14 juin 2010

VmWare acquiert Gemstone

Gemstone fournit une solution de cache de données distribué, GemFire.
VmWare, et donc SpringSource, vient d'en faire l'acquisition.

Terracotta et GemFire sont des concurrents.
On sait que les "distributed data caching" sont en plein essort. Nous aurons bientôt un élément de plus pour comparer leur performances et leur intérêt, puisque Terracotta travaillait déjà à l'intégration de son framework avec Spring.

vendredi 2 avril 2010

SkipFish - la sécurité selon Google

Toujours un peu à la bourre...
Ca doit faire 15 jours que Google à annoncer sa sortie, nom de code SkipFish!
C'est un outil permettant de tester la sécurité d'un site internet.
Il n'est pas utile d'avoir le code source de l'application à disposition!

On peut donc penser que cet outil est utilisable sur n'importe quel site internet, waouh!
Je me trompe peut-être donc n'hésitez pas à poster vos commentaires pour me corriger.
Vous trouverez dans la documentation, le type d'attaques que cet outil est capable de simuler.
Il y a en autres :
- les injections SQL
- les injections XPath
- failles XSS
- failles SSL

L'annonce de sa sortie est ici.
Je vous laisse découvrir, il est téléchargeable la. Attention, ce sont les sources qui sont fournies, donc un compilateur C sera obligatoire!

Des webservices avec Mule ESB et CXF

Mule ESB est un ESB Open Source. C'est l'un des plus utilisés et des plus reconnus, mais là n'est pas le sujet du billet.
Cet article détaille la manière d'intégrer un webservices développé avec CXF et utilisable via un ESB.
Assez technique, bien détaillé, un article à lire.

dimanche 28 mars 2010

Sculptor

Déjà un moment que je voulais mettre le lien de cet article, mais je n'avais jamais pris le temps de le lire.
Sculptor est un générateur de code qui se base sur la description de l'architecure d'une application, en version quasi-textuelle.
Et un outil de plus que les détracteurs de Maven n'apprécieront peut etre pas, puisque Maven est massivement utilisé pour la création d'un projet utilisant Sculptor.

Cet outil est en à sa version 1.8.0 et à déjà quelques années derrière lui puisque la version 1.1 est sortie en novembre 2007.
Vous trouverez :
- l'article qui m'a fait découvrir Sculptor,
- un tutoriel simple pour découvrir ses fonctionnalités et sa manière de fonctionner,
- le blog de l'equipe de développement.

Terracotta et EnterpriseDB pour des clouds privés haute performance

Et oui... encore... toujours...
Terracotta, encore lui!

Cette entreprise, et cette technologie ont, pour moi, le vent en poupe.
Cette semaine Terracotta s'allie à EnterpriseDB, une base de données basée sur PostgresSQL afin d'augmenter les performances d'accès aux données dans un cloud privé.
Un peu plus de détails vous seront donné ici, et des détails plus techniques seront présentés le 6 avril dans un webcast, dont l'adresse figure en bas du même billet.

Une solution de monitoring simple

Fin novembre, l'année dernière, un projet permettant de monitorer facilement une application Java a vu le jour sur sourceforge.
Grâce à l'AOP, ce système permet notamment de suivre les appels aux méthodes ou classes.
Le résultat pourra être sauvé en base ou sous forme de fichier.

Il ne semble pas vivre vite, et je ne l'ai pas testé. Son grand intérêt est toutefois d'exister sous la forme de plugin maven. Ainsi, plus besoin d'obtenir ces informations par traitement de logs.
Ca peut toujours servir ;)

Le site du projet sur sourceforge est ici, le billet de l'auteur .

mercredi 17 mars 2010

Infinispan - comment ca marche

Sur le site mastertheboss, dédié à JBoss, vous trouverez deux tutoriaux d'introduction à Infinispan.
Déjà remarqué il y a quelques semaine, Infinispan est la plateforme de data grid chez JBoss.

Le premier tutoriel décrit les actions de base :
- installer un exemple simple
- customiser la configuration du cache

Le second est plus complet. Il définit la notion de cache store, puis détaille quels éléments d'interactions avec le cache, avant de terminer par la clusterisation.

bonne lecture

vendredi 12 mars 2010

Les classloaders dans le développement web

C'est intéressant de voir comment fonctionne le classLoader.
Et, pour moi, l'utilisation de JavaRebel pourrait avoir de nombreux avantages dans les environnements de développement en priorité.
Bref, ce point de vue est purement personnel.

Toujours est il que sur cette page, vous trouverez des explications sur comment fonctionne le redeploy d'un serveur d'applications, dans OSGI et dans certains framework web.
C'est une suite d'articles, vous trouverez les précédents et les suivant sur la même page.
Ayant déjà fait un billet sur le classloader, je ne l'ai pas pointé une nouvelle fois.

jeudi 11 mars 2010

EhCache 2.0

Ca fait quelques mois qu'EhCache a été racheté par Terracotta.
Sa version 2.0 vient de sortir.

Apparemment Terracotta à la volonté d'en faire un produit tourné vers l'entreprise pour une adoption massive.
Dans cette version, on retrouve :
- l'adoption de JTA
- le data write-behind permettant l'execution asynchrone des updates sur une base
- le fast loading, désolé je n'ai pas plus d'infos, la fonctionnalité parle d'elle meme
- le Dynamic cache config, qui facilite la configuration des caches.

Vous trouverez plus de détails à l'adresse suivante.

jeudi 4 mars 2010

Infinispan v4.0

Les datagrids sont en plein essorts, comme le prouve le graphique ci-dessous fournit par Forrester.
Ces solutions fournissent une gestion de caches de données distribués, permettant entre autres, des gains de performances lors de l'accès aux données.
La semaine dernière, la version 4 d'Infinispan (une solution opensource de JBoss) est sortie.
Si vous voulez en savoir plus, tout est ici, à votre dispositions des liens vers des benchmarks, des comparaisons par rapport à une solution comme ehCache et plusieurs autres informations.

samedi 27 février 2010

Les technologies qui devraient arriver

Vous ne savez plus quelle techno vous feriez mieux d'apprendre.
Vous vous perdez dans les choix entre Hibernate, iBatis, JPA, meme chose dans les langages ou les serveurs d'applications ?
Ne cherchez plus, quelqu'un à fait le travail pour vous.
Les résultats sortent du site indeed.com, un moteur de recherche pour l'emploi.
Dans le développement web, Java, Spring et Hibernate semblent tenir le haut du pavé.
Toutefois, les technologies des années futures pourraient être le cloud computing, JPA, Groovy et toujours Spring.
Des informations qui peuvent peut etre vous aider a remplir vos soirées pluvieuses du mois de mars.

jeudi 18 février 2010

InitializingBean et Assert

En utilisant Spring, un objet peut implémenter l'interface InitializingBean.
Cette interface permet de surcharger la méthode afterPropertiesSet.
Elle permet, par exemple, d'apporter un comportement particulier; après que tous les beans dont mon objet dépend aient été initialisés.

En plus de ca, il est possible d'utiliser les Assert de Spring (à ne pas confondre avec les assert de JUnit). Ces "Assert" vous permettront de vérifier que vos variables membres ont bien correctement initialisées.

Un tout petit peu plus de détails ici.

mardi 16 février 2010

m2eclipse 0.10.0

Il y a quelques mois, on parlait de la bagarre m2eclipse/q4e pour gérer maven sous eclipse.
Force est de constater que ces deux plugins n'ont pas de releases fréquentes.
La dernière de q4e date de juin 2009, m2eclipse après un an d'absence vient de sortir en version 0.10.0.
La liste des nouveautés que cette version apporte est ici.
m2eclipse était, selon moi, le plugin le plus abouti des deux. Il n'était pas parfait et faisait le minimum, gageons que cette version soit encore meilleure!

tests d'integration avec Maven et SoapUI

Les tests unitaires ne sont censées tester qu'une partie du code d'une classe.
Ce qui implique de créer des bouchons, des mocks pour chacun des objets faisant appel à du code extérieur à la classe.

Par contre, il est aussi obligatoire de faire des tests d'intégration, et ainsi de pouvoir tester une fonctionnalité complète.
Pour tester des webservices, l'article présenté ici décrit la manière dont un projet créé avec soapUI et maven peut interagir.
Un truc de plus pour rendre son pom verbeux et incompréhensible, mais c'est plutot utile.

jeudi 11 février 2010

Lire un fichier excel en Java

Une question revient souvent : comment interagir avec un fichier excel depuis Java ?
L'API qui ressort le plus souvent est POI de la fondation Apache.
Cette api est très complète et ne se limite pas qu'à Excel. Il est possible de lire/écrire des documents Word, PowerPoint, des fichiers basés sur le standard OpenOffice XML, etc.

Par contre, lorsqu'on ne veut travailler qu'avec de l'Excel, on pourrait parfois y préféré JExcel.
Un benchmark tout simple a été réalisé il y a quelques années, il vaut ce qu'il vaut mais peut permettre de se faire une idée.
Il compare rapidement les performances de JExcel par rapport à celles de POI.

samedi 30 janvier 2010

Le pattern "Stategy"

Selon le site dofactory, le pattern "Strategy" définie une famille d'algorithmes, encapsule chacun d'eux, et les rends inter-changeables. Il laisse l'algorithme varier indépendamment du client qui l'ulitise.
Il se base sur l'utilisation de la composition plus que de l'héritage.

Cet article détaille donc le design pattern Strategy, avec un exemple simple. Comment conserver le principe de "Un objet, une responsabilité" ? Donc, plutôt que de surcharger une classe, pourquoi ne pas utiliser la composition?
Il présente une classe dont le comportement doit évoluer au moment de quitter l'application.

mardi 26 janvier 2010

Les nouveautés de Java EE 6

L'article date du mois dernier, donc il serait temps de se réveiller. Il présente les nouveautés de Java EE 6, à savoir :

- JPA 2.0,
- les EJB 3.1,
- des ajouts d'annotations pour avoir un code plus concis,
- les servlets 3.0 et JSF 2.0.

pour ne citer que cela.
bonne lecture

dimanche 17 janvier 2010

Spring ROO 1.0

Spring Roo est un outil qui permet de générer du code CRUD, ou une application, capable de gérer la création, la modification et la suppression d'une entité. Sa version 1.0.0 est sortie le 31 décembre 2009. Une présentation vidéo est disponible ici.
Ce billet utilise un tutoriel présenté par Spring Source, en y ajoutant quelques remarques.


1. Installation et création d’un projet

Téléchargez la dernière version sur http://www.springsource.com/download/community. C'est un zip; une fois extrait vous obtiendrez l’arborescence suivante :

Ajoutez %INSTALL_DIRECTORY%\bin à votre PATH.

Puis j’ai suivi ce tutoriel : http://blog.springsource.com/2009/05/27/roo-part-2/.

Pour créer un projet, tapez la commande :

project --topLevelPackage

Cette commande initialise un projet avec les conventions maven. Il est quasiment vide, hormis l’applicationContext et le log4j.properties qui sont créés dans src/main/resources/META-INF/spring.

Trois types de persistence sont proposés : ECLIPSELINK, Hibernate et OpenJPA. J’ai choisi d’utiliser Hibernate. Plusieurs type de bases sont supportés MySQL, MSSQL, Oracle, POSTGre, pour ne citer que les plus utilisées.

Dans scr/main/META-INF, le fichier database.properties est créé, vous permettant de spécifier, l’url et les logins/mot de passe de la base à laquelle vous souhaitez vous connecter. Il y a des commandes roo qui vous permettront de modifier ce fichier depuis l’interface, mais vous pourrez très bien le faire à la main.

A cette étape, le pom est déjà très verbeux. Il faudra vous armer de patience si vous voulez le modifier. Pourtant, il se peut que vous en ayez besoin. Par exemple, le projet créé tire des dépendances vers les plugins tomcat et eclipse qui ne vous seront peut être pas utiles.

Autre information, le projet utiliser slf4j, avec le log4 over slf4.

2. Création d’une entité

Et là, je me dis tiens, je ne vais pas être original, je veux pouvoirs gérer des utilisateurs, je vais donc créer une entité User. Je tape donc la commande préconisée :

roo> entity --name ~.bo.User

Première erreur, ce n’est plus --name qu’il faut utiliser mais --class. Ce qui donne :

roo>entity –classe ~.bo.User

Retour à la réalité :

Reserved SQL keyword 'User' is not permitted as simple type name

Grrr ! Bon et bien on va mettre People. Ca passe, on continue.

La classe people a déjà plusieurs attributs, une version et un identifiant. Je choisi donc d’ajouter un simple champ email qui sera non null.

roo> field string email –notNull –sizeMax 30

Après avoir taper cette commande :

roo> test integration

Vous disposez d’une application qui permet de persister un objet et des classes de test correspondantes.

Attention, ROO utilise la programmation orientée aspect. Il peut donc être assez compliqué de faire des modifications si vous ne maitrisez cette technologie.

On peut, par exemple, penser à l’ajout d’un champ. Je pense qu’il sera préférable d’utiliser les commandes roo plutôt que de temps l’ajout manuel. J’ai ajouté des méthodes dans la classe que j’avais créée et le merge est effectué correctement. Je ne perds donc pas mes modifications. J’émettrais toutefois quelques réserves dans des cas plus compliqués que je n’ai pas testé.

Voici la commande que j’ai tapée :

roo> field number age --type java.lang.Integer --class ~.bo.People

On notera l’ajout de --class pour spécifier à quelle classe le champ doit appartenir.

Allé, on va un petit peu plus loin, Roo est capable de générer l’IHM, testons !


3. Génération de l’IHM

J’ai utilisé la commande fournit dans le tutoriel

roo> controller scaffold ~.web.PeopleController

La génération se passe sans souci. J’ai hate!

J’ai utilisé controller scaffold pour ne générer que l’interface de l’objet People, mais en mettant

roo>controller all ~.web

Roo aurait généré les IHM de toutes les entités.

Afin de customiser votre application, vous aurez peut être besoin de savoir à quoi correspondent, les différents dossiers générés. Voici la définition tirée du site de Spring Source :


4. Démarrage

Ensuite, on est presque au bout, alors : mvn clean install.

Puis, démarrez de votre serveur d’application préféré, déployez l’application.

Tada :

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

mince !

J’utilise un jdk 1.5, pas de panique, c’est un bug connu, ouf !

Pour le résoudre, il faut ajouter deux dépendances dans votre pom.xml :

<dependency>

<goupId>javax.xml.bind</groupId>

<artifactId>jaxb-api</artifactId<

<version>2.1</version>

</dependency>

<dependency>

<goupId>com.sun.xml.bind</groupId>

<artifactId>jaxb-impl</artifactId<

<version>2.1.3</version>

</dependency>

Allé c’est reparti, mvn clean install, tout ca, tout ca.

Et là, c’est génial ca marche :


Il y a déjà des contrôles de surface, on clique sur save, et c’est persisté ! Une page est disponible pour lister le contenu de la table People. Et en plus la gestion de la langue est déjà prévue.

Il y a plein de petits trucs, par exemple, si on utilise un attribut de type Date, dans l’ihm il y a aura directement un calendrier de proposé.

5. Les logs

Le tutoriel nous donne la possibilité d’ajouter des loggers dans la partie Web. Il faut savoir que Roo est capable de l’ajouter dans les entités, dans l’AOP, bref, partout en fait !

6. La sécurité

La gestion simple de la sécurité passe aussi par une seule commande.

roo> security setup

Il faut noter qu’elle n’est disponible qu’au moment où vous aurez créé la couche Web. Je n’ai pu l’exécuter qu’une fois.

Je me suis arrêté là dans la lecture du tutoriel, et souhaite bon courage à ceux qui voudront en apprendre d’avantage.

En conclusion, je dirais que Spring Roo est simple à prendre en main, on peut tout à fait créer une application simple en 30 minutes. Mais la maintenance d’une application générée peut être complexe, encore plus quand on ne maitrise pas l’AOP.

Je m’interroge sur :

- Pourquoi un répertoire selenium avec des fichiers test* se trouve dans WEB-INF et sera donc déployé ?

- Aucune CSS n’est présente, il semble pourtant y avoir de la mise en page. L’IHM pourrait donc être à reprendre si vous voulez partir avec la génération d’IHM

- Je m’attendais à avoir des DAOs, c’est en regardant le chapitre sur l’architecture d’une application que j’ai eu la réponse.

- Qu’est ce qui se passe quand on veut créer un projet multimodule ? J’ai bien l’impression que la division doit être ensuite faite à la main, ce qui peut être très contraignant. Je n’ai pas trouvé d’informations sur ce sujet.

mercredi 13 janvier 2010

Des tutoriaux sur Struts 2

Vous voulez tenter l'expérience Struts 2?
Vous avez créer votre petite application Hello world, avec l'archetype maven, grâce à ce lien, car les archetypes maven par défaut ne vous donne pas satisfaction.
Puis, vous voulez en savoir plus. le site javaee trainer offre 17 tutoriaux pour Struts 2. Il semble être enrichie régulièrement, c'est donc une bonne base de départ.

lundi 11 janvier 2010

JPA 2.0 et Spring 3.0

Si vous souhaitez un court exemple utilisant JPA 2.0 avec Spring 3.0, le tout couplé à Maven,
cet article est fait pour vous.
Spring 3.0 est la nouvelle release de Spring sortie cette hiver.
JPA signifie Java Persistence API, c'est l'API Java de persistence de données.

L'exemple donné permet de se connecter à une table d'utilisateurs.

dimanche 10 janvier 2010

Des outils de tests

Et oui, chez vous aussi il neige, alors vous vous demandez ce que vous allez pouvoir faire de votre dimanche.
Ne cherchez plus!
Vous allez tester les applications, que vous développez chez vous, avec les outils qui sont décrits ici.
Plus de 50 outils Open Source vous permettant de faire des tests de charge, des tests d'endurance, bref d'y passer votre après-midi.
Amusez vous et proposez nous vos retours d'expérience.

Spring AOP - deuxième référence

Il y a deux, trois semaines, je postais un article de qui présentait Spring AOP.
Celui d'aujourd'hui vient enrichir les références vers cette technologie.
En premier lieu, je souhaitais comprendre quoi utiliser entre AspectJ et Spring AOP.
Ils peuvent se compléter, mais aussi s'opposer, et dans l'article suivant vous trouverez un début de piste pour vous aider à faire votre choix.

Vous avez choisi d'utiliser Spring AOP et le tutoriel prenant l'exemple des loggers vous a convaincu mais vous en voulez plus ?
Il y a un chapitre entier sur le site de Spring Source.
Lorsque vous en aurez fini avec la théorie, vous pourrez apprendre à vérifier l'état d'un objet avant de sauvegarder ses modifications.
En dernier lieu, un exemple plus complexe permettra de vous exercer à appliquer des services de sécurité lorsqu'un utilisateur se loggue.

lundi 4 janvier 2010

Une liste de livres gratuits sur GWT

Vous connaissez peu GWT, le Google Web Toolkit, et vous souhaitez vous y mettre.
Le site bookuter fournit quantité de livres gratuits, vous pourrez par exemple, en trouver une bonne vingtaine sur ce sujet.
Même si ce site à l'air récent vu le nombre d'ebooks disponibles, n'hésitez pas à fouiller vous trouverez surement des documents intéressants.