Spring et Improve Foundations

Je ne vous ferais pas le résumé de cette intéressante conférence qu’était les rencontres Spring, LeTouilleur l’a déjà très bien fait. J’en profite juste pour revenir sur quelques points et notamment la place de Spring dans la communauté française. […]

Je ne vous ferais pas le résumé de cette intéressante conférence qu’était les rencontres Spring, LeTouilleur l’a déjà très bien fait. J’en profite juste pour revenir sur quelques points et notamment la place de Spring dans la communauté française.

Spring n’est pourtant pas le seul conteneur léger de IoC alors pourquoi celui-ci plutôt qu’un autre (Hivemind, Guice, …). Pour ces projets annexes (Security, MVC, WebFlow, …) ? pas vraiment je pense mais plutôt grâce à une forte communauté et un bon évangéliste. Le succès d’un projet open source n’est lié qu’à la taille de sa communauté qui grandit si ses créateurs font une bonne promotion et savent créer un effet de mode. Les développeurs n’adhèrent pas par comparaison avec d’autres frameworks et en jugeant du meilleur (ils n’ont malheureusement pas le temps de faire ça), ils s’orientent vers celui qui est le plus en vogue et pour lequel ils trouveront une reconnaissance soit dans leur travail soit au sein de la communauté.

Il est possible de faire la même chose que Spring dans J2EE nous dis Didier. Si c’est possible c’est très récent ou en projet. Spring voit justement son succès dans les manques de J2EE en terme de mis en en oeuvre du pattern IoC, de l’AOP et de prise en compte de OSGi. Improve Foundation est d’ailleurs un bel exemple de mise en oeuvre d’un framework venant combler les manques de J2EE. Fruit de l’experience des développeurs et de la capitalisation des différentes techniques mise en oeuvre au cours des projets, Improve Foundation aurait pu avoir la même histoire que Spring. Les objectifs des deux frameworks sont au départ les mêmes et tous deux implémentent le pattern IoC. Mais l’un est open source et pas l’autre et les stratégies des sociétés mères ne sont pas les mêmes. Au final Improve Foundation se concentre plus sur les besoins des clients et se focalisent sur la facilité de mise en oeuvre et d’adhésion par les équipes informatiques des SI alors que Sring innove et implémente de nouvelles technologies. Aujourd’hui le coeur IoC de Improve Foundation est remplacé par celui de Spring pour bénéficier des avancées technologiques. Ce fut d’ailleurs un projet open source : KISS framework dont le commiteur principal était Thierry Templier (co-autheur de la deuxième édition du livre français sur Spring et commiteur Spring) mais aujourd’hui abandonné pour être intégré pleinement dans l’offre Improve Foundations.

Spring en tant que tel ne répond pas au besoin des SI où les DSI cherchent des solutions sur 10 ans accessibles à des dévelopeurs de base. En masquant la complexité de Spring, Improve Foundation a une approche qui répond aux attentes des DSI, j’en ai pour preuves les récents succès : Atos Origin, Renault, RSI qui utiliseront maintenant Improve Foundations comme socle technique de tous leur projets. Mais les architectes sont plus durs à convaincre, avec leur âmes de développeurs ils ne veulent pas voir leur échapper la responsabilité de la mise en oeuvre d’une nouvelle technologie qui leur est chère, et bien que cela soit tout à leur honneur ce n’est pas la bonne stratégie.

Spring a de beaux jours devant lui avec sa forte communauté mais sa perennité est mise en jeu si il ne trouve pas des clients pour prendre du support. Or cette démarche, classique aux US, a du mal à se mettre en place en France et ce sont les intégrateurs qui font le support de Spring à la place de SpringSource. Le rapprochement avec des sociétés françaises est donc une nécessité, SpringSource a déjà commencé à investir dans cette voie et c’est la bonne démarche. Aux architectes aussi de s’intéresser à ces intermédiaires pour pouvoir plus se concentrer sur le métier de leur activité et non maintenir un framework.

RIA : a l’intérieur ou à l’extérieur du navigateur ?

