Accueil > Veille > Notre blog de veille > Java, le papy du Web : sa pertinence hier, aujourd’hui, et demain

Java, le papy du Web : sa pertinence hier, aujourd’hui, et demain

Rudy Rigot 9 septembre 2010
6 commentaires

Malgré leur succès sur le terrain, la question de la pertinence des technologies Java dans le paysage du Web moderne est une problématique qui revient relativement fréquemment, surtout dans la bouche des professionnels de la maîtrise d’ouvrage qui s’avouent eux-mêmes parfois un peu dépassés par les avantages et inconvénients techniques de chaque alternative. Leur interrogation est tout-à-fait légitime : beaucoup savent que le langage Java a été créé il y a une quinzaine d’années (préhistoire, que dis-je, big bang du Web !), et qu’il a été adapté plus tard pour le Web, et non créé pour lui.

"D’accord", nous dit-on, "Java a très bien survécu jusqu’ici ; mais survivra-t-il aux prochaines ères glaciaires, éruptions volcaniques géantes, chutes de météorites, auxquelles le Web nous a habitué depuis sa formation ? Et auquel cas, sa fragilité potentielle face à ces phénomènes n’en fait-elle pas une solution non-pérenne ?"

Le problème est sensiblement plus compliqué que ça, aussi je vous propose d’embarquer pour un tour d’horizon qui se veut objectif, synthétique et honteusement vulgarisé des technologies Web Java face à ses concurrents en 2010, et de vous présenter ma vision plus subjective de professionnel du Java Web quant à ses perspectives d’évolutions logiques, aussi dramatiques puissent-elle s’avérer !

D’où viens-je, qui suis-je, mais surtout dans quel état j’ère ?

PNG - 11 ko

Déjà, comme il est communément su, Java est le fruit d’un rendez-vous manqué entre Sun Microsystems et la domotique, censée révolutionner notre chaumières à l’aurée du rêve de l’an 2000. Le langage était pensé pour savoir manipuler des "objets" (qui étaient, réellement, des "objets" physiques : volet, four micro-ondes, etc.) et leur appliquer des actions, que l’on appelait "méthodes". L’intérêt populaire pour la domotique attendu par Sun jouant les arlésiennes, la domotique est enterrée ; Java est offert aux développeurs de clients lourds, qui commencent à trouver des attraits intéressants à sa manière d’implémenter l’orientation objet. La domination de Java comme langage de référence pour l’orienté objet est en chemin...

Alors que le Web statique (ou très peu dynamique) s’étend exponentiellement, le besoin se fait de plus en plus pressant d’outils qui soient capables de générer le code HTML à la volée, au lieu des traditionnels fichiers HTML agrémentés de quelques scripts CGI limités. La mode étant à l’objet Java, quelqu’un y voit une manière simple de représenter la requête HTTP, la session HTTP, etc., comme des objets programmatiques, et Sun crée un ensemble de bonnes pratiques et d’outils (on appelle ça "framework") pour appliquer les concepts Java au Web, framework qui sera plus tard renommé en le "JEE" qu’on connaît aujourd’hui.

PNG - 7.2 ko

A la même époque, d’autres visionnaires attaquent le problème par l’autre côté : au lieu de produire tout un ensemble d’outils généralistes et pré-installés dans un framework pour attaquer un langage très métier, pourquoi ne pas plutôt insérer du script dans le HTML pour le transformer partiellement en code exécuté du côté du serveur ? Parmi ces visionnaires, le langage PHP fera surface, et prendra la place qu’on lui connaît aujourd’hui.

Cela dit, la transformation de la chenille PHP en papillon PHP ne s’est pas faite en un jour, et il aura fallu quelques versions majeures avant que PHP n’implémente finalement une orientation objet pour sa partie métier (les premiers éléments apparaissent dans PHP4 en mai 2000, et l’implémentation ne sera pas complète avant PHP5.3 en juin 2009). Faisant face aux détracteurs de son orientation très "couche vue" (le "V" dans "modèle MVC"), des outils permettant de structurer le code (rappelez-vous : "frameworks") font leur apparition, et transforment le PHP en langage mature, capable de gérer tout type de complexité d’application Web.

Dans le même temps, les détracteurs de la lourdeur du framework Web Java permettent également à Sun de développer ses technologies orientées script (JSP/taglibs), rapprochant d’année en année les deux technologies l’une de l’autre, et les rendant progressivement capables de répondre aux mêmes besoins.

Vroum ?

