Está en la página 1de 65

UNIVERSIDADE DA CORUA

Departamento de Tecnoloxas da Informacin e as Comunicacins (TIC)

Diseo e Implementacin de una Aplicacin


Web Java EE con Arquitectura MVC
Generalidades PFC3
Alberto Pan Bermdez
apan@udc.es
Marzo 2009

ndice
Enfoque para el Proyecto
Herramientas
Arquitectura

Generalidades Metodologa
Proceso Unificado
Estndar de Codificacin Java

Generalidades Herramientas
Apache Maven 2
IDE Eclipse
JUnit

Marzo 2009

PFC3

UNIVERSIDADE DA CORUA
Departamento de Tecnoloxas da Informacin e as Comunicacins (TIC)

Enfoque para el proyecto

Enfoque
Estndar de codificacin
Herramientas
Arquitectura

Enfoque para el Proyecto

Para la realizacin de la aplicacin software del proyecto se aconseja


un enfoque basado en iteraciones, de manera que cada iteracin
incorpora ms funcionalidad, hasta que en la ltima iteracin se
termina con un software que implementa toda la funcionalidad.
En cada iteracin se hace anlisis, diseo, implementacin y pruebas.
Enfoque opuesto al concepto tradicional de analizar todo, disear todo,
implementar y probar todo.

Se divide el problema en iteraciones, y en cada iteracin se hace todo


el ciclo de vida tradicional.
En la primera iteracin se aborda lo ms complicado, intentando obtener
en poco tiempo una arquitectura software que permitir incorporar el
resto de la funcionalidad en subsiguientes iteraciones lnea base.
Objetivo: detectar problemas de diseo y/o implementacin cuanto antes, y no
al final, cuando ya sera demasiado costoso (en tiempo y dinero) rehacer todo
el diseo y el cdigo.

El resto de las iteraciones van introduciendo funcionalidad menos crtica,


y no deberan causar cambios importantes a la lnea base.
Marzo 2009

PFC3

Estndar de Codificacin
Normalmente en proyectos grandes se suele seguir un
estndar de codificacin, de manera que el aspecto del
cdigo sea el mismo, independientemente de qu
programador lo haya escrito.
Facilita el mantenimiento del software.
Cdigo de calidad y fcilmente legible.

Un estndar de codificacin define:


Reglas para nombrar clases, atributos y mtodos, normas de
identacin, etc.

Un documento muy sencillo (breve), pero muy utilizado en


el mundo Java son las Java Code Conventions, definidas
por Sun Microsystems.
http://java.sun.com/docs/codeconv/index.html
Marzo 2009

PFC3

Herramientas

Modelado UML:
MagicDraw (instalado en Laboratorios de Docencia FIC)
Poseidon for UML
Rational Rose

Desarrollo:

HTTP
HTML + CSS / XML
Java SE 1.6.0 + Apache Struts 1.2.9 + Standard TagLibs 1.1.2
JUnit 4.4
Apache Maven 2
IDE Eclipse
Otras: AJAX, Spring, JPA, Hibernate, EJB3, ...

Bases de Datos:
MySQL 5.0 PostgreSQL 8.1

Servidor Web:
Apache Tomcat 6.0.x / Jetty

Marzo 2009

PFC3

Arquitectura del Sistema


Capa 1
Navegador

Capa 2
Int.
Modelo
web

Capa 3
Base de
datos

Serv. ap. web


Navegador

Internet/
Intranet

Navegador

Marzo 2009

PFC3

Capas de una Aplicacin Web Java EE: MVC+Layers

Vista

Controlador

HTML/CSS + JSP + JSTL


Apache Struts

ActionForm + Action

Factory
Interfaces con Casos de Uso (lgica de negocio)

Modelo

Business Delegate
Session Facade
CTO

Plugin: Plain | RMI | EJB |

Factory
Interfaces para Acceso a Datos

DAO/TO

Plugin: JDBC | XML |


Marzo 2009

PFC3

UNIVERSIDADE DA CORUA
Departamento de Tecnoloxas da Informacin e as Comunicacins (TIC)

Generalidades Metodologa

Introduccin al Proceso Unificado


El proceso Unificado de Desarrollo de Software. Ivar Jacobson, Grady Booch,
James Rumbaugh. Addison Wesley, 2001.
Java Code Conventions
Sun Microsystems, Java Code
Conventions,http://java.sun.com/docs/codeconv/index.html.

Introduccin al Proceso Unificado (I)

Un proceso de desarrollo de software es el conjunto de actividades


necesarias para transformar los requisitos de un usuario en un sistema
software:
Requisitos
del usuario

Proceso
Procesode
dedesarrollo
desarrollo
de
deSoftware
Software

Sistema
software

Proceso Unificado: Ms que un proceso de desarrollo de software.


