Affichage des articles dont le libellé est spring. Afficher tous les articles
Affichage des articles dont le libellé est spring. Afficher tous les articles

14 juin 2010

Configuration d'une application JavaEE

Nicolas Romanetti m'a fait l'autre jour une remarque sur un manque dans mon livre Apache Maven concernant le chapitre sur JavaEE : Dans le modèle JavaEE (pré-6), on met les classes et les ressources dans un WAR, lui même dans un EAR, et on balance tout ça sur le serveur. Où placer la configuration de l'application ?

Si on lit la spec JavaEE, elle prévoit un rôle d'assembleur d'application, qui va prendre l'EAR, éditer ses fichiers de déploiement XML pour faire le lien entre les ressources de son serveur (DataSource, files JMS, ...) et l'application. Personnellement je n'ai jamais rencontré ce cas de figure, et mes clients attendent plutôt une application prête à fonctionner avec au plus un fichier de configuration properties externe à l'EAR.

Option 1 : embarquer la conf en fonction de l'environnement cible

Si on veut suivre l'esprit JavaEE on peut utiliser des profils Maven pour packager dans le WAR les ressources associées à l'environnement cible :

<profile>
      <id>dev</id>
      <build>
        <resources>
          <resource>
            <directory>${basedir}/src/env/dev</directory>
          </resource>
        </resources>
      </build>
    </profile>
    <profile>
      <id>prod</id>
      <build>
        <resources>
          <resource>
            <directory>${basedir}/src/env/prod</directory>
          </resource>
        </resources>
      </build>
    </profile>

il suffit donc d'ajouter un petit "-Pprod" pour générer l'application dans sa configuration de production. Par contre, la configuration ne peut pas être éditée simplement une fois l'application installée.

Option 2 : passer par le JNDI


L'autre option respectant l'esprit JavaEE est de se baser sur les ressources JNDI, et donc d'accéder à une donnée d'environnement de type URL ou String qui pointe vers notre fichier de properties. Dans le web.xml j'ajoute donc un petit :

<env-entry>
      <description>Chemin de la configuration locale</description>
      <env-entry-name>appli.home</env-entry-name>
      <env-entry-type>java.lang.String</env-entry-type>
      <env-entry-value>/valeur/par/defaut</env-entry-value>
    </env-entry>

Je n'ai plus qu'à définir cette ressource dans le JNDI de mon serveur d'application, ce qui va par contre être spécifique à chaque serveur - Tomcat par exemple ne permet pas de définir une ressource URL, alors que Websphère le supporte (pas classique de dire du bien de celui-là, n'est ce pas ?).

Pour y accéder, il faut faire un lookup JNIDI ce qui n'est pas léger léger, et si on veut passer par Spring et ses PlaceHolder ${truc} on regardera du côté de SPR-3030.

Option 3 : passer par une propriété système


Dernière option, la version "light" : dans de nombreux cas, je constat que le serveur d'application n'héberge qu'une seule instance de l'application, aussi on peut positionner des variables systèmes au niveau de la JVM pour lui passer un paramètre, typiquement notre appli.home. Et là, rien de spécial à faire pour activer le configuration Spring en dehors d'activer le SYSTEM_PROPERTIES_MODE_OVERRIDE.
Dans le même esprit, on peut externaliser la configuration log4j en ajoutant un -Dlog4j.configuration=file:///monlog4j.xml.

Perso je préfère cette dernière variante, la plus légère à mettre en oeuvre et la plus simple à expliquer aux développeurs. JNDI reste un truc assez mystérieux, qui plus est avec des variations pour sa configuration en fonction des serveurs d'application. L'accès au DirContext se fait trop souvent via un mauvais copier-coller qui référence les classes du serveur d'application (alors que justement le but est de s'en découpler !) et/ou en ajoutant au petit bonheur la chance des java:comp/env ... peut être le sujet d'un autre billet :)

Option 4: compléter le classpath du serveur

