Il arrive d’entendre ici ou là « oui, java, c’est lourd, java c’est pas productif, java c’est tout pourri ». Non, non Java n’est pas mort, c’est même un langage en pleine mutation.
Il faut bien avouer que Java a un passif ne jouant pas forcément en sa faveur. Les EJB 2 ne sont pas un exemple de simplicité et de concision. Pour créer un objet persistant en base de données, il faut éditer trois fichiers java, puis deux ou trois fichiers XML, et enfin prier de n’avoir rien oublié.
La suite était meilleure mais toujours pas optimale. Les fichiers de configuration de Struts 1, Spring 1 et Hibernate 2 étaient lourd à éditer et à maintenir, leur contenu étant très répétitif et mécanique. Concrètement, les noms des Actions Struts collent aux urls, ce qui implique qu’il y a rarement plus d’une implémentation pour les interfaces de ces API et que les noms des champs de base de données collent aux noms des propriétés des objets.
Depuis, Ruby On Rails a fait des émules, et on ne parle désormais plus que d’efficacité de développement, de "convention over configuration" (à savoir, par défaut on applique des conventions de nommage que l’on peut, au besoin, modifier dans des fichiers de configuration).
Les communautés Java se sont remises en question. Le constat a été simple et plutôt unanime :
Fort de ce constat, différentes solutions voient le jour. Certaines sont étranges, comme par exemple Essential Java 2, dont l’auteur propose de faire table rase de ces frameworks complexes pour utiliser des patrons de conceptions simples et bien connus. Les constats sont intéressants, mais par contre la solution proposée renie tout l’intérêt des frameworks, et le mode de développement auquel elle mène n’est certainement pas constructif :
Les frameworks ne sont donc pas à renier, ce serait dommage de revenir en arrière sur tous les efforts de capitalisation qui ont pu être faits.
Les communautés des différents frameworks Java historiques ont bien compris le message, et proposent leurs solutions. Les nouveaux frameworks (ou leurs nouvelles versions) augmentent clairement l’efficacité de développement.
Struts 2 :
« Pourquoi devrais-je faire des objets dédiés à mon formulaire alors qu’ils correspondent à mon modèle métier dans 95% du temps ? Pourquoi devrais-je éditer un fichier de mapping, alors que les noms correspondent ? »
Tapestry 5 :
« Pourquoi dois-je attendre un redémarrage de serveur pour modifier mes IHM ? Pourquoi éditer un fichier de configuration XML alors que mon code Java de présentation et le code HTML sont liés ? »
Spring 2.5 :
« Pourquoi devrais-je éditer un fichier XML à chaque fois que je dois définir ou utiliser un objet ? J’ai simplement besoin de préciser que la fonction est transactionnelle, et conservant la possibilité de brancher des proxys dans le futur. »
Hibernate :
« Je n’ai pas de base de données existante, et mon modèle de données ne sera pas bien complexe. Pourquoi devrais-je gérer mon modèle objet et mon modèle de données séparément et effectuer le mapping à la main, alors qu’ils collent tous les deux à mon modèle conceptuel de données ? De toute façon, je commence par un prototype, on verra pour les performances après. »
Le principal avantage des frameworks Java face aux frameworks des nouveaux langages (PHP, Python, Ruby, etc.), moins matures, c’est clairement leur caractère éprouvé. Le développement et la prise en main étaient auparavant laborieux, parce que l’étape de configuration était systématiquement longue. Mais maintenant, les frameworks Java fournissent des comportements par défaut en réponse aux besoins les plus simples.
« Java est mort, longue vie à Java ! »
[1] une librairie existe pour que la découverte soit automatique comme pour Spring
Un article que l’on aurait presque cru objectif si l’auteur n’avait pas commencé sa conclusion par une affirmation gratuite "...moins mature..."
Le fait que les frameworks Java soient plus vieux que les autres n’est pas un argument. Si ces vieux frameworks bien mures , bien matures étaient si bon si "éprouvés" pourquoi vanter dans cet article les mérites des versions récentes (forcement moins matures, moins éprouvées) alors même qu’elles cherchent à gommer les lourdeurs des anciennes versions... bizarre
Bon article..
Et seam dans tout ca ?
Cet article commence par une introduction pleines de rumeurs et qui se base sur "on dit" et des faits... hypothétiques....
Pour une conclusion de 4 lignes dans lequel :
1 - on compare les frameworks (les nouveaux ? les anciens ?) à ceux des nouveaux langages comme ... PHP (1995) et Python (1991)
2 - comme commenté plus haut, on se contredit et on ne comprend pas bien s’il y a quelquechose à retenir de tout ça...