Java a t’il encore un avenir pour le développement Web ?
Après le premier cycle d’investissement des entreprises qui ont choisi Java comme technologie de base pour la la refonte de leur système d’information en mode “Web”, on peut faire les comptes.
Et les retours d’expériences ne sont pas vraiment glorieux. Outre des problèmes récurrents de performance, ce que nos clients reprochent à Java est avant tout une productivité bien plus faible que celle espérée. Les projets ont du mal à aboutir et lorsqu’ils sortent enfin, leur mise en production est plutôt laborieuse malgré des investissements colossaux dans des solutions JEE “entreprise”.
Alors est t’il temps d’abandonner Java pour une de ces technologies miracles basée sur un langage dynamique ? Le problème n’est pas si simple. Et bien que Java en tant que langage soit loin d’être le meilleur, la majorité des problèmes ne viennent pas du langage proprement dit mais surtout de l’ écosystème qui permet de faire du Web avec Java : aujourd’hui c’est JEE.
Le problème avec JEE
Lorsqu’on veut faire du Web avec Java la méthode “standard” est de s’appuyer sur JEE (Java Enterprise Edition). Cet ensemble de frameworks “entreprise” contient tout ce qu’il faut pour connecter une application Java au Web. En théorie. Parce que JEE n’a jamais rempli sa mission: développer une application Web en s’appuyant uniquement sur ce framework est vraiment trop fastidieux.
L’exemple le plus frappant est la brique fondamentale qui permet de faire du Web en Java : l’API des servlets. Celle ci a été conçu non pas comme une API permettant de créer un service HTTP en Java mais comme une API générique permettant de créer potentiellement n’importe quel service indépendamment du protocole. Et naturellement depuis 10 ans il n’y a toujours qu’une seule implémentation : HTTP. On se retrouve donc à manipuler HTTP grâce à une API pas totalement prévue pour ça et qui ne transpose que vaguement les concepts du Web.
Un autre exemple ? JSF le framework JEE censé faciliter la création des IHMs Web. A peine la spécification terminée et les première implémentations disponibles le “Web 2.0″ change tout dans la manière de créer une application Web : AJAX devient incontournable et on commence à redécouvrir HTTP avec les architecture REST. Pas de chance pour JSF, son modèle purement statefull est incompatible avec REST, les implémentation détournent HTTP pour des raison d’implémentation et la moindre requête AJAX se révèle un enfer à implémenter. Encore une fois on se rend compte un peu tard que JEE n’a pas grand chose à voir avec le Web.
La survie de Java va t’elle passer par l’abandon de JEE ?

Cependant Java ne se limite pas à JEE. Une multitude de framework permettent de créer des applications Web plus simplement. Et bonne nouvelle, ces frameworks se désengagent peu à peu du carcan du “standard JEE”. Ce sont des framework Java qui permettent de créer des applications Web sans servlet, des systèmes de templates qui remplacent efficacement JSP. Ces frameworks souvent inspirés des modèles existants dans d’autres technologies sont une réelle alternative à JEE.
Même les solutions “entreprise” s’y mettent. Ces derniers mois plusieurs solutions majeures ont attirés notre attention.
SpringSource, la société derrière le framework Spring propose un serveur d’application Java non JEE, “SpringSource application platform” ! Les technologies spring sont déjà énormément utilisées dans les applications JEE, mais finalement on peut considérer que l’adhérence à JEE et aux spécifications standard n’apporte aucune valeur ajoutée réelle : les même technologies simplifiées et packagées ensemble dans un véritable “application server” offre une alternative tout aussi sérieuse et surtout plus simple et plus agile.
Même IBM sort son Websphere non JEE ! Websphere Smash est le nouveau serveur d’application prévu pour créer les applications Web de manière agile. Tout en continuant à s’appuyer sur la plate forme Java il s’ouvre a d’autres langages tels que groovy et PHP. Mais surtout plus question de Servlet de JSP de JSF ou même de WAR …
Au final Java peut trés bien offrir un socle de développement productif et efficace pour le Web, capable de s’affirmer face aux autres technologies. Java a certe de nombreuses faiblesses par rapport aux langages dynamiques concurrent (Python, Ruby, PHP) mais offre également de nombreuses facilités qui sont une vraie force dans certains contextes : erreurs de code detectées à la compilation, facilitées pour le refactoring grâce au typage statique, excellent outillage, IDE, Debugger, hautes performances …
A condition de revoir complétement les frameworks !
