Home UC3M
Home IT

Software de Comunicaciones - ITT Telemática

Enterprise Java Bean de Sesión con Estado

 OBJETIVOS

Los objetivos de esta práctica son que los alumnos se enfrenten al desarrollo de aplicaciones empleando la tecnología Java 2 Enterprise Edition (J2EE) y utilizando para ello la herramienta de desarrollo proporcionada por Sun denomina J2EESDK versión 1.4. Las prácticas serán ejemplos que ilustren los tipos de EJB existentes y además los alumnos deberán modificarlos parcialmente, estas modificaciones serán corregidas en las clases prácticas.

En esta segunda práctica vamos a abordar el desarrollo de un EJB de Sesión con Estado, denominado CartBean. Este EJB implementa un carrito de la compra de una tienda de libros on-line, en este caso el cliente que accede a sus métodos de negocio será una aplicación que se ejecutará desde un terminal. El alumno deberá añadir un nuevo método de negocio al bean anterior para proporcionarle una mayor funcionalidad a los clientes de la tienda de libros.

 APLICACIÓN "CartApp"

Introducción

Este segundo ejemplo consiste en desplegar y ejecutar un aplicación J2EE denominada CartApp que permite al usuario gestionar su carrito de la compra en un tienda on-line de libros. CartApp consiste en un EJB de sesión con estado y una aplicación cliente, que nos permitirá acceder a la funcionalidad proporcionada por el EJB desarrollado.

El código fuente de la aplicación os lo podeis descargar del siguiente enlace cart.tgz.

Pasos a realizar

Los pasos que vamos seguir para desarrollar esta aplicación J2EE son muy similares a los de la clase anterior:
  1. Arrancar el servidor J2EE

  2. Crear la aplicación J2EE: CartApp

  3. Crear el Enterprise Bean: CartBean

  4. Crear un cliente para la aplicación: CartClient

  5. Desplegar CartApp en el servidor
Veamos cada uno de ellos detalladamente.

1. Arrancar el servidor J2EE

Se siguen los mismos pasos que se han detallado en el enunciado de la primera práctica.

2. Crear CartApp

Para crear la aplicación J2EE CartApp se utiliza la herramienta deploytool proporcionado el J2EESDK 1.4. Para arrancar esta herramienta es necesario ejecutar:
  $ deploytool &
  
Empleamos el deploytool para almacenar la aplicación en un fichero denominado CartApp.ear:
  1. Selecciona "File -> New -> Application".

  2. Click en "Browse":

    1. Seleccionar el directorio en el que habeis descomprimido los fuentes de la aplicación, por ejemplo:
    2.     ${HOME}/swc/practicas/cart/
          
    3. En el campo "File Name", introducir CartApp.ear

    4. Click "New Application".

    5. Click "OK"

  3. Comprueba que el fichero CartApp.ear existe en directorio indicado en el paso 2.1

3. Crear CartBean

