Foro sobre Java EE > Duda: Spring en lugar EBJ
Buenas,
Ambos permiten hacer básicamente lo mismo. Debes escoger entre uno u otro.
Históricamente Spring surgió como alternativa, debido a que EJB 1/2 era un autentico horror para desarrollar y testear.
Sin embargo, posteriormente Sun/Oracle reaccionó con EJB3 y más recientemente a partir de Java EE 6 con CDI que permite definir dependencias de forma muy similar a como se hace con Spring.
Cual escoger? Eso es muy subjetivo y depende de los gustos de cada uno. Spring es enorme y tiene soluciones para casi todo. EJB es el standard de Java EE. Si buscas en Internet encontrarás artículos favorables a uno u a otro. Yo en tu lugar haría algunas pruebas con ambos y escogería aquel con el que te sientas más cómodo. Seguro que acertarás.
Un saludo
Yo puedo hablarte de Spring, EJB no lo he tocado nunca, pero los pocos que me han hablado de él echaban pestes pero quizás se lo que dice @UnoPorAhi que depende las versiones.
Spring es un framework que tiene muchas partes y que se puden integrar. En Spring tiene que definir que va a tener tu aplicación para después ir añadiendo cada parte.
Aquí tienes los proyectos de Spring:
El básico es el Spring framework que tiene todo lo necesario para hacer una aplicación web como dice ahí
"Core support for dependency injection, transaction management, web applications, data access, messaging, testing and more."
Y normalmente para una aplicación web normal es suficiente.
Pero luego puedes meter más cosas como:
Seguridad (login de acceso): Spring Security
Acceso a todo tipo de Datos: Big Data, JPA, etc..: Spring Data.
Todo ello perfectamente integrado pero claro requiere estudio y experiencia trabajando con ello.
No sé si EJB tendrá esta división tan clara de cada una de las tareas.
Hola
Como bien dice @UnoPorAhi y @antuansoft te puedes plantear hacer lo siguiente utilizar el standar de JEE o no, es decir:
Un proyecto web estandar sería con las siguiente tecnologías:
Capa de Presentacion: JSF
Capa de Negocio: EJB
Capa de Persistencia: JPA
Un proyecto web no estanadar sería:
Capa de Presentacion: Struts, Spring MVC, Vaadin, ZK, etc..
Capa de Negocio: Spring
Capa de Persistencia: Hibernate, Mybatis, etc..
Para rizar más el rizo puedes hacer una mezcla, la que uso yo es:
Capa Presentacion : JSF
Capa de Negocio: Spring
Capa de Persistencia: Mybatis
Lo que te recomiendo es que hagas un pequeño ejemplo con cada una de la tecnologías y que evalues cual es la que te parece mejor.
Ok, entiendo spring. Sé que es una alternativa. Pero puede spring publicarse en un servidor remoto sólo como una capa de negocio para que otras aplicaciones puedan utilizar este recurso? Con EJB es posible separar el negocio en un servidor aparte y ser consumido por otra aplicación (una capa de presentación como Spring MVC o JSF)
??? EJB no hace magia. Cuando se declara Remote lo que hace es exponer su interfaz en el servidor por JNDI, haciendola es accesible por RMI sobre IIOP.
En Spring se pueden desplegar en un contenedor los beans 'de negocio' y exponerlos remotamente usando la tecnologia deseada: RMI, Web Services, Caucho, Burlap, JMS, AMQP....
http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/remoting.html
Un saludo
Gracias @UnoPorAhi, me has aclarado mi principal duda. Saludos!
Hola, saludos desde Costa Rica. Soy desarrollador certificado en Java SE 7.0 pero resientemente estoy entrando al mundo de JEE. He estado estudiando EJB y un poco de JPA.
Según he estudiado el EJB es un contenedor que permite tener las ventajas de Inyección de dependencias y otras coasas( Entiendo básicamente este patrón de diseño que permite el bajo acoplamiento) con esto se logra tener bajo acoplamiento utilizando Interfaces entre los módulos de la Aplicación empresarial. Separando la lógica de negocio en EJB publicados en un servidor de manera remota o local. Eso lo tengo claro(creo) Me parece muy util a la hora de escalar una aplicación con muchos y diferentes modulos en un sistema para una empresa grande. Evitando en muchos casos el tener que recompilar codigo para una aplciación en producción.
Ahora bien mi pregunta es, qué papel juega Spring (según leí) Spring fue la solución a las pruebas unitarias del contenedor EJB y una solución a el engorroso proceso de configuración del EJB que no era testeable.
Hoy día sé que Spring son muchos modulos (MVC, Security, Persistence, etc, etc.)
Pero mi consulta como sería una aplicación JEE con Spring en lugar de EJB, puesto que todo lo que he googleado solo leo ventajas de la Inyeccion de dependecias de Spring y Spring MVC por todas partes.
Entre otras consultas son:
Se puede con Spring separar Logica de Negocio en un servidor como se hace con EJB?
¿Como sería usar Spring correctamente? Como es la estructura e infraestructura publicada en servidores de un proyecto con Spring container o el BeanFactory?
Tengo muchas dudas y el internet no me ha ayudado mucho. Gracias por la ayuda, estoy estudiando por mi cuenta y he hecho practicas basicas con spring-core para inyectar dependencias.
Saludos,