Home UC3M
Home IT

Software de Comunicaciones - ITT Telemática

Ejercicios opcionales EJBs


  • Ejercicio 1: Creación, despliegue y ejecución de un EJB de Sesión con estado.
  • Ejercicio 2: Creación, despliegue y ejecución de un EJB de Entidad - persistencia manejada por contenedor (CMP).


 Ejercicio 1: Creación, despliegue y ejecución de un EJB de Sesión con estado

Similar a los EJBs anteriores, vamos a crear una nueva aplicación, ConverterFinalApp, la cual contiene, en su primera versión, un EJB de sesión cuyo método de negocio permite contar el número de operaciones (conversiones) realizadas. En la segunda versión, añade el EJB de entidad CustomerBean, para autenticar el usuario.

Apartado 1:  Creación de la aplicación ConverterFinalApp

  1. Crear las clases e interfaces correspondientes para el contador. Tened en cuenta, que en la implementación del método ejbCreate() hay que inicializar la variable de instancia que llevará la contabilidad de las operaciones.
  2. Para desplegarlo, seguir las instrucciones dadas en el apartado despliegue y ejecución, teniendo en cuenta el siguiente cambio:
    • En el punto 3.c.iii., "New Enterprise Bean Wizard - Bean General Settings", modificar el campo Enterprise Bean Type por Stateful Session.
  3. Crear un cliente Web (index.jsp) que contenga:
    • Un título.
    • Un campo de texto para introducir la cantidad a convertir.
    • Un combobox que permita seleccionar la moneda origen (euro, dólar, yen).
    • Un combobox que permita seleccionar la moneda destino (euro, dólar, yen).
    • Un botón para que realice la operación respectiva.

    Nota: Recuerda que si el usario elige convertir de dólar a yen, debéis convertir primero de dólar a euro y luego de euro a yen.

    Tened en cuenta: a) que el objeto Contador dentro de la página JSP, no puede ser una variable de instancia, por lo tanto, debe crearse por fuera del método jspInit(); b) este objeto debe almacenarse y recuperarse como atributo de la sesión.

  4. Desplegar el cliente (Web Component) con el nombre de ConverterFinalWAR.

  5. Se recomienda eliminar el despliegue de los EJBs anteriores, para evitar tener componentes con los mismos nombres:
    • Dentro del árbol de servidores, seleccionar la aplicación y hacer clic en el botón undeploy.

  6. Añadir el EJB desarrollado en la práctica introductoria: Enterprise JavaBeans.
  7. Definir el context root, como /converterfinal.
  8. Verificar que existen los 2 EJBs y sus respectivas referencias:
    • En el árbol de Applications, seleccionar ConverterFinalApp.
    • Seleccionar la pestaña General. Clic en el botón Sun-specific Settings...:
      • En la vista JNDI Names, deben aparecer en la tabla de Application: ConverterBeany ContadorBean.
      • Lo mismo para la tabla de References.
      • Clic en Close.
  9. Seleccionar ConverterFinalApp, y hacer clic en Tools -> Deploy.
  10. Ejecute la aplicación en el navegador: http://localhost:8888/converterfinal/

Apartado 2: Modificación de la aplicación ConverterFinalApp

Vamos a añadir el EJB CustomerBean de modo que si el usuario realiza más de 5 operaciones, se le pide el NIA para saber si existe en la base de datos..

  1. Modificar la página JSP cliente para que cuando el usuario haya hecho 5 cinco operaciones, muestre un formulario que solicite el NIA del usuario. Si el usuario existe en la base de datos, podrá seguir realizando operaciones. Si no existe, entonces no podrá seguir realizando operaciones.
  2. Verificar a través del método Find del bean de entidad que el usuario existe. 
Ejercicio 2: Creación, despliegue y ejecución de un EJB de Entidad CMP

