Episode 4 : Mathias découvre Spring (et un peu plus OSGI)

Dans l’Episode 2, je vous ai parlé de ma découverte de J2EE.
Si j’ai été émerveillé par la plateforme, j’avoue qu’elle était assez complexe.

C’est alors que la lourdeur des framework J2EE a donné naissance à une alternative qui s’est voulu plus simple : Spring.

J’aime bien Spring, je pense que vous le savez déjà :)
C’est pour moi en quelque sorte l’équivalent de l’esprit d’ALT.Net, mais en Java.

Ce fut alors la mode des IOC, et de l’approche orienté POJO. Quand j’ai découvert cela, je me suis rendu compte à quel point le framework d’Eclipse RCP pouvait être compliqué…
La gestion de dépendance et de publication/consommation de service devenaient extrêmement simple.

La ou Spring n’était qu’un framework, « SpringSource DM Server » est, quand à lui, un vrai serveur J2EE mais avec une architecture complètement différente de ses concurrents : il est basé sur le même moteur OSGI qu’Eclipse !

L’installation de nouvelles applications vous semble pénible ? SpringSource DM Server offre un « AppStore » pour installer un nouveau service et ses dépendances en 2 cliques!

Pour ceux qui ont lu mon billet sur WebMatrix, la fonctionnalité n’est pas tout à fait la même que c’elle du produit Microsoft.Vous pouvez ici installer bien d’autres choses que des applications Web: des ESB, des serveurs Web (car oui, en Java, on a le choix entre Tomcat, Jetty et autres), etc.
Vous voulez installer un serveur de Messaging ? Installer ActiveMQ en quelques cliques : http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.activemq&version=5.3.0

Vous trouvez plus d’infos sur http://www.springsource.com/products/dmserver/repository


En plus de tout ces avantages, SpringSource DM Serveur offre un interface d’administration d’un pure merveille, j’en bave quand je vois que Microsoft reste attaché à sa MMC…
Et comme si ça ne suffisait pas, SpringSource ont racheté Hyperic qui est une appli Web de Monitoring applicatif, ce qui rend l’administration de votre serveur  encore plus professionnel.

Petite conclusion:

  • l’IOC c’est cool, vive l’approche POJO
  • OSGI c’est de la bombe. Cela permet aussi bien de gérer des plugins dans un IDE, que des middleware dans un serveur d’applications
  • l’installation d’une plateforme applicative doit être simple et facile, autant que de lancer un Setup de EasyPHP ou de cliquer sur un lien d’un « AppStore »
  • vive les interfaces Web d’administration, à mort la MMC

Episode 3 : Mathias découvre Eclipse (et un peu OSGI)

Dans l’épisode 2, je vous ai dit à quel point les serveurs J2EE pouvaient être complexe dans la gestion d’application.
Il en est de même dans le monde des IDE avec la gestion des plugins.

Tout en étudiant J2EE, je suis tombé amoureux de mon IDE Java préféré : Eclipse. Pas seulement pour sont utilisation, mais aussi pour son architecture.

En effet, la réalisation de plugins pour Eclipse se fait de manière ultra puissante. A tel point que le « noyau » d’Eclipse peut être complètement extrait pour faire sa propre application qui n’a rien à voir avec un IDE : c’est le framework RCP (Rich Client Platform).
J’ai d’ailleurs à l’époque réalisé une application RCP pour la gestion de budget d’achat de livres pour les bibliothèques.

Malheureusement, la pauvreté des composants graphique en Java faisait du tors à cette plateforme.
Mais je restais subjugué par le moteur de plugins :

  • Les plugins sont isolés afin que si un plugin crash, les autres continuent leur vie
  • Les plugins sont aussi isolé coté sécurité : un plugin ne peut pas accéder aux codes d’un autre plugin si ce dernier ne l’a pas explicitement rendu « publique »
  • Les plugins peuvent publier et consommer des services, avec un model très élégant
  • Il y a une gestion de dépendance entre les plugins, avec la prise en compte des versions
  • L’installation et la mise à jour des plugins se fait d’une simplicité déconcertante

En fait, si la gestion des plugins est si balaise c’est car elle provient d’un standard de « développement par composant » : OSGI.

L’alliance OSGI est un organisme de personnes qui se mette d’accord ensemble sur des specs concernant les frameworks OSGI. C’est encore la que Java écrase .Net par sa maturité : il n’y a pas de monopole, il y a bien plusieurs acteurs derrière un « standard » ouvert qui va connaitre de multiples implémentations.