El código fuente correspondiente a este Bean está en el directorio src dentro de la carpeta cart. Para crear el EJB CartBean 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 debereis editarlo y comprenderlo):

    1. Cart.java: es en este ejemplo el "remote interface" que define los métodos de negocio que puede invocar el cliente. En este caso podeis comprobar que existen dos métodos addBook, que permite añadir un nuevo libro al carrito de la compra y getContents, que permite obtener todos los libros existentes en el carrito. Estos métodos se implementan en el código de la clase del bean.

    2. CartHome.java: es en este ejemplo el "home interface" que define los métodos que le permiten al cliente crear, buscar y eliminar el bean. En este caso podeis comprobar que esta interfaz proporciona un método que permite crear el bean a partir del nombre del usuario de la tienda de libros on-line, devolviendo un objeto que implementa la interfaz remota definida en Cart.java. Los métodos de creación del bean permiten inicializar su estado, en este caso el nombre del usuario al que está asociado el carrito.

    3. CartBean.java: es en este ejemplo el código del "enterprise bean" que implementa los métodos de negocio definidos en el interfaz remoto Cart.

  2. Compilar el código fuente, para ello dentro del directorio src ejecutad:

  3.   javac -classpath ${J2EE_HOME}/lib/j2ee.jar -d ../build *.java
      
    Si este paso se ha realizado correctamente, en el directorio ../build tendreis la siguiente estructura de ficheros:
      build +-- Cart.class
            |
            +-- CartBean.class
            |
            +-- CartHome.class
      
  4. Empaquetar el enterprise bean. Para ello vamos a utilizar un "wizard" proporcionado por el deploytool. Gracias a este "wizard", realizaremos 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 CartApp.ear.

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

    1. "New Enterprise Bean Wizard - Introduction":

      1. Leer el texto explicativo que nos indica las tareas que realiza este "wizard".

      2. Click "Next".

    2. "New Enterprise Bean Wizard - EJB JAR":

      1. En el apartado "JAR Location", seleccionar el botón etiquetado como "Create NewJAR Module Application" y en el combobox inferior seleccionar CartApp.

      2. En el apartado "JAR Naming", introducir en el campo "JAR Display Name" el valor CartJAR.

      3. En el apartado "Contents", click "Edit": en el arbol de "Available Files", localizar el directorio build/ y seleccionar los tres ficheros de clase del bean: Cart.class, CartBean.class y CartHome.class y hacer click en "Add" y después en "OK" para volver a la pantalla anterior.

      4. Click "Next".

    3. "New Enterprise Bean Wizard - General":

      1. En el combobox bajo "Enterprise Bean Class" seleccionar CartBean. Automáticamente en el campo "Enterprise Bean Name" aparecerá CartBean y en "Enterprise Bean Type" aparecerá Stateless Session, este último campo lo debeis modificar para que ponga Stateful Session.

      2. En el apartado "Remote Interfaces" seleccionar en el combobox correspondiente a "Remote Home Interface" el valor CartHome y en el combobox correspondiente a "Remote Interface" seleccionar el valor Cart.

      3. Click "Next".

    4. "New Enterprise Bean Wizard - Configuration Options":

      1. Click "Next".

    5. "New Enterprise Bean Wizard - Next Steps":

      1. Leer el texto en el que se indican las tareas que puede ser necesario realizar a continuación.

      2. Click "Finish"

    4. Crear un cliente para la aplicación: CartClient

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

    Nota: Si este carrito se integrase en una tienda de libros on-line, el cliente para la aplicación sería un cliente Web (JSP, Servlet,...)

    El primer paso a realizar es compilar el código fuente para ello desde el directorio src se ejecuta el comando:

      $ javac -classpath ${J2EE_HOME}/lib/j2ee.jar:../build -d ../build CartClient.java
      

    El siguiente paso será empaquetar este aplicación cliente. Para ello vamos a utilizar un "wizard" proporcionado por el deploytool. Gracias a este "wizard", realizaremos 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 CartApp.ear.

    Para ejecutar el "wizard" es necesario seleccionar en el deploytool "File -> New -> Application Client". El "wizard" muestra los siguientes cuadros de dialogo:

    1. "New Application Client Wizard - Introduction":

      1. Leer el texto explicativo que nos indica las tareas que realiza este "wizard".

      2. Click "Next".

    2. "New Application Client Wizard - JAR File Contents":

      1. En el apartado "AppClient Location" seleccionar el botón etiquetado como "Create New AppClient Module in Application", y en el combobox inferior seleccionar CartApp.

      2. En el apartado "AppClient Naming", introducir en el campo "AppClient Name" el valor CartClient.

      3. En el apartado "Contents", click "Edit": en el arbol debajo de "Available Files" localizar el directorio build y seleccionar el fichero correspondiente a la aplicación cliente CartClient.class y hacer click en "Add" y después en "OK" para volver a la pantalla anterior.

      4. Click "Next".

    3. "New Application Client Wizard - General":

      1. En el apartado "Application Client", en el combobox debajo de "Main class" seleccionar CartClient.

      2. Click "Next".

    4. "New Application Client Wizard - Next Steps":

      1. Leer el texto en el que se indican las tareas que puede ser necesario realizar a continuación.

      2. Click "Finish".

    Antes de pasar al despliegue de la aplicación, es necesario especificar la referencia de la aplicación cliente al Enterprise Java Bean: si nos fijamos en el código de CartClient.java, se busca una referencia al bean mediante el método lookup:

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

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

    1. En el arbol de la aplicación, seleccionar CartClient.

    2. Seleccionar la pestaña "EJB Refs".

    3. Click "Add":

      1. En el campo "Coded Name", introducir ejb/SimpleCart.

      2. En el combobox "EJB Type", seleccionar Session.

      3. En el combobox "Interfaces", seleccionar Remote.

      4. En el campo "Home Interface", introducir CartHome.

      5. En el campo "Local/Remote Interface", introducir Cart.

      6. Click "OK".

    4. Seleccionando la nueva fila añadida, introducir en el campo inferior "JNDI Name" CartBean.

    5. Desplegar la aplicación en el servidor J2EE

    A continuación pasamos a desplegar al aplicación resultante, para ello es necesario realizar los siguientes pasos:

    1. En el arbol de la aplicación seleccionar CartApp.

    2. Seleccionar "Tools -> Deploy".

      1. En el apartado "Connection Settings" introducir el login y password del administrador del servidor (admin/admin2004).

      2. En el apartado "Return Client JAR", activar el checkbox "Return Client Jar" y en el campo inferior introducir el directorio en el que se localiza la aplicación cart.

    3. Click "OK".

    4. En la ventana "Distribute Module" click "Close" cuando finalice el despliegue.

    5. Para verificar el despliegue: en el arbol, expandir el nodo de servidores y seleccionar el host en el que se está ejecutando el servidor J2EE (localhost). En la tabla "Deployed Objects", debería aparecer listada la aplicación CartApp y su estado debería ser "Running".

