72 votes

Devrais-je utiliser EJB3 ou Spring pour ma couche métier?

Mon équipe est le développement d'un nouveau service oriented produit avec un front-end web. Dans les discussions sur les technologies que nous utiliserons, nous avons réglé sur l'exécution d'un serveur d'application JBoss, et Flex frontend (avec possibilité de déploiement de postes de travail à l'aide d'Adobe AIR), et les services web pour interface le client et le serveur.

Nous avons atteint une impasse quand il s'agit de ce qui la technologie de serveur à utiliser pour notre logique métier. Le grand argument est entre EJB3 et au Printemps, avec nos plus grandes préoccupations de performance et d'évolutivité, et aussi la facilité de maintenance de la base de code.

Voici mes questions:

  1. Quels sont les arguments pour ou contre EJB3 vs Printemps?
  2. Quels sont les pièges puis-je attendre de chacun?
  3. Où puis-je trouver de bonnes informations de référence?

73voto

John Stauffer Points 5988

Il n'y aura pas beaucoup de différence entre les EJB3 et le Printemps basée sur la Performance. Nous avons choisi le Printemps pour les raisons suivantes (non mentionné dans la question):

  • Le printemps des lecteurs de l'architecture dans une direction plus facilement prend en charge les tests unitaires. Par exemple, injecter un simulacre de DAO objet de test de l'unité de votre couche de gestion, ou d'utiliser le Printemps MockHttpRequest objet de test de l'unité d'une servlet. Nous maintenons un distinct Printemps config pour les tests unitaires qui nous permet d'isoler des tests pour les couches spécifiques.
  • Un principal moteur est la compatibilité. Si vous avez besoin de plus d'un Serveur d'Application (ou de vouloir éventuellement la possibilité de passer de JBoss pour Glassfish, etc.), vous sera essentiellement la réalisation de votre conteneur (Printemps) avec vous, plutôt que de compter sur la compatibilité entre les différentes implémentations de la spécification EJB3.
  • Printemps permet le choix de la technologie de Persistance, de l'objet de l'accès distant, etc. Par exemple, nous sommes également à l'aide d'un Flex extrémité avant, et sont à l'aide de la Hesse protocole pour les communications entre Flex et le Printemps.

37voto

fiddlesticks Points 564

L'écart entre les EJB3 et le Printemps est beaucoup plus petit qu'il était, clairement. Cela dit, l'un des inconvénients des EJB3 maintenant, c'est que vous ne pouvez injecter dans un haricot, de sorte que vous pouvez finissent par se tourner composants dans les haricots qui n'ont pas besoin de l'être.

L'argument de l'unité de test est assez hors de propos maintenant - EJB3 est clairement conçu pour être plus facilement unité vérifiable.

La compatibilité de l'argument ci-dessus est également pertinent: si vous utilisez EJB3 ou au Printemps, vous êtes toujours tributaires de la 3e partie fournis par les implémentations de responsables de la transaction, JMS, etc.

Ce serait de le balancer pour moi, cependant, est le soutien de la communauté. Travailler sur un EJB3 projet l'année dernière, n'avait pas beaucoup de gens là-bas à l'aide et de parler de leurs problèmes. Le printemps, à tort ou à raison, est extrêmement répandue, particularlty dans l'entreprise, et qui le rend plus facile de trouver quelqu'un qui a eu le même problème que vous essayez de résoudre.

18voto

Brian Points 7072

Quels sont les arguments pour ou contre EJB3 vs Printemps? Le printemps est toujours innover et reconnaît dans le monde réel des contraintes. Printemps offert de simplicité et d'élégance pour le Java 1.4 et des serveurs d'application n'a pas besoin d'une version de la spécification J2EE, que personne n'avait accès à 2004 - 2006. À ce stade, c'est presque un débat religieux que vous pouvez faire sucer en Ressort + abstraction + open-source par rapport Java Enterprise Edition (Java EE) 5.0 spécifications.

Je pense que le Printemps compliments plus de concurrence avec les spécifications Java EE. Comme les fonctionnalités qui ont été une fois unique, le Printemps de continuer à se roulé dans la spécification, beaucoup diront que EJB 3 offre un "assez bon" ensemble de fonctionnalités pour la plupart des applications de gestion internes.

Quels sont les pièges puis-je attendre de chacun? Si votre traitement de ce en tant que problème de persistance (Ressort+JPA) par rapport à EJB3 votre vraiment pas faire que les grandes d'un choix.

Où puis-je trouver de bonnes informations de référence? Je n'ai pas suivi le specj les résultats d'un benchmark pour peu de temps, mais ils ont été populaires pendant un certain temps. Il semble que chaque fournisseur (IBM, JBOSS, Oracle, et Sun) deviennent de moins en moins intéressés à avoir un serveur compatible. Les listes de plus en plus Courte de fournisseurs certifiés comme vous allez 1.3, 1.4. 1.5 De Java Enterprise Edition. Je pense que les jours d'un géant serveur qui est entièrement conforme à toutes les spécifications sont plus.

9voto

rustyshelf Points 16336

Je les recommanderais EJB3 au cours du printemps. Nous constatons qu'il est plus simple, plus agréable à coder, et mieux pris en charge. Dans le passé j'ai utilisé le Printemps et l'a trouvé pour être très déroutant, et pas aussi bien documenté que EJB3 (ou JPA je suppose que la fin de la journée)

  1. Comme de EJB3 vous n'avez plus à faire face externe des fichiers de configuration, et il n'y a qu'un POJO qui vous annoter par table de base de données. Cette POJO peut être transmis à votre niveau web sans aucun problème. Les ide comme Netbeans peut même générer automatiquement ces objets Pojo pour vous. Nous avons utilisé EJB3 maintenant que le back-end pour quelques applications à grande échelle, et n'ai pas remarqué de problèmes de performances. Votre Beans de Session peut être facilement exposées en tant que services web qui pourrait vous exposer à votre Flex frontend. Beans de Session sont faciles à verrouiller à une méthode de classe ou de niveau d'attribuer des rôles et des choses comme ça si vous en avez besoin.

Je ne peux pas parler beaucoup du printemps, comme je l'ai seulement essayé pendant quelques semaines. Mais dans l'ensemble, mon impression était très pauvre. Cela ne veut pas dire que c'est mauvais, mais notre équipe a trouvé EJB3 pour être le meilleur de la persistance ou de la couche de gestion.

7voto

James Strachan Points 6144

J'ai tendance à préférer Printemps plus de EJB3, mais ma recommandation serait quelle que soit l'approche que vous prenez, essayez de vous en tenir à l'écriture de Pojo et utiliser les annotations standard, si possible, à l'instar de la JSR des annotations telles que @PostConstruct et @PreDestroy et @Ressources qui fonctionnent à la fois avec EJB3 ou au Printemps, donc vous pouvez choisir quel que soit le cadre que vous préférez.

par exemple, vous pourriez décider sur certains projets à utiliser Guice au lieu du Cio.

Si vous souhaitez utiliser la pré-demande injection comme dans une application web que vous pourriez trouver Guice est un peu plus rapide pour l'injection de dépendances de Printemps.

Beans de Session pour la plupart se résument à l'injection de dépendance et les transactions; donc, EJB3 et le Printemps sont un peu similaires, vraiment. Où le Printemps a l'avantage est une meilleure injection de dépendance et d'abstractions plus agréable pour des choses comme JMS

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X