Universidad Carlos III de Madrid Departamento de Ingeniería Telemática
Home / Docencia / Ing. Telecomunicación / Software de Comunicaciones, Práctica 3
anterior siguiente
Software de Comunicaciones
Práctica 3:
Nivel de negocio, parte II
Navegador
Objetivos
Ejemplo
Buscador de actividades deportivas
Evaluación
Bibliografía
 
Autores: Norberto Fernández Garcí­a, Simon Pickin
Universidad Carlos III de Madrid

 

  Objetivos

Los objetivos principales de esta práctica son:

  • Aprender a desarrollar Enterprise JavaBeans (EJBs).
  • Aprender a crear aplicaciones Web en las que la lógica de negocio se implementa usando EJBs.

Para la consecución de estos objetivos la práctica está dividida en dos partes y cada parte en una serie de apartados:

Parte I

  • Preparación. Instalación del servidor de aplicaciones GlassFish que ofrece una implementación de referencia de la especificación JEE 5 desarrollada por Sun.
  • Aplicación de ejemplo. Se proporciona el código de una aplicación Web basada en JEE 5 que utiliza EJBs para implementar la lógica de negocio. A través de ella se aprenderá el mecanismo de configuración, despliegue y ejecución de aplicaciones en el servidor GlassFish.

Parte II

  • Aplicación de ejemplo. Se ha modificado el código de la aplicación de ejemplo de la parte 1 de forma que se pueda probar el acceso a componentes empresariales (EJBs) desde aplicaciones de escritorio Java (no Web, como en la parte 1). Se comprueba también con ese ejemplo el acceso remoto a estos componentes.
  • Buscador de Actividades Deportivas. Se proporciona el código de la aplicación Web Buscador de Actividades Deportivas que se desarrolló en el apartado 1 de la práctica anterior de Nivel de presentación, pero implementada en este caso mediante EJBs y JSPs. Se deberán estudiar todos sus aspectos, incluyendo el código proporcionado, y desplegarla y ejecutarla en el servidor de aplicaciones GlassFish.
  • Evaluación. Conjunto de preguntas relacionadas con las anteriores partes de la práctica y con EJBs. Las respuestas a estas preguntas se deberán entregar y la evaluación de la práctica se basará en ellas.

 

  Aplicación de ejemplo

Se proporciona una nueva versión del código fuente de la aplicación de ejemplo Gestor de libros. Puede descargar dicho código fuente haciendo clic en este enlace. Con respecto al código proporcionado en la parte 1 de esta práctica se han llevado a cabo las siguientes modificaciones:

  • Para permitir el acceso remoto al EJB de sesión BookDaoBean, su interfaz BookDao se ha declarado como remota, en lugar de local. Para ello se ha utilizado la anotación @Remote.
  • Se le ha dado un nombre JNDI global al bean de sesión (BookDaoBean) utilizando para ello el atributo mappedName de la anotación @Stateless. De esta forma un cliente remoto puede utilizar ese nombre a la hora de localizar el componente.
  • Se ha sustituido el cliente Web proporcionado en la parte 1 por un cliente implementado a través de una aplicación Java. En concreto, el cliente proporcionado (clase es.uc3m.it.softcom.jee.bookmanager.stdio.Client) simplemente permite acceder al método createBook del EJB BookDaoBean para insertar un nuevo libro en el almacén de datos, utilizando como interfaz de usuario la entrada/salida estándar.
  • El cliente utilizará JNDI para localizar el componente remoto a través de su nombre. Para ello debe configurar este servicio de nombres indicando el servidor y puerto en el que se encuentra el ORB que se encarga de gestionar la comunicación con el componente remoto:
            Properties props = new Properties();
            props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
            props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
    
            InitialContext ic = new InitialContext(props);
    
    El ORBInitialHost será el de la máquina en la que se encuentre el servidor GlassFish que va a actuar de contenedor de EJBs. Por otro lado, ORBInitialPort debe tomar el valor del parámetro orb.port tal cuál se configuró para el servidor GlassFish en la parte 1 (fichero ${GLASSFISH_HOME}/setup-softcom.xml).
  • Una vez se ha configurado adecuadamente el acceso al servicio JNDI, el cliente utiliza dicho servicio para obtener una referencia al componente remoto:
            BookDao dao = (BookDao) ic.lookup("BookDaoName");
    
    Nótese que se lleva a cabo una consulta para buscar el mismo nombre con el que el componente se registra (configurado mediante el atributo mappedName de la anotación @Stateless).
  • Tras obtener la referencia al componente remoto, el cliente invoca sus métodos de la misma forma que haría si se tratase de un objeto local:
            Book book = dao.createBook(args[1], args[2]);
    
    Observe que para que el cliente pueda ser compilado y ejecutado, deben incluirse en el CLASSPATH referencias a la entidad JPA Book y a la interfaz que ofrece el componente que va a ser invocado remotamente, BookDao.