En esta práctica vamos a abordar el desarrollo de un EJB de Entidad, denominado AccountBean cuya persistencia está manejada por contenedor que represente las cuentas de los usuarios de en un banco. Para cada cuenta mantener la siguiente información:

  • Número de cuenta, un identificador único asociado a la cuenta. Éste será utilizado como la llave primaria (primary key).
  • Identificador del usuario, el NIA del usuario titular de la cuenta.
  • Saldo, la cantidad monetaria que tiene la cuenta, a favor o en contra del titular.
  • Tipo, el tipo de cuenta (déposito de ahorro, corriente, corriente comercial, extranjera, etc.)
  • Fecha de apertura, la fecha en que se le da de alta a la cuenta. Por lo general, esta fecha corresponde a la fecha del sistema.

Los métodos de negocio y de vida que debe implementar son:

  • Crear una cuenta: ejbCreate(String num, String nia, float saldo, String tipo, java.util.Date apertura).
  • Establecer el contexto del EJB: setEntityContext(EntityContext ec).
  • Liberar el contexto del EJB: unsetEntityContext().
  • Recuperar información: Métodos get por cada atributo del bean, por ejemplo, getNo(), getNia(), getSaldo(), ...
  • Retirar dinero: retirar(int cantidad).
  • Ingresar dinero: ingresar(int cantidad) .
  • Realizar transferencia: transferirA(String cuenta, float cantidad).

Crear una o varias cuentas que permitan validar el funcionamiento del EJB desarrollado. Para ello podéis desarrollar un(os) cliente(s) sencillo que permita(n) validar los métodos de negocio y de vida.

Codificación de las interfaces y clases

  1. Crear el interfaz remota Account que define los métodos de negocio que puede invocar el cliente.
  2. Crear el interfaz origen AccountHome que define los métodos que le permiten al cliente crear y buscar un bean. En este caso, el interfaz proporcionará: a) un método que permite crear el bean a partir de los datos asociados a una cuenta, devolviendo un objeto que implementa la interfaz remota; y b) un método que permite buscar una instancia del bean a partir de la clave primaria, que en este caso es el número de cuenta.
  3. Crear la clase abstracta que contiene el código del EJB, AccountBean, la cual contiene los métodos de negocio definidos en el interfaz remoto Account como métodos abstractos, los métodos de vida definidos en el interfaz EntityBean.

Nota: En el capítulo 27 del tutorial de J2EE podéis encontrar información que os servirá como guía para la codificación de las interfaces y clases.

Despliegue de un EJB de Entidad manejado por contenedor

  1. En la ventana del asistente "New Enterprise Bean Wizard - Entity Bean Settings":
    1. Seleccionar en el combobox Persistence Management Type, la opción Container-Managed Persistence (2.0). Aparecerán automáticamente los campos que pueden ser persistentes, en nuestro caso los seleccionamos todos.
    2. En el campo Abtract Schema Name, introducir el valor AccountBean.
    3. En el apartado Primary Key Class, seleccionar en el combobox Select an existing field, el valor num [java.lang.String], que es el que corresponde con el tipo de clave primaria del EJB que estamos desplegando.
  2. Para realizar el mapeo entre los campos persistentes del bean y el esquema de la base de datos:
    1. En el árbol de la aplicación seleccionar el EJB (por ejemplo, AccountJAR).
    2. En la pestaña General, hacer clic en el botón Sun-specific Settings.... Se abrirá un diálogo:
      1. En el campo View, seleccionar CMP Database.
      2. En el campo JNDI Name, introducir el valor jdbc/bankDB. Esta conexión JDBC a la base de datos, corresponde a la que habíamos creado en el ejercicio anterior.
      3. Verificar que en el combobox Enterprise Bean, esté seleccionado el bean.
      4. Clic en el botón Create Database Mappings ..., se abrirá un cuadro de diálogo:
        • Seleccionar la opción Automatically Generate Necessary Tables.
        • No marcar el campo Generate Unique Table Names.
        • Seleccionar en el combobox Datasource vendor, Derby.
        • Clic en OK.
      5. Al volver a la ventana anterior, automáticamente en el apartado Mappings for Bean 'NombreBean', nos aparecerá la descripción de la tabla que modela nuestro EJB. Es posible modificar la longitud de los campos tipo String.
    3. Clic en Close.
    4. Guardar los cambios.