Maven, le célèbre outil de management de build de projet, est souvent considéré comme difficile d’approche. Le principal point rebutant, souvent mis en lumière, est la complexité de gestion des fameux fichiers pom.xml, qui décrivent les processus de build. Pour se motiver, il est important de se souvenir que, parmi ceux qui ont pris le temps de s’y intéresser, bien rares sont ceux qui font demi-tour. Comme en code, il existe des bonnes pratiques qui, si elles sont respectées, permettent de s’y retrouver facilement.
La route est longue mais la voie est libre. Voyons donc ensemble quelques règles de bonne conduite pour conserver des pom.xml maintenables et faire durer la lune de miel avec Maven.
Lire la suite de cet article »

Comme son nom le suggère, l’élément clé de SOA (Service Oriented Architecture) est le Service. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question « Qu’est-ce qu’un service ? ». Ce sujet débouche invariablement sur, au choix : Un blanc ; Une réponse alambiquée et incertaine ; Une discussion enflammée (ou un débat stérile).
On pourrait proposer la définition suivante : « Un Service est un composant logiciel distribué, exposant les fonctionnalités à forte valeur ajoutée d’un domaine métier ». Malheureusement, les définitions aussi courtes (bien qu’exactes) sont nécessairement incomplètes et amènent un florilège de questions.
Pour répondre plus précisément à la question, nous vous proposons de passer en revue les huit aspects qui caractérisent un service :
- Contrat standardisé : L’ensemble des services d’un même Système Technique sont exposés au travers de contrats respectant les mêmes règles de standardisation.
- Couplage lâche : Le contrat d’un service doit imposer un couplage lâche de ses clients.
- Abstraction : Le contrat d’un service ne doit contenir que les informations essentielles à son invocation. Seules ces informations doivent être publiées.
- Réutilisabilité : Un service exprime une logique agnostique et peut ainsi être positionné comme une ressource réutilisable.
- Autonomie : Un service doit exercer un contrôle fort sur son environnement d’exécution sous-jacent. Plus ce contrôle est fort, plus l’exécution d’un service est prédictible.
- Stateless (sans état) : Un service doit minimiser la consommation de ressources en déléguant la gestion des informations d’état quand cela est nécessaire.
- Découvrabilité : Un service est complété par un ensemble de métas données de communication au travers desquelles il peut être découvert et interprété de façon effective.
- Composabilité : Un service doit être conçu de façon à participer à des compositions de services.
Ces 8 aspects sont issus du livre « SOA Principles of Service Design » de Thomas Erl, également auteur du site SOA Principles.
Dans ce billet, nous nous attarderons sur la notion d’autonomie.
Lire la suite de cet article »

La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité éditeurs / SSII
RIA
SOA
Le coin de la technique
Evènements de notre communauté en France et à l’étranger
Lire la suite de cet article »
Quand on parle d’injection de dépendances, on pense tout de suite à Spring qui se tient sous les feux de la rampe. On peut aussi penser au petit dernier Guice abordé dans l’article Google Guice 2 : Les bases de l’injection de dépendances. Mais il ne faudrait pas oublier Tapestry 5 qui, lui aussi, fournit sa solution pour l’injection de dépendances. Tapestry IoC, à ne pas confondre avec le framework de développement Web Tapestry 5, est très fortement inspiré de Guice. Son but affiché est de tirer le meilleur de Guice tout en apportant l’héritage de son grand frère défunt Hivemind. On garde donc l’objectif zéro XML en le remplacant par du code Java. Parmi les avantages de cette technique, on citera :
- Le démarrage d’une application est plus rapide avec une configuration IOC en annotations Java qu’avec une configuration XML à parser
- On peut tester unitairement les modules d’injection puisqu’il s’agit de classe Java simple
- Finie la configuration laborieuse en XML
J’ai même envie de rajouter que l’apprentissage d’une API Java est bien plus rapide que celui d’une syntaxe XML. Tout comme Guice, Tapestry IoC se concentre sur l’injection de dépendances et ne tente pas de fournir une stack complète de développement comme le fait Spring. On ne trouve ni les Aspects, ni le pattern Template cher à Spring. Pour répondre aux besoins de programmation par aspect, Tapestry IoC propose des interceptors qui peuvent décorer les services. D’autre part, dans Tapestry IoC, l’injection est définie dans un ou plusieurs module(s) chacun d’eux pouvant contribuer à la configuration et aux services de l’application.
Dans ce premier article de la série Tapestry 5 qui commence aujourd’hui, nous verrons les bases de l’injection avec Tapestry IoC et les différences par rapport à Spring et Guice.
Lire la suite de cet article »
La semaine prochaine se déroulera la plus grande conférence Spring européenne à Amsterdam : SpringOne. Je serai présent pour Xebia France lors de cet évènement. À quelques jours du lancement, les paris sont donc ouverts sur les éventuelles annonces de cette édition.
Le programme est plutôt alléchant et laisse présager un certain nombre de réponses et de surprises sur les sujets chauds du moment. Il me tarde d’assister à la présentation Spring et Java EE 6 de Juergen Hoeller (Oracle EE 6, comme disent déjà certains
). Autre question intéressante, les objectifs des partenariats. Comment Spring tirera-t-il profit de sa collaboration avec Adobe et Terracotta ?
Suite au rachat de G2One l’année dernière, quelles seront les interactions et intégrations entre Spring et Groovy ? Spring Java Config aujourd’hui, Spring Groovy Config demain ? Groovy comme expression de langage évolué au cœur du framework ? Qu’en est-il de Spring ROO ? Comment se positionnera t-il face à Grails ?
Autre gros sujet, le très attendu Spring 3.0 ? À quand la M3 ? Quel sera effectivement le scope de cette prochaine version ? Où en sont les développements ?
Comment tcServer se positionnera-t-il par rapport à son faux jumeau dmServer ? Comment SpringSource compte-t-il implanter ces serveurs ? dmServer 2.0 sera-t-il effectivement la reference implementation d’OSGi R4.2 ? À quoi bon rendre compatible Jersey (cette future version) avec Tomcat ?
Plus généralement, où en est la roadmap depuis novembre dernier ? Spring Batch ? Spring integration ? …
En résumé, beaucoup de questions (n’hésitez pas à enrichir la liste), et trois jours pour récolter un maximum d’informations.
Je « twitterai » en direct depuis la conférence, vous pouvez me suivre sur twitter en cliquant ici :

