Dado que Spring es capaz de usar transacciones como EJB. Para mí, Spring puede reemplazar el requisito de usar EJB. ¿Alguien puede decirme cuáles son las ventajas adicionales de usar EJB?Spring vs EJB. ¿Puede Spring reemplazar a EJB?
Respuesta
Spring fue desarrollado como una alternativa a EJB desde su inicio, por lo que la respuesta es, por supuesto, que puede usar Spring en lugar de EJB.
Si hay una "ventaja" al uso de EJB, diría que dependería de las habilidades de su equipo. Si no tienes experiencia en Spring y mucha experiencia en EJB, entonces quizás mantenerte con EJB 3.0 es una buena jugada.
Los servidores de aplicaciones escritos para admitir el estándar EJB pueden, en teoría, trasladarse de un servidor compatible con la aplicación Java EE a otro. Pero eso significa mantenerse alejado de cualquiera y todas las extensiones específicas del proveedor que lo traben a un solo proveedor.
Spring se conecta fácilmente entre los servidores de aplicaciones (por ejemplo, WebLogic, Tomcat, JBOSS, etc.) porque no depende de ellos.
Sin embargo, está bloqueado en Spring.
Spring fomenta buenas prácticas de diseño OO (por ejemplo, interfaces, capas, separación de preocupaciones) que benefician cualquier problema que toquen, incluso si decide cambiar a Guice u otro marco DI.
Actualización: Esta pregunta y respuesta tienen cinco años en 2014. Debe decirse que el mundo de la programación y el desarrollo de aplicaciones han cambiado mucho en ese momento.
Ya no es solo una opción entre Java o C#, Spring o EJB. Con vert.x es posible evitar Java EE por completo. Puede escribir aplicaciones políglotas altamente escalables sin un servidor de aplicaciones.
Actualización: It's Mar 2016 now. Spring Boot ofrece una forma aún mejor de escribir aplicaciones sin servidores de aplicaciones Java EE. Puede crear un JAR ejecutable y ejecutarlo en una JVM.
Me pregunto si Oracle continuará admitiendo las especificaciones de Java EE. Los servicios web se han hecho cargo de los EJB. La solución EJB está muerta. (Sólo mi opinión.)
En primer lugar, permítanme decir claramente, no estoy diciendo que no se debe utilizar la primavera, pero, debido a que está pidiendo algunas ventajas, aquí por lo menos dos de ellos:
EJB 3 es un estándar, mientras que Spring no (es un estándar de facto, pero eso no es lo mismo) y esto no cambiará en el futuro previsible. Aunque puede usar Spring framework con cualquier servidor de aplicaciones, las aplicaciones de Spring están bloqueadas tanto en Spring como en los servicios específicos que elija integrar en Spring.
El marco de Spring se encuentra en la parte superior de los servidores de aplicaciones y las bibliotecas de servicios. El código de integración de servicios (por ejemplo, plantillas de acceso a datos) reside en el marco y está expuesto a los desarrolladores de aplicaciones. Por el contrario, el marco EJB 3 está integrado en el servidor de aplicaciones y el código de integración de servicios está encapsulado detrás de una interfaz. Los proveedores de EJB 3 pueden optimizar el rendimiento y la experiencia del desarrollador trabajando en el nivel del servidor de aplicaciones. Por ejemplo, pueden vincular el motor JPA estrechamente con la administración de transacciones de JTA. Otro ejemplo es el soporte de clustering que es transparente para los desarrolladores de EJB 3.
EJB 3 no es perfecto, sin embargo, todavía se carece de algunas características (por ejemplo, la inyección de componentes que no sean administrados como POJOs simples).
Respuesta educativa, pero me pregunto por qué/cuándo necesita inyectar un POJO simple en lugar de inicializar uno nuevo. –
Para fines de prueba. – Philip
Los puntos de Pascal son válidos. Sin embargo, hay lo siguiente a favor de Spring.
La especificación EJB es realmente un poco flexible, y por lo tanto, se pueden observar diferentes comportamientos con diferentes servidores de aplicaciones. Esto no será cierto para la mayoría de los casos, por supuesto, pero he tenido tal problema para algunos "rincones oscuros".
Spring tiene muchos extras adicionales, como Spring-test, AOP, MVC, integración JSF, etc. EJB tiene algunos de esos (interceptores, por ejemplo), pero en mi opinión no están tan desarrollados.
En conclusión, depende principalmente de su caso exacto.
Tal vez algo como * Spring solo necesita un servlet engine * sería más preciso (EJB puede usarse en cualquier contenedor JEE, servlet engine! = JEE). –
Bueno, técnicamente, Spring tampoco requiere un motor servlet. Por ejemplo, Spring-test utiliza un contexto en memoria. – Bozho
Bueno, técnicamente, los EJB no requieren un contenedor independiente ni si usted va de esta manera. Desde EJB 3.1 existe la API estándar 'EJBContainer.createEJBContainer()' para usar un contenedor incrustado. Por lo tanto, aún así, su declaración es incorrecta. –
El resorte está destinado a complementar EJB, no para reemplazarlo. Spring es una capa encima de EJB. Como sabemos, la codificación de EJB se realiza mediante API, lo que significa que tenemos que implementar todo en API utilizando el marco Spring. Podemos crear un código de placa de caldera, luego simplemente tomar ese plato, agregarle algunas cosas, y luego todo está hecho. Internamente Spring está conectado con EJB - El resorte no existiría sin EJB.
La principal ventaja de usar Spring es que no hay acoplamiento en absoluto entre las clases.
está totalmente equivocado, lo siento –
lo siento @sasi esto ni siquiera está cerca de una respuesta correcta o buena ....... – Prakash
"La primavera no existiría sin EJB". Hombre, ¿eres real? ¿Alguna vez en su vida usó el "\ @Stateless" en el declarion de un EJB, o usó la anotación \ @EJB para inyección? ¿Crees que eso funcionaría en Jetty o Tomcat? ¿Cómo crees que las transacciones se gestionan en primavera? ¿Sabes que puedes implementar una aplicación Spring en un contenedor de servlets, verdad? – 99Sono
- 1. OSGi vs Spring vs Struts vs EJB vs. Hibernate - una pregunta totalmente para novatos
- 2. ¿Los EJB siguen siendo útiles? ¿Y cuáles son las formas de Spring Framework para reemplazar los EJB?
- 3. ¿Cómo manejar llamadas internas en Spring/EJB/Mockito ... proxies?
- 4. NoClassDefFoundError con Spring maven hibernate org/hibernate/ejb/HibernatePersistence
- 5. ¿Utilizando Spring MVC 3.0 y la anotación @EJB sin mappedName?
- 6. EAR vs EJB + WAR separado
- 7. spring mvc vs seam
- 8. EJB 3.1 @EJB Inyección en POJO
- 9. sessionscoped managed bean vs stateful ejb
- 10. No se puede cargar el módulo EJB
- 11. Spring Hibernate Vs jdbc template vs spring orm
- 12. Unidad de prueba EJB
- 13. ¿Hay algún CRM basado en una pila Java EE moderna (Spring/EJB, JPA)?
- 14. Servicios web vs EJB vs RMI, ventajas y desventajas?
- 15. @Singleton en Java EJB
- 16. EJB 3.1 API integrada - Prueba de unidad entidades EJB + JPA
- 17. JPA vs Spring JdbcTemplate
- 18. EJB y subprocesamiento
- 19. Unit Testing EJB 3.1
- 20. ¿Cuántos EJB son demasiados?
- 21. Estrategias de prueba EJB?
- 22. EJB weblogic.ejb20.cache.CacheFullException
- 23. anotación en @EJB clientes
- 24. Spring vs Hibernate
- 25. ¿EJB aún está vivo?
- 26. EJB como controlador
- 27. EJB y sincronización
- 28. Spring JDBC vs JDBC
- 29. Spring vs Jboss
- 30. Struts2 vs Spring 3
Gran explicación. Y +1 por no solo referir a Google o enlaces de especificaciones. – cbmeeks
Qué amable de su parte decir, especialmente teniendo en cuenta que la respuesta es 3.5 años. – duffymo
En mi opinión, "bloquear" es una frase demasiado fuerte para describir a Spring. Después de todo, Spring está diseñado para pegar todo junto, no para reemplazarlos, siempre puede elegir con qué desea integrarse. Además, todo tiene lock-ins, incluso el más simple Apache Commons nos encierra, pero aún lo usamos todos los días. –