Ejecución de la aplicación

Para comprobar el funcionamiento de la aplicación creada, vamos a utilizar la aplicación cliente desarrollada:
  1. En un terminal, ir al directorio principal de la aplicación cart.

  2. Ejecutar en la línea de comandos:

  3.     $ appclient -client CartAppClient.jar 
        
  4. En el terminal, el cliente mostrará los libros que se han introducido en el carrito:

  5.     Harry Potter: La piedra filosofal
        Harry Potter: La cámara secreta
        Harry Potter: El caliz de fuego
        

 EJERCICIOS

  • Ejercicio 0: Comentad el código proporcionado.

  • Ejercicio 1: El carrito de la compra que hemos implementado a lo largo de esta práctica permite añadir libros y listar el contenido de nuestro carrito, pero para mejorar nuestra implementación debería proporcionar también un método que nos permita eliminar libros que existen en el carrito. Implemente este nuevo método de negocio, teniendo en cuenta que debe considerar que se pueden intentar borrar libros que no existen en el carrito.

  • Ejercicio 2: En el "interfaz home" incluid un nuevo método create que obligue al cliente a identificarse no sólo con su nombre de usuario, sino también con un identificador numérico (este identificador será "1234"), si no introduce correctamente este identificador no se le permitirá el acceso.

  • Ejercicio 3: Actualizad la aplicación cliente para que se realicen las siguientes operaciones sobre el carrito, el usuario deberá identificarse con su nombre y con el identificador numérico:

    1. Introducir el libro: "Cien años de soledad"

    2. Introducir el libro: "Trece Campanadas"

    3. Introducir el libro: "Drácula"

    4. Listar el contenido del carrito.

    5. Eliminar el libro: "La ciudad levítica"

    6. Listar el contenido del carrito.

    7. Eliminar el libro: "Trece Campanadas"

  • Ejercicio 4: Incluid trazas en el código del EJB para saber cuando se invocan los diferentes métodos (métodos ejbCreate, constructor, métodos del interfaz SessionBean, los métodos de negocio, etc...) y así entender su ciclo de vida.


 ENTREGA

De forma presencial a lo largo de esta clase práctica o al principio de la próxima sesión de prácticas se corregirán los ejercicios indicados en el apartado anterior.

El ejercicio 1,2 y 3 son obligatorios y puntuables, el código debe estar comentado.


 LABORATORIO Y SOFTWARE PARA EL DESARROLLO DE LA PRÁCTICA


Las prácticas se realizarán en el laboratorio 4.SD04, en horario de 11:00-14:00 los jueves que se indican en la planificación de la asignatura.

La versión de software disponible en el laboratorio de prácticas es la siguiente: Java 2 Enterprise Edition SDK 1.4 versión para Linux. Y esta será la versión en la que se prueben las prácticas.

Para entrar en los ordenadores del laboratorio se necesita tener una cuenta abierta. Puede solicitarlo a través del siguiente formulario (login=alumno, password=alumno13). Si ya tiene cuenta de años anteriores debe rellenar igual el formulario para que su cuenta esté asociada a esta asignatura.



 ENLACES


  • Software:

  • APIs:

  • Manuales herramientas:

    • Deploytool: ayuda en la opción del menú "Help -> Contents".