Marco de trabajo genrico que puede especializarse para una gran
variedad de sistemas software, para diferentes reas de aplicacin,
diferentes tipos de organizaciones, diferentes niveles de aptitud y
diferentes tamaos de proyecto.
Basado en componentes software, interconectados a travs de interfaces
bien definidas.
Utiliza el Lenguaje Unificado de Modelado (Unified Modeling Language,
UML) para preparar todos los esquemas de un sistema software.

Marzo 2009

PFC3

10

Introduccin al Proceso Unificado (II)


Orgenes:

Modelo original Objectory definido por Ivan Jacobson (1987).


Rational Software compra la empresa de Objectory (1995).
Surge la primera versin de UML (1997).
Se publica la primera versin del Proceso Unificado de Rational RUP (junio 1998).

Caractersticas del Proceso Unificado:


Dirigido por casos de uso.
Centrado en la Arquitectura.
Iterativo e incremental.
Guiado por riesgos.

Marzo 2009

PFC3

11

Introduccin al Proceso Unificado (III)


Dirigido por Casos de Uso.
Se centra en la funcionalidad que el sistema debe poseer para
satisfacer las necesidades de un usuario (persona, sistema externo,
dispositivo) que interacta con l.
Casos de uso como el hilo conductor que orienta las actividades de
desarrollo.

Casos de Uso
<<defineNecesidades>>
Anlisis
Recopilar,
Clarificar y
Validar los
requisitos

Marzo 2009

<<realiza>>

<<verifica>>

Diseo

Pruebas

Realizar los
casos de uso

Verificar que se
satisfacen los
casos de uso

PFC3

12

Introduccin al Proceso Unificado (IV)


Centrado en la Arquitectura.
Concepto similar a la arquitectura de un edificio:
Varios planos con diferentes aspectos del edificio.
Tener una imagen completa del edificio antes de que comience la
construccin.

Arquitectura en software:
Diferentes vistas del sistema: estructural, funcional, dinmico, etc.
Plataforma en la que va a operar.
Determina la forma del sistema.

Arquitectura: determina la forma del sistema.


Casos de uso: determinan la funcin del sistema.

Marzo 2009

PFC3

13

Introduccin al Proceso Unificado (V)


Iterativo e Incremental:

Descomposicin de un proyecto grande en mini-proyectos.


Cada mini-proyecto es una iteracin.
Las iteraciones deben estar controladas.
Cada iteracin trata un conjunto de casos de uso.

Ventajas del enfoque iterativo:

Deteccin temprana de riesgos.


Administracin adecuada del cambio.
Mayor grado de reutilizacin.
Mayor experiencia para el grupo de desarrollo.

Guiado por riesgos:


Se detectan los riesgos graves para asegurarlos lo antes posible.
El objetivo es detectar los problemas lo antes posible para darles
solucin rpidamente.
Marzo 2009

PFC3

14

Rational Unify Process (RUP) - Dimensiones

Esttica - Flujos de trabajo.

Roles
Actividades
Artefactos
Flujo de Trabajo

QUIN?
CMO?
QU?
CUNDO?

Dinmica
El Proceso Unificado se repite a lo largo de una serie de ciclos que
constituyen la vida de un sistema.
Ciclo: cada ciclo una nueva versin del producto.
Fase: Etapas de un ciclo que finalizan en un HITO.
Iteracin: Proceso de ingeniera sobre una funcionalidad limitada del sistema.

En cada fase se realizan una o ms iteraciones a travs de los flujos de


tareas: requisitos no procedimentales (de eficiencia) y casos de uso,
Anlisis (opcional), Diseo, Implementacin y Pruebas.

Entradas al proceso:
Lista de caractersticas: descripcin informal (2 pginas) de lo que se
espera del desarrollo.
Modelo de dominio (Opcional). Modelar con UML el entorno en el que
operar el producto.

Marzo 2009

PFC3

15

Dimensin Esttica del Proceso (I)


Rol
Definicin del comportamiento y responsabilidades de los
participantes.
Propietario de una serie de artefactos.

Actividad
Unidad de trabajo que puede ejecutar un individuo en un rol
especfico.
Tiene un propsito claro y se expresa en trminos de actualizar
artefactos.
La granularidad de la actividad es generalmente de horas o pocos
das.
Ejemplos de actividades:
Planear una iteracin (administrador del proyecto).
Encontrar caso de uso y actores (analista del dominio).
Revisin del diseo (probador).
Marzo 2009

PFC3

16

Dimensin Esttica del Proceso (II)


Artefacto
Pieza de informacin producida, modificada y utilizada en un
proceso.
Productos tangibles del proyecto.
Utilizados por los roles como entrada para la realizacin de sus
actividades.
Resultado de las actividades realizadas por los roles.

Flujo de Trabajo
Forma de describir la secuencias de actividades que producen
resultados y las interacciones entre cargos.
En trminos de UML se puede utilizar: diagrama de actividades, de
secuencia, de colaboracin.

Marzo 2009

PFC3

17

Dimensin Dinmica del proceso


ciclo
fase

Concepcin Elaboracin