OSGI est donc un framework complexe de gestion de « modules » qui exposent des « services ». N’hésitez pas à lire le WIKI qui explique ça très bien : http://en.wikipedia.org/wiki/OSGi

En conclusion, Eclipse est une plateforme riche en plugins grâce au coté Open-Source de l’IDE, à l’API de plugins très bien faite mais aussi à l’aide du plugins pour développer des plugins :)

Qu’en est-il du coté .Net? VisualStudio a-t-il le même succès concernant le développement ce plugins? Offre-t-il une architecture de plugin aussi puissante? On verra ça dans un autre épisode ;)

ALT.Net et l’orienté objet

La dernière réunion ALT.Net a été présentée par Frédéric Fadel sur le sujet: L’orienté objet : erreur historique ou la voie à poursuivre ?

Je remercie Freddy pour sa présentation et Octo pour leur accueil.

En résumé, nous avons évoqué les problèmes avec les langages objets, et ce qui nous fait perdre en productivité.
Pour cela, il faut définir exactement ce qu’est l’Objet: d’après Freddy : Héritage, Composition, Polymorphisme.

D’après lui, l’héritage est un handicap, la composition est une bonne chose, le polymorphisme aussi.
Lire la suite

Java for iPhone

Pour les fans de .Net et de l’iPhone, vous savez sans doute que vous pouvez vous éclater avec MonoTouch.
J’en profite pour dire que JB Evain en parlera aux TechDays.

La particularité et le défi de MonoTouch, c’est que le processeur de l’iPhone ne supporte pas une opération nécessaire à la compilation à chaud (JIT), qui est la base des langages sur une VirtualMachine (.Net et Java). L’application Mono est alors compilée nativement, avec une suppression des bibliothèques du framework inutilisées.

Et Java alors, est-ce que la communauté compte faire quelque chose?
Et bien une startup, Flexycore, l’a déjà fait: iSpectrum! Et le produit est gratuit pour les projets Open-Source!!! Ce qui n’est pas le cas pour MonoTouch.

Voici un aperçu de ce qui est possible:

Certes, la démo n’est pas « bandante », mais derrière, il y a le support de J2ME, du JavaScript, les API de l’iPhone (comme le GPS) et bientôt l’API OpenGL ES.
Est-ce le retour de Java pour les jeux mobiles?

Vous êtes plutôt Microsoft ou Google?

Cela fait longtemps que vous vous posez la question, et à l’aide de notre questionnaire réalisé par de grands psychologues, vous allez enfin connaitre la réponse!

Ce matin, aux alentours de 5h30, vous vous levez pour allumer votre portable qui démarre sous…

– Windows bien sûre
– Google chrome OS, c’est très tendance et vous avez  juste besoin de surfer

Tiens, on dirait que vous n’êtes pas le seul debout à cette heure! Vous commencez à chatter sur…

– GTalk
– MSN
– une client multi-protocole… ah si vos amis pouvez switcher de MSN vers GTalk…

On vous a parlé de « keyboard cat » sur le net, vous ouvrez alors pour surfer…

– Internet Explorer, c’est le meilleur
– Google Chrome, c’est plus rapide

Vous recherchez l’info grâce à…

– Google évidement
– Yahoo forever
– Bing ça déchire

On vous parle d’un coin de paradis sur terre. Vous allez chercher l’adresse sur…

– Google Map
– Bing Maps

A votre tour, vous voulez publier vos photos de vos dernières vacances. Vous les publiez sur…

– Flickr
– Windows Live
– Picasa Web Album

C’est le moment de vérifier vos Emails, vous allez donc sur…

– Windows Live (Hotmail)
– GMail
– Tout ça c’est « Has been », vous êtes déjà sur Google Waves

Un mail vous parle de votre prochaine réunion ALT.Net. Vous vérifiez votre disponibilité sur…

– Toujours Windows Live
– Google Calendar

Ouf, quelle mâtiné ! Il est temps d’aller bosser. D’ailleurs, vous aimeriez bien changer de boulot, et vous rêvez secrètement d’être employé chez…

– Microsoft rules the World!
– Google c’est trop Hype!

A force de surfer le matin, vous allez être en retard au boulot. Votre boss vous le rappelle sur votre téléphone qui est un…

– HTC Hero/Dream ou Nexus… n’importe du moment qu’il y a Android dessus
– HTC Touch/Diamond ou autre avec Windows Phone, c’est une valeur sûre

Vous voila à la fin de la journée, vous pouvez enfin rentrer chez vous et bosser sur votre projet perso OpenSource qui est hébergé sur…

– Codeplex
– Google Code

Vous êtes tendance, et vous faites du Cloud Computing. Pour vous, la meilleure plateforme c’est…

