miércoles, 10 de abril de 2013

Tutorial Aplicaciones Web con Jboss Seam

Cuando se trabaja en una empresa de desarrollo de Software, puede que nos toque desarrollar sobre proyectos ya existentes agregando nuevas funcionalidades, o dando soporte a las que ya se tienen............................. pero y si queremos crear nuestro propio proyecto? uno sobre el que otras personas trabajen?........... por eso, con este taller partiremos de la nada para tener una aplicación web funcional.

En este tutorial vamos a crear un proyecto web usando el Framework Jboss Seam y su herramienta seam-gen, con ella podremos generar el código fuente de nuestra aplicación simplemente ingresando los parámetros que se nos solicita al ejecutarla.

Esta utilidad nos ahorrara mucho tiempo ya que solo con los valores ingresados y una base de datos definida, automáticamente se genera una aplicación web funcional, con los paquetes, directorios, clases, librerías y entidades necesarias, en si con la estructura completa para el correcto funcionamiento, de esta manera, la aplicación generada será la base para continuar con el desarrollo de la misma

Para el correcto desenvolvimiento del tutorial, se asume que se tienen conocimientos previos sobre desarrollo de aplicaciones web y manejo de servidores de aplicaciones, sin embargo se tratará de explicar el proceso de forma detallada.

Requisitos.

Jboss Seam 2.1.2.GA (o superiores) 
Jboss 4.2.3.GA
JDK 1.6
Apache Ant
BD MySql
IDE Eclipse


Configuración del Ambiente.


1. Inicialmente se asume que ya se tiene instalado el JDK 1.6 en la máquina y se tiene la respectiva variable de entorno JAVA_HOME apuntando a la ruta del mismo.

2. debemos tener instalado MySql en nuestra máquina, ingresando a la consola de MySql o desde un Cliente MySql creamos la base de datos con la que trabajará el seam-gen para generar la estructura del proyecto, para este ejemplo crearemos una BD sencilla con 3 tablas, la llamaremos pais y tendrá las tablas país, departamento y ciudad.



3. Creamos un usuario con permisos para la BD que se acaba de crear, ingresando lo siguiente:

grant all privileges on nombreBD.* to 'nombreUsuario'@'localhost' identified by 'contraseña';
flush privileges;

Con esto le decimos a MySql que le otorga todos los permisos al usuario creado para trabajar con la BD, Para este caso sería:



4. Se debe instalar apache Ant y tener configurada la variable de entorno ANT_HOME, para esto se debe descomprimir el apache Ant en algún directorio del equipo, se recomienda hacerlo en la raíz del “C:” luego poner a apuntar la variable de entorno a esa ruta y modificar el Path, el apache Ant se puede descargar de la página principal.

5. Se debe instalar el Framework Jboss Seam 2.1.2.GA en algún directorio del equipo en este caso también se descomprimirá en la raíz del “C:”, se puede descargar desde la página oficial.

6. También instalamos el servidor de aplicaciones, para este ejemplo trabajaremos con el Jboss 4.2.3.GA y su instalación es similar a las anteriores, basta con descomprimir el Jboss en la raíz del “C:” y crear la variable de entorno JBOSS_HOME

Al final tendremos lo siguiente:



Y en las variables de entorno



Configuración del Proyecto

1. Ingresamos al cmd de Windows, ejecutamos el seam-gen por consola, para esto nos ubicamos en el directorio del jboss seam (el que descomprimimos en C:) y ejecutamos el seam setup