hito 1
Iter. 1

Construccin

hito 2
Iter. 2

hito 3
Iter. 3 Iter. 4 Iter. 5

Transicin

hito 4
Iter. 6

Hito: punto en el tiempo donde se evalan los objetivos


logrados y se pueden tomar decisiones crticas
Marzo 2009

PFC3

18

Desarrollo Iterativo
Construccin
Iteracin de
desarrollo 1

Anlisis

Marzo 2009

Iteracin de
desarrollo 2

Iteracin de
desarrollo n

Perfeccionar
el plan

Sincronizar
Artefactos

Diseo

Implementacin

PFC3

Pruebas

19

Fase de Concepcin
Objetivo: Definir la razn de ser y el alcance del proyecto.
Estudio de oportunidad.
Visin = QU + PARA QU + CUNTO

Actividades:

Especificacin de los criterios de xito del proyecto.


Definicin de los requisitos.
Estimacin de los recursos necesarios.
Cronograma inicial de fases.

Artefactos:
Documento de definicin del proyecto.

Marzo 2009

PFC3

20

Fase de Elaboracin

Objetivo: Establecer un plan de proyecto y una arquitectura correcta


del sistema.
Actividades:

Artefactos:

Anlisis del dominio del problema.


Definicin de la arquitectura bsica.
Anlisis de riesgos.
Planificacin del proyecto.
Modelo del dominio.
Modelo de procesos.
Modelo funcional de alto nivel.
Arquitectura bsica.

Al final de la fase de elaboracin se establece la lnea base de la


arquitectura.
Los riesgos de la lista de riesgos estn mitigados (con solucin,
implementada o no).
En realidad, adems de la lnea base de la arquitectura tambin se habrn
implementado aquellos elementos necesarios asociados a los casos de uso
de la lnea base, pero que no son crticos (no existan dudas para su
realizacin).

Marzo 2009

PFC3

21

Fase de Construccin / Transicin


Fase de Construccin.
Objetivo: Desarrollar el sistema a lo largo de una serie de
iteraciones.
Actividades:
Anlisis.
Diseo.
Implementacin / Codificacin.
El flujo de tareas de implementacin se divide en Builds: consolidacin
del trabajo de los desarrolladores (punto de encuentro del trabajo de
varios diseadores).

Pruebas (individuales, de integracin).

Fase de Transicin.
Pruebas beta (de usuario).

Marzo 2009

PFC3

22

Ciclo de Vida del Proceso Unificado gil - AUP

Marzo 2009

PFC3

23

Resumen Java Code Conventions (I)


Extensiones de ficheros: .java, .class
Un fichero por clase pblica o interfaz.
Puede incluir clases privadas, pero siempre despus de la pblica.

Estructura de un fichero con cdigo fuente:


Comentarios de inicio.
/*
* Classname, Programmer(s), Date
* Version info
* Copyright notice
* Description
*/

Paquete y lista de imports necesarios.

Marzo 2009

PFC3

24

Resumen Java Code Conventions (II)

Estructura de un fichero con cdigo fuente (continuacin):


Declaracin de clase o interfaz.

/** ... */ Comentario Javadoc de Clase o Interfaz.


Declaracin class o interface.
/* ... */ Comentario de implementacin, si es necesario.
Variables de Clase (static).

public > protected > private

Variables de instancia.

public > protected > private

Constructores.
Mtodos.

Agrupados por funcionalidad para facilitar el entendimiento del cdigo.

Identacin, 4 espacios (con algunas excepciones para mejorar legibilidad).


Longitud de lnea como mucho 80 caracteres.
Divisin de lneas:

despus de una coma.


antes de un operador.
dar preferencia a divisiones de nivel superior.
alinear la nueva lnea con el comienzo de la expresin del mismo nivel en la lnea
anterior.
si al aplicar estas reglas el cdigo queda poco legible, utilizar 8 espacios.

Marzo 2009

PFC3

25

Resumen Java Code Conventions (III)

Comentarios:
Javadoc /** ... */, Bloque/lnea /* ... */, Fn de lnea // ...

Declaraciones:
Una por lnea.
Definir variables al comienzo de bloques { } (ms claro) e inicializarlas
cuando se definen si es posible.
Excepcin: bucles for

Evitar declaraciones locales para ocultar declaraciones de niveles


superiores.
Clases e interfaces:
No utilizar espacio entre el nombre del mtodo y el parntesis de inicio de lista
de parmetros.
La llave de inicio aparece al final de la lnea de declaracin de la sentencia.
La llave de fin aparece al comienzo de lnea, identada con el inicio de la
sentencia que cierra.
Excepcin: mtodos vacos {}

Los mtodos se separan por una lnea en blanco.

Marzo 2009

PFC3

26

Resumen Java Code Conventions (IV)


