Proyecto
con JSF Java Server Faces Myfaces, Maven y Eclipse:
aplicación multimódulo
Proyecto con JSF Java
Server Faces Myfaces, Maven y Eclipse: aplicación multimódulo. 1
Actualización del
plugin de myfaces maven. 2
Actualizando el plugin
con maven. 3
Separación de la
lógica de negocio y presentación en dos módulos. 3
Creación del proyecto
base: el núcleo de la aplicación. 4
Creación de módulo de
la aplicación Web de interfaz de usuario. 4
Creando un proyecto maven que agrupe los módulos. 9
Preparando los módulos
para Eclipse. 10
Añadiendo la variable
del repositorio Maven local 10
Apñadiendo los módulos al Eclipse. 12
Introducción
Estoy preparando una nueva aplicación,
llamada coregest, y ya que estamos, voy a compartir
con vosotros cómo lo estoy haciendo.
Este tutorial es el primero de una serie
de artículos dedicados al desarrollo de aplicaciones JSF con Maven. Lo voy a hacer aprovechando que estoy desarrollando
una nueva aplicación en esta tecnología.
En este artículo vamos a abordar el
desarrollo de una aplicación Myfaces JSF con Maven que sea multimódulo. Los
puntos importantes que vamos a ver son:
- Aprender a buscar y actualizar plugins de Maven, sobre todo el de MyFaces
(los que hayan leído mi tutorial anterior de JSF y Maven
y lo hayan intentado lo entenderán…) - Separar en módulos las aplicaciones con Maven
- También aprenderemos a integrar en Eclipse la
biblioteca MyFaces para que podamos editar el
fichero de configuración de JSF desde el Eclipse.
Requisitos
- Maven 2.0
- Java 5.0 (lo utilizaremos para hibernate)
- Eclipse 3.2
- Hibernate tools para eclipse
3.2 instaladas - Artículos publicados en AdictosAlTrabajo:
Actualización
del plugin de MyFaces Maven
Al intentar crear el arquetipo de MyFaces Maven me ha dado
problemas, por lo que tengo que actualizar el plugin.
De entrada encontré que la dirección de subversion para el plugin ha cambiado. Estos chicos…
Me sitúo en la carpeta del plugin (ver el
artículo de jsf y maven)
Borro el contenido y lo actualizo con
svn co |
Ahora lo instalo con mvn
install
Se pone a trabajar hasta que finaliza la
compilación e instalación:
También habríamos podido resolver esto
forzando a que el plugin de myfaces se convirtiese en
local en una versión RELEASE, con la instrucción, según se indica en la página
de plugins de maven (buscar el plugin install)
Svn install –DupdateReleaseInfo=true
Actualizando
el plugin con maven
El método más sencillo para actualizarlo
es hacer un mvn scm:update. Este comando asume que la información para
el plugin scm de maven está
actualizada en el pom del plugin. Al haber
actualizado manualmente el plugin (debido al cambio de localización del respositorio svn dentro de
apache) ahora me actualiza el plugin sin problemas.
Luego haríamos el mvn
install y ya estaría.
Separación
de la lógica de negocio y presentación en dos módulos
A medida que la aplicación crece debemos
separar las partes de la misma en módulos. Ya que vamos a hacer una aplicación
web, lo primero que debemos separar es la lógica de negocio de la de
presentación y sesión. Para ello vamos a crear dos módulos: coregest–core y coregest (si lo llamo coregest–webapp luego hay que
poner esto último en las url de pruebas y se hace
pesado, pero sería el nombre correcto). Tendremos varias ventajas al hacerlo
así:
- Las clases java van en un paquete jar. Al hacer pruebas de presentación sin modificar la
lógica de negocio (suele ser habitual), la aplicación web se compila y
empaqueta más rápido. - Idealmente la lógica de negocio debería estar
orientada a servicios (SOA), de manera que se pudiesen desarrollar y
probar en un contenedor aislado, fuera de toda aplicación web. Esto
facilita el desarrollo de pruebas unitarias y la migración a arquitecturas
más avanzadas, así como la modularidad y
reutilización. - La inicialización de la lógica de negocio se
hará desde el exterior, usando el patrón de inversión de control (IoC), al estilo de Spring,
lo que nos permitirá probar la lógica en diferentes entornos sin modificar
su empaquetado final.
Creación
del proyecto base: el núcleo de la aplicación
D:\workspace\WorkspaceCoregest>mvn
archetype:create –DgroupId=net.sf.coregest –DartifactId=coregest-core
Si nos sale el “BUILD SUCCESSFULLY”
es que todo ha ido bien y se habrá creado la carpeta del módulo discarchiver–core en nuestro
espacio de trabajo.
Creación
de módulo de la aplicación Web de interfaz de usuario
Para crear el módulo web vamos a usar la
siguiente línea (lo he puesto aquí para facilitar el copiado de la
instrucción):
D:\workspace\WorkspaceCoregest>mvn e.myfaces.maven –DarchetypeArtifactId=maven-archetype-myfaces –DarchetypeVersion= 1.0-SNAPSHOT –DgroupId=net.sf.coregest –DartifactId=coregest |
Si nos aparece el build
successfully, todo ha ido bien. Se habrá creado la
carpeta del proyecto correcta.
Uniendo
los dos proyectos
Editamos el fichero pom.xml
del proyecto coregest y le añadimos la dependencia de
su módulo core:
D:\workspace\WorkspaceCoregest\pom.xml |
…
<dependencies>
…
|
Y probamos a crear el paquete con mvn package en el proyecto coregest:
y el resultado es como esperamos…
salvo que no se ha compilado el proyecto coregest–core. Hay que hacer un
par de cosas: compilarlo par probarlo, rehaciendo de nuevo el coregest y crear un pom general
que agrupe a ambos proyectos.
Compilamos el coregest–core como siempre
y nos crea el jar
del módulo
Ya tenemos compilado el módulo coregest–core. Para que el módulo
coregest lo pueda usar tiene que estar en el
repositorio local. Esto lo logramos con mvn install:
ahora si reconstruimos el paquete coregest nos añadirá el coregest–core-10.SNAPSHOT.jar a la carpeta
web-inf/lib de la
aplicación web coregest.
Para reconstruir el paquete hay que hacer
primero un mvn clean:clean, que limpiará la carpeta target
del proyecto y luego el mvn package
Ahora ya podemos llamar a las clases de la
lógica de negocio desde el módulo de presentación, ya que las clases ahora
están en el classpath de la aplicación web, por haber
sido metidas en la carpeta lib.
Creando
un proyecto maven
que agrupe los módulos
El siguiente paso es crear un proyecto que
nos permita compilar y empaquetar todos los módulos con una sola operación.
Para ello vamos a crear el siguiente pom en la raíz
del espacio de trabajo:
Coregest.pom |
<project> <modelVersion>4.0.0</modelVersion>
<groupId>net.sf.coregest</groupId> <artifactId>coregest_package</artifactId> <packaging>pom</packaging>
</project>
|
Ahora compilamos todo con mvn install
Y nos da una salida final
Como vemos se han compilado los dos
proyectos (los comentarios de los proyectos no están todavía corregidos, no me
ha dado tiempo…).
De esta forma podríamos ir añadiendo todos
los proyectos locales de los que depende el nuestro.
Preparando
los módulos para Eclipse
Ahora vamos a integrar los proyectos
con Eclipse, como hicimos en el anterior tutorial
Añadiendo
la variable del repositorio Maven
local
Dado que hemos partido de un espacio de
trabajo limpio, hay que prepararlo para Eclipse 3.2. Abrimos el Eclipse en
nuestro espacio de trabajo nuevo:
y nos abre un Eclipse limpio;
Lo cerramos para que se guarde la
configuración. Se ha creado en nuestro espacio de trabajo la carpeta .metadata que es la que se necesita para configurar
proyectos.
Ejecutamos mvn –Declipse.workspace= D:\workspace\WorkspaceCoregest eclipse:add–maven-repo,
para añadir el repositorio local de Maven a este
espacio de trabajo:
Abrimos de nuevo el Eclipse y comprobamos
en Java\Build path\Classpath
variables si se ha dado de alta correctamente el repositorio de Maven
Añadiendo
los módulos al Eclipse
Ahora hay que preconfigurar
los módulos para luego importarlos en el Eclipse. Vamos con el módulo de la
lógica de negocio:
si ha ido bien vamos con el segundo, que es
la aplicación web, especificando el tipo de plugin para wst
Ahora importamos los proyectos en el
Eclipse, con File\Import…\Existing
proyect into Workspace…
Pulsamos “next”
Primero pulsamos “Browse”,
seleccionamos nuestro espacio de trabajo y el cuadro de diálogo mostrará los
dos proyectos. Los importamos con “Finish”
Aparentemente ambos proyectos se han
cargado. Me sale un error, ya que el proyecto declara un Java Proyect Facet = 1.4 y estoy
usando un runtime de Java 5.0. por
lo que cambio el Java Proyect Facet
en las opciones del proyecto:
Pulso en “Add/Remove project facets…”
Añadiendo
el Facelet
de JSF
Primero vamos a añadir las MyFaces JSF a nuestro Eclipse. Para ello abrimos en Windows\Preferences\Web and XML\JSF Libraries una nueva
biblioteca JSF
Pulsamos en “New…”
Debemos buscar el jar
de Myfaces en nuestro repositorio local, que se llama
myfaces–impl-1.1.6-SNAPSHOOT.jar.
En mi caso, la ruta hasta el core de MyFaces ha sido
C:\Documents and
Settings\cris\.m2\repository\org\apache\myfaces\core\myfaces-impl\1.1.6-SNAPSHOT,
que es muy largo…
Y finalmente pulsamos “Finish”
Nos vamos a las opciones de nuestro
proyecto:
Marcamos Java Server Faces
y pulsamos “Next”
También en el cuadro de diálogo hemos
hecho algunas modificaciones:
- Hemos añadido la extensión .jsf, ya que es la que usa el arquetipo por defecto.
- Hemos cambiado el nombre al archivo de
configuración del jsf, por el mismo motivo. Más
adelante podremos ponerlo a nuestro gusto. - No queremos que los jar
se copien al web-inf/lib,
porque ya lo hace maven.
Pulsamos “Finish”.
A mí me ha salido este mensaje tan majo:
He pulsado “Yes”,
por si acaso, y me ha quedado una nueva configuración como sigue:
Ahora si pulso en el fichero “examples–config.xml” de mi
proyecto Coregest, se lanza el editor de JSF
Conclusión
Sólo hemos empezado la aplicación. En el
siguiente tutorial vamos a meterle Hibernate a la
aplicación, pero no de cualquier manera, lo haremos al estilo Maven. Pronto empezaréis a “mavenizar” vuestros proyectos.
Poco a poco iremos avanzando en la
construcción de una aplicación compleja con Maven.