Une fois n’est pas coutume, je me permets une analogie un peu tirée par les cheveux : admettons que vous n’ayez pas pour but de construire un site Web avec tous les services dont vous avez besoin, mais de construire une voiture avec toutes les options qui vous font envie, lesquelles évoluent au cours du temps. Imaginons que vous n’avez pas besoin de mettre votre site en ligne, et de lui trouver des utilisateurs ; mais que vous avez besoin de faire rouler votre voiture avec options. Vous y êtes ? Bien.

JPEG - 22.8 ko
Creative Commons - photo de Jim Linwood

Dans ce cas, vous pouvez considérer Java comme un socle automobile très solide, mais très, très, (trop ?) complet, une architecture nativement compatible avec tout type d’essuie-glace, auto-radio, ou climatiseur, moyennant quelque câblages particulièrement complexes. Pour vulgariser catastrophiquement, lorsque vous achetez la voiture, vous achetez aussi tous les outils qui vous permettront de connecter le klaxon de vos rêves, quel que soit le klaxon de vos rêves !

JPEG - 14.9 ko
Creative Commons - photo de Terry Whalebone

Par opposition, PHP a été créé comme une voiture à pédales. (Je vois déjà certains de mes collègues PHPistes se lever au fond de la salle !) A l’origine, sa couverture technique était très limitée, mais le langage a évolué avec le web, pour devenir, option par option, ajout par ajout, une berline particulièrement performante. Et cette performance a une raison : tous ces ajouts sur PHP se sont opérés en gardant à l’esprit la simplicité et la légèreté du moteur initial. Du coup, au lieu d’embarquer nativement tous les outils qui vous rendent compatibles avec tout, vous devrez les ajouter vous-mêmes au fur et à mesure, ne gardant constamment que le strict minimum.

On se retrouve donc avec des garagistes PHP reprochant à Java la lourdeur de son système sur-câblé ; affirmation à laquelle les garagistes Java répondent en dénonçant le manque de pré-conditionnement (et parfois de support technique) de PHP, rendant les interventions et les contrôles techniques trop peu normalisés et brouillons, et du même coup parfois complexes ; ce à quoi les PHPistes répondent que le recâblage des options Java peut aussi être très complexe, etc.

Et sinon, on n’oublie pas quelqu’un là ?

JPEG - 19.7 ko
Creative Commons - photo de John Lloyd

C’est maintenant mes collègues pro-Microsoft que je vois trépigner, de peur d’être négligés ! Il faut bien comprendre que lorsque Microsoft s’est lancé dans la course des technologies Web serveurs avec son framework .Net, il en existait déjà une multitude, dont l’écrasante majorité s’appuyait soit sur du Java, soit sur du PHP. La voiture Java "surcâblée" et la voiture PHP "trop peu câblée" étaient à l’époque les deux principales alternatives (qui ont évolué, certes, j’y reviendrai).

La proposition de Microsoft était donc simple : supprimer tous ces câblages censés garantir la compatibilité avec un maximum de types d’options ! L’idée était que vous achetiez une voiture de sport haut-de-gamme, mais compatible avec une liste très limitée d’options toutes fournies avec, Microsoft promettant que ces options couvriraient de toute façon tous vos besoins (vous n’aurez pas le klaxon de vos rêves, mais un klaxon .Net, qui marche très bien). Et de plus, la voiture de sport est livrée avec plus de couverture initiale qu’aucune autre technologie n’a jamais fournie.

Quelques exemples concrets :

  • Pour développer en Java, vous pouvez utiliser n’importe quel IDE, dont les plus célèbres sont Eclipse et NetBeans ; pour développer en PHP, vous avez une offre encore plus large, avec parmi les plus communs : Netbeans, Zend Studio, Eclipse PHP, PHPEdit, etc. ; mais pour développer du .Net, vous n’aurez jamais qu’une possibilité, Microsoft Visual Studio.
  • Vous pourrez exécuter votre Java en production avec JBoss, Tomcat, Glassfish, WebSphere, WebLogic, ... ; pour votre PHP, la majorité écrasante revient à la librairie PHP en tant que module Apache, mais on trouve aussi des modules pour Zend Server, LightHTTPd, et même aussi Microsoft IIS, ou encore des implémentations alternatives comme HipHop for PHP, fourni par Facebook ! Pour faire tourner votre .Net, vous n’aurez jamais que Microsoft IIS.
  • Nos clients sont habitués à voir nos développeurs Java ou PHP débarquer chez eux avec leur portable sous Linux Ubuntu, Microsoft Windows, ou Mac OS X ; pour du .Net, ils ne pourront être que sous Microsoft Windows.
  • ...