2. ahora seam nos preguntara por las propiedades requeridas para configurar el proyecto, las cuales debemos ingresar una a una, un ejemplo de estas podría ser:

  • Ubicación del proyecto: D:\nombreWorkspace\
  • Ubicación del JBoss: C:\jboss-4.2.3.GA
  • Dominio utilizado del JBoss: default
  • Ubicación del Glassfish: C:\Glassfish\AppServer\AppServer
  • Dominio del Glassfish: domain1
  • Nombre del proyecto: paises
  • ¿Usar ICEFaces en vez de RichFaces?: n
  • Skin utilizado: ruby (define el tema usado por la aplicación)
  • Empaquetamiendo del proyecto (ear/war): ear
  • Nombre paquete baes: com.prueba.seam
  • Nombre paquete beans de sesión: com.prueba.seam.action
  • Nombre paquete beans de entidad: com.prueba.seam.entity
  • Nombre paquete para los test: com.prueba.seam.test
  • Base de datos : mysql
  • Ruta driver de mysql: C:\jboss-4.2.3.GA\lib\mysql-connector-java-5.1.24-bin.jar
  • Dialecto de Hibernate: org.hibernate.dialect.MySQLDialect
  • Driver JDBC para MySQL: com.mysql.jdbc.Driver
  • Datasource JDBC de MySQL: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
  • URL de conexión a la base de datos: jdbc:mysql://localhost:3306/paises
  • Usuario BD : paises
  • Password BD : paises
  • Nombre de la base de datos: - (ya se definio en la URL de conexión)
  • Usar todas las tablas de la base de datos?: y
  • Borrar la base de datos cada vez que  despliegue la aplicación?: n

Se debe tener presente la información de la BD creada anteriormente, nombre, usuario, contraseña y tener el conector de MySql mysql-connector-java-5.1.24-bin.jar en C:\jboss-4.2.3.GA\lib, sin esto la aplicación no podrá comunicarse con la base de datos, también es debe ingresar algunos valores necesarios aunque no se utilicen (o exista), como la ruta del Glassfish.


Cuando se ingresen todos los parámetros requeridos, se nos informara al final de la consola con un BUILD SUCCESSFUL que todo ha salido correctamente, sino, se tendría que revisar los pasos anteriores y verificar en que se ha fallado.



Hasta aquí solo hemos creado el proyecto de forma virtual, aun no se ha generado el código fuente ni la estructura de nuestra aplicación, podríamos pensar que la base del proyecto se generó pero se encuentra como en un espacio de memoria esperando ser concretada.

Generar el Proyecto.

1. Ahora desde la consola de cmd ejecutamos la tarea Ant seam new-project que creara el proyecto con base a las propiedades anteriormente configuradas.


Cuando finaliza nos confirma nuevamente con un BUILD SUCCESSFUL


Hasta este punto ya tenemos creada la estructura del proyecto, para esto podemos dirigirnos a la ruta configurada anteriormente donde dijimos que se almacenaría el proyecto y veremos que (si todo salió bien) nuestro código fuente se encuentra allí.

Pero aún no hemos finalizado, hasta ahora tenemos la base, pero todavía nos falta generar la funcionalidad de la aplicación, ahora vamos a crear las entidades y la lógica de negocio para las operaciones CRUD, para esto creamos las entidades del modelo con seam generate-entities como se realizó en el paso anterior



Después de esto podemos ver que se empiezan a generar las entidades y toda la lógica de negocio.


Despliegue de la aplicación

Con lo generado ya podemos usar algún IDE de desarrollo para desplegar el proyecto en el servidor, para esto usaremos Eclipse Galileo.

Primero importamos el proyecto al Eclipse.



De esta forma podremos ver la estructura del proyecto y las entidades creadas.




Ahora buscamos el archivo build.xml, lo llevamos a la vista ant y ejecutamos la tarea deploy para desplegar la aplicación, esta tarea tendrá la función de empaquetar el proyecto al .ear y subirlo al servidor, para que de esta forma podamos acceder al aplicativo por medio de un navegador.




Posteriormente al ejecutarla, nos indica que todo está bien (en caso de error verificar la traza, en ocasiones se presenta error de ear corrupto, pues queda mal generado, se debe eliminar el ear en el deploy del servidor y desplegar nuevamente).

  
Si verificamos en la ruta C:\jboss-4.2.3.GA\server\default\deploy de nuestro servidor, podremos encontrar el archivo paises.ear el cual es el proyecto empaquetado, además encontramos paises-ds, el cual es el datasource con la conexión a la base de datos.