Suite au commentaire de Sylvain François, une 4ème option, comparable au system properties : ajouter au Classpath de l'application le chemin d'un répertoire contenant les fichiers de conf. En jouant sur l'ordre de chargement du ClassPath on peut ainsi surchager les fichiers de conf "par défaut" présents dans le WAR/EAR.

Ces deux dernière options sont assez comparables et leur mise en ouvre va dépendre de la liberté qu'on a pour configurer le serveur d'application. Certaines équipes d'exploit' donnent la main sur la commande de lancement de la JVM, d'autres préfèrent la blinder mais laissent libre accès aux répertoires de libs ...

Qu'en pensez vous ? Donnez votre avis : http://doodle.com/d4qdxc87w76i524c

31 mars 2010

Excellent article sur Spring, l'innovation et la standardisation

Je viens de lire cet excellent article qui compare le chemin parcouru par Spring et JBoss au travers de la normalisation de leurs technologies par le Java Community Process (JCP).

L'article sait garder un bon niveau de neutralité et expose très clairement ses arguments. Spring a toujours joué les pieds dans le plat et la critique - justifié dans de nombreux cas - alors que la ligne prise par JBoss a toujours été claire vers la normalisation d'Hibenate et de Seam par le JCP.

Si les deux protagonistes n'ont de toute façon pas toujours été très fair-play, il en sort :

  • un Seam 3 basé sur les normes de JavaEE6, et une image de JBoss comme moteur sur ce sujet;
  • un Hibernate, déjà standard de fait, sorti renforcé par la norme JPA (il y a encore des gens qui ne veulent pas entendre parler d'Hibernate, amusez vous bien les gars ...);
  • un Spring 3 qui déçoit pour son peu de contenu (pour ceux qui n'ont que faire d'OSGi en tout cas);
  • une norme @Inject qui a le mérite d'exister mais qui fait un peu court. Spring implémente bien cette norme mais elle ne suffit pas à bâtir une application;
  • une image déplorable de Spring sur son intervention tardive et polémique dans le JCP. Autant la critique du modèle EJB était argumentée, autant la participation de SpringSource à la JSR JavaEE6 aurait pu être bien plus constructive. C'est bien de taper dans la fourmilière mais au bout d'un moment il faut aussi savoir reconstruire;

    Sur l'adoption tardive des technologies par Spring je suis plus réservé. Les dates indiquées semblent montrer un retard à l'allumage de ~3 ans, je ne les met pas en doute, mais ces technologies nécessitent un temps d'appropriation et de maturation. Si Spring s'était jeté sur JSF 1.0 dès sa conception on aurait jamais eu SpringMVC. Le rôle que c'est donné Spring de ce point de vue est de proposer un regard critique et argumenté sur la mise en oeuvre de ces standards, je ne suis pas choqué que ça nécessite un peu de recul.

    06 décembre 2009

    un petit tour au ParisJUG

    Antonio Goncalves vient lundi animer la session BreizhJug en présentant JEE6

    JavaEE6-done_small

     

    Pour lui rendre la politesse, je viendrais le lendemain faire un tour au ParisJUG, en tant que simple spectateur, pour un match JEE6 vs Spring3.

    563030719 La session sera filmé et retransmise sur NT1 dans Catch Attack :)

    L’occasion de participer à une séance dédicace pour souligner la forte présence francophone dans le monde de l’opensource : Antonio pour son livre sur JEE6, Julien Dubois pour Spring par la pratique, Emmanuel Bernard pour Hibernate Search in Action, et Arnaud Héritier accompagné de votre serviteur pour Apache Maven. Pour avoir les liens je vous suggère de passer par le blog d’Arnaud qui a déjà fait le boulot et m’économise ainsi de nombreux copier/coller.

    … enfin, à condition de ne pas être bloqués par la grève SNCF qui s’annonce :-/

    11 août 2009

    Java Cloud computing - an 1

    Vous faites peut être partie de ceux qui ont reçu un "ID" pour jouer avec Google App Engine for Java.

    Vous avez peut être testé le support "EC2" de Hudson pour bénéficier d'une réserve de puissance lors des piques de charge de votre intégration continue.

    Dans tous les cas vous êtes convaincu que le cloud computing n'est plus une vue de l'esprit mais bien une solution concrète et disponible aujourd'hui ?

    Et bien réjouissez-vous : VMWare vient de se payer SpringSource, dont l'engagement en faveur d'OSGi est bien connu. Imaginez donc une ferme de Spring DM Servers, supervisée par un monitoring Hyperic (racheté par SpringSource), et accessibles en mode cloud via des machines virtuelles sur laquelle vous déployez depuis Eclipse vos bundles OSGi métier ...

    Moi, dans ma vraie vie je fais encore du JEE, et encore je viens juste de migrer en Java5, mais on peut tout de même rêver un peu ;) Quoi qu'il en soit, raisonner en "cloud" va devenir une facette importante du métier, alors préparer vous !

    Besoin de pistes ? Allez lire le blog du touilleur qui vous expliquera tout sur le sujet !

    08 avril 2009

    Google App Engine passe à Java 6

    Après être resté chasse gardée des développeurs Python, Google App Engine passe à la vitesse supérieure en répondant à la demande numéro 1 : supporter Java !

    Au programme : Java 6, Servlets, JavaMail, mais aussi JPA pour accéder au DataStore google. Autrement dit, la plateforme de rêve pour héberger nos applications Java / GWT ! Google propose même un plugin pour Eclipse afin de fournir un environnement clé en main.


    Si on arrive à coller un Spring (ou plus probablement un Google Guice) là dessus, on pourra déployer sur App Engine la même application que sur notre serveur JEE :D

    Il serait bon que Google s'intéresse plus à la JSR 299, qui portait au départ sur jBoss Seam mais c'est réorientée sur l'injection de dépendance. Elle permettrait de ne pas être lié à un framework particulié dans notre code. Les annotations proposées sont inspirées de Google Guice, autant dire un appel à peine voilé au soutien de Google - qui répond absent pour l'instant - et si celui-ci y va, SpringSource sera plus ou moins obligé de suivre (en tout cas, d'y réfléchir).

    Je suis invité chez Google France demain soir pour discuter avec la communauté de cette annonce technologique phare (à moins qu'ils veuillent m'embaucher ?). Plus d'infos très bientôt donc ! 

    19 novembre 2008

    Témoignage Spring

    Le journal du net organise un "sondage" intéressant sur l'utilisation de Spring :

    Il s'agit de recueillir des témoignages courts sur la mise en oeuvre du framework, ses points forts et ses faiblesses. Si la représentativité de ceux qui témoignent n'est pas forcément significative, il est toujours intéressante de savoir ce que les autres ont retenu du framework, et ce qu'il lui reprochent. 

    Voici mon témoignage. Notez l'excellent (si si) jeux de mot.

    11 novembre 2008

    un pas de plus pour Groovy

    SpringSource vient de s'offrir G2One, la société fondée pour soutenir le développement de Groovy et Grails.

    Ce rapprochement se fait assez naturellement, Grails étant fortement basé sur Spring et Spring réservant une place de choix à Groovy via son namespace "lang".

    Qu'est-ce que ça va changer ?

    En dehors des aspects produit, support, formation, etc, cela offre à Groovy une reconnaissance qu'il n'avait pas totalement réussi à gagner par ses propres moyen en dehors d'un public "geek" -comprenez auprès de nos décideurs.

    Si je propose de coder une application stratégique en Groovy, même pour X bonnes raisons, je prend le risque de passer pour un doux-dingue technophile.

    Si j'ajoute .. "qui s'intègre totalement avec Spring, qui est d'ailleurs le premier contributeur de son développement et de son support", ça fait tout de suite un argument plus concret. Délicat de tenir le même discours pour Jython ou BeanShell, quelques soient les points forts de ces langages.

    J'espère que Spring 3 nous promet de belles surprises sur ce sujet ;)

    17 juin 2008

    Je vote Spring @MVC


    Depuis X mois, je tergiverse sur le framework web que je compte "pousser" pour remplacer le vieillissant Struts 1.x.

    Suite à SpringOne08 où j'ai suivi la session de Keith Donald sur Spring MVC 2.5 (rebaptise "@MVC"), WebFlow et spring JS, je penche nettement vers cette solution.

    Certes, le produit n'est pas révolutionnaire - on reste dans du MVC classique. Mais ...
    • Son principe général, comparable à Struts (MVC oblige), facilite l'apprentissage pour les développeurs Struts : on peut expliquer chaque notion en se référant à l'équivalent Struts, par exemple pour la librairie de tags.
    • Les conventions et annotations permettent de réduire très sensiblement la configuration, ce qui est très appréciable
    • Le mécanisme proposé par Web Flow est un très net avantage, permettant de faire des IHM robustes
    • La documentation est de bonne qualité, avec de nombreux exemples
    • La pérennité de l'outil ne fait pas de doute
    • L'intégration Ajax et le support des widgets Dojo permettent de faire une appli raisonnablement sympathique, sans nécessiter des développeurs JavaScript / web 2.0.
    Pour des besoins plus "sexy", je pencherais pour GWT, ou Flex, mais pour mon appli actuelle, plus que classique dans son approche, mais destinée à durer (...), je préfère miser sur un cheval fiable et qui sera toujours d'actualité dans X années.

    10 juin 2008

    en direct de SpringOne

    Je vais consigner mes notes concernant la conférence SpringOne sur google docs

    J'espère que cela servira à ceux qui n'ont pas pu s'y rendre pour X raison, et que ça donnera envie à ceux qui ne connaissent pas.

    Je vais essayer de transcrire l'atmosphère à la fois chaleureuse et studieuse de ces conférences. Pour ma part j'y ai appris beaucoup de choses lors des précédentes éditions, bien plus que des formations "encadrées" si on sait suivre les pointeurs proposés par les intervenants.

    09 juin 2008

    springOne J-2



    Encore deux jour avant l'édition 2008 de SpringOne.

    Mes deux sujets cible : AOP et OSGi

    AOP parce que je suis convaincu qu'on peut faire de grande chose avec les principes de programmation par aspects, mais qu'on en sous-estime la puissance au profit d'une approche plus procédurale.

    OSGi parce que c'est un ovni pour moi : j'ai du mal à voir ce qu'il peut m'apporter, par contre je vois bien les contraintes qui l'accompagnent (gestion des "bundles", librairies qui ne marche plus à cause d'un Class.forName(x)...). Peut être des débuts de réponse au cours de ces deux jours.

    Mon programme - sauf modification au fil de l'annimation locale :

    day 1:
    Spring 2.5 on the Way to 3.0
    OSGi Programming Model
    Spring Dynamic Modules for OSGi
    Five Aspects You Don't Know About
    dernière session ?

    day 2:
    Open Forum with Rod Johnson
    Applying the Spring Frameworks for Model-Driven Architecture ou What's new in Spring MVC 2.5 and beyond
    Inside SpringSource Application Platform
    Making Sense of AOP Choices ou Classloading in OSGi - mince, c'est en même temps :-/
    Spring Architecture and Best Practices ou Spring Web Flow 2.0 Deep Dive

    Je me suis rapidement rendu compte qu'il fallait choisir sa session en fonction de l'interlocuteur : mon niveau d'anglais assez pittoyable m'oblige à sélectionner les "BBC-english-compliant-speakers". Un sujet apparement allèchant, si on ne comprend pas grand chose, n'apporte rien. Et pusi le but de ces conférences c'est aussi de voir autre chose. En fin de journée, quand le cerveau commence à fumer, on a parfois envie d'un sujet un peu différent, pourquoi pas RESTful Web Services in Spring ?

    Si l'un de vous est également présent à cette édition, fait moi signe - je serais reconnaissable à mon joli sac Spring-one ... comment ça tout le monde en a un ? Bon alors, un petit mail et on partagera nos avis autour d'une barguette de frites ?

    01 mai 2008

    Spring-JS

    Après Spring, Spring-MVC, Spring-WebFlow, Spring-batch, Spring-DM, etc, auras t-on bientôt droit à un Spring-JavaScript ?

    --> http://jira.springframework.org/browse/SWF-451

    En marge du projet Spring-WebFlow (dans la version 2.0), une couche d'abstraction semble développée pour permettre un accès aux librairies JS (Dojo et Ext pour l'instant) selon une logique "à la Spring".

    "

    The factoring out of a Javascript abstraction layer called "Spring Javascript" from Web Flow's JSF support. Currently, Dojo and Ext based implementations of this layer are provided. Spring.js provides:

    • A common interface for Ajax, regardless of which toolkit is being used under the covers
    • An aspect-oriented-like API for decorating HTML DOM nodes with behaviors, including client-side validation behaviors.
    "

    Le portage des idées de l'AOP dans le monde HTML/Javascript est intéressant. Après tout, les sélecteurs CSS sont un bon exemple de langage pour définir des "points de coupe".

    Je n'ai pas creusé l'investigation plus loin, mais ce serait un très bon point, vu la prolifération de librairies JavaScript comparables sur de nombreux points, mais pas forcément facile d'accès, surtout pour un développeur 100% Java qui n'y connais pas grand chose aux (très nombreux) raffinements de JavaScript.

    Plus d'infos sur http://static.springframework.org/spring-webflow/docs/2.0.x/reference/html/ch10.html

    OSGi vs JEE


    Pour ceux qui n'en aurait pas entendu parler, OSGi est (pour faire court) une architecture Java qui héberge à des applications décomposées en "bundles". Chaque bundle expose une interface "publique", la seule accessible aux autres bundles - d'où une sparation très propre. OSGi permet un redéploiement à chaud des bundles, des versions concurrentes, des mises à niveau "à chaud" ... bref plein de fonctionnalités alléchantes.

    De son côté, JEE n'offre absolument rien de comparable (en standard : Weblogic permet par exemple une mise à niveau N+1 sans interrruption de service). Java en général n'offre pas de séparation "stricte" entre modules, bien que quelques JSR tentent de ratrapper le retard.

    SpringSource - décidément très actif ce printemps - lance "SpringSource Application Platform". Pour faire très schématique, vous prener un conteneur OSGi (celui qui est au coeur d'Eclipse et de ses plugins), vous ajouter Spring-Dynamic-Modules (aka "Spring-osgi"), puis vous placez au dessus un Tomcat retravaillé pour l'occasion et vous déployez vos application web dessus.

    Dans un premier temps ça ne change pas grand chose.

    Maintenant vous remplacez votre WEB-INF/lib par des déclarations de bundles OSGi. Le war ne fait plus que quelques ko et toutes les librairies sont mutualisées. Une mise à niveau d'une seule librairie se fait sans interruption du service.
    Bonus complémentaire, OSGi vous assure que vous n'utilisez pas "par mégarde" des classes interne d'une librairie, qui risque de changer ou disparaître dans une version N+1.

    Et on peut aller plus loin en utilisant un packaging dédié ".par" pour construire l'application en bundles OSGi, tout en bénéficiant d'un des meilleurs moteur de servlet et de l'API servlet/JSP complète.

    Personne ne sera surpris de voir les prochaines versions de Websphere, Weblogic, Jboss et autres proposer des passerelles vers les fonctionnalités OSGi.

    Faut il passer sous SpringSource Application Platform ?

    Dans ma vie à moi, je n'ai pas mon mot a dire et je me coltine toujours un Websphere 5.0.2. Le sujet n'est pas là. L'intérêt est que SpringSource propose une solution JEE + OSGi qui donne un apperçu de ce que seront les serveurs d'application dans quelques années.

    Spring-DM de son côté propose un modèle de développement typiquement Spring (100% POJO) qui permet de passer à OSGi sans douleur - ce qui n'est pas gagné a priori vu les restrictions que cela implique sur la manipulation du ClassPath.

    Autrement dit, jettez un oeil à la doc Spring-DM, apprenez les ficelles d'OSGi, comme ça dans quelques années, quand il faudra migrer dynosaure-2.1 sous Websphere-12-Adanced-OSGi, vous aurez déjà préparé le terrain.

    Et pour ceux qui peuvent se le permettre, surfez sur la vague OSGi !

    01 mars 2008

    spring france embauche !

    Julien Dubois -- co-auteur de "Spring par la pratique" qui traine toujours sur mon bureau à côté de "Development without EJBs" de Rod Johson -- est sur le point de passer du côté obscur : "Directeur régional france", ça en jette ! Félicitations Julien (lecteur fidèle de ce blog - et oui, il y a des gens qui lisent mon blog !).


    D'ici un ou deux ans, après un fort développement en terre francophone, on peut donc tabler sur la création d'un centre de développement SpringSource à Rennes, renommé pour l'occasion "printemps-framework" (suite à un gros investissement du groupe PPR ?). Je me permet donc de proposer d'avance mon CV si ça se confirme ;-)


    Bon vent Julien !

    26 février 2008

    archiva passe sous Spring

    Comme tous les outils de la communauté maven, Archiva (Maven Repoistory Manager) a été construit sur le conteneur Plexus. Qu'on aime ou pas sa philosophie assez spécifique, il faut constater que cet outil manque cruellement de documentation et est méconnu de nombreux développeurs, ce qui n'est pas le cas de Spring.

    La liste de développement d'Archiva a réagit avec enthousiasme à la proposition de migrer sous Spring, malgré le gros effort que cela représente (il y a du plexus-* un peut partout).

    Je développe un outil de transition, sous le doux nom de "plexus-spring", qui vise à exécuter des composants plexus dans un contexte Spring, en traduisant les fichiers de configuration plexus et les interfaces d'initialisation/destruction dans le vocabulaire Spring.

    Après quelques errements dans les circonvolutions du code Spring, j'en suis venu à
    • Une transformation XSLT des descripteurs plexus en contextes spring
    • un namespace spécifique qui reprend dans spring les déclarations plexus.
    • une BeanFactory qui se charge de construire le composant plexus, en gérant l'injection directe dans les attributs.
    • Un BeanPostPorcessor vient compléter le tout pour gérer l'initialisation/destruction.
    Et en bonus, une classe de test PlexusInSpringTestCase pour remplacer sans modification du code les PlexusTestCase.

    Une idée apparemment bonne car on m'a tout de suite demandé le niveau de maturité de ce code pour l'appliquer sur Continuum ! Comme quoi plexus n'a pas vraiment que des admirateurs.

    Udate 29/02 :
    Je viens de démarrer pour la première fois mon application web Archiva, de la configurer et d'obtenir un premier Jar , tout ça avec Spring comme conteneur ! Il y aura probablement encore quelques ajustements à faire mais c'est très prometteur : grâce à plexus-spring, je n'ai eu aucune adaptation à faire au code d'Archiva !

    21 juin 2007

    Spring BOF

    Après les sessions de Springone, un "BOF" (table ronde) était organisé entre les "core developers" de Spring et les utilisateurs. Plein de questions sur les bons usages, les annotations, l'avenir de Spring, de JEE, la place d'Osgi face à JEE...

    Pas facile à suivre avec mon piètre niveau d'anglais, mais j'ai tout de même apris plein de choses sur ce que pourrait (?) devenir le développement Java côté serveur ... enfin dès que mon client favori aura accépté de larger son vieux WebSphere 5.0 et sa JRE Java 1.3 ! Alors quand on m'annonce le support de Java 6 ou des JSP 2.1, je ne me sens pas tellement concerné.

    Des POJOs sous le capot

    Lors de la conférence sur l'utilisation avancée de l'AOP avec AspectJ, Chris Richardon (Mr POJO) s'est permi une question provocatrive : "un POJO avec des annotations est-il toujours un POJO ?". C'est vrai qu'un objet métier "POJO" avec des annotations Hibernate, Acegy-security et Spring n'a plus vraiment l'air "Plain Old Java" !

    La réponse courte : Un POJO annoté "@Entity" signale juste ce qu'il est, pas ce qu'on doit faire avec, c'est donc tout à fait acceptable (comme @Sensible pour la classe Document par exemple).

    Par contre, une annotation du type @Tracable montre ce que la classe attend, à savoir d'être logguée par un framework externe, même s'il n'est pas explicitement défini. Cela crée donc un couplage indirect qui est contraire à l'esprit POJO.

    J'en ai profité pour lui poser quelques questions sur son mini-framework "arid". Celui-ci permet de définir les méthodes de recherche hibernate du genre "findByNameOrderByAge" dans une interface Dao, l'implémentation étant produite à la volée par analyse du nom de la méthode, comme c'est le cas avec Ruby-on-rails ou Grails.
    D'après mes mesures sur un projet réel, 90% des "finders" Hibernate sont de type findById ou findBy. Cela pourrait donc être un réel gain de productivité.

    AOP

    Spring 2.0 introduisait le support d'AspectJ, spring 2.1 pousse le bouchon encore un peu plus loin. L'AOP semble arriver à complète maturité après 10 ans (!) de développement. Quelque exemples montrent que l'AOP ne se limite pas à la démarcation transactionnelle :
    • Contrôle de règles d'architecture (Design Level Assertion), du genre "la couche web ne fait pas d'appel direct à hibernate ou JDBC" (ça c'est vu)
    • Ajout des fonctionnalités transverses (log détaillé sur exception, monitoring, ...)
    • Gestion de l'architecture (reprise sur échec, basculement à chaud...)
    • Intégration au modèle...
    Il y a probablement plein de bonnes choses à tirer de l'AOP, en particulier pour simplifier le code et éliminer les copier/coller. Il faut jute l'ajouter à la trousse à outil et y penser à chaque fois qu'un problème "transverse" est identifié.

    DuckTyping

    Adrian Coyler (développeur d'ApectJ) a fait une présentation "technique", présentant les langages dynamiques (jRuby, ...) et le fameux "DuckTyping" ... sauf qu'il a une vision très originale et animée du duck-typing, à grand renfort de volailles et de clavier waterproof. Heureusement qu'ils sont plus sérieux lorsqu'ils codent chez Interface21 !

    Le staff d'Interface21 en action

    Lors de la conférence de ce matin, le staff dirigeant d'Interface21 était assis sur la rangée de sièges juste devant moi : 5 portables ouverts sur les genoux pour préparer l'annonce officielle de certification de Spring par IBM sur toutes les versions de Websphere (Mainframes compris).

    Amusant de voir les responsables de la société qui devient incontournable animer un blog et bosser sur une chaise pliante, portable sur les genoux, au mileu d'une foule dense, et préparer une annonce stratégique. J'imagine assez mal Serge Kampf et consors dans la même posture ! Qui a parlé de culture start-up ?

    Domain Design

    Eric Evans (le papa du "Domain Driven Desing") faisait ce matin une présentation sur les stratégie de modélisation du domaine métier, et en particulier sur la reprise d'application existantes mal strucutrées.
    • Option 1 : On jette et on reconstruit un code propre. Il n'a jamais vu cela fonctionner, c'est extrèmement couteux, et on a au final un code qui marche a peine aussi bien que le précédent en ayant couté le double et en étant pas plus simple à maintenir
    • Option 2 : refactoring intensif. Intéressant car il ne gèle pas les évolutions de l'existant, mais potentiellement très imparfait, et surtout pas visible en terme de retour sur investissement (le fameux "qui paye pour ça ?".
    • Option 3 : le "hack" du code existant pour venir piocher le "core model". Pas vraiment très satisfaisant
    • Option 4 : dédier un modèle à chaque contexte, et créer des couches de médiation. Ca rejoint un peu la problématique SOA (transformation des données XML d'un système à l'autre).
    D'après lui c'est LA solution fiable, à condition d'accepter deux points :
    1. Une application ne peut pas être totalement propre
    2. Il n'y a pas un modèle, mais N modèles associés à N contextes
    Je reste convaincu par le refactoring, mais il faut bien reconnaître qu'il a ses limites sur du code vraiment très volumineux ou totalement monolithique.