Le pari de Microsoft de limiter la compatibilité à quelques outils très contrôlés lui permettait d’offrir une garantie intégrale (et coûteuse) sur toute la chaîne de réalisation, de l’OS du développeur à l’environnement de production, et de faciliter critiquement le câblage qui posait tant problème à ses confrères.

"Avec le temps, va..."

JPEG - 38 ko
Creative Commons - d’après une photo d’Ivan Mlinaric

Les révolutions continuelles auxquelles le Web nous a maintenant habitués entre 1995 et 2010 auraient pu dramatiquement étouffer l’un de ces modèles ; seulement aujourd’hui, le temps ayant fait son office, il s’avère que les trois technologies sont toujours fortement présentes, et ne donnent pas de signes d’agonie du tout, bien au contraire ! PHP a clairement assis sa position de leader, mais les trois technologies ont eu l’occasion d’évoluer et de gagner en maturité.

Le modèle de .Net (qui est, pour rappel, légèrement plus récent) n’a pas évolué de façon sensible, et reste basé sur un socle applicatif solide et sur le contrôle et la garantie d’un maximum d’outils ; sa couverture technique s’est très largement étendue au gré des critiques des détracteurs et des demandes des développeurs, et sa couverture d’outils compatibles a également évolué, pour le mettre en concurrence avec ses confrères.

Pour les puristes du modèle MVC bien construit (dont le PHP de base ne facilite pas l’implémentation, à la grande critique de ses détracteurs), de nombreux frameworks PHP ont trouvé leur place sur le marché, qui organisent et normalisent les développements, et fournissent quelques pré-câblages à l’image de JEE. Chez Clever Age, nous avions fortement poussé le framework Symfony dès ses premiers pas, car sa robustesse et sa simplicité nous avaient déjà convaincus ; et aujourd’hui, nous nous félicitons de le voir devenir le framework particulièrement populaire que l’on connaît.

On peut donc aujourd’hui considérer que la démocratisation de Symfony et des autres frameworks PHP a révolutionné l’utilisation du langage PHP en entreprise aujourd’hui.


  • Et Java ?
  • Qu’a-t-il fait pour amenuiser ses faiblesses par rapport à ses concurrents, et réagir à ses détracteurs ?
  • Quelles révolutions lui sont arrivées qui l’ont modernisé ?

JPEG - 30.4 ko
Creative Commons - photo de Axel D

C’est bien le problème, et le fondement des interrogations qui nous viennent de la maîtrise d’ouvrage : il n’y a pas vraiment eu de révolution Java/JEE-esque ! Toutefois, une force de Java sur ses confrères vient justement de la base solide, polyvalente et minimale qu’est le framework JEE, sur lequel des briques très variées et au câblage facilité viennent s’ajouter. Et ces briques-là par contre, ont critiquement évolué, année après année. La maturité arrive donc à Java par la maturité de ses extensions, le modèle JEE ayant lui-même peu évolué, ou bien souvent par des extensions peu transcendantes, et apportant plus de lourdeur que d’innovation.

Et est-ce que ça suffira ?

C’est toute la question, à laquelle toute réponse ne peut être qu’évasive ; mais devant la facilité grandissante pour réaliser des applications métier complexes avec des frameworks PHP modernes ou des .Net prêts à servir "out-of-the-box", il convient à tout expert technique Java, et par extension à sa maîtrise d’ouvrage, de s’intéresser aux alternatives qui tentent de séparer Java/JEE de ses contraintes historiques, et de le placer dans un contexte plus proche des deux autres modèles du marché.

Et ces alternatives existent aujourd’hui, et commencent même déjà à gagner en maturité :

  • du Java à la sauce .Net  : on trouve aujourd’hui des frameworks pré-intégrant une sélection des sous-frameworks Java afin d’avoir un outil fonctionnellement complet "out-of-the-box", et à la compatibilité limitée pour améliorer fortement la facilité de câblage et assurer une couverture technique optimale. Théoriquement, tout comme .Net, sans les coûts Microsoft (en pratique, et comme toujours, il s’avère que l’absence d’éditeur a des avantages comme des inconvénients) L’initiative Grails, qui n’est pas particulièrement récente, abonde en ce sens (je vous conseille d’ailleurs cet excellent article sur Grails de notre excellent Matthieu Guillermin, de même que ce tout aussi excellent article beaucoup plus récent sur Groovy, par notre tout aussi excellent Stéphane Prohaszka !)
  • du Java à la sauce PHP  : le but est donc de transcender les règles établies lors de l’adaptation de Java au Web dans les années 90, menant à la création de l’ancêtre de JEE, et de repartir du langage pour l’adapter plus simplement, dans un contexte de site simple sans besoin de framework lourd. C’est particulièrement ambitieux, car les serveurs d’application Java actuels sont massivement compatibles JEE, et il faut donc également réaliser son propre serveur d’application. L’initiative Play ! Framework, qui acquiert une maturité progressive et que nous suivons très particulièrement, permet d’outrepasser JEE pour utiliser le langage Java "à la" PHP ; c’est-à-dire sur la base de scripts et d’architecture simple (vous pouvez trouver un peu plus d’information sur notre fiche produit sur Play !, et encore plus sur le site du projet).

