Introducción a EJB 3.1 (I)

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.

It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

60 Responses to Introducción a EJB 3.1 (I)

  1. Adelmo 22 Mayo, 2017 at 16:19 #

    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

  2. Adelmo 18 Mayo, 2017 at 16:36 #

    Eso seria como comparar, JSF con Hibernate, me podrían explicar en que se parecen y donde convergen las dos tecnologías

    • Cecilio Álvarez Caules 21 Mayo, 2017 at 15:27 #

      Hibernate sirve para persistir datos ,JSF es un framework de capa de presentacion

  3. Adelmo 18 Mayo, 2017 at 16:32 #

    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

  4. Adelmo 18 Mayo, 2017 at 16:26 #

    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??

    • Cecilio Álvarez Caules 24 Mayo, 2017 at 13:47 #

      Son competencia directa . Java EE es un framework de inyección de dependencias utilizando standares y spring es usando su enfoque particular

  5. Edson 15 Julio, 2016 at 22:18 #

    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.

    • Cecilio Álvarez Caules 20 Julio, 2016 at 6:54 #

      Serían EJBs los Servicios y los DAOs 🙂

      • Edson 29 Julio, 2016 at 21:57 #

        Alguna documentación que me pueda recomendar donde pueda ver la implementación y la interacción desde la capa de presentación.

        • Cecilio Álvarez Caules 30 Julio, 2016 at 12:53 #

          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

          • Edson 3 Agosto, 2016 at 20:48 #

            Cecilio muchas gracias por tus respuestas, el framework que trabajo es JSF. Otra pregunta es posible conseguir tus libros en físico.

          • Cecilio Álvarez Caules 4 Agosto, 2016 at 7:37 #

            No , solo en digital 🙁

  6. cesar 20 Abril, 2016 at 16:19 #

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

    • Cecilio Álvarez Caules 21 Abril, 2016 at 7:28 #

      Si es cierto , los proxies dinámicos se generarán extendiendo de nuestra clase

  7. Fabricio 9 Julio, 2015 at 21:04 #

    Cada uno de tus tutoriales es lo más claro que hay por la web. Muchas gracias nuevamente.

    • Cecilio Álvarez Caules 10 Julio, 2015 at 13:40 #

      De nada 🙂

  8. Sara 17 Junio, 2015 at 17:15 #

    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!

    • Cecilio Álvarez Caules 18 Junio, 2015 at 9:59 #

      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

  9. ragdEPC 28 Abril, 2015 at 17:57 #

    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. hay alguna forma de hacerlo integrado con EJB?.

    Gracias.

  10. ragdEPC 28 Abril, 2015 at 0:32 #

    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?

    • Cecilio Álvarez Caules 28 Abril, 2015 at 8:11 #

      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

  11. Facundo 12 Abril, 2015 at 14:55 #

    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!

    • Cecilio Álvarez Caules 13 Abril, 2015 at 13:38 #

      Omnigrafle para mac 🙂

  12. german 8 Abril, 2015 at 22:41 #

    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 que intervenga un servlet??

    el uso del ide, es diferente para cada proyecto EJB… me explico en netbeans se utiliza un solo proyecto que me integra todo (jpa, EJB, Dinamic web), en eclipse se debe hacer 3 Proyectos diferentes.. un proyecto EJB uno de JPA y otro Dinamic web y todo esto integrarlo en un Enterprise Aplication proyect… EAP, existe una forma en eclipse que pueda hacer o agregar mis EJB y JPA en una Dinamic web??

    haz hecho algun tutorial o en tus libros tienes algun ejemplo de realizar un EAP completo en Eclipse?
    gracias!!!

    • Cecilio Álvarez Caules 10 Abril, 2015 at 17:37 #

      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 🙂

  13. Cornelio 20 Marzo, 2015 at 22:37 #

    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)

    • Cecilio Álvarez Caules 21 Marzo, 2015 at 8:57 #

      Es parte del estandar no debería dar ningún problema

      • Cornelio 23 Marzo, 2015 at 23:00 #

        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.

        • Cecilio Álvarez Caules 26 Marzo, 2015 at 17:30 #

          me alegro te sea util 🙂

  14. Marc 11 Diciembre, 2014 at 14:13 #

    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.

    • Cecilio Álvarez Caules 13 Diciembre, 2014 at 19:20 #

      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.

  15. Diego Hidalgo 8 Diciembre, 2014 at 23:36 #

    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?

    • Cecilio Álvarez Caules 11 Diciembre, 2014 at 8:15 #

      Lo logico es que el método grande fuera “required” y los otros “required” o “supported” . Required new solo se usa para anidar transacciones

  16. Marco Arreguín 6 Noviembre, 2014 at 15:25 #

    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

    • Cecilio Álvarez Caules 7 Noviembre, 2014 at 10:21 #

      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

      • Marco Arreguín 7 Noviembre, 2014 at 18:10 #

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

  17. Esteban 3 Noviembre, 2014 at 5:14 #

    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 😉

    • Cecilio Álvarez Caules 3 Noviembre, 2014 at 10:32 #

      de nada 🙂

  18. Timoteo 21 Mayo, 2014 at 20:24 #

    Los EJB pueden servir como el modelo del MVC en una aplicacion J2EE??

    • Cecilio Álvarez Caules 21 Mayo, 2014 at 20:53 #

      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 🙂

  19. Patricio 9 Abril, 2014 at 21:48 #

    Eres el capo cañoneri del software , mil gracias por tu tiempo.

    • Cecilio Álvarez Caules 10 Abril, 2014 at 7:36 #

      me alegro que te fuera util 🙂

  20. Gilberto Ramos 1 Abril, 2014 at 15:51 #

    Gracias por el tutorial!

    • Cecilio Álvarez Caules 1 Abril, 2014 at 19:38 #

      gracias 🙂

  21. raphapy 14 Febrero, 2014 at 16:37 #

    Muy práctica la guía Cecilio. Felicidades.

  22. Luisin Enrique Maza Alcalde 3 Enero, 2014 at 20:41 #

    Sin duda que los gráficos ayudan mucho a entender lo que se quiere transmitir con palabras, excelentes aportes.

    • Cecilio Álvarez Caules 4 Enero, 2014 at 10:56 #

      gracias 🙂

  23. Matias 22 Diciembre, 2013 at 6:50 #

    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

    • Cecilio Álvarez Caules 22 Diciembre, 2013 at 10:29 #

      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 adelante con ellos :). El problema es que esto no ocurre tanto como parece.

    • raphapy 14 Febrero, 2014 at 16:32 #

      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, podrás portar tu aplicación a cualquier servidor de aplicaciones que sea “Java EE6 full compliant o EJB3 compliant”, asi que no necesitas llevar todo el framework de Spring junto con tu aplicación.

      Saludos.