Sentencias:
Una por lnea.
Sentencias compuestas entre {}
Sentencias incluidas deben de ser identadas.
{ aparecer al final de la lnea de inicio del bloque; y } al
principio de lnea, identado con el inicio del bloque.
En sentencias if-then-else o bucles, se utilizar siempre {} aunque
el bloque est compuesto por una sola sentencia.
Esto facilita el mantenimiento del cdigo (por ejemplo, si en el futuro se
aade una nueva lnea al bloque, el programador podra olvidarse de
aadir las llaves).

Sentencias return no deben especificarse entre parntesis, salvo


por claridad.
Sentencias if, for, while, do/while, switch, try/catch
Marzo 2009

PFC3

27

Resumen Java Code Conventions (V)


if (condition) {
statements;
}

for (initialization; condition; update) {


statements;
}

if (condition) {
statements;
} else {
statements;
}

for (initialization; condition; update);

if (condition) {
statements;
} else if (condition) {
statements;
} else if (condition) {
statements;
}

while (condition) {
statements;
}
while (condition);
do {
statements;
} while (condition);

try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
Marzo 2009

PFC3

switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}

28

Resumen Java Code Conventions (VI)


Dos lneas en blanco:
Entre secciones de un fichero fuente.
Entre definiciones de clases e interfaces.

Una lnea en blanco:

Entre mtodos.
Entre definicin de variables locales y la primera sentencia.
Antes de un comentario de bloque o de lnea.
Entre secciones lgicas de un mtodo.

Espacios en blanco:
Antes de un parntesis, salvo que sea la invocacin de un mtodo.
Despus de una coma, en una lista de argumentos.
Para separar los operandos de todos los operadores binarios
excepto . (no aplicable a operadores unarios).
Para separar las expresiones de una sentencia for
Los casts deben de ir seguidos por un espacio.

Marzo 2009

PFC3

29

Resumen Java Code Conventions (VII)

Convenciones de nombrado (nombres representativos)


Clases:
Deben de ser nombres, con la primera letra de cada palabra involucrada en ese
nombre, en maysculas.

Interfaces:
dem clases.

Mtodos:
Deben de ser verbos, con la primera letra de cada palabra involucrada en
maysculas, salvo la de la primera.

Variables:
Palabras, con la primera letra de cada palabra involucrada en maysculas,
salvo la de la primera.
Nombres comunes para variables temporales son i,j,k (numricas) c,d,e
(caracteres).

Constantes:
En maysculas, separando cada palabra involucrada en el nombre por el
carcter subrayado _.

Paquetes (no incluido en Java Code Conventions):


Palabras simples y en minsculas.

Marzo 2009

PFC3

30

Resumen Java Code Conventions (VIII)

Prcticas de Programacin (salvo casos justificados):


Variables de clase o instancia no deben de ser pblicas.
Evitar acceder a variables de clase desde instancias de objetos.
Las constantes numricas deben de definirse previamente en lugar de
utilizarlas como literales (salvo inicializaciones como -1, 0, 1).
Asignacin de variables:
Evitar asignaciones mltiples en la misma sentencias (difcil de leer).
No utilizar el operador de asignacin en lugares en los que pueda ser
fcilmente confundido con el operador de igualdad.
No utilizar asignaciones embebidas para intentar optimizar la ejecucin. Esa
es tarea del compilador.

Es buena prctica utilizar parntesis en expresiones que combinan


mltiples operadores, aunque no sean necesarios por las reglas de
precedencia de los mismos.
Estructurar el programa de forma que slo haya una sentencia return.
En sentencias con ?, si la expresin condicional contiene un operador
binario, es recomendable ponerlo entre parntesis.
Comentarios especiales:
XXX Marca algo que tiene algn problema pero funciona.
FIXME Marca algo como que no funciona correctamente.
TODO Marca algo como que est por terminar.
Marzo 2009

PFC3

31

Java Code Conventions ... Ejemplo (I)


/*
* Firstname Lastname
*
* Copyright (c) 1993-1996 Sun Microsystems, Inc. All Rights Reserved.
*
*/
package java.blah;
import java.blah.blahdy.BlahBlah;
/**
* Class description goes here.
*
* @version 1.10 04 Oct 1996
* @author Firstname Lastname
*/
public class Blah extends SomeClass {
/* A class implementation comment can go here. */
/** classVar1 documentation comment */
public static int classVar1;
/**
* classVar2 documentation comment that happens to be
* more than one line long
*/
private static Object classVar2;
/** instanceVar1 documentation comment */
public Object instanceVar1;

Marzo 2009

PFC3

32

Java Code Conventions ... Ejemplo (II)


/** instanceVar2 documentation comment */
protected int instanceVar2;
/** instanceVar3 documentation comment */
private Object[] instanceVar3;

/**
* ...method Blah documentation comment...
*/
public Blah() {
// ...implementation goes here...
}
/**
* ...method doSomething documentation comment...
*/
public void doSomething() {
// ...implementation goes here...
}
/**
* ...method doSomethingElse documentation comment...
* @param someParam description
*/
public void doSomethingElse(Object someParam) {
// ...implementation goes here...
}
}

