Poco a poco los standards van madurando y aunque durante muchos años hemos usado Spring,Struts,Hibernate como framework de referencia poco a poco los standards van ocupando también su lugar y el mercado se dividirá de una forma mas igualitaria. En este primer post comenzaremos a trabajar con EJBs.
Un EJB (Enterprise Java Bean) es un componente que debe ejecutarse de un contenedor de EJBs y se diferencia bastante de un JavaBean normal. Un JavaBean es un objeto Java al cual accedemos de forma directa desde nuestro programa.
Sin embargo un EJB es un componente al cual no podemos acceder de una forma tan directa y siempre accedemos a traves de algún tipo de intermediario.
Este intermediario nos aportará una serie de servicios definidos por los standards en los cuales el EJB se puede apoyar .Vamos a construir en este post un EJB básico concretamente un EJB de Sessión que son los mas habituales.Los EJB de sessión disponen de dos proxies (intermediarios) a traves de los cuales accedemos a ellos .
- Proxy Local : Es el intermediario que nos permite un acceso al EJB desde la misma maquina virtual.
- Proxy Remoto :Es el intermediario que nos permite el acceso al EJB desde una maquina virtual remota.
Estos proxies son los encargados de dar acceso al EJB a todos los servicios adicionales que soporta el EJB Container como son Transaccionalidad,Seguridad etc.Para construir un EJB de Sessión deberemos definir los interfaces de acceso local y remoto en los cuales los proxies se apoyarán.
Cada uno de estos interfaces se encarga de definir los métodos que estarán a disposición de los clientes que los invocan.Una vez hemos hecho una pequeña introducción vamos a contruir con Eclipse nuestro primer EJB. Para ello pulsaremos sobre File>New>EJBProject
Una vez hecho esto asignaremos un nombre al proyecto de EJB (EJBHolaMundo) y pulsaremos finalizar
Una vez finalizado tendremos disponible un nuevo proyecto de EJBs con el que comenzar a desarrrollar nuestros primeros Enterprise Java Beans. Pulsaremos boton derecho >New>SessionBean (3.x)
Una vez realizada esta operación asignaremos package, nombre de clase e interface local ( por ahora no usaremos interface remoto) y pulsaremos sobre finalizar.
Realizada esta operación dispondremos de dos ficheros uno el propio SessionBean y el otro su interface local.
SessionBean
package com.arquitecturajava.ejb; import javax.ejb.LocalBean; import javax.ejb.Stateless; /** * Session Bean implementation class Hola */ @Stateless public class Hola implements HolaLocal { /** * Default constructor. */ public Hola() { // TODO Auto-generated constructor stub } }
Interface Local
package com.arquitecturajava.ejb; import javax.ejb.Local; @Local public interface HolaLocal { }
Por ultimo pasaremos a modificarlos añadiendo un método en el interface e implementando la funcionalidad en el SessionBean.
package com.arquitecturajava.ejb; import javax.ejb.Local; @Local public interface HolaLocal { public String mensaje(); }
package com.arquitecturajava.ejb; import javax.ejb.Stateless; @Stateless public class Hola implements HolaLocal { public Hola() { } @Override public String mensaje() { return "hola desde un ejb de session"; } }
Una vez hecho esto acabamos de construir nuestro primer EJB el siguiente paso será desplegar el EJB en un servidor de aplicaciones para poder acceder a él.
Cecilio Álvarez Caules, hola como estas, mi pregunta es porque comparar EJB con Spring?, cual es la relacion del simil, pienso que es como comparar: “Eso seria como comparar, JSF con Hibernate” en el sentido que no entiendo porque cada uno tienes funcionalidades distintas
Tanto EJB y Spring Framework, ambos son tencnologías para la gestión de las dependencias de clases entre sí. La idea principal es el bajo acomplamiento y así facilitiar la mantenibilidad. (Depender de interfaces y no de implementaciones y los respectivos contenedores inyectar las implementaciones)
Spring nace como la competencia directa y ligera de EJB, siendo este muy exitoso ya que no depende de un contenedor de EJB o un Middleware (websphere, WebLogic, Jboss, Glashfish, etc).
NOTA: Spring MVC es un subproyecto que se orienta a la presentación
Eso seria como comparar, JSF con Hibernate, me podrían explicar en que se parecen y donde convergen las dos tecnologías
Hibernate sirve para persistir datos ,JSF es un framework de capa de presentacion
Ojo claro se que se pueden usar Juntos, pero al principio de la parte de preguntas y repuestas Cecilio Álvarez Caules dice “Digamos que hay siempre como dos corrientes de opinión gente que le gusta mas Spring framework y gente que le gusta mas el modelo del standard de EJB .”
Eso es lo no entiendo esa comparación??, creo que los 2 tienen finalidades distintas
No entiendo, en que se parece EJB y Spring Framework, EJB es para apoyar en la lógica de negocio de manera remota y(o) distribuida, y Spring Framework. es para Inyection de dependencias, y(o) MVC entre otras, no entiendo la comparación, los veo como tecnologías distintas y para uso diferentes
Alguien me puede explicar porque los comparan??
Son competencia directa . Java EE es un framework de inyección de dependencias utilizando standares y spring es usando su enfoque particular
[…] artículos relacionados: ¿ Que es REST ? ,Introducción a EJB 3.1 (I) ,El porqué de los […]
Cecilio buenas tardes, en tú excelente libro Arquitectura Java Solida usas el framework de spring, como entra a reemplazar EJB a spring en la implementación del libro.
Serían EJBs los Servicios y los DAOs 🙂
Alguna documentación que me pueda recomendar donde pueda ver la implementación y la interacción desde la capa de presentación.
Eso depende de cada framework de capa de presentación que uses , cada cual enfoca de una manera , es distinto JSF de Spring MVC por ejemplo
Cecilio muchas gracias por tus respuestas, el framework que trabajo es JSF. Otra pregunta es posible conseguir tus libros en físico.
No , solo en digital 🙁
[…] artículos relacionados: Java EE EJB , EJB […]
[…] artículos relacionados: Introducción EJB , EJBs […]
Es cierto que ya no hacen falta las interfaces a menos que el ejb vaya ser accedido desde otra JVM? con usar el @LocalBean bastara para definir el tipo de bean?
Gracias por tu aporte siempre cecilio..
Si es cierto , los proxies dinámicos se generarán extendiendo de nuestra clase
Cada uno de tus tutoriales es lo más claro que hay por la web. Muchas gracias nuevamente.
De nada 🙂
[…] artículos relacionados :Introducción a EJB, EJB Remotos, Cliente de […]
Hola. Hace años cuando estudiaba, vi algo de Java. Ahora quiero retomarlo, pero me asaltan varias dudas. Cuando hablo de EJB, quiere decir que va implícito el modelo MVC o son cosas totalmente diferentes?
Puedo tener un proyecto MVC sin tener que implementar EJB?
A lo mejor estoy mezclando conceptos….me gustaría que me lo aclaraseis. Gracias. Saludos!
Si que puedes, un EJB es como un Servicio que le invocas desde la parte de presentación pero no tiene que ser obligatoriamente un Controller (Modelo MVC) puede ser incluso desde linea de comandos
[…] artículos relacionados: Introducción a EJB , EJB Remotos , EJB […]
Gracias por la respuesta Cecilio. Te pido me orientes, tengo el siguiente problema: Una aplicación de escritorio multiempresas que tiene una base de datos para la aplicación y una base de datos por cada empresa. Debo hacer una aplicación web que me permita dar la misma funcionalidad que la de escritorio. Que cuando el usuario selecciona la empresa se abra la aplicación y use su propia base de datos. Pensé en EJB, pero si hay otras opciones te pido me digas a donde puedo dirigirme para abundar más sobre el tema. Me comentas que no estoy tomando el camino integrado.… Read more »
Pregunta: Con EJB, puedo tener ”n” bases de datos (Estructuralmente iguales) una para cada ciente y conectarme a una u otra, dependiendo del cliente que se autentique en la aplicación web, tomando de alguna otra base de datos (Base de administración), el nombre de la base, usuario y contraseña?
Por poder si pero no es algo integrado en los estandares de forma natural tendrías que usar SessionContext y leer el nombre del usuario
Una pregunta que no es menor, he visto que tus diagramas de entidad y beans son muy sencillos y faciles de entender. Que herramienta usas? Podrias hacer un post sobre ella? Me encantaria usarla para mis presentaciones, que hay veces que les falta un poco de originalidad y color.
Desde ya muchas gracias!
Omnigrafle para mac 🙂
Hola Cecilio, conoces alguna herramienta parecida para window?, o alguna que funcione en la web?, desde ya gracias por tu blog.
A que te refieres exactamente el articulo tiene muchos comentarios, y no acierto a ver a cual respondes
hola cecilio!! excelente explicación!!! Me gustaría hacerte unas preguntas, estoy aprendiendo java JEE y varios vídeos y tutoriales se realizaba mis llamadas de un javaBean normal (como describes aca) por ejemplo de mi pagina xhtml una linea de primefaces como esta <p:inputText value="#{PersonaBean.telefono}" llamada del bean normal … he notado que para un buen manejo y escalabilidad de la aplicación web se debe realizar con EJB, al inicio de este post colocas un "intermediario" lo que he visto es que generalmente es un servlet o webservice… existe la forma de que se llame al EJB directamente desde la pagina sin… Read more »
No lo he revisado normalmente me manejo con cada uno de los proyectos ya que prefiero que sean independientes uno de otros ya que es mas flexible 🙂
[…] artículos relacionados: Introducción a EJB , EJB Remotos , el concepto de […]
Muy interesante como se asientan los estandares, y hablando de eso tengo una duda acerca de la fiabilidad de javax.ejb.Schedule. Lo he usado para programar una tarea diaria en el servidor pero no tengo el resultado que espero, ¿hay algun detalle en el comportamiento de este interfaz que debería conocer en profundidad para predecir sus resultados? o más importante: lograr que se comporte como lo necesito. (existen muchas cosas que podrían fallar en mi aplicación pero poco a poco las descarto y necesito ayuda con esta)
Es parte del estandar no debería dar ningún problema
Gracias por la ayuda, y esta excelente la página me ha abierto los ojos a muchas posibilidades. El libro también me fue de mucha ayuda, mil gracias.
me alegro te sea util 🙂
Hola, muy buena explcación. Gracias!
Tengo una duda, tengo dos interficies (una local y una remota) y el SessionBean que las implementa, hasta aquí bien. Pero el cliente, que es un ManagedBean, ¿debe hacer referencia a las dos interfaces? entonces ¿cómo sabe cual usar? o ¿basta con la remota?….no acabo de entender esto, no sé si me pueden echar un cable. Gracias.
Saludos.
Siempre que el ejb y el managed bean estén en el mismo EAR la invocación es local. Cuando estén en distinto EAR tenemos que mirar si el servidor soporta que siga siendo invocacion local ( a veces hay trucos misma JVM) sino la invocación es remota ya que están en distintas JVM.
Estimado, tengo una duda sobre los ejb 3, es respecto de la transaccionalidad, tengo este caso un metodo EJB que contiene logica de negocio entre otras instrucciones otros metodos EJB, si falla uno de estos metodos internos deberia hacer rollback todos los metodos internos y las instrucciones del metodo grande, como deberia manejar este caso??.
Entiendo que deberia ser asi el metodo grande debe tener transaccion requerida_new y los metodos internos mandatory, sin embargo no esta funcionando hay algo mas que deberia saber?
Lo logico es que el método grande fuera “required” y los otros “required” o “supported” . Required new solo se usa para anidar transacciones
Sin embargo para mi caso es importante que se ejecute como parte de una transacción y por eso el MANDATORY. Encontre lo que hacia falta y lo documente aca http://diegofermh4qa.blogspot.com/2014/12/transaccionalidad-en-ejb-3.html , saludos gracias por tus aportes
gracias por el aporte 🙂
Buen día una vez desplegado el ese con el ejb como acceso a los servicios? Lo debo de hacer vía jdni?
Si es parte del modelo entonces los ejb me permitirán manejar la persistencia?
Puede funcionar sin ningún problema con glassfish ? ya que estoy en el entendido que al igual que los otros applications server, este tiene Funcionalidades similares
Un ejb se puede acceder via jndi o via inyeccion de dependencia si es local. A un ejb se le puede inyectar un persistence context para gestionar la persistencia de tus Entidades
Gracias Cecilio, me saltó una duda comentas que puede usar IoC si es local, llámese local si está instalado en el mismo Aplication server en un proyectos ejb (ear1), y un un proyecto web dinamico (ear2), ear2 consumirá a ear1..
Local me refiero si puedes acceder a traves del mismo EAR. Leete este otro artículo del blog :https://www.arquitecturajava.com/ejb-remote-vs-local-jee-6/
Muchas gracias estimado, necesitaba una explicación mas para aclarar mas mi mente, ya que estaba confundido en alguna cosas, con esta explicación quede excelente 😉
Gracias 😉
de nada 🙂
Los EJB pueden servir como el modelo del MVC en una aplicacion J2EE??
Si 🙂 Serían la parte del modelo .Pero recuerda que necesitaras un servidor que soporte ese tipo de modelo .Vamos un Jboss ,un Weblogic o un Websphere 🙂
Eres el capo cañoneri del software , mil gracias por tu tiempo.
me alegro que te fuera util 🙂
Gracias por el tutorial!
gracias 🙂
Muy práctica la guía Cecilio. Felicidades.
Sin duda que los gráficos ayudan mucho a entender lo que se quiere transmitir con palabras, excelentes aportes.
gracias 🙂
Hola esta muy practica la explicación del EJB, pero me queda una gran duda con respecto a esta funcionalidad.
¿Como sé cuando debo utilizar EJB?…¿cuando es recomendado para la aplicación desde el punto de vista del negocio?
saludos..muy buen blog
La respuesta uff puede ser demasiado larga .Digamos que hay siempre como dos corrientes de opinión gente que le gusta mas Spring framework y gente que le gusta mas el modelo del standard de EJB .Así resumiendo mucho yo te diría que Spring Framework es mas flexible que el mundo de los EJBs a cambio de pagar un precio . Este precio es que sueles tener que configurar muchas cosas y añadir mas piezas.A veces demasiadas piezas . Por lo tanto es importante mirar tus necesidades actuales y futuras y si con lo que traen los standares es suficiente pues… Read more »
Hola Matías, desde el punto de vista del negocio es siempre recomendable utilizar este tipo de frameworks. Primero, porque al momento de implementar tu app, te centras en lo que concierne solo a la lógica de negocios, que es lo que tu manejas a la perfección y ya no te preocupas por implementar código que concierne a la lógica de manejo de transacciones, seguridad, etc. Más aun, hoy que en JEE6 los ficheros de configuración(deployment desciptors) son opcionales y puedes dotar a tu app con los servicios del contenedor con simples anotaciones. Y segundo, porque esto es estandar. Es decir,… Read more »
[…] entrada Introducción a EJB 3.1 (I) aparece primero en Arquitectura […]