java - mvc - ¿Debo usar EJB3 o Spring para mi capa de negocios?
ejemplos de logica de negocio (9)
Con respecto a su pregunta:
¿Cuáles son los argumentos a favor o en contra de EJB3 vs Spring?
Sugiero leer la respuesta de los expertos: UNA RESPUESTA A: EJB 3 Y PRIMAVERA ANÁLISIS COMPARATIVO de Mark Fisher . Lea los comentarios para encontrar los comentarios de Reza Rahman (EJB 3.0).
Mi equipo está desarrollando un nuevo producto orientado a servicios con un front-end web. En las discusiones sobre qué tecnologías utilizaremos, nos hemos decidido por ejecutar un servidor de aplicaciones JBoss y un frontend Flex (con posible implementación de escritorio con Adobe AIR) y servicios web para hacer interfaz con el cliente y el servidor.
Hemos llegado a un punto muerto cuando se trata de qué tecnología de servidor utilizar para nuestra lógica comercial. El gran argumento es entre EJB3 y Spring, y nuestra principal preocupación es la escalabilidad y el rendimiento, y también el mantenimiento de la base de código.
Aquí están mis preguntas:
- ¿Cuáles son los argumentos a favor o en contra de EJB3 vs Spring?
- ¿Qué peligros puedo esperar con cada uno?
- ¿Dónde puedo encontrar una buena información de referencia?
Creo que EJB es una buena tecnología de componentes, pero no un buen framework. Spring es el mejor framework disponible a día de hoy. Así que debería considerar Spring como la mejor implementación de JEE en el sentido de un framework y mi recomendación es usar Spring en cada proyecto que nos da la flexibilidad de integrar con cualquier tecnología de componente fácilmente.
He utilizado una arquitectura muy similar en el pasado. Spring + Java 1.5 + Actionscript 2/3 cuando se combinó con Flex Data Services hizo que todo fuera muy fácil (y divertido) de codificar. sin embargo, una interfaz de Flex significa que necesita máquinas cliente adecuadamente potentes.
La brecha entre EJB3 y Spring es mucho más pequeña de lo que era, claramente. Dicho eso, una de las desventajas de EJB3 ahora es que solo puedes inyectar en un bean, por lo que puedes convertir los componentes en frijoles que no tienen que serlo.
El argumento sobre las pruebas unitarias es bastante irrelevante ahora: EJB3 está claramente diseñado para ser más fácilmente comprobable por la unidad.
El argumento de compatibilidad anterior también es irrelevante: ya sea que utilice EJB3 o Spring, todavía depende de implementaciones de administradores de transacciones, JMS, etc. provistas por terceros.
Sin embargo, lo que significaría para mí es el apoyo de la comunidad. Trabajando en un proyecto EJB3 el año pasado, simplemente no había mucha gente que lo usara y hablara sobre sus problemas. Spring, con razón o sin ella, es extremadamente penetrante, especialmente en la empresa, y eso hace que sea más fácil encontrar a alguien que tenga el mismo problema que estás tratando de resolver.
No habrá mucha diferencia entre EJB3 y Spring en función del rendimiento. Elegimos Spring por las siguientes razones (no mencionadas en la pregunta):
- Spring impulsa la arquitectura en una dirección que respalda más fácilmente las pruebas unitarias. Por ejemplo, inyecte un objeto simulado DAO para probar la capa de su empresa, o utilice el objeto MockHttpRequest de Spring para probar un servlet unitario. Mantenemos una configuración de Spring separada para las pruebas unitarias que nos permite aislar las pruebas en las capas específicas.
- Un controlador primordial fue la compatibilidad. Si necesita admitir más de un Servidor de Aplicaciones (o eventualmente desea la opción de pasar de JBoss a Glassfish, etc.), esencialmente llevará su contenedor (Spring) con usted, en lugar de depender de la compatibilidad entre las diferentes implementaciones del Especificación EJB3.
- Spring permite opciones de tecnología para Persistence, Object Remoting, etc. Por ejemplo, también estamos usando un front-end Flex, y estamos usando el protocolo Hessian para comunicaciones entre Flex y Spring.
Otra cosa a favor de la primavera es que la mayoría de las otras herramientas / marcos tienen mejor soporte para la integración con la primavera, la mayoría de ellos también usan resortes internos (por ejemplo, activemq, camel, CXF, etc.).
También es más maduro y hay muchos más recursos (libros, artículos, mejores prácticas, etc.) y desarrolladores experimentados disponibles que para EJB3.
Tiendo a preferir Spring sobre EJB3, pero mi recomendación sería cualquier enfoque que elijas, tratar de seguir escribiendo POJO y usar las anotaciones estándar cuando sea posible, como las anotaciones JSR como @PostConstruct, @PreDestroy y @Resource que funcionan con ambos EJB3. o Spring para que pueda elegir el marco que prefiera.
por ejemplo, podrías decidir sobre algún proyecto para usar Guice en lugar de IoC.
Si desea utilizar la inyección previa a la solicitud, como en una aplicación web, es posible que Guice sea un poco más rápido para la inyección de dependencias que Spring.
Los beans de sesión en su mayoría se reducen a la inyección de dependencia y las transacciones; así que EJB3 y Spring son similares para eso. Donde Spring tiene la ventaja es una mejor inyección de dependencia y abstracciones más agradables para cosas como JMS
¿Cuáles son los argumentos a favor o en contra de EJB3 vs Spring? Spring siempre innova y reconoce las limitaciones del mundo real. Spring ofreció simplicidad y elegancia para los servidores de aplicaciones Java 1.4 y no requirió una versión de la especificación J2EE a la que nadie tuvo acceso en 2004-2006. En este momento es casi un debate religioso que puede ser absorbido por la primavera. + abstracción + código abierto versus especificaciones Java Enterprise Edition (Java EE) 5.0.
Creo que Spring complementa más que compite con las especificaciones Java EE. Como las características que alguna vez fueron exclusivas de Spring continúan incorporándose a la especificación, muchos argumentarán que EJB 3 ofrece un conjunto de características "lo suficientemente buenas" para la mayoría de las aplicaciones empresariales internas.
¿Qué peligros puedo esperar con cada uno? Si tratas esto como un problema de persistencia (Spring + JPA) versus EJB3, realmente no tomas esa gran decisión.
¿Dónde puedo encontrar una buena información de referencia? No he seguido los resultados del índice de referencia del specj por algún tiempo, pero fueron populares por un tiempo. Parece que cada proveedor (IBM, JBOSS, Oracle y Sun) cada vez se interesa menos en tener un servidor compatible. Las listas se vuelven cada vez más cortas entre los vendedores certificados a medida que avanzas desde 1.3, 1.4. 1.5 Java Enterprise Edition. Creo que los días de un servidor gigante que cumple totalmente con todas las especificaciones han terminado.
Definitivamente recomendaría EJB3 durante la primavera. Descubrimos que es más simple, más fácil de codificar y mejor soportado. En el pasado, utilicé Spring y encontré que es muy confuso y no está tan bien documentado como EJB3 (o JPA, supongo, al final del día)
- A partir de EJB3 ya no tiene que tratar con archivos de configuración externos, y solo hay un POJO que anota por tabla de base de datos. Este POJO se puede pasar a su nivel web sin ningún problema. Los IDE como Netbeans pueden incluso generar automáticamente estos POJO para usted. Hemos utilizado EJB3 ahora como back-end para bastantes aplicaciones a gran escala, y no hemos notado ningún problema de rendimiento. Sus Session Beans se pueden exponer fácilmente como servicios web que podría exponer en su interfaz Flex. Los beans de sesión son fáciles de bloquear en un método o nivel de clase para asignar roles y cosas así si es necesario.
No puedo hablar mucho sobre la primavera, ya que solo lo probé durante unas semanas. Pero mi impresión general fue muy pobre. Eso no significa que sea un mal marco, pero nuestro equipo ha descubierto que EJB3 es el mejor para la capa de persistencia / negocio.