2009-11-22 40 views

Respuesta

175

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.)

+7

Gran explicación. Y +1 por no solo referir a Google o enlaces de especificaciones. – cbmeeks

+4

Qué amable de su parte decir, especialmente teniendo en cuenta que la respuesta es 3.5 años. – duffymo

+5

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. –

44

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).

+1

Respuesta educativa, pero me pregunto por qué/cuándo necesita inyectar un POJO simple en lugar de inicializar uno nuevo. –

+3

Para fines de prueba. – Philip

18

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.

+0

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). –

+1

Bueno, técnicamente, Spring tampoco requiere un motor servlet. Por ejemplo, Spring-test utiliza un contexto en memoria. – Bozho

+3

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. –

-22

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.

+8

está totalmente equivocado, lo siento –

+2

lo siento @sasi esto ni siquiera está cerca de una respuesta correcta o buena ....... – Prakash

+4

"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