Proyecto con JSF Java Server Faces Myfaces, Maven y Eclipse: aplicación multimódulo

0
23183

 

 

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

Introducción. 1

Requisitos. 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

Uniendo los dos
proyectos
. 5

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

Adadiendo el Facet de JSF. 16

Conclusión. 21

 

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:

    • JSF y Maven

    • Hibernate Tools

    • Crear el sitio web de documentación del
      proyecto con Maven Site

 

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
http://svn.apache.org/repos/asf/myfaces/maven/trunk/archetypes/maven-archetype-myfaces/

 

 

 

 

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 installDupdateReleaseInfo=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: coregestcore y coregest (si lo llamo coregestwebapp 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:createDgroupId=net.sf.coregestDartifactId=coregest-core

 

 

Si nos sale el “BUILD SUCCESSFULLY” 
es que todo ha ido bien y se habrá creado la carpeta del módulo discarchivercore 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
archetype:createDarchetypeGroupId=org.apach

e.myfaces.mavenDarchetypeArtifactId=maven-archetype-myfacesDarchetypeVersion=

1.0-SNAPSHOT –DgroupId=net.sf.coregestDartifactId=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>

             
<dependency>

                       
<groupId>net.sf.coregest</groupId>

    
                  
<artifactId>coregest-core</artifactId>

 
                     
<version>1.0-SNAPSHOT</version>

                       
<scope>compile</scope>

 

      
     </dependency>

 

               
<dependency>

                   
<groupId>javax.servlet</groupId>

                   
<artif

 

 

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 coregestcore. 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 coregestcore como siempre

 

 

y nos crea el jar
del módulo

 

 

Ya tenemos compilado el módulo coregestcore. 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 coregestcore-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>

    
<name>Coregest</name>

   
        <url>http://coregest.sourceforge.net/</url>

     <modelVersion>4.0.0</modelVersion>

  

     <groupId>net.sf.coregest</groupId>

       
<version>1.0</version>

     <artifactId>coregest_package</artifactId>

     <packaging>pom</packaging>

  

    
<modules>

      
<module>coregest-core</module>

      
<module>coregest</module>

    
</modules>

 </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 mvnDeclipse.workspace= D:\workspace\WorkspaceCoregest eclipse:addmaven-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
myfacesimpl-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 “examplesconfig.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.

 

Dejar respuesta

Please enter your comment!
Please enter your name here