Qu’est-ce qu’il faut conclure de tout ça ?

GIF - 1.9 ko

Déjà, Il faut nuancer et retenir que la pertinence actuelle et à venir de Java n’est pas liée uniquement aux aspects techniques de Java lui-même, mais aussi à d’autres facteurs que je n’ai pas du tout évoqués : notamment, le fait qu’aujourd’hui, la couverture fonctionnelle de l’outil final (CMS, GED, etc.) est de plus en plus déterminante dans le choix de la solution technique, sans doute plus que la facilité des développements spécifiques (en Java, .Net, PHP, pour le coup) ; également, le fait que le rachat de Sun par Oracle a donné place à quelques décisions récentes de la part d’Oracle ne rassurant pas quant à leur opinion sur l’ouverture salutaire de Java (départs provoqués de nombreux employés charismatiques dans la communauté open-source, attaque en justice de Google pour leur utilisation de Java dans Android, etc.)

Puisqu’on n’en est pas à une atténuation près, on peut aussi se permettre de nuancer toute conclusion à long terme, en rappelant que les aspects techniques des technologies Web sont un paysage en évolution constante et souvent spectaculairement rapide (j’en veux pour preuve un article de ce même blog publié par Denis Delangle sur le même sujet il y a près de deux ans et demi, où l’on s’aperçoit que les initiatives prometteuses de l’époque ont beaucoup changé aujourd’hui !)

Toutefois, si l’on met de côté ces éléments, et que l’on garde en visée uniquement les caractéristiques techniques de Java/JEE à moyen terme, il se pourrait que, à la manière de PHP il y a quelques années, nous soyons à la veille d’une révolution intégrale sur la manière d’utiliser Java pour le Web. Je ne dis pas que cette révolution soit nécessaire (les architectures Java modernes, basées sur les frameworks en évolution constante, restent particulièrement robustes et évolutives en l’état), et je ne dis surtout pas qu’il faille la provoquer. D’ailleurs je ne dis même pas que Java soit nécessaire non plus. Toutefois, en tant qu’experts Web, techniques ou fonctionnels, je pense sérieusement qu’il nous faut clairement suivre l’évolution de ces technologies prometteuses au millimètre, et nous tenir prêts autant que possible en attendant le prochain virage...


Et vous, qu’en pensez-vous ? Croyez-vous que les architectures Web Java/JEE standards peuvent devenir obsolètes ? Pensez-vous que les initiatives modernes ont pour objectif de combler ce dépassement ? Pensez-vous qu’une révolution de l’utilisation de Java/JEE soit suffisamment crédible pour valoir l’effort de se tenir prêt dès aujourd’hui ?

 

