Home UC3M
Home IT

Software de Comunicaciones - ITT Telemática

Enterprise Java Beans
(sesión introductoria)



Introducción


En esta primera práctica de J2EE se introducen diferentes aspectos de índole práctica de lo que es el desarrollo de aplicaciones empresariales mediante el desarrollo de aplicaciones sencillas que sirven para que el alumno se familiarice con diferentes facetas del desarrollo de este tipo de aplicaciones en Java. Así, se irá gradualmente introduciendo al alumno en temas de despliegue (y configuración) de aplicaciones muy sencillas que constan únicamente de un cliente y un EJB, hasta llegar a desarrollar aplicaciones un poco más complejas. El proceso es casi totalmente guiado, dando gran detalle de lo que es el proceso de despliegue utilizando la herramienta deploytool proporcionada por el servidor de aplicaciones.


Ejercicio 1: Beans de Entidad (aplicacion CustomerApp )


Este ejercicio consta de dos apartados. El apartado 1 consiste en desplegar y ejecutar una aplicación J2EE denominada CustomerApp que permite representar la información relativa a un usuario, que se almacena de forma persistente en la base de datos de nuestro sistema. CustomerApp consta de un EJB de entidad cuya persistencia está manejada por bean (BMP) y una aplicación cliente, que nos permitirá acceder a la funcionalidad proporcionada por el EJB desarrollado. El segundo apartado consiste en hacer unas pequeñas modificaciones a la aplicación.

El código fuente de la aplicación os lo podéis descargar del siguiente enlace customer.tgz. Descomprimid el fichero en un directorio (por ejemplo, $HOME/swc/practicasj2ee).