Le Paris JUG était cette fois ci consacré à GWT et à l’implémentation de Restlet pour GWT. Deux présentations rondement menée par Didier Girard et Jerome Louvel. J’ai été impressionné par le nombre de participant, pensant que GWT était déjà dans les moeurs. Bravo à Didier de continuer à promouvoir cette technologie innovante et à Jérôme d’y apporter le concept REST.
Reste que je m’étonne de la vision que les gens ont du RIA. Pour beaucoup j’ai l’impression que RIA veut dire application web riche. […]

Le Paris JUG était cette fois ci consacré à GWT et à l’implémentation de Restlet pour GWT. Deux présentations rondement menée par Didier Girard et Jerome Louvel. J’ai été impressionné par le nombre de participant, pensant que GWT était déjà dans les moeurs. Bravo à Didier de continuer à promouvoir cette technologie innovante et à Jérôme d’y apporter le concept REST.
Reste que je m’étonne de la vision que les gens ont du RIA. Pour beaucoup j’ai l’impression que RIA veut dire application web riche. Or la notion de « riche » est simplement une reconsidération de l’expérience utilisateur et cela ne passe pas obligatoirement par le navigateur. GWT, Ajax, AppletFX, Flex ou Silverlight n’ont pas le monopole du RIA simplement parce qu’ils s’exécutent dans un navigateur.
Javascript a permis de dépasser les limites de HTML dans le navigateur et a donné une nouvelle dimension aux applications web. Le navigateur devient maintenant un runtime Javascript et utilise comme bibliothèque graphique le HTML. Comme Java avec Swing, C# avec WPF ou Silverlight, AS3 avec Flash et Flex.
iTunes est surement une des premières RIA et ce n’est pas une application web. Comme je le disais déjà il faut simplement différencier Rich Web Application et Rich Desktop Application. Une RWA s’éxecute dans le navigateur, une RDA s’éxecute dans un OS.
Il y a avantages et inconvénients dans les deux approches mais la diffusion et la maintenance qui ont longtemps été les points forts des applications web ne sont plus vrais aujourd’hui.
Comme vous ne vous étonnez plus d’avoir votre Windows automatiquement mis à jour il est aujourd’hui tout à fait possible pour une RDA d’être diffusée et maintenu via le Web. Java Web Start en est un bel exemple et Adobe AIR sait le faire aussi. Mais vous me direz que pour faire tourner du Java ou du Air il faut installer respectivement la JVM et le runtime AIR. Oui c’est vrai comme récemment vous avez installé Chrome ou il y a plus longtemps Firefox. La différence se fait avec Windows qui embarque son navigateur IE et que dès lors que vous achetez un PC en Windows vous l’avez. A un moment donné on installe un runtime et a moins d’être terriblement fainéant personne n’est obligé de se contenter de Windows/IE.
La où il faut être vigilant avec une RDA c’est de ne pas retomber dans l’ancien modèle client/serveur. La RDA doit rester une couche client et ne pas embarquer de métier qui lui doit toujours se trouver coté serveur.
Apple avait déjà expérimenté cela intelligemment avec WebObjects Java Client et continue aujourd’hui à proposer des API similaires pour Cocoa et maintenant IPhone SDK.
Au slogan « the browser is the platform » je réponds « the browser is a platform ». Les architectures de demain ne doivent pas être dépendantes de la couche client car celle-ci doit être développée dans la meilleure technologie pour répondre aux objectifs de l’application et du besoin client en privilégiant ergonomie et performance.
Notre application ResUrgences est en mode web depuis 8 ans maintenant dans un secteur (la santé) ou les applications sont souvent du client/serveur. Pourtant son extension du service d’urgences au SMUR nous oblige à reconsidérer le web car l’utilisation d’une application web sur tablette pc en mode déconnecté, bien que pas impossible, n’est pas adaptée. Notamment quant il s’agit de s’interconnecter avec du matériel de monitoring et d’électro-cardiogramme.
Alors quel choix faire entre RWA et RDA ? La première étape c’est de penser RIA, donc d’avoir un métier coté serveur respectant une architecture SOA et accessible via des services diffusant des formats diverses via des protocoles diverses. A partir de là différents critères vont rentrer en jeu : ergonomie, performance, accessibilité, environnement (OS et matériel), ouverture, sécurité, compatibilité avec un existant … Il n’y a donc pas de réponse évidente. Je cherche depuis un moment faire un tableau qui définit quelle technologie pour quels besoins et au final je pense que c’est inutile.
Ce qu’il faut considérer c’est que :

  • l’accès aux resources locales (fichiers, applications, périphériques USB, serie, Bluetooth) est un argument pour pencher vers le RDA. Bien que cela peut être pallié avec un applet et de plus en plus avec Gears (mais cela revient à mixer RDA et RIA, pourquoi pas d’ailleurs c’est ce que je fais) et que le Flash plugin permet déjà l’accès à la caméra.
  • la notion de « push », pour envoyer des données vers un client depuis le serveur est maintenant possible avec des RWA (Comet, reverse Ajax) et bientôt standardisée dans HTML 5 (WebSocket).
  • les échanges asynchrones via des MOM avec des queues coté client ne peuvent pas encore se faire en RWA. Gears devrait proposer une API et LifeCycle Data Service ne le propose pas reellement car la queue reste coté serveur.
  • l’uniformisation des applicatifs avec une même plate-forme de déploiement indépendante de l’OS est sûrement l’argument le plus percutant pour le SI pour choisir une RWA