Marzo 2009

PFC3

33

UNIVERSIDADE DA CORUA
Departamento de Tecnoloxas da Informacin e as Comunicacins (TIC)

Generalidades Herramientas

Herramientas de Gestin de Proyectos Software


Maven 2
IDE Eclipse

Pruebas de Aplicaciones Software


JUnit

Gestin de Proyectos - Apache Maven 2 (I)

Herramienta de Gestin de proyectos Software.


Open Source.
Proyecto Apache (http://maven.apache.org).
Utilizada en otros desarrollos.

Desarrollada en Java.

Otras herramientas existentes:


Shell-based (gnumake, nmake, )
Ejecutan comandos especficos del sistema operativo (no reutilizables en
diferentes plataformas).
Formatos 'estrictos' (ej. tabuladores en Makefiles).

Ant enfoque basado en tareas


Crear el script build con las tareas a ejecutar.
Ejecutar los targets.

Maven1 enfoque declarativo (ms alto nivel que Ant)


Describir el proyecto y configurar plugins.
Ejecutar plugins existentes (goals).

Maven2 convenciones de nombrado


Convenciones de nombrado.
Sistema de plugins.
Sistema de dependencia entre paquetes similar al del mundo linux de un
repositorio.
Marzo 2009

PFC3

35

Apache Maven 2 (II)


Ncleo de Maven: POM (Project Object Model).
Contiene una descripcin detallada del proyecto, incluyendo
informacin de versiones, gestin de configuracin, dependencias,
recursos de la aplicacin y de pruebas, miembros del equipo, ...
Fichero XML situado en el directorio raz del proyecto pom.xml

Documentacin Maven 2:
Maven en 5 minutos.
http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

Maven en 30 minutos.
http://maven.apache.org/guides/getting-started/index.html

Marzo 2009

PFC3

36

Apache Maven 2 (III)


Ventajas estandarizacin en gestin de proyectos:
No se pierde tiempo reinventando estructuras de directorios,
convenciones ni personalizando scripts para cada proyecto.
Maven permite redefinir la estructura de directorios estndar pero
es conveniente respetarla por las siguientes razones:
El fichero pom.xml ser ms pequeo y sencillo.
Hace que el proyecto sea ms fcil de entender y facilita el
mantenimiento futuro por otros.
Facilita la integracin de plugins (asumen tambin la estructura por
defecto).

Marzo 2009

PFC3

37

Apache Maven 2 pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>es.udc.fbellas.j2ee</groupId>
<artifactId>standardutil</artifactId>
<packaging>jar</packaging>
<version>2.2.0</version>
<name>J2EE-Examples Standard Util Subsystem</name>
<url>http://www.tic.udc.es/~fbellas/teaching/is</url>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.5</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

Marzo 2009

PFC3

38

Apache Maven 2 Ciclo de Vida

Fases de construccin de un proyecto: compile, test, deploy,


En Ant se crean targets con esos nombres que implementen esa
semntica.
En Maven 1 se invocan plugins (goals) existentes.
Un lenguaje de Scripting basado en XML, Jelly, permite definir nuevos goals
o modificar el comportamiento de los existentes.

En Maven 2 se estandariza el conjunto de fases del ciclo de vida del


proyecto, y al ejecutar una de ellas se ejecutarn los plugins
correspondientes.
Es posible implementar nuevos plugins a asociar a las diferentes fases, como
clases Java.

Para compilar: mvn compile

Marzo 2009

PFC3

39

Apache Maven 2 Dependencias

En el fichero pom.xml se definen los recursos de los que depende un


proyecto.
Maven automticamente descarga los recursos de repositorios remotos en
repositorios locales.
Local a la mquina (estructura de directorios en base al groupid y artifactid del
recurso):
Maven 1 $HOME/.maven/repository
Maven 2 $HOME/.m2/repository

Gestin de Dependencias Transitivas:


Maven 1 obliga a que cada proyecto defina todos los jars necesarios,
directa o indirectamente por la aplicacin.
Con Maven 2 slo es necesario especificar los jars que la aplicacin
necesita de forma directa; Maven 2 gestiona las dependencias de las
libreras utilizadas, para incluirlas de forma automtica.

mbitos de Dependencias en funcin de las fases (Maven 2)


compile necesaria en todas las fases (valor por defecto).
provided necesaria para compilar pero no para instalar (e.g. servlet
API).
runtime necesaria slo para ejecutar (e.g. JDBC drivers).
test necesaria slo para pruebas (e.g. JUnit API).

Marzo 2009

PFC3

40

Apache Maven 2 Configuracin Proxy

Dos opciones:
Creando un fichero settings.xml en el directorio $HOME/.m2 (repositorio
local) con la siguiente informacin (ej. fichero /opt/ISyADOO0708/SoftwareLocal/templates/IS/settings.xml).
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<proxies>
<proxy>
<active/>
<protocol>http</protocol>
<port>3128</port>
<!-- <host>proxy</host> -->
<host>proxy-wifi.ucv.udc.es</host>
<id/>
</proxy>
</proxies>
</settings>

Ejecutar Maven indicando la configuracin de proxy en cada comando


como parmetros.
mvn -Dhttp.proxyHost=proxy -Dhttp.proxyPort=3128 ...
Marzo 2009

PFC3

41

Ejemplos - Estructura Maven 2


pom.xml
pom.xml

MySQLCreateTables.sql
PostgreSQLCreateTables.sql

ConfigurationParameters.properties

Marzo 2009

PFC3

42

Ejemplos - Plugins de Maven 2 Assembly


<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/src.xml</descriptor>
</descriptors>
</configuration>
</plugin>

Marzo 2009

<assembly>
<id>src</id>
<formats>
<format>zip</format>
<format>tar.gz</format>
<format>tar.bz2</format>
</formats>
<fileSets>
<fileSet>
<includes>
<include>**/*</include>
</includes>
<excludes>
<exclude>**/target/**</exclude>
</excludes>
</fileSet>
</fileSets>
</assembly>
PFC3

43

Ejemplos - Plugins de Maven 2 SQL

http://mojo.codehaus.org/sql-maven-plugin/

<!-- Setting SQL Plugin -->


<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<dependencies>
<!-- specify the dependent JDBC driver here -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-jdbcdriver-version}</version>
</dependency>
</dependencies>
<!-- common configuration shared by all executions -->
<configuration>
<! MySQL -->
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://localhost/j2ee</url>
<username>j2ee</username>
<password>j2ee</password>
<autocommit>true</autocommit>
<onError>continue</onError>
<fileset>
<basedir>${basedir}</basedir>
<includes>
<include>src/sql/MySQLCreateTables.sql</include>
</includes>
</fileset>
</configuration>
</plugin>

Marzo 2009

PFC3

44

Ejemplos - Plugins de Maven 2 Jetty

http://docs.codehaus.org/display/JETTY/Jetty+Documentation

<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<jettyEnvXml>../src/main/jetty/jetty-env.xml</jettyEnvXml>
<scanIntervalSeconds>5</scanIntervalSeconds>
<!-- Log to the console. -->
<requestLog implementation="org.mortbay.jetty.NCSARequestLog">
<!-- This doesn't do anything for Jetty, but is a
workaround for a Maven bug that prevents the
requestLog from being set. -->
<append>true</append>
</requestLog>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-jdbcdriver-version}</version>
</dependency>

</dependencies>
</plugin>
Marzo 2009

PFC3

45

Ejemplos - Plugins de Maven 2 Jetty

jetty-env.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<!-- PostgreSQL -->
<!-- -->
<!-- MySQL -->
<New id="J2EE-ExamplesDS-MySQL"
class="org.mortbay.jetty.plus.naming.Resource">
<Arg>jdbc/J2EE-ExamplesDS</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="url">jdbc:mysql://localhost/j2ee</Set>
<Set name="user">j2ee</Set>
<Set name="password">j2ee</Set>
</New>
</Arg>
</New>
</Configure>
Marzo 2009

PFC3

46

Ejemplos - Compilacin
Linux, Windows // Mysql, PostgreSQL.
Configuracin por defecto:
Linux, Mysql,
Base de Datos j2ee (default port), usuario j2ee, password j2ee

Arrancar la base de datos.


Utilizar maven para crear las tablas en la base de datos y
compilar los ejemplos.

cd j2ee-examples-2.2.0-src
mvn sql:execute install

Marzo 2009

PFC3

47

Eclipse IDE (http://www.eclipse.org)

Compile
Run
Debug
Plugins
- Maven
- Subclipse
- Tomcat
-

n
o
i
dit

E itors
t
c
je ... ed

ro, SQL,
P
ls L

o PX, XM
o
b T P, JS rer

WeTML, aJSse explo


- H tab
a
-d .
- ..

Marzo 2009

PFC3

48

Eclipse - Crear Proyectos


Creacin de la configuracin de proyectos para eclipse (en
funcin de la informacin del pom.xml):
mvn eclipse:eclipse

Configuracin de Eclipse para importar cada subsistema de


los ejemplos como un proyecto.
Arrancar eclipse.
eclipse&

Crear un nuevo proyecto Java:


File > New > Project >> Java / Java Project
Wizard New Java Project

Especificar nombre del proyecto (Project name): standardutil


Ponerle el mismo nombre que tiene en maven para que se resuelvan bien
las dependencias entre proyectos.

Seleccionar "Create project at external location.


Especificar directorio HOME del proyecto (Browse to j2ee-examples2.2.0/standardutil directory).
Click sobre "Finish".
Marzo 2009

PFC3

49

Eclipse - Configurar Proyectos

Marzo 2009

PFC3

50

Eclipse & Maven2


Para cargar un proyecto eclipse generado a partir de mvn
eclipse:eclipse es necesario definir la variable de
entorno M2_REPO para que apunte al directorio en el que
se encuentre el repositorio de MAVEN 2.
Windows:
C:/Documents and Settings/<userName>/.m2/repository

Linux:
$HOME/.m2/repository

Para aadir la variable de entorno M2_REPO a Eclipse


Window > Preferences > Java > Build Path > ClassPath variables.

Marzo 2009

PFC3

51

Depuracin de Aplicaciones en Java


La opcin -g del compilador provoca que se aada cdigo
(bytes codes) para poder seguir la traza de la ejecucin de
un programa.
La aplicacin resultante genera eventos que pueden ser
procesados por una aplicacin externa (ej. un IDE)
Java dispone de una API estndar que permite interceptar
estos eventos y acceder al entorno de ejecucin de una
aplicacin compilada con la opcin -g.
Ej. Un IDE puede registrarse en la aplicacin para recibir
los eventos correspondientes a los puntos de ruptura que
establezca el desarrollador, y posteriormente permitirle al
usuario visualizar el entorno de ejecucin.

Marzo 2009

PFC3

52

Eclipse - Ejecucin y Depuracin de clases


Ejecucin de una clase:
Run > Run As > Java Application > Seleccionar la clase a ejecutar
y los argumentos.
La salida se muestra en la consola de eclipse.

Se puede seleccionar una clase en la jerarqua de clases y botn


derecho + Run As > Java Application

Depuracin:
Eclipse posee una perspectiva para depuracin de aplicaciones.
Permite seguir la traza de ejecucin de una aplicacin, establecer
puntos de interrupcin y visualizar el estado de las variables en un
instante determinado.

Run > Debug As > Java Application


Botn derecho + Debug As > Java Application

Otros
Window > Show View > Other > Connectivity > Data Source
Explorer
Marzo 2009

PFC3

53

Eclipse - Ejecucin de Pruebas de Unidad

Los ejemplos no usan JUnit


JDBCTutorial:
Iniciar la base de datos.
Ejecucin desde Eclipse.
es.udc.fbellas.j2ee.jdbctutorial.InsertExample
es.udc.fbellas.j2ee.jdbctutorial.SelectExample
es.udc.fbellas.j2ee.jdbctutorial.PreparedStatementExample
es.udc.fbellas.j2ee.jdbctutorial.TransactionExample fbellas-1 fbellas-2
es.udc.fbellas.j2ee.jdbctutorial.Transference1Example fbellas-1 fbellas-2
es.udc.fbellas.j2ee.jdbctutorial.Transference2Example fbellas-1 fbellas-2
es.udc.fbellas.j2ee.jdbctutorial.Transference3Example fbellas-1 fbellas-2
es.udc.fbellas.j2ee.jdbctutorial.Transference4Example fbellas-1 fbellas-2

En el resto de subsistemas, para ejecutar las pruebas de unidad:


Descomentar los mtodos main de las clases a probar.
Puede haber que descomentar los imports que haya debajo del
comentario // For Testing.

Marzo 2009

PFC3

54

Eclipse: Plugin Maven 2

Creacin de una nueva configuracin maven para eclipse:

Run > External Tools > Open External Tools Dialog .. > Maven Build
botn derecho + "New"
Especificar el nombre de la nueva configuracin de maven.
Main: Especificar el directorio donde se encuentra el pom.xml a utilizar.
Goals: Indicar los goals a ejecutar en esta configuracin.
Select para elegir una de las fases del ciclo de vida.

Ejecucin de una configuracin maven para eclipse:


Run > External Tools > Nombre de Tarea a Ejecutar.

Organizacin de configuraciones preferidas:


Run > External Tools > Organize Favourites

Botn derecho sobre un pom.xml + Run As > Maven build

Marzo 2009

PFC3

55

Creacin Inicial de un Proyecto (I)


Creacin del esqueleto de un proyecto.
+ mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart
-DgroupId=es.udc.j2eeapp -DartifactId=j2ee-app
+
+
+
+
+

cd j2ee-app
cd src
mkdir main/resources
mkdir test/resources
Copiar
j2ee-examples/jdbctutorial/src/main/resources/ConfigurationParameters.properties
a main/resources y test/resources

+ mvn eclipse:eclipse
+ Importar el proyecto desde Eclipse: "File -> New -> Java Project".
Elegir nombre de proyecto (e.g. j2ee-app) y la opcin "Create project from
existing source" (elegir directorio que se cre el proyecto).

NOTA: sustituir j2ee-app por el nombre del proyecto


Marzo 2009

PFC3

56

Creacin Inicial de un Proyecto (II)


Hacer modificaciones bsicas al proyecto desde Eclipse.
+ Ajustar configuracin proyecto: "Project -> Properties -> Java Compiler ->
Error/Warnings":
* Potential programming problems:
"Serializable class without serialVersionID (Ignore)".
* Generic Types: "Uncheck generic type operation (Ignore)" y
"Usage of a raw type (Ignore)".

Marzo 2009

PFC3

57

Creacin Inicial de un Proyecto (III)


Hacer modificaciones bsicas al proyecto desde Eclipse.
+ Reemplazar la seccin <dependencies> del pom.xml con:
<dependencies>
<dependency>
<groupId>es.udc.fbellas.j2ee</groupId>
<artifactId>standardutil</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
</dependencies>
+ cd j2ee-app
+ mvn eclipse:eclipse
proyecto)

Marzo 2009

(por seguridad, hacer un refresh [F5] del

PFC3

58

Pruebas de Unidad / Integracin

Qu es una prueba de unidad?


Prueba individual de hardware o software, o grupos de unidades
relacionadas.
Normalmente, un test de unidad es un cdigo que prueba una unidad: que
puede ser una clase, un componente, un mdulo o una funcin.
Las pruebas se crean y se ejecutan mientras se desarrolla el software.
Las pruebas de unidad no son pruebas funcionales, de aplicacin.
Las pruebas de unidad no son interactivas.

En general, el objetivo de las pruebas de unidad es comprobar que los


diferentes componentes del SW funcionan de forma aislada y que ante
cambios en el cdigo continuan funcionando.

Un Framework de pruebas de unidad proporciona:

Un mecanismo para organizar y agrupar varios tests.


Una forma sencilla de invocar tests.
Un indicacin clara de qu tests han sido exitosos o fallidos.
Una forma estndar para escribir tests y especificar resultados esperados.

Marzo 2009

PFC3

59

Qu es Junit?
JUnit es un framework para escribir pruebas de unidad
repetibles en Java.
http://www.junit.org/
Open Source.
Programado por Erich Gamma y Kent Beck.

Caractersticas:
Utiliza aserciones para comprobar resultados esperados.

Marzo 2009

PFC3

60

Junit 4.x - Pruebas de Unidad (I)

Requiere Java SE 5.0.


Utiliza anotaciones @Test para marcar un mtodo como un caso de
prueba.
Parmetro timeout (falla si tarda ms de ese tiempo en ejecutarse).
Parmetro expected especifica el tipo de excepcin a lanzar para que sea
exitoso.

Comprobaciones:
Pueden realizarse varias comprobaciones (aserciones) por mtodo.
La clase Assert proporciona un conjunto de mtodos estticos para
realizar comprobaciones (pueden lanzar un objeto con mensajes de fallo).
Assert.assertEquals(Object, Object) Compara utilizando el
mtodo "equals".
Si no se redefine, el mtodo equals de un Object realiza una comparacin
por referencia; es necesario redefinir el mtodo equals de una clase para la
que se desee comparacin por contenido.
La clase String y las correspondientes a los tipos bsicos lo tienen redefinido
comparan por contenido.

Marzo 2009

PFC3

61

Junit 4.x - Pruebas de Unidad (II)


import static org.junit.Assert.assertEquals;
public class AdditionTest {
private int x = 1;
private int y = 1;
@Test public void addition() {
int z = x + y;
assertEquals(2, z);
}
@Test(expected=ArithmeticException.class)
public void divideByZero() {
int n = 2 / 0;
}
}
import static org.junit.Assert.assertEquals;
public class AccountServiceTest {
...
@Before
public void setUpTestDataWithinTransaction() throws Exception {
testAccount = new Account(1, 10);
accountService.createAccount(testAccount);
}
@Test
public void testFindAccount() throws InstanceNotFoundException {
Account account = accountService.findAccount(testAccount.getAccountId());
assertEquals(testAccount, account);
}
}

Marzo 2009

PFC3

62

Junit 4.x - Inicializacin y Borrado de Datos de Prueba


La idea de hacer las pruebas con JUnit es que sean
"pruebas automticas".
Por tanto, cuando se ejecute, debe hacer con anterioridad
todo lo que sea necesario (crear datos) y con posterioridad
restaurar el estado inicial (eliminar datos).
Utiliza anotaciones @Before y @After para definir los mtodos
a ejecutar antes y despus de la ejecucin de cada prueba.
Utiliza anotaciones @BeforeClass y @AfterClass para
definir los mtodos a ejecutar antes y despus de la ejecucin del
conjunto de pruebas de una clase.
@Before protected void setup() {
...
}

@BeforeClass protected void setup() {


...
}

@After protected void tearDown() {


...
}

@AfterClass protected void tearDown() {


...
}

Marzo 2009

PFC3

63

Cdigo de pruebas
Las clases que implementan las pruebas suelen
implementarse en el mismo paquete que la clase que
prueban, pero en un directorio de fuentes diferente.

Marzo 2009

PFC3

64

Referencias
Asignatura Integracin de Sistemas.
Facultade de Informtica. Universidade da Corua
http://www.tic.udc.es/~fbellas/teaching/is-2007-2008

Marzo 2009

PFC3

65

También podría gustarte