Entity Beans en J2EE RI
Hemos comentado que a partir de ahora vamos a subir el nivel de los
tutoriales …. pero pretendemos hacerlo poco a poco.
Esta vez, vamos a ampliar el tutorial anterior, realizando algunos cambios,
para crear un ejemplo básico de un EJB de entidad, que desplegaremos en la
implementación de referencia (RI).
El código aquí mostrado no debeis usarlo como referencia sobre buenas
prácticas en el desarrollo JE22 porque en siguientes tutoriales nos centraremos
precisamente en esto…. aplicar algunos patrones para ir dando forma a nuestras
aplicaciones.
Básicamente, un EJB de entidad, tiene los mismos elementos que un EJB de
sesión… aunque con algunos matices:
- Debemos crear un interfaz Home donde especificaremos como crear el EJB. En
este caso es más importante porque probablemente sea el encargado de
almacenar de modo persistente nuestro EJB. - Un interfaz remoto, con los métodos que operan sobre los atributos
privados - Un Bean que posee los métodos obligatorios para que nuestro EJB se
comporte correctamente (al implementar el interfaz EntityBean)
Hay dos modos de construir un EJB de entidad, haciendo que la persistencia la
gestione el propio EJB o haciendo que la gestione automáticamente en
contenedor. Hemos elegido el primer método para entender, un poco, que esta pasando
por debajo cuando usemos el segundo tipo.
Realmente lo que queremos comprobar es como el contenedor gestiona los
eventos ….. y crear nuestro esqueleto de referencia.
Creamos el interfaz Home del Entity Bean
Definimos un método create para inicializar en
EJB y findByPrimaryKey para poder localizarlo
(obligatorio). El método findByRango solo lo introducimos para futuros
desarrollos
|
Creamos el interfaz remoto
En él, definimos todos los métodos get/set para poder acceder a nuestros
atributos
|
Creamos el Entity Bean
Separamos los eventos del EJB, de los métodos que realizan las lecturas y
escritura, para mayor claridad.
Hemos forzado el código para la simulación de la recuperación de un
elemento con clave primaria 22
|
La estructura de nuestro proyecto tiene el siguiente aspecto
Invocamos desde el EJB de sesión al de entidad
Desde un metodo del EJB de sesión, ejecutamos la llamada al de Entidad.
|
Deberiamos hacernos una pregunta. ¿ Como la llamada a findByPrimaryKey
retorna un iFacturaItem?
iFacturaItem miFactura = miHome.findByPrimaryKey(«22»);
Si la funcion el el Bean .. retorna un entero ?? …
public String ejbFindByPrimaryKey(String
pParam) throws FinderException
Esto significa, que el contenedor lo hace por nosotros ….
Comprobar el funcionamieto
Si vemos la salida…. sin estar conectando realmente con una base de
datos … podemos ver que hace el contenedor de EJBs …
Sobre todo debemos prestar atención a la última linea ….. para ver como
el contenedor hace cosas por nosotros
|
Podeis descargar el código completo
Desplegar la aplicación
Asignamos los nombre JNDI (hemos cambiado también el de sesión).
Podemos ver que desde el EJB de sesion hemos encontrado el de entidad como:
Object objetoGenerico = contexto.lookup(«java:comp/env/ejb/entidadfactura«);
Definimos el Bean como de Entidad e identificamos sus interfaces
La persistencia la maneja el Bean
La seguridad de momento la dejamos a un lado (todo llegará)
Y redesplegamos
Ya estamos en marcha de nuevo ….. con un entorno más
completo. A partir de ahora, analizaremos lo que hemos hecho y como mejorarlo.
Preguntas
Hay algunas preguntas que nos debemos hacer
-
¿Por qué se crea el EJB de entidad desde el de sesion?
-
¿Por qué hemos creado una clase Factura que es la que se
pasa como parámetro? -
¿La aplicación tiene un alto o bajo nivel de acoplamiento?
-
¿Si despliego los ejbs y tengo que cambiar sus nombres …
en cuantos sitios debo tocar? -
¿Realmente estoy programando orientado a objetos o estoy
complicando innecesariamente la aplicación con interfaces y objetos sin
realmente obtener las ventajas de este tipo de programación?
Muchas veces se pone de moda una tecnología y se usa… sin ser
muy consciente del objetivo que busca
A partir de ahora, uno de nuestros objetivos será responder a
estas preguntas ….