Para permitir una fácil compilación y ejecución del código del ejemplo, se proporciona el código XML de un script Ant. Si se observa el contenido de ese fichero (build.xml) se verá que ofrece tareas para la compilación (build), limpieza (clean) y ejecución (run) del código. La tarea de ejecución pide a través de entrada estándar los parámetros (nombre de libro y URL de libro) que son necesarios para llamar a la operación de creación de una nueva entrada en la base de datos. Todas las tareas tienen el CLASSPATH adecuadamente configurado.

Antes de poder probar la nueva versión del ejemplo, será necesario configurar los siguientes aspectos:

  1. Se proporciona un fichero dbinit.sql para definir la estructura de datos de la tabla en la que se almacena la información de libros, por si no tiene esta estructura ya definida como resultado de la parte 1 de la práctica. Si va a utiliza el fichero, no olvide configurar adecuadamente en él el nombre de su base de datos.
  2. Si no tiene la fuente de datos creada de la parte 1 de la práctica, configúrela como allí se indica.
  3. Indique en el fichero ejb/META-INF/persistence.xml el nombre de la fuente de datos a utilizar, tal como se hizo para el Book Manager en la primera parte de esta práctica.
  4. Configure en el script de compilación/ejecución Ant el valor del parámetro glassfish.home para que apunte al directorio en el que ha instalado GlassFish en la parte 1 de la práctica.

Tras haber configurado los aspectos necesarios, puede compilar el código proporcionado simplemente tecleando en un terminal el comando:

        ant build

Si todo ha funcionado correctamente, aparecerá un mensaje indicativo en el terminal y se habrán generado una serie de ficheros:

  • ejb/BookManagerRemote-ejb.jar contiene todo lo necesario para el despliegue en el servidor GlassFish del componente EJB de la aplicación. Para poder llevar a cabo este despliegue:
    1. Lance su dominio en el servidor GlassFish y entre a través de la ventana de administración como se indicó en la parte 1 de la práctica.
    2. Elimine la aplicación que desplegó en la parte 1 (si existe) para evitar interferencias con la nueva versión. Para ello haga clic en la opción Enterprise Applications de la parte izquierda de la ventana de administración, seleccione la aplicación a eliminar y haga clic en Undeploy.
    3. Instale la nueva versión de la aplicación. En este caso, dado que no tenemos parte Web, simplemente desplegaremos el módulo con la información sobre componentes EJB. Para ello haga clic en el menú izquierdo en la opción EJB Modules y luego en Deploy.... Indique el fichero ejb/BookManagerRemote-ejb.jar como fichero a cargar y finalice la operación mediante un clic en el botón OK.
  • clnt/BookManagerRemote-clnt.jar que contiene las dependencias que el cliente necesita del módulo de EJB para poder compilar/ejecutar con éxito, tal como se indicó con anterioridad.

A continuación puede proceder a ejecutar el ejemplo mediante el comando:

        ant run
Y proporcionar los parámetros de entrada indicados.

Acceda a través del terminal a su base de datos y compruebe que la operación se ha llevado a cabo con éxito.

Pruebe a modificar el valor de ORBInitialHost para que en lugar de que el cliente acceda a los componentes instalados en el servidor GlassFish de su propia máquina (localhost), acceda a un servidor remoto gestionado por otro de sus compañeros. Tenga en cuenta que, quizás será necesario actualizar el valor de ORBInitialPort en función de la configuración del servidor remoto.

Aparte del fichero clnt/BookManagerRemote-clnt.jar, ¿podría indicar que otras librerías es necesario añadir al CLASSPATH para poder compilar/ejecutar la parte cliente de la aplicación? (utilice para ello la información proporcionada por el script Ant)

 

  Buscador de actividades deportivas

Puede descargar el código fuente de la aplicación Buscador de Actividades Deportivas, que incluye un script Ant para su compilación. Analice el código fuente proporcionado y modifique los aspectos de configuración que sean oportunos para poder llevar a cabo el despliegue en el servidor GlassFish. Una vez hecho el despliegue, ejecute la aplicación para ver que está funcionando correctamente.

 

  Evaluación

Esta práctica se evaluará mediante una serie de preguntas cortas. También se comprobará la comprensión básica de la aplicación en la evaluación presencial de las prácticas en enero.

La respuestas a las preguntas se deben entregar a través de Aula Global 2, concretamente, a través de la página web siguiente:

página de entrega, nivel de negocio, grupo español (91)
En la entrega se puede incluir cualquier clarificación adicional sobre la práctica que se considere de importancia.

Fecha límite para entrega: 18 de diciembre de 2009

 

  Bibliografía

Véanse en la página Web de la asignatura:

y en la página Web de la asignatura bilingüe:

y los libros siguientes:

  • L/S 004.438 JAVA HEF; Java EE 5 development using GlassFish application server; Heffelfinger, D. R.
  • C/D 004.438 PAN; EJB3 in Action; Panda, D. et al.
Localización | Personal | Docencia | Investigación | Novedades | Intranet
inicio | mapa del web | contacta