6 commentaires

  • Gaëtan Vatou-Sanva
    9/09/2010 - 15:41

    Pas un mot sur Python ni Ruby ? Django et Rails sont en train d’exploser, particulièrement aux Etats-Unis et plus généralement les pays anglo-saxons, et il va falloir penser à les considérer enfin comme une alternative — si ce n’est forcément meilleure, du moins crédible — en regard des trois dinosaures que vous mentionnez (avec verve, bravo !), sous peine de vous retrouver rapidement dépassés face à une concurrence de plus en plus jeune, agile et affutée sur le domaine de la conception d’applications Web.

  • JulienW
    9/09/2010 - 15:44

    Tu exagères beaucoup en disant que "il n’y a pas vraiment eu de révolution Java/JEE-esque".

    L’arrivée de Spring, et avec lui, le passage des EJB2 aux EJB3, a clairement changé la donne.

    De même, l’arrivée d’un framework tel que Wicket, qui, s’inspirant beaucoup de Lift et de RoR, a radicalement changé la manière de créer des applications Web.

    Enfin, la plate-forme elle-même évolue, avec l’arrivée de langages presque de script compilés directement en bytecode Java (Groovy, mais surtout Scala), et de l’intégration de langages de scripts directement dans le langage (JavaScript avec Rhino).

    Pour moi, la plate-forme Java reste la plate-forme la plus passionnante du moment, par sa vigueur et sa versatilité.
    (bon, ok, là c’est moi qui exagère ; d’autres plates-formes sont excitantes, mais certainement pas PHP).

  • ChrisO
    10/09/2010 - 09:40

    à JulienW

    Ce serait faire injure à JAVA que de vanter sa versatilité.

    Ce mot n’a pas le même sens en anglais et en français !

    Voir http://www.cnrtl.fr/lexicographie/v...

  • Loic
    10/09/2010 - 10:09

    Merci pour cet article,

    Je ne suis pas bien d’accord sur "La maturité arrive donc à Java par la maturité de ses extensions, le modèle JEE ayant lui-même peu évolué, ou bien souvent par des extensions peu transcendantes, et apportant plus de lourdeur que d’innovation."

    C’était vrai il y a quelques années, avec JEE 5 et 6 il y a eu un allègement et une simplification drastiques (JPA, EJB 3.1...)

    A côté de ça des frameworks comme Play ! (voir http://www.playframework.org/ si vous ne connaissez pas) apportent la souplesse et la simplicié de PHP pour faire du Web tout en gardant les avantages langage Java pour coder la partie métier.

  • Rudy Rigot
    10/09/2010 - 14:04

    En effet, dans une optique de vulgarisation, je me suis limité aux grands acteurs du marché dans ma comparaison avec Java. Non que moi-même ou Clever Age boudons les autres, bien sûr ! Mais cette comparaison n’est pas l’objet de l’article en tant que tel : elle est là pour introduire le contexte auprès d’une maîtrise d’ouvrage non-technique et servent d’appui pour présenter différentes variantes modernes qui rendent Java toujours pertinent dans l’avenir (et c’est là le véritable objectif de l’article !)

    Pour les frameworks et langages basés sur Java, là c’est tout-à-fait le sujet, mais mon but n’était pas de tous les lister non plus, juste de dégager les tendances globales (complétude/simplification du JEE, et abstraction du JEE), et de citer un exemple pour chaque. Scala et Wicket aurait pu entrer dans la première catégorie, mais j’ai préféré choisir Grails vu que ce n’est pas un framework en tant que tel, mais qu’il se paie le luxe d’être un méta-framework ! (donc, plus symptômatique de ce besoin de pré-câblage pour simplifier)

    Pour Rhino, c’est une optique tellement différente, mais ça reste une niche (surtout aux yeux de nos clients-maîtres-d’ouvrage), et ça rentre aussi dans la première catégorie, donc même combat !

    Gaëtan > Tu comprends maintenant pourquoi je n’ai pas pris Python/Ruby/Django/Rails pour les comparer avec Java dans la très longue "introduction", mais l’autre raison tu la cites toi-même : Django et Rails explosent aux Etats-Unis, et dans les start-ups françaises, mais ne convainc pas du tout la maîtrise d’ouvrage de nos clients ; il me fallait donc des référentiels que la maîtrise d’ouvrage connaissait. Mais pas d’inquiétude : je comprends ta frustration ! ;)

    Julien > En fait, nous sommes d’accord ! Si tu relis cette partie, quand je dis qu’il "n’y a pas vraiment eu de révolution Java/JEE-esque", je parle du moteur JEE uniquement, et j’enchaîne ensuite sur le fait que les frameworks de niveau supérieur ont par contre très fortement évolué (donc les Spring, EJB3, etc, que vous évoquez). Toutefois, j’imagine que tu vas me dire que c’est peut-être bien suffisant pour faire évoluer le modèle entier ; et je te réponds peut-être, c’est bien pour ça que c’est justement la question en titre du développement suivant. ;)

  • Rudy Rigot
    10/09/2010 - 17:03

    Loïc > Même si proposés par Sun, je classe (peut-être à tort) les EJB, la JPA, etc... comme des extensions du modèles JEE (de celles dont je reconnais bien volontiers les évolutions spectaculaires) ; mais ils ne remettent pas en question les bases JEE posées dans les premières années du Java (taglibs, servlets, ...). C’est le peu d’évolution de cette sous-couche qu’est le JEE que je constate dans l’article.

    Pour Play, te voila grillé : tu n’as pas lu jusqu’au bout. ;)

    Mais je suis content que tu sois arrivé à la même conclusion que moi quand à l’intérêt et l’innovation de ce type de framework qui tente de s’abstraire du JEE. :)