La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité éditeurs / SSII
RIA
Le coin de la technique
Evènements de notre communauté en France et à l’étranger
Lire la suite de cet article »
La nouvelle est tombée à la surprise générale : Oracle a racheté Sun.
Malgré les rumeurs persistantes de rachat par IBM qui courraient depuis quelques semaines, c’est bien l’éditeur du célèbre SGBD qui a mis la main sur le convoité créateur de Java.
Le rapprochement de ces deux poids lourds du monde J2EE risque d’entrainer de profonds changements dans nos écosystèmes dans les mois à venir.
Les raisons officielles du rachat
Une stratégie à définir
De grandes dates pour voir la situation se décanter
Lire la suite de cet article »

Comme son nom le suggère, l’élément clé de SOA (Service Oriented Architecture) est le Service. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question « Qu’est-ce qu’un service ? ». Ce sujet débouche invariablement sur, au choix : Un blanc ; Une réponse alambiquée et incertaine ; Une discussion enflammée (ou un débat stérile).
On pourrait proposer la définition suivante : « Un Service est un composant logiciel distribué, exposant les fonctionnalités à forte valeur ajoutée d’un domaine métier ». Malheureusement, les définitions aussi courtes (bien qu’exactes) sont nécessairement incomplètes et amènent un florilège de questions.
Pour répondre plus précisément à la question, nous vous proposons de passer en revue les huit aspects qui caractérisent un service :
- Contrat standardisé : L’ensemble des services d’un même Système Technique sont exposés au travers de contrats respectant les mêmes règles de standardisation.
- Couplage lâche : Le contrat d’un service doit imposer un couplage lâche de ses clients.
- Abstraction : Le contrat d’un service ne doit contenir que les informations essentielles à son invocation. Seules ces informations doivent être publiées.
- Réutilisabilité : Un service exprime une logique agnostique et peut ainsi être positionné comme une ressource réutilisable.
- Autonomie : Un service doit exercer un contrôle fort sur son environnement d’exécution sous-jacent. Plus ce contrôle est fort, plus l’exécution d’un service est prédictible.
- Stateless (sans état) : Un service doit minimiser la consommation de ressources en déléguant la gestion des informations d’état quand cela est nécessaire.
- Découvrabilité : Un service est complété par un ensemble de métas données de communication au travers desquelles il peut être découvert et interprété de façon effective.
- Composabilité : Un service doit être conçu de façon à participer à des compositions de services.
Ces 8 aspects sont issus du livre « SOA Principles of Service Design » de Thomas Erl, également auteur du site SOA Principles.
Dans ce billet, nous nous attarderons sur la notion de réutilisabilité.
Lire la suite de cet article »
Guice (prononcez Juice) est le framework d’injection de dépendances de Google. La configuration des dépendances se fait par code, à l’aide d’annotations, et nécessite donc l’utilisation de Java 5.
Google travaille actuellement sur la V2 de son framework, qui tarde à sortir. Cependant, une mise à jour régulière du Wiki du projet et la publication de snapshots permettent d’ores et déjà de se faire une bonne idée de cette alternative à l’injection de dépendance ‘à la Spring’.
Nous entamons aujourd’hui une série d’articles qui a pour but de vous faire toucher du doigt la grande liberté qu’offre l’injection de dépendance par code. Nous irons progressivement des concepts de base de Guice 2.0, vers une utilisation avancée du framework.
Lire la suite de cet article »

La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité éditeurs / SSII
SOA
Mobilité
Le coin de la technique
Évènements de notre communauté en France et à l’étranger
Lire la suite de cet article »