Navegando por la Aplicación.

Con los pasos anteriores, ahora solo nos falta ejecutar el archivo run.bat en la carpeta bin del jboss (C:\jboss-4.2.3.GA\bin\run.bat) para desplegar el servidor, acto seguido podemos ingresar a la ruta: http://localhost:8080/paises probar la aplicación y Listo!!!!!

Inicialmente es necesario loguearnos en la aplicación para ingresar con todos los permisos sobre la misma, por defecto podemos usar el user admin y pass root


Podemos ver que aparte de la seguridad también nos ha creado la barra de menú con las opciones para trabajar con las entidades.



Y finalmente poder realizar las operaciones CRUD sobre la aplicación.



De ahora en adelante tenemos una aplicación base sobre la cual trabajar, podremos editar el código fuente, agregar nuevas funcionalidades, cambiar el idioma entre otras.

Este proceso tambien puede ser realizado en un IDE de desarrollo, por ejemplo desde Eclipse  podemos obtener los mismos resultados, sin embargo quise mostrarlo usando el seam-gen por consola como una alternativa para los amantes de las lineas de comandos.

Este taller lo podremos referenciar en entradas futuras donde trabajaremos con repositorios de codigo y procesos de integración continua, o porque no, crear la aplicación jboss seam desde Eclipse....


También te podría Interesar. 


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo....  

