You are on page 1of 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 4

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 5

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 Serv. ap. web

Capa 3
Base de datos

Navegador

Internet/ Intranet

Navegador

Marzo 2009

PFC3

Capas de una Aplicacin Web Java EE: MVC+Layers

Vista

HTML/CSS + JSP + JSTL Apache Struts


ActionForm + Action

Controlador

Factory Interfaces con Casos de Uso (lgica de negocio)

Business Delegate Session Facade CTO

Modelo

Plugin: Plain | RMI | EJB |

Factory Interfaces para Acceso a Datos


Plugin: JDBC | XML | Marzo 2009 PFC3 8

DAO/TO

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 de desarrollo Proceso de desarrollo de Software de 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 <<realiza>> Diseo Realizar los casos de uso <<verifica>> Pruebas Verificar que se satisfacen los casos de uso
12

Marzo 2009

PFC3

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

Construccin

Transicin

hito 1
Iter. 1

hito 2
Iter. 2

hito 3
Iter. 3 Iter. 4 Iter. 5

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 Iteracin de desarrollo 2 Iteracin de desarrollo n

Perfeccionar el plan Anlisis Diseo

Sincronizar Artefactos Implementacin Pruebas

Marzo 2009

PFC3

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:
Anlisis del dominio del problema. Definicin de la arquitectura bsica. Anlisis de riesgos. Planificacin del proyecto.

Artefactos:
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 public > protected > private

Variables de instancia. 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; } if (condition) { statements; } else { statements; } if (condition) { statements; } else if (condition) { statements; } else if (condition) { statements; } try { statements; } catch (ExceptionClass e) { statements; } finally { statements; } Marzo 2009 PFC3 for (initialization; condition; update) { statements; } for (initialization; condition; update); while (condition) { statements; } while (condition); do { statements; } while (condition); 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 diferentes plataformas). Formatos 'estrictos' (ej. tabuladores en Makefiles). (no reutilizables en

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 Maven 2 $HOME/.maven/repository $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> <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

Marzo 2009

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 -

J We ML, aSe explo T s - H tab a -d . - ..

ooJSPX, XM b T P, rer

Pro, SQL, ls L

s ct ..Eeditor je .

ion dit

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) (por seguridad, hacer un refresh [F5] del

Marzo 2009

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() { ... } @After protected void tearDown() { ... } @BeforeClass protected void setup() { ... } @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

You might also like