Technologies

La menace Spring !

Publié le : Auteur: vhanniet Un commentaire
technologies

Lorsqu’un commercial présente une mission Java il dit généralement qu’il faut des connaissances « Java, JEE, Spring… ». Java on voit ce que c’est. JEE aussi (en cherchant un peu, voir « A la recherche de JEE« ). Mais Spring ?

Bien sûr tout le monde sait dire, et répéter, que Spring c’est « un framework Java très utilisé en JEE qui propose l’inversion de contrôle et plein d’autres choses ». Mais concrètement :
1 – Est-ce que Spring se résume à l’inversion de contrôle (IoC) ?
2 – Puisqu’on peut faire du JEE sans Spring, peut-on faire du Spring sans JEE ?
3 – Qu’est-ce qui est mieux : Spring ou JEE ?

Ouh là… Est-ce que c’est vraiment la guerre ? Ça peut paraître un peu surréaliste d’opposer Spring et JEE mais pourtant on peut trouver sur le site d’Oracle un podcast dont le titre est éloquent : « Java Spotlight Episode 85: Migrating from Spring to JavaEE 6« . Pour résumer, comme le remarque Thibault Delor dans Spring vs Java EE: What People Forget About Spring, ce podcast dit que JEE était un peu derrière mais que maintenant qu’il a rattrapé son retard il vaut mieux utiliser le standard (JEE) que le précurseur « non standard » (Spring).

En fait, chacun jugera de ce qu’il trouve standard : est-ce que le standard c’est ce qui est décrété standard ? Ou bien ce qui est le plus utilisé ? Ou bien la nouvelle technologie qui résout les principaux problèmes du moment et vers laquelle tout le monde se tourne ? En réalité, en restant pragmatique, c’est un peu tout ça à la fois. Une façon de résumer tout ça, au delà de la formulation « guerrière » du titre, est donnée ici : Why Java EE Lost and Spring Won. Le « standard officiel », avec toutes ses lourdeurs nécessaires pour un processus communautaire, reprend souvent les meilleures pratiques qui ont émergé de la part d’individus à la pointe de la vague. On peut d’ailleurs se demander si SpringSource, la société commerciale fondée autour de Spring et rachetée par VMWare, restera aussi créative dans le futur que l’ont été les créateurs initiaux de Spring. A comparer aussi avec le dynamisme de JBoss une fois qu’il est passé dans le giron de Red Hat…
Je me souviens d’ailleurs de la première fois où j’ai entendu parler de Spring, en 2004, c’était dans dans un bouquin qui s’appelait : « Better, Faster, Lighter Java » ! C’était la grande époque des EJB qui ne marchaient jamais car trop compliqués…

Avant de présenter très très succinctement les « produits » Spring, il est utile de rappeler qu’à l’origine Spring est un conteneur allégé (*) alternatif aux serveurs J2EE. Il est comme ces derniers destinés à gérer des objets Java (J2EE) mais plutôt que des EJB il permet d’exploiter des POJO en allant tout seul récupérer/injecter les dépendances, réduisant drastiquement la nécessité d’avoir des fichiers de configuration complexes ou des déclarations pré-établies.
(*) plutôt que « léger », qui prend maintenant une autre signification comme par exemple celle d’un conteneur réduit à des applications web, le terme « allégé » décrit mieux l’idée de Spring : il s’agit de faire autant (que les serveurs J2EE/JEE) avec moins d’huile de coude.

On peut également citer d’autres conteneurs Java qui exploitent le principe de l’injection de dépendance : Guice, Picocontainer (mais plus actif depuis 2010), HiveMind (abandonné).

Alors, quels sont les frameworks qui portent l’étiquette Spring de nos jours ?
– Spring AMQP : les concepts Spring appliqués au messaging Advanced Message Queuing Protocol
– Spring for Android : facilite le développement d’applications Android
– Spring Batch : facilite le développement de programmes batch en Java
– Spring Data : décomposé en sous-projets orientés données (JPA, NoSQL, REST…)
– Spring Framework : LE framework Spring au coeur des technologies Spring. Inclus les modules AOP, Context,  MVC, OSGi
– Spring Gemfire : destiné à Gemfire, un produit VMWare orienté scalabilité applicative
– Spring Integration : orienté sur les patterns d’intégration d’entreprise
– Spring Mobile : extension de Spring MVC destiné au développement d’applications web mobiles
– Spring .NET : Spring pour .Net
– Spring Roo : améliore la productivité en automatisant des tâches de développement
– Spring Security : …comme son nom l’indique !
– Spring Social : facilite la connexion SAAS avec les réseaux sociaux via leurs API
– Spring Web Flow : extension de Spring MVC pour gérer des « procédures utilisateurs » (enchaînements longs)
– Spring Web Services : facilite le développement de web services (SOAP)

Comme on peut s’en rendre compte… Ça devient finalement aussi touffu que JEE ! …sans pour autant se recouvrir complètement.

On peut d’ailleurs en déduire les réponses 1: Non, 2: Oui, 3: Ça dépend !
On peut aussi en déduire que quand on utilise « Spring » pour désigner une compétence ça ne veut pas dire grand chose, sauf à se dire qu’on parle de Spring Framework. De la même manière d’ailleurs, « JEE » est également très imprécis sauf à dire qu’on parle d’EJB. Attention, il y a un piège : personne n’utilise les EJB ou si peu !!!

 

Image de printemps trouvée sur http://www.mrwallpaper.com/Spring-Blossom-Sunshine-wallpaper/

 

  • Vincent Hanniet

    C’est amusant, je viens de trouver une présentation intitulée « JSR-352: Batch Standardization » qui présente donc l’élaboration du standard « Java » d’écriture de programmes batch en Java. Le présentateur est… un des créateurs de Spring Batch : CQFD. Et il y a (pour le moment) un seul commentaire qui… se plaint d’entendre le terme Spring toutes les 3 minutes !! C’est à voir ici : http://www.infoq.com/presentations/JSR-352-Java-Batch