15 comentarios:

  1. Hola ...
    al ejecutar seam generate-entities me marca un error

    BUILD FAILED
    C:\Desarrollo\jboss-seam-2.2.0.GA\seam-gen\build.xml:1564: org.hibernate.exception.JDBCConnectionException: Getting database metada

    Te agradeceria mucho si puedieras ayudarme

    ResponderEliminar
    Respuestas
    1. Hola, no estoy muy seguro del porque del error, ahí nos indica que hay un problema al intentar conectarse pues al parecer no identifica la BD, no se si ya lo hiciste pero seria bueno eliminar todas las referencias y empezar nuevamente, talvez sea un problema al ingresar los parámetros solicitados.

      Al hacerlo verifica el ingreso de los campos para:
      -Ruta driver de MySQL
      -Datasource JDBC de MySQL (este puede ser igual al ejemplo)
      -URL de conexión a la base de datos (y los campos de user y pass de la BD)
      también asegúrate de no poner nada en el campo
      "Nombre de la base de datos" ya que lo definimos en la URL.

      Teóricamente debería funcionar, también te recomiendo (no se si lo tengas así o no) establecer la ruta del JBoss Seam en la raíz del C:/ muchas veces se presentan errores en otros directorios....

      Eliminar
  2. Logre crear todo sin errores, ahora en el momento que levanto el jboss y trato de ingresar a la aplicacion, me dice que no encuentra el recurso:

    Estado HTTP 404 - /sapi

    type Informe de estado

    mensaje /sapi

    descripción El recurso requerido (/sapi) no está disponible.
    JBoss Web/2.1.3.GA

    (mi recurso se llama sapi)
    alguna idea de como hacer que me de un mensaje mas descriptivo del error?

    ResponderEliminar
  3. buen tutorial.... tuve un error en el que mis tablas de la base de datos eran con foreign key autogeneradas, pero ya cambie esto en la base de datos sin embargo algunas tablas si deben tener fk autogeneradas, como puedo hacer para modificar los inserts en algunas tablas??... ademas seria excelente y de gran ayuda para todos si pudieran ayudar explicando un poco el codigo generado por el jboss seam... gracias

    ResponderEliminar
    Respuestas
    1. Modifica el entity de esa tabla con el anotation para generar el id automatico y vuelve a generar los crudes

      Eliminar
    2. Hola que pena la demora, no me entre de este comentario, tal como te dice Frerly podrias intentar modificando la entidad y luego desplegando la aplicación para que mapee los datos.

      Eliminar
  4. sirve igual para seam 2.3??? por q se brinca y no pregunta ¿Usar ICEFaces en vez de RichFaces?

    ResponderEliminar
    Respuestas
    1. Hola, teoricamente deberia funcionar, te sale algun mensaje en consola?

      Eliminar
  5. desearia conocer mas acerca de jboos seam es muy interesante me puedes dar algunas fuentes....muy buen post...!!!!

    ResponderEliminar
    Respuestas
    1. Hola, pues te cuento que mis fuentes han sido el internet y muchas preguntas jeje sin embargo hay un muy buen libro se llama Seam in Action (Un Amigo lo tiene impreso, no lo he podido bajar) y lo poco que pude ver fue muy llamativo

      Eliminar
  6. Cristian excelente post, amigo tu podrias hacerlo en ubuntu como se configura el JBoss Seam, seria genial que quedara en ubuntu funcionando, lo he intentando pero no encuentro el archivo de configuracion, gracias de ante mano, yo tambien estoy terminando la tecnologia en analisis y desarrollo de sistemas de informacion en el sena sede cartago, exitos. podemos retroalimentarnos

    ResponderEliminar
  7. hola,

    al ejecutar seam generate-entities me marca un error. Estoy intentando con oracle 11g.

    generate-model:
    [echo] Reverse engineering database using JDBC driver C:\Users\fabian baicu
    e\Downloads\software\Entorno desarrollo jboss_same\ojdbc6.jar
    [echo] project=D:/proyectos/tutoriales/biblioteca
    [echo] model=com.ejemplo.biblioteca.model
    [hibernate] Executing Hibernate Tool with a JDBC Configuration (for reverse engi
    neering)
    [hibernate] 1. task: hbm2java (Generates a set of .java files)
    [hibernate] log4j:WARN No appenders could be found for logger (org.hibernate.cfg
    .Environment).
    [hibernate] log4j:WARN Please initialize the log4j system properly.
    [hibernate] An exception occurred while running exporter #2:hbm2java (Generates
    a set of .java files)
    [hibernate] To get the full stack trace run ant with -verbose
    [hibernate] org.hibernate.exception.GenericJDBCException: Getting database metad
    ata
    [hibernate] java.sql.SQLException: Listener refused the connection with the foll
    owing error:
    [hibernate] ORA-12505, TNS:listener does not currently know of SID given in conn
    ect descriptor
    [hibernate]
    [hibernate] oracle.net.ns.NetException: Listener refused the connection with the
    following error:
    [hibernate] ORA-12505, TNS:listener does not currently know of SID given in conn
    ect descriptor
    [hibernate]

    BUILD FAILED
    C:\Framework jboss-seam-2.2.0.GA\seam-gen\build.xml:1564: org.hibernate.exceptio
    n.GenericJDBCException: Getting database metadata


    Gracias.

    ResponderEliminar
    Respuestas
    1. Amimgo necesito ayuda urgenteeeeeeeeeee !!, mi problema es el siguiente, hice una aplicación usando los autogenrados que hace Seam Generated-Entities y ahora necesito entender los metodos que tienen las clases Home por defecto, pues quiero hacer un eliminar y no entiendo que hacen las instancias, para eliminar de la base de datos necesito eliminar las dependencias primero para luego eliminar el objeto, no se como hacerlo, despues que elimino las dependencias no se usar los metodos en el Home para eliminar esa instancias, no se si me entienden... alguien que me ayude por favor !!!

      Eliminar
  8. Hola exelente tuto, estoy intentando ejecutar e setup pero me dice que no se ha cargado la clase principal org.apache.tools.ant.launch.Launcher

    ResponderEliminar

Eres libre de realizar cualquier comentario, desde que pueda ayudar con gusto lo atenderé, y si es un critica, bienvenida sea!!!