– ASP.Net sur Windows Azure, le C# est le meilleur langage du monde
– GWT sur GoogleApp Engine, Java reste une valeur sûre, mais vous attendez avec impatience la sortie de Noop

Vous en profitez pour mettre à jour votre CV. Vous utilisez pour cela…

– Un bon vieux Microsoft Office, Word il n’y a que ça de vrai
– L’avenir est sur le net, vous préférez Google Doc
–  Word c’est bien, mais Office Live c’est mieux!

Il est déjà 1h du mat’, il faut vous coucher. Vous commencez à faire des rêves…

– Noir et Blanc, en costume/cravate
– Tout en couleur, avec votre T-shirt de Hippie « Geek inside »

Comptabilisez vos réponses, et grâce à nos algorithmes mathématiques très complexes, la science et la psychologie vont déterminer de quel côté vous vous situez!

Lire la suite

Google serait-il le future papa de Java?

C’est la première question que je me suis posée en lisant l’article: http://blog.developpez.com/adiguba/p8101/java/google-noop/

Ce qui est sûr, c’est que Google investi pas mal dans Java: GWT, la JVM d’Android, et maintenant Noop: http://code.google.com/p/noop/

Noop est une proposition d’un nouveau langage pour la JVM.
Certains prétendent que le langage Java va mourir, qu’il est coincé et n’évoluera plus, et que son successeur peut être Scala.
Moi qui suit fan de Groovy, je suis heureux de voir que SpringSource prennent en charge son évolution ( http://www.springsource.com/products/grails )
Bref, la JVM n’est pas prête de mourir! Les alternatives à Java se font sérieuses, et Google est maintenant de la partie!!

Noop se veut aussi un langage offrant le meilleur de Java, dont évidement l’API GoogleCollections: http://code.google.com/p/noop/wiki/Features#Good_stdlib

Comme je l’avais dit dans nos discutions Alt .Net, les langages ne se contentent plus d’offrir des mot-clés pour raccourcir le code, ils offrent maintenant des mot-clés pour faciliter l’utilisation de Framework:
– les mot-clés de Linq facilite l’utilisation du framework du même nom
– des mot-clés permettent d’utiliser aisément le framework de parallélisation PFX: http://prismwiki.codegear.com/en/Asynchronous_Statements
– d’autres mot-clés permettent de faire du « TDD »: http://en.wikipedia.org/wiki/Spec_Sharp

Google propose avec Noop des facilités de langages pour exploiter les frameworks de tests unitaires, le mocking, l’IOC, etc..

Alors je dis et je re-dis: Vive la JVM, vive les polyglottes et vive Google!

(J’en profite pour faire découvrir aussi le langage http://fandev.org/ qui est très orienté multilangages et Web)

GUICE : un framework de DI pour Java

Je pense que la Dependency Injection est une valeur fondamentale à l’écriture d’un programme, et je l’utilise tous les jours.
Je suis un adorateur (voir expert) de Spring/Spring.Net, et j’affectionne l’écriture de la structure du programme en XML.

Mais cette technique est très largement contestée :

  • nécessite un éditeur XML « intelligent » (ce qui est le cas grâce à SpringIDE) pour la complétion de la structure mais aussi des types.
  • interprétation au Runtime, et donc erreurs potentielles découvertes qu’au dernier moment.
  • verbeux
  • mauvaises performance (lecture du XML…)

Ça a aussi ses avantages, c’est pour ça que je reste adorateur de Spring, mais ce n’est pas le sujet…

J’ai déjà souvent eu ce débat avec Romain dans le monde .Net (voir http://ninject.org).
Je connais très mal les alternatives à Spring dans le monde Java, mais je connais celle de Google : Guice.

Voici un tuto/introduction très convaincante.

Pour ceux qui ne connaissent pas Ninject ou Guice, voici un peu le principe :
Au lieu de rédiger un XML, on utilise massivement les annotations (attributs en .Net) pour spécifier les injections. Ceci est aussi possible en Spring (technique dite Autowire) mais l’utilisation du XML reste nécessaire pour personnaliser plus finement les dépendances entre instances.
Dans le cas de Guice, au lieu de rédiger un XML, on créer une classe Module qui réalise le mapping entre une interface et la classe concrète à instancier/injecter.
On peut spécifier bien plus de chose que cela, mais je vous laisse lire l’article pour découvrir par vous même.

Pour ceux qui veulent suivre le débat « Spring vs Guice » ou « XML vs Code », voici le point de vue de la documentation officielle de Guice.

Suivre

Recevez les nouvelles publications par mail.