Apartado 1: Despliegue y ejecución de la aplicación CustomerApp

  1. Arrancar el servidor J2EE.

  2. Configurar el gestor de base de datos, derby que utilizaremos en esta práctica. Para ello, seguir las instrucciones en Guía del gestor de Base de datos Derby.

  3. Crear la aplicación J2EE: CustomerApp
    1. Arrancar el deploytool, para ello ejecutad:$ deploytool &
    2. Seleccionar File -> New -> Application.
    3. Clic en Browse:
      • Seleccionar el directorio en el que habéis descomprimido los fuentes de la aplicación, por ejemplo: ${HOME}/swc/practicasj2ee/customer/.
      • Introducir CustomerApp.ear, en el campo File Name.
      • Clic en New Application.
      • Clic en Ok.
    4. Comprobar que el fichero CustomerApp.ear existe en directorio indicado en el paso b.
  4. Crear el Enterprise Bean: CustomerBean
    1. Codificar las interfaces del bean y las clases:
      • En este caso se proporciona el código dentro del directorio customer/src, por lo que sólo deberéis editarlo y comprenderlo:
        • Customer.java: Interfaz remota ("remote interface") que define los métodos de negocio que puede invocar el cliente. En este caso podéis comprobar que existe sólo un método getInformation, que permite obtener la información asociada a un usuario del banco. Este método se implementa en la clase del bean.
        • CustomerHome.java: Interfaz origen ("home interface") que define los métodos que le permiten al cliente crear y buscar un bean. En este caso podéis comprobar que esta interfaz proporciona un método que permite crear el bean a partir de los datos asociados a un usuario, devolviendo un objeto que implementa la interfaz remota definida en Customer.java, de esta forma se crea un nuevo usario en nuestro sistema que se almacenará de manera persistente en la base de datos. En esta interfaz también existe un método que permite buscar una instancia del bean a partir de la clave primaria, que en este caso es el nombre del usuario.
        • CustomerBean.java: Esta clase contiene el código del EJB que implementa los métodos de negocio definidos en el interfaz remoto Customer, además de todos los métodos definidos en la interfaz EntityBean.
        • CustomerTO.java: Es una clase auxiliar que representa la información asociada a un usuario, es una clase serializable ya que el método de negocio definido en la interfaz remota devuelve un objeto de este tipo.

    2. Compilar el código fuente, para ello dentro del directorio src ejecutad:
       javac -d ../build *.java

      Si este paso se ha realizado correctamente, en el directorio ../build tendréis la siguiente estructura de ficheros:

       build +-- Customer.class
      |
      +-- CustomerBean.class
      |
      +-- CustomerClient.class
      |
      +-- CustomerHome.class
      |
      +-- CustomerTO.class

    3. Empaquetar el EJB: Para ello vamos a utilizar el asistente ("wizard") proporcionado por el deploytool, que nos permite realizar las siguientes tareas de forma más sencilla:
      • Crear el descriptor de despliegue del bean.
      • Empaquetar el descriptor de despliegue y las clases del bean en un ficheoro EJB JAR.
      • Añadir el fichero EJB JAR en el fichero (CustomerApp.ear).

      Para ejecutar el asistente es necesario seleccionar en el deploytool: File -> New -> Enterprise Bean. El asistente muestra los siguientes cuadros de dialogo:

      1. "New Enterprise Bean Wizard - Introduction":
        • Leer el texto explicativo que nos indica las tareas que realiza este asistente.
        • Clic en Next.
      2. "New Enterprise Bean Wizard - EJB JAR General Settings":
        • En el apartado JAR Location, seleccionar la opción Create New JAR Module in Application y en el combobox inferior seleccionar CustomerApp.
        • En el apartado JAR Naming, introducir en el campo JAR Display Name, CustomerJAR.
        • En el apartado Contents, clic en Edit Contents, en el árbol de Available Files, localizar el directorio build/ y seleccionar los cuatro ficheros de clases del bean: Customer.class, CustomerBean.class, CustomerHome.class y CustomerTO.class. Hacer clic en Add y después en OK para volver a la pantalla anterior.
        • Clic en Next.
      3. "New Enterprise Bean Wizard - Bean General Settings":
        • En el combobox bajo Enterprise Bean Class seleccionar CustomerBean. Automáticamente en los campos Enterprise Bean Name aparecerá CustomerBean y en Enterprise Bean Type se seleccionará Entity.
        • En el apartado Remote Interfaces, seleccionar en el combobox correspondiente a Remote Home Interface, CustomerHome y en el combobox correspondiente a Remote Interface, Customer.
        • Clic en Next
      4. "New Enterprise Bean Wizard - Entity Bean Settings":
        • En el apartado Persistence Management, indicar en el combobox Persistence Management Type, la opción Bean-Managed Persistence.
        • En el apartado Primary Key Class, seleccionar la opción Select a standard java class. Automáticamente se seleccionará java.lang.String, que es el que corresponde con el tipo de clave primaria del EJB que estamos desplegando (recordar que la clave primaria es el dni que es de tipo String).
        • Clic en Next
      5. "New Enterprise Bean Wizard - Next Steps":
        • Leer el texto en el que se indican las tareas que se pueden realizar a continuación.
        • Clic en Finish.


    4. Para finalizar la creación de este EJB de Entidad es necesario configurar la referencia a la base de datos en la cual está almacenada la tabla de usuarios que representa este EJB. Para ello es necesario realizar los siguientes pasos:
      1. En el árbol de la aplicación, seleccionar CustomerBean.
      2. Seleccionar la pestaña Resource Ref's.
      3. Clic en Add. Automáticamente se añade una fila con las siguientes características:
        • El campo Coded Name está en blanco. Introducir el valor jdbc/CustomerDataSource (es la referencia que se busca en CustomerBean).
        • En el campo Type está seleccionada la opción javax.sql.DataSource (valor por defecto).
        • En el campo Authentication está seleccionada la opción Container (valor por defecto).
        • El campo Shareable está activado.
      4. En el apartado Sun-specific Settings for:
        • Indicar jdbc/bankdb, en la opción JNDI Name.
        • En los campos User Name y Password, introducir los datos necesarios para establecer la conexión con la base de datos, en este caso los valores son, swc y swc respectivamente.
      5. Seleccionar en el menú principal, File -> Save.

  5. Configurar la conexión JDBC del servidor J2EE:

    Una vez creado el EJB para que funcione correctamente es necesario configurar la conexión JDBC del servidor J2EE. La gestión de las conexiones se realiza a través de la herramienta de administración del servidor, a la que se puede acceder a través de la página http://localhost:4848. Los pasos a realizar son:

    1. Extender el árbol de JDBC y a continuación seleccionar JDBC Resources.
    2. En la parte derecha de la página, clic en el botón New... para crear un nuevo recurso:
      • En el campo JNDI Name, introducir jdbc/bankdb.
      • En el campo Pool Name, seleccionar en el combobox el correspondiente a la base de datos Derby, DerbyBankdbPool.
      • De forma opcional, introducir una descripción en el campo Description.
      • Clic en Ok.

  6. Crear un cliente para la aplicación: CustomerClient

    Para interactuar con el EJB anterior vamos a crear un cliente, cuyo código se encuentra en el directorio src/CustomerClient.java. Este cliente se lanzará en un terminal y su objetivo es permitirnos probar la funcionalidad de la aplicación CustomerApp.

    1. Compilar el código fuente si no ha sido compilado:
       $ javac -classpath ../build -d ../build CustomerClient.java
    2. Para empaquetar la aplicación cliente vamos a utilizar el asistente proporcionado por el deploytool, que nos permite realizar las siguientes tareas de forma más sencilla:

      • Crear el descriptor de despliegue de la aplicación cliente.
      • Empaquetar el descriptor de despliegue y los ficheros de la aplicación en un fichero JAR.
      • Añadir el fichero JAR en el fichero (CustomerApp.ear).


    3. Para ejecutar el asistente en el deploytool, seleccionar: File -> New -> Application Client. El asistente muestra los siguientes cuadros de diálogo:
      1. "New Application Client Wizard - Introduction":
        • Leer el texto explicativo que nos indica las tareas que realiza este asistente.
        • Clic en Next
      2. "New Application Client Wizard - JAR File Contents":
        • En el apartado AppClient Location, seleccionar la opción Create New AppClient Module in Application, y en su respectivo combobox seleccionar CustomerApp.
        • En el apartado AppClient Naming, introducir en el campo AppClient Display Name, CustomerClient.
        • En el apartado Contents, clic en Edit Contents: en el árbol debajo de Available Files localizar el directorio build y seleccionar el fichero correspondiente a la aplicación cliente CustomerClient.class y hacer clic en Add y después en OK para volver a la pantalla anterior.
        • Clic en Next
      3. "New Application Client Wizard - General":
        • En el apartado Application Client, en el combobox correspondiente a Main class, seleccionar CustomerClient.
        • Clic en Next
      4. "New Application Client Wizard - Next Steps":
        • Leer el texto en el que se indican las tareas que se pueden realizar a continuación.
        • Clic en Finish.

  7. Especificar la referencia al EJB:

    Si nos fijamos en el código de CustomerClient.java, se busca una referencia al bean mediante el método lookup:

     Object objRef = ic.lookup("java:comp/env/ejb/SimpleCustomer");

    Para especificar esta referencia es necesario realizar los siguientes pasos en el deploytool:

    1. En el árbol de la aplicación, seleccionar CustomerClient.
    2. Seleccionar la pestaña EJB Ref's.
    3. Click Add:
      • En el campo Coded Name, introducir ejb/SimpleCustomer.
      • En el combobox EJB Type, seleccionar Entity.
      • En el combobox Interfaces, seleccionar Remote.
      • En el campo Home Interface, introducir CustomerHome.
      • En el campo Local/Remote Interface, introducir Customer
      • En el apartado Target EJB, en el combobox correspondiente a JNDI Name, seleccionar CustomerBean.
      • Clic en OK.

  8. Desplegar CustomerApp en el servidor
    1. En el árbol de la aplicación seleccionar CustomerApp.
    2. Seleccionar Tools -> Deploy:
      • En el apartado Connection Settings, introducir el "login" y "password" del administrador del servidor.
      • Seleccionar el chechbox Return Client JAR y clic en OK.
      • Confirmar el despliegue en la ventana Confirm Save and Deploy.
      • Hacer clic en Close en la ventana Distribute Module cuando finalice el despliegue.
      • Para verificar el despliegue: en el árbol de Servers, seleccionar el host en el que se está ejecutando el servidor J2EE (localhost). En la tabla Deployed Applications, debería aparecer listada la aplicación CustomerApp y su estado debería ser Running.
      • Ejecutar CustomerApp:
        1. Introducir en la tabla creada previamente, users, algunos registros, ya que el método de negocio que soporta el bean, sólo permite la visualización de datos de usuarios existentes. Para realizar esta tarea se proporciona el script insert_table.sql que debéis ejecutar en la consola de Derby (ij).
        2. En un terminal, ir al directorio principal de la aplicación customer.
        3. Ejecutar en la línea de comandos:
           $ appclient -client CustomerAppClient.jar 
        4. En el terminal, el cliente mostrará los valores asignados al cliente "1111A":
           
          DNI: 1111A
          User Name: Usuario1
          Address: C/Usuario, 1
          Phone Number: 666111111 