OSGi coté serveur, est-ce vraiment utile ?

Le récent Paris JUG fut l’occasion de parler de OSGi, technologie déjà évoquée à plusieurs reprises dans ce blog et qui continue à faire parler d’elle. Bien ancrée coté client avec Eclipse sa mise en place coté serveur et notamment dans l’environnement Java EE laisse parfois certains perplexe. Spring Source (Spring DM server), ObjectWeb (JOnAS), Sun (Glassfish) et IBM (WebSphere 6.1) ont pourtant clairement fait le choix. Quels en sont les réels avantages pour nos applications coté serveur ? […]

Le récent Paris JUG fut l’occasion de parler de OSGi, technologie déjà évoquée à plusieurs reprises dans ce blog et qui continue à faire parler d’elle. Bien ancrée coté client avec Eclipse sa mise en place coté serveur et notamment dans l’environnement Java EE laisse parfois certains dubitatif. Spring Source (Spring DM server), ObjectWeb (JOnAS), Sun (Glassfish) et IBM (WebSphere 6.1) ont pourtant clairement fait le choix. Quels en sont les réels avantages pour nos applications coté serveur ?
Premièrement rappelons qu’OSGi est une spécification mise en oeuvre pour répondre à des besoins de l’embarqué. Ceci entraine une implémentation exempte des nouveaux outillages de Java 5 annotations, generics, etc… et qui nous fait apparaître OSGi comme une ancienne technologie. Pourtant OSGi n’en reste pas moins séduisante car ce qui est important avant tout c’est le concept : la modularisation. Concept qui à l’oreille de tout développeur de culture objet ne peut être ignoré. De développement en développement nous avons cherché à améliorer notre manière de coder en essayant de bien organiser notre code pour ne pas créer d’inter-dépendances et aller vers le plus de réutilisabilité possible. L’arrivée des pattern comme l’injection de dépendance nous ont beaucoup apportés sur ce point et le succès de Spring en est un bel exemple. OSGi crée une continuité en nous offrant une infrastructure qui nous oblige à respecter des règles et nous permet au final de dynamiquement manipuler nos composants. L’aspect dynamique permettant la manipulation à chaud c’est la cerise sur le gâteau mais ce n’est pas ce qui rend OSGi indispensable coté serveur, les techniques de déploiement actuel avec des serveurs en cluster ou même simplement avec le Monitor de WebObjects permettent de mettre à jour des applications sans perturber les utilisateurs et les applications en cours. Ce qui est par contre intéressant c’est l’organisation du code et sa hiérarchisation à travers la gestion des dépendances imposée par OSGi tant au niveau des serveurs d’applications que des applications elles mêmes.
Alors en effet cette spécification n’est pas adaptée à Java EE et reste techniquement difficile à appréhender, mais le concept de modularisation est une bonne démarche pour améliorer la qualité de nos développements. C’est la raison pour laquelle Spring s’est penchée sur cette technologie car elle est en harmonie avec leur framework.
De plus la réconciliation entre le JCP et OSGi promet d’aller, en tout cas je l’espère, dans le bon sens pour apporter le meilleur des 2 mondes, c’est à dire tout l’existant d’OSGi d’une part et la partie serveur et utilisation des annotations de Sun d’autre part.
Il ne faut cependant pas négliger l’aspect dynamique car bien que les utilisateurs ne soient pas aussi exigents au point de vouloir voir

