Spring 3.0 vs Java EE 6.0

Je suis confronté à une situation …

On m’a demandé de vous conseiller sur l’approche à adopter en termes de développement Java EE entre Spring 3.0 et Java EE 6.0. J’étais et je suis toujours un promoteur de Spring 2.5 par rapport au développement Java EE 5 classique, en particulier avec JBoss, j’ai même migré de vieilles applications vers Spring et influencé la redéfinition de la politique de développement développement d’un plan stratégique pour favoriser des solutions plus légères comme Spring + Tomcat, au lieu des plus lourdes de JBoss, en ce moment, nous utilisons JBoss simplement comme un conteneur Web, avec ce que j’appelle le “conteneur dans le paradoxe du conteneur”, c’est-à-dire que les applications Spring, avec la plupart de ses API, s’exécutent dans JBoss. Nous sums donc en train de migrer vers tomcat.

Cependant, avec l’arrivée de Java EE 6.0, de nombreuses fonctionnalités, qui ont rendu Spring attrayante à cette époque, un déploiement facile, moins de couplage, même une sorte de DI, etc., semblent avoir été imités, d’une manière ou d’une autre. JSF 2.0, JPA 2.0, WebBeans, WebProfiles, etc.

Alors, la question se pose …

De votre sharepoint vue, dans quelle mesure est-il sûr et logique de continuer à investir dans une infrastructure de développement Java EE non standard telle que Spring compte tenu des nouvelles outlook offertes par Java EE 6.0?

Pouvons-nous parler de trois ou quatre années supplémentaires de développement Spring ou recommandez-vous l’adoption précoce des API Java EE 6.0 et de ses pratiques?

J’apprécierai toute idée avec ceci.

Le point crucial IMHO n’est pas celui des fonctionnalités. À cet égard, Spring sera toujours en avance sur JavaEE, car il est naturel pour OpenSource VS. une référence. Donc, un fait est que vous obtenez les nouvelles fonctionnalités beaucoup plus tôt avec Spring avec JavaEE (par exemple, les tests d’intégration de conteneur sont une nouvelle fonctionnalité de JavaEE 6 et sont disponibles depuis des années).

Le point le plus important à mon avis est celui des cycles de vie pour l’administration et le développement. Lorsque vous choisissez JavaEE, vous associez votre modèle de programmation à votre infrastructure. Généralement, les fournisseurs de serveurs d’applications ne sont pas les plus rapides à adopter les versions de la nouvelle norme (blâme WebSphere, JBoss, etc.). Cela signifie que nous ne verrons probablement pas de produits compatibles JavaEE 6 prêts pour la production avant la fin de l’année.

Même si tel est le cas, il vous faut encore passer le cap de votre administration, de votre service informatique et de vos responsables du contrôle du budget pour être prêt à passer à cette nouvelle version shinye. En venant de ce côté, JavaEE 6 n’est même pas une option pour de nombreux magasins. Vous pouvez choisir ce que vous souhaitez déployer vos applications? Tu veux choisir Glassfish pour la production? Allez-y, essayez. La plupart des magasins ne sont pas dans une situation “confortable”.

Exactement contraire: le spring. Modèle de programmation découplé de l’infrastructure. Allez à la version 3.0.x actuelle et utilisez @Inject , JPA 2, etc. dans votre Tomcat ou votre serveur d’applications hérité.

Si vous êtes déjà un magasin de spring, pourquoi vous déranger? Vous en êtes satisfait, il fait ce que vous voulez, il est activement développé, vous ne chercherez probablement pas à sortir de Tomcat de sitôt, car Tomcat est très mature et fonctionne partout. Ainsi, toute promesse de portabilité que Java EE pourrait suggérer est parfaitement dépassée.

Je ne vois aucune raison de m’éloigner du spring.

Puisque Will et Oliver ont déjà dit les choses les plus cruciales, je n’appendai que: “si cela fonctionne et fait le travail, alors laissez-le tranquille!”. “Plus récent” et “standardisé” n’est pas toujours “meilleur”, en fait, c’est rarement le cas – les nouvelles choses sont maladroites et boguées et (ce qui est le plus important pour moi) ne sont pas largement supscopes. Si le rest de Java EE 6 est aussi “standardisé” que JSF2.0 (et tous les Rich / Ice / Prime / WhateverFaces), alors croyez que je rest fidèle à Spring pour le moment. De nombreuses entresockets s’en tiennent à des technologies un peu anciennes (stabilité> *), Spring est sur le marché depuis des années et est bien établi.

@ Edit: Particulièrement pour @ymajoros: JSF (à la fois 1.x et 2.x) est une norme imparfaite pour de multiples raisons et n’est utile que dans quelques cas (par exemple lorsque vous créez de petits sites CRUD simples ou lorsque vous suis un passionné de Java EE):

  • créer de nouveaux composants est une douleur dans le cul. Comme il s’agit d’un cadre basé sur des composants, je suppose que cela rendrait les choses plus faciles et non plus difficiles. Actuellement, je préfère utiliser une approche JS + Java sur le backend car il est en fait plus facile de créer des composants là-bas. Le seul point d’économie de JSF est qu’il y a une tonne de bibliothèques de composants. Le problème commence quand ils ne fonctionnent pas, vous voulez changer quelque chose ou créer votre propre composant.
  • la gestion des exceptions est un gâchis (ou quelque chose a-t-il changé au cours des deux dernières années?)
  • JSF a des problèmes pour être trop dynamic – peu de mauvaises décisions, un mauvais développement dans votre projet et la moitié de votre application peuvent être en état et sérialisés.
  • la partie interface utilisateur de la norme ne couvre pas (ou du moins pas lorsque j’ai écrit cette réponse) la plupart des collections de Java (en fait, seule une structure de données bien couverte était une liste).

En ce qui concerne le standard que vous aimez tant: ont-ils enfin intégré JSF avec JAX-RS? Parce que la dernière fois, j’ai vérifié que ces spécifications étaient totalement séparées, même si vous pouviez apporter de nombreuses améliorations. Par exemple, pourquoi ne puis-je pas annoter une méthode avec @Path dans mon bean backing afin qu’elle soit à la fois gérée par une demande REST et une demande JSF?

Peut-être que certains (tous?) De ces problèmes sont maintenant résolus mais quand j’ai écrit cette réponse, ils étaient peu nombreux parmi tous les aspects négatifs de JSF et de la norme en général.

Actuellement, si je veux créer une application CRUD très petite et simple, je vais avec Play 2.0 (même si c’est un énorme anti-pattern) ou quelque chose comme RoR. Quand je veux créer une grande application “niveau entreprise”, je prends un framework JS (comme ExtJS) et une bibliothèque de composants JS la combine avec un backend Java (et par exemple Spring) et je fais ce dont j’ai besoin sans aucune surcharge. appelé standard apporterait.

Bien sûr, il y a des parties sympas de JEE6 comme JPA2, JAX-RS2, la validation de bean n’est pas si mauvaise que ça. Mais utiliser toute la stack standard uniquement parce qu’elle l’a qualifiée de «standard» (et comme je l’ai mentionné plus haut, la plupart des spécifications ne sont même pas en synergie) est, à mon humble avis, tout simplement faux.

Je pense que vous aurez remarqué que travailler avec Spring vous rend plus productif que Java EE. Je ne pense pas qu’ils pourront jamais faire voler le cochon (Java EE). Java est un excellent langage / plate-forme, ne le paralyse pas avec Java EE. Pourquoi se contenter d’une «dependency injection», si vous pouvez aujourd’hui avoir le spring?