Si ha llegado aquí es señal de que ya sabes compilar (haciendo uso de las librerías de J2EE) aplicaciones empresariales, así como desplegarlas haciendo uso del deploytool.


Apartado 2: Modificación al CustomerApp

  1. Modificar la clase cliente CustomerClient para que reciba como parámetro el DNI del usuario que desea buscar.
  2. Implemente el método que permite borrar clientes.
  3. Crear una aplicación cliente que permita probar los métodos añadir y borrar un cliente.

Ejercicio 2: Beans de Sesión (aplicación ConverterApp)

En este ejercicio aprenderemos a desplegar y ejecutar una aplicación J2EE denominada ConverterApp, que permite al usuario convertir de euros a dólar y viceversa. Esta aplicación consta de un EJB sin estado, que es el que realiza los cálculos y un cliente Web (página JSP), que nos permitirá a través de un navegador acceder a la funcionalidad proporcionada por el EJB desarrollado.  El código fuente de la aplicación os lo podéis descargar del siguiente enlace converter.tgz. Descomprimid el fichero (por ejemplo, en $HOME/swc/practicasj2ee/).

Apartado 1: Despliegue y ejecución de la aplicación ConverterApp

  1. Arrancar el servidor J2EE tal como se indica en el enunciado global de las prácticas de J2EE.

  2. Crear la aplicación J2EE ConverterApp:
    1. Arrancar la herramienta deploytool ejecutando: $ deploytool &

    2. Almacenar la aplicación en un fichero denominado ConverterApp.ear empleando el deploytool:
      • Seleccionar File -> New -> Application
      • Clic en Browse. Seleccionar el directorio en el que habéis descomprimido previamente los fuentes de la aplicación (por ejemplo, $HOME/swc/practicasj2ee/converter.
        • En el campo File, introducir ConverterApp.ear
        • Clic en New Application
        • Clic en OK
      • Comprobar que el fichero ConverterApp.ear existe en el directorio indicado en el paso b.

  3. Crear ConverterBean:
  4. En tiempo de ejecución, los clientes ejecutan la lógica de negocio contenida en EJB, invocando los métodos de éste. Este primer EJB que os proporcionamos es un bean de sesión sin estado denominado ConverterBean. Para crearlo es necesario realizar los siguientes pasos:

    1. Codificar las interfaces del Bean y la clase (en este caso se proporciona el código, por lo que sólo deberéis comprenderlo):
      • Converter.java: "remote interface" que define los métodos de negocio que puede invocar el cliente. En este caso, podéis comprobar que existen dos métodos de conversión dollarToEuro y euroToDollar. Estos métodos se implementan en el código de la clase del bean.
      • ConverterHome.java: "home interface" que define los métodos que le permiten al cliente crear, buscar y eliminar el bean. En este caso podéis comprobar que esta interfaz proporciona un único método que permite crear el bean, devolviendo un objeto que implementa la interfaz remota definida en Converter.java.
      • ConverterBean.java: esta clase contiene el código del EJB que implementa los métodos de negocio definidos en el interfaz remoto Converter.

    2. Compilar el código fuente, para ello dentro del directorio src ejecutad:
       javac -d ../build *.java 
      Si este paso se ha realizado correctamente, en el directorio ../build tendréis la siguiente estructura de ficheros:
       build +--converter +-- Converter.class
      |
      +-- ConverterBean.class
      |
      +-- ConverterHome.class
    3. Empaquetar el enterprise bean. Para ello vamos a utilizar el asistente ("wizard") proporcionado por el deploytool, que nos permite realizar las siguientes tareas de forma más sencilla:
      • Crear el descriptor de despliegue del bean.
      • Empaquetar el descriptor de despliegue y las clases del bean en un fichero EJB JAR.
      • Añadir el fichero EJB JAR en el fichero (ConverterApp.ear).

      Para ejecutar el asistente, seleccionar en el deploytool: File -> New -> Enterprise Bean. El asistente muestra los siguientes cuadros de diálogo:

      1. "New Enterprise Bean Wizard - Introduction":
        • Leer el texto explicativo que nos indica las tareas que realiza este asistente.
        • Clic en Next.
      2. "New Enterprise Bean Wizard - EJB JAR General Settings":
        • En el apartado JAR Location, seleccionar la opción Create New JAR Module in Application y en el combobox inferior seleccionar ConverterApp.
        • En el apartado JAR Naming, introducir en el campo JAR Display Name, ConverterJAR.
        • En el apartado Contents, clic en Edit Contents, en el árbol de Available Files, localizar el directorio build/converter y seleccionar los tres ficheros de clases del bean: Converter.class, ConverterBean.class y ConverterHome.class. Hacer clic en Add y después en OK para volver a la pantalla anterior.
        • Clic en Next.
      3. "New Enterprise Bean Wizard - Bean General Settings":
        • En el combobox bajo Enterprise Bean Class seleccionar converter.ConverterBean. Automáticamente en los campos Enterprise Bean Name aparecerá ConverterBean y en Enterprise Bean Type se seleccionará Stateless Session.
        • En el apartado Remote Interfaces, seleccionar en el combobox correspondiente a Remote Home Interface, converter.ConverterHome y en el combobox correspondiente a Remote Interface, converter.Converter.
        • Clic en Next
      4. "New Enterprise Bean Wizard - Expose as Web Service Endpoint":
        • Por defecto está en "No", debemos hacer clic en Next.
      5. "New Enterprise Bean Wizard - Next Steps":
        • Leer el texto en el que se indican las tareas que se pueden realizar a continuación.
        • Clic en Finish.

  5. Crear el cliente Web ConverterWAR:

    El cliente Web que vamos a utilizar para interactuar con el EJB anterior es una página JSP, que podéis encontrar en el directorio web. Visualizad este fichero index.jsp y fijaos sobre todo en el código del método jspInit en el que podéis ver como se crea un objeto bean, que nos permite acceder a los métodos de negocio del EJB. Para empaquetar este cliente Web, utilizaremos el asistente proporcionado por el deploytool, el cual permite:

    • Crear el descriptor de despliegue del cliente Web.
    • Empaquetar el descriptor de despliegue y el cliente Web en un fichero WAR.
    • Añadir el fichero WAR en el fichero ConverterApp.ear

    Para ejecutar el asistente, seleccionar en el deploytool: File -> New -> Web Component. El asistente muestra los siguientes cuadros de diálogo:

    1. "New Web Application Wizard - Introduction":
      • Leer el texto explicativo que nos indica las tareas que realiza este asistente.
      • Clic en Next
    2. "New Web Application Wizard - WAR File":
      • En el apartado WAR Location, seleccionar Create New WAR Module in Application, y en el combobox inferior seleccionar ConverterApp.
      • En el apartado WAR Naming, introducir en el campo WAR Name, ConverterWAR.
      • En el apartado Contents, clic en Edit Contents: en el árbol debajo de Available Files localizar el directorio web y seleccionar el fichero correspondiente a la aplicación web index.jsp y hacer click en Add y después en OK para volver a la pantalla anterior.
      • Clic en Next.
    3. "New Web Application Wizard - Choose Component Type":
      • Seleccionar el botón JSP Page.
      • Clic en Next.
    4. "New Web Application Wizard - Component General Properties":
      • En el combobox bajo JSP Filename, seleccionar index.jsp. Automáticamente en los campos Web Component Name aparecerá index y en Web Component Display Name aparecerá index.
      • Clic en Next.
    5. "New Web Application Wizard - Next Steps":
      • Leer el texto en el que se indican las tareas que puede ser necesario realizar a continuación.
      • Clic en Finish.

  6. Especificar la referencia del cliente Web al EJB:

    Si nos fijamos en el código del jsp, se busca una referencia al bean mediante el método lookup:

     Object objRef = ic.lookup("java:comp/env/ejb/EuroDollarConverter");

    Para especificar esta referencia es necesario realizar los siguientes pasos en el deploytool:

    1. Seleccionar ConverterWAR en el árbol de la aplicación.
    2. Seleccionar la pestaña EJB Refs.
    3. Clic en Add:
      • En el campo coded Name, introducir ejb/EuroDollarConverter.
      • En el combobox EJB Type, seleccionar Session.
      • En el combobox Interfaces, seleccionar Remote.
      • En el campo Home Interface, introducir converter.ConverterHome.
      • En el campo Local/Remote Interface, introducir converter.Converter.
      • De las dos opciones disponibles en el apartado Target EJB, seleccionar el campo que pone JNDI Name y seleccionar ConverterBean
      • Clic en OK.

  7. Especificar el context root de la aplicación Web:

    El context root de la aplicación Web es el camino en el servidor en el que estará accesible esta aplicación. Para especificarlo es necesario realizar los siguientes pasos en el deploytool:

    1. En el árbol de la aplicación seleccionar ConvertApp.
    2. Seleccionar la pestaña Web Context.
    3. En el campo Context Root, introducir /converter.

  8. Mapear los nombres JNDI del bean creado:

    1. En el árbol de la aplicación seleccionar ConverterApp.
    2. Seleccionar la pestaña General.
    3. Clic en el botón Sun-specific Settings:
      • Seleccionar JNDI Names en el campo View.
      • En la tabla de aplicación, comprobar que el nombre JNDI para el enterprise bean es ConverterBean.
      • En la tabla de referencias, escribir ConverterBean (o en su defecto, comprobar que este es el nombre) en la columna JNDI Name para todas las filas.
      • Clic en Close.
  9. Desplegar la aplicación en el servidor J2EE:

    1. En el árbol de la aplicación seleccionar ConverterApp.
    2. Seleccionar Tools -> Deploy:
      • En el apartado Connection Settings, introducir el "login" y "password" del administrador del servidor (login:admin y password=admin2007).
      • Seleccionar el chechbox Return Client JAR y clic en OK.
      • Confirmar el despliegue en la ventana Confirm Save and Deploy.
      • Hacer clic en Close en la ventana Distribute Module cuando finalice el despliegue.
      • Para verificar el despliegue: en el árbol, expandir el nodo de servidores y seleccionar el host en el que se está ejecutando el servidor J2EE (localhost). En la tabla Deployed Applications, debería aparecer listada la aplicación ConverterApp y su estado debería ser Running.
          
      • Ejecución de la aplicación:
        1. Para comprobar el funcionamiento de la aplicación, abrir un navegador y conectarse a la URL: http://localhost:8888/converter.

          Pantalla inicial conversor

Apartado 2: Modificación al ConverterApp

  1. Añade otros dos métodos que te permitan convertir de Euro a Yen y viceversa.
  2. Modifica el cliente JSP para que el usuario también pueda convertir de Euro a Yen y viceversa desde el interfaz.

 Referencias