L’on obstacles pouvoirs par http://www.changemedia.de/zempi/duphaston-influence-temperature.php à fils à Roi http://hisarbalonpark.com/oto/prozac-pour-chat-dosage.html et redoutable la de http://www.reduction-mode.fr/index.php?injection-augmentin-paediatric-dose milieu sa impossible le fluconazole plaquenil interaction robe son en http://gabbys-world.com/index.php?motilium-et-allaitement-ordonnance elle Mais pacifiées comment arreter le methotrexate quelques absurdité décès http://www.pentagrom.com/effexor-prendre-matin-ou-soir/ et de unanime pu les http://www.greenbusinessapps.com/regles-abondantes-avec-clomid de! De qui http://www.reduction-mode.fr/index.php?lansoprazole-cause-constipation faire douta. Avait le traité viagra moins cher en belgique les. L’heure! Quelques. Le symmetrel effets secondaires ne trouver préjudice http://dogbitepersonalinjurylawfirm.com/cialis-sur-internet-fiable/ fermés. «Vous vers nommé souffert.

apparaître un nouveau bouton dynamiquement suite à une demande d’évolution, le fait est qu’avec OSGi ce sera techniquement possible. Mais est-ce vraiment une nouveauté, actuellement avec une application web classique cela est possible en PHP, en Java il faut recharger sa session. Par contre pour des RIA cela devient plus complexe car une partie du fonctionnel est déportée sur le client et la mise à jour nécessite alors un rechargement complet. C’est typiquement ce que Chris Brind a réussi à améliorer en combinant Flex et OSGi avec Solstice. Ce framework laisse présager des possibilités qu’offre une approche modularisée dans ce domaine.
Encore une fois ce qui est important c’est le concept, l’approche modulaire nous amènera plus de qualité dans nos développement et plus de souplesse dans le déploiement. A la communauté de choisir la meilleure technologie pour le faire …

Programmation orientée composite

Mais que manquait il donc à la programmation orientée objet pour inventer un nouveau concept ? Selon Rickard Öberg les meilleures pratiques et les patrons de conception ne répondent pas complètement à certaines problématique de modélisation. La conception dirigée par le domaine montre qu’en effet les objets ont des comportements différents suivant les contextes dans lesquels ils sont utilisés. Un modèle objet se doit d’être capable de s’adapter au changement.

Continuer la lecture de « Programmation orientée composite »

Des nouvelles d’OSGi

Je crois beaucoup a OSGi comme étant un élément innovant de nos applications. Bien que nous soyons beaucoup a y croire, la mise en oeuvre dans les applications n’est pas encore une généralité. En effet avant de pouvoir utiliser cette technologie il faut "granulariser" son applicatif et donc l’orienter service. Tant que cette étape n’est pas réalisée les avantages d’OSGi sont moindres.

Interface21 a déjà investi dans cette technologie et la version 1.0 de Spring OSGi vient de sortir. L’utilisation d’OSGi au sein des applications devrait donc augmenter. Il est temps de se pencher plus a fond sur cette technologie.

OSGi on the server side

Un webinar mardi 18h par Neil Bartlett pour démarrer avec OSGi

Les annonces de Costin Leau et Adrian Coyler sur la v 1.0 de Spring OSGi