Trackbacks/Pingbacks

  1. El concepto de EJB in WAR y su uso - Arquitectura Java - 12 Enero, 2017

    […] artículos relacionados: ¿ Que es REST ? ,Introducción a EJB 3.1 (I) ,El porqué de los […]

  2. Introducción a Java EE Batch - Arquitectura Java - 16 Mayo, 2016

    […] artículos relacionados:  Java EE EJB , EJB […]

  3. Usando un EJB Async - Arquitectura Java - 11 Mayo, 2016

    […] artículos relacionados: Introducción EJB  , EJBs […]

  4. EJB Singleton - Arquitectura Java - 30 Junio, 2015

    […] artículos relacionados :Introducción a EJB, EJB Remotos, Cliente de […]

  5. El concepto de Java JTA - Arquitectura Java - 3 Junio, 2015

    […] artículos relacionados: Introducción a EJB , EJB Remotos , EJB […]

  6. El concepto de ejb-jar.xml - Arquitectura Java - 3 Abril, 2015

    […] artículos relacionados: Introducción a EJB , EJB Remotos , el concepto de […]

  7. Introducción a EJB 3.1 (I) | Pablo Gallego Falcón - 2 Agosto, 2013

    […] entrada Introducción a EJB 3.1 (I) aparece primero en Arquitectura […]

Deja un comentario