Transparencias Laboratorio ADOO
Transcripción
Transparencias Laboratorio ADOO
Análisis y Diseño Orientado a Objetos Laboratorio de Prácticas – L0.1 Índice Objetivos Estructura del Laboratorio Entorno de Desarrollo Instalación del SW Local Variables de Entorno Gestión de Proyectos: Apache Maven 2 Ejemplos del Laboratorio Estructura Maven 2 Plugins Compilación IDE Eclipse (Entorno de Desarrollo Integrado) Servidores Web Integración Maven 2 Ejecución/Depuración de aplicaciones Plugin Maven 2 Jetty / Tomcat Recomendaciones Finales 2 Objetivos Familiarizarse con el entorno y herramientas de desarrollo de aplicaciones empresariales Ejecutar los ejemplos según se vaya avanzando en clase de teoría Realización de la Práctica de la asignatura Enfoque basado en iteraciones, de manera que cada iteración incorpora más funcionalidad sobre la anterior, hasta que en la última iteración se termina con un software que implementa toda la funcionalidad. En cada iteración se hace análisis, diseño, implementación y pruebas. Grupos: 1 ó 2 personas. 3 Estructura del Laboratorio Red de 30 máquinas (ceo__) Sistema Operativo 2GB RAM Linux, Ubuntu 8.04 Cuentas de usuario home_sic, con cuota de 500MB 4 Entorno de Desarrollo (1) Navegador Firefox 3 Configuración del proxy para acceso a Internet: (Preferences > General > Connection Settings) Permitir acceso a localhost y a Internet: No proxy for: localhost, 127.0.0.1 Herramientas de modelado de aplicaciones MagicDraw for UML 11.0 - Professional Java Edition proxy 3128 Marcar “Use this proxy server for all protocols” /opt/MagicDraw_UML/bin/mduml IDE de desarrollo Eclipse 3.3 Europa Web Tools Platform 2.0 Con plugins para: Maven 2 / Tomcat /opt/ISyADOO-0809/eclipse Eclipse 3.4.1 Ganymede Con plugins para: Maven 2 /opt/ISyADOO-0809/eclipse-3.4.1 5 Entorno de Desarrollo (2) Software en /opt/ISyADOO-0809 jdk1.6.0_10 maven-2.0.7 eclipse (eclipse-3.3-wtp-2.0-gtk +plugin para Tomcat, Maven) eclipse-3.4.1 (+plugin para Maven) /opt/ISyADOO-0809/SoftwareLocal/ apache-tomcat-6.0.14.tar.gz maven/settings.xml 6 Instalación del Software Local y Ejemplos (1) Apache Tomcat Local cd $HOME mkdir –p $HOME/Software cd $HOME/Software tar zxvf /opt/ISyADOO-0809/SoftwareLocal/apache-tomcat-6.0.14.tar.gz NOTA: (usuario tomcat con password tomcat y con rol manager para poder utilizar la aplicación manager) tomcat-users.xml 7 Instalación del Software Local y Ejemplos (2) Descarga y desempaquetado de los ejemplos http://www.fic.udc.es/files/asignaturas/39ADOO/wsjavaexamples-2.0.0-src.tar.gz tar zxf ws-javaexamples-2.0.0-src.tar.gz Descarga y desempaquetado de la mashup http://www.fic.udc.es/files/asignaturas/39ADOO/mashup1.2.0-src.tar.gz tar zxf mashup-1.2.0-src.tar.gz 8 Estableciendo Variables de Entorno (1) # Programming Tools -----------------------------# J2SE. JAVA_HOME=/opt/ISyADOO-0809/jdk1.6.0_10 export JAVA_HOME # For convenience. PATH=$JAVA_HOME/bin:$PATH # Maven. MAVEN_HOME=/opt/ISyADOO-0809/maven-2.0.7 export MAVEN_HOME PATH=$PATH:$MAVEN_HOME/bin # Tomcat. CATALINA_HOME=$HOME/Software/apache-tomcat-6.0.14 export CATALINA_HOME # Eclipse. PATH=/opt/ISyADOO-0809/eclipse-3.4.1:$PATH 9 Estableciendo Variables de Entorno (2) # Librerías GWT linux GWT_HOME=/opt/ISyADOO-0809/gwt-linux-1.4.62 export GWT_HOME Descarga y desempaquetado de GWT en local http://google-web-toolkit.googlecode.com/files/gwtlinux-1.4.62.tar.gz cd $HOME/Software tar zxvf gwt-linux-1.4.62.tar.gz GWT_HOME=$HOME/Software/gwt-linux-1.4.62 export GWT_HOME Para hacer efectivas las variables de entorno Ejecutar “. ~/.bashrc” Cerrar la sesión y volver a entrar en el sistema (RECOMENDADO) 10 Gestión de Proyectos - Apache Maven 2 (1) Herramienta de Gestión 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, …) Ant – enfoque basado en tareas Crear el script build con las tareas a ejecutar Ejecutar los targets Maven1 – enfoque declarativo (más alto nivel que Ant) Ejecutan comandos específicos del sistema operativo Æ (no reutilizables en diferentes plataformas). Formatos 'estrictos' (ej. tabuladores en Makefiles) 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 11 Apache Maven 2 (2) Núcleo de Maven - POM – Project Object Model Contiene una descripción detallada del proyecto, incluyendo información de versiones, gestión de configuración, dependencias, recursos de la aplicación y de pruebas, miembros del equipo, ... Fichero XML situado en el directorio raíz del proyecto Æ pom.xml Documentación 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 12 Apache Maven 2 (3) Estandarización de prácticas de gestión de proyectos No se pierde tiempo reinventando estructuras de directorios, convenciones ni personalizando scripts build.xml de ant para cada proyecto. Maven permite redefinir la estructura de directorios estándar pero es conveniente respetarla por las siguientes razones: El fichero pom.xml será más pequeño y sencillo. Hace que el proyecto sea más fácil de entender y facilita el mantenimiento futuro por otros. Facilita la integración de plugins (asumen también la estructura por defecto) 13 Apache Maven 2 – pom.xml (4) <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> <parent> <groupId>es.udc.ws</groupId> <artifactId>ws-javaexamples</artifactId> <version>2.0.0</version> </parent> <groupId>es.udc.ws</groupId> <artifactId>ws-util</artifactId> <packaging>jar</packaging> <version>2.0.0</version> <name>WS-JavaExamples Util Subsystem</name> <dependencies> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> </dependency> </dependencies> </project> 14 Apache Maven 2 – Ciclo de Vida (5) Fases de construcción de un proyecto: “compile”, “test”, “deploy”, … En Ant se crean “targets” con esos nombres que implementen esa semántica 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 ejecutarán los plugins correspondientes Es posible implementar nuevos plugins a asociar a las diferentes fases, como clases Java. Para compilar: mvn compile 15 Apache Maven 2 – Dependencias (6) En el fichero pom.xml se definen los recursos de los que depende un proyecto Maven automáticamente descarga los recursos de repositorios remotos en repositorios locales Local a la máquina (estructura de directorios en base al groupid y artifactid del recurso) Gestión de Dependencias Transitivas Maven 1 Æ $HOME/.maven/repository Maven 2 Æ $HOME/.m2/repository Maven 1 obliga a que cada proyecto defina todos los jars necesarios, directa o indirectamente por la aplicación. Con Maven 2 sólo es necesario especificar los jars que la aplicación necesita de forma directa; Maven 2 gestiona las dependencias de las librerías utilizadas, para incluirlas de forma automática. Ámbitos de Dependencias – en función 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 sólo para ejecutar (e.g. JDBC drivers). test Æ necesaria sólo para pruebas (e.g. JUnit API). 16 Apache Maven 2 – Configuración Proxy (7) Dos opciones Creando un fichero settings.xml en el directorio $HOME/.m2 (repositorio local) con la siguiente información (copiar fichero /opt/ISyADOO-0809/SoftwareLocal/maven/settings.xml) <?xml version="1.0" encoding="UTF-8"?> <settings> <proxies> <proxy> <active/> <protocol>http</protocol> <port>3128</port> <host>proxy</host> <id/> </proxy> </proxies> </settings> Ejecutar Maven indicando la configuración de proxy en cada comando como parámetros mvn -Dhttp.proxyHost=proxy -Dhttp.proxyPort=3128 17 Ejemplos - Estructura Maven 2 (1) *.java pom.xml *.properties 18 Ejemplos - Estructura Maven 2 (2) 19 Apache Maven 2 – pom.xml (3) <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/..." xsi:schemaLocation="http://maven.apache.org/..."> <modelVersion>4.0.0</modelVersion> <parent> <groupId>es.udc.ws</groupId> <artifactId>ws-javaexamples</artifactId> <version>2.0.0</version> </parent> <groupId>es.udc.ws</groupId> <artifactId>ws-jaxwstutorial</artifactId> <packaging>pom</packaging> <version>2.0.0</version> <name> WS-JavaExamples JAXWSTutorial Subsystem </name> <modules> <module>service</module> <module>client</module> </modules> </project> 20 Ejemplos - Plugins de Maven – Assembly (4) <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> </formats> <fileSets> <fileSet> <includes> <include>**/*</include> </includes> <excludes> <exclude>**/.project</exclude> <exclude>**/.classpath</exclude> <exclude>**/target/**</exclude> <exclude>**/wsdl/**</exclude> </excludes> </fileSet> <fileSet> <includes> <include>**/wsdl/*Impl.java</include> </includes> </fileSet> </fileSets> </assembly> 21 Ejemplos - Plugins de Maven – Jetty (5) http://docs.codehaus.org/display/JETTY/Jetty+Documentation <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> <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> </plugin> 22 Ejemplos - Compilación “ws-javaexamples” (6) Descomprimir ws-javaexamples-2.0.0-src.tar.gz tar xzvf ws-javaexamples-2.0.0-src.tar.gz Adaptar el fichero de configuración ws-javaexamples2.0.0/movies/service/src/main/resources/ConfigurationParame ters.properties Construir los ejemplos mv ws-javaexamples-2.0.0 ws-javaexamples cd ws-javaexamples mvn install 23 Ejemplos - Compilación “mashup” (7) Descomprimir mashup-1.2.0-src.tar.gz tar xzvf mashup-1.2.0-src.tar.gz Adaptar el fichero de configuración mashup1.2.0/ui/src/main/resources/ConfigurationParameters.propert con la implementación del servicio de CRM Virtual Construir la mashup ies mv mashup-1.2.0 mashup cd mashup mvn install 24 Ejemplos - Ejecución “JAXWSTutorial” (8) Ejecutar Aplicación Web usando Jetty cd jaxwstutorial/service mvn jetty:run Ejecución del cliente cd jaxwstutorial/client mvn exec:exec Modificar parámetros de ejecución en el fichero pom.xml <arguments> <argument>-classpath</argument> <classpath/> <argument>es.udc.ws.jaxwstutorial.client.</argument> <argument>http://localhost:9090/ws-jaxwstutorialservice/services/StockQuotesService</argument> <argument>IBM</argument> <argument>SUN</argument> </arguments> 25 Ejemplos - Ejecución “movies” (9) Ejecutar Aplicación Web usando Jetty cd movies/service mvn jetty:run Seleccionar el tipo de servicio (REST o JAXWS) en ../client/src/main/resources/ConfigurationParameters.proper ties 26 Ejemplos - Ejecución “movies” (10) Añadir películas al repositorio cd movies/client mvn exec:exec -DAdminClient Modificar parámetros de ejecución en el fichero pom.xml <arguments> <argument>-classpath</argument> <classpath/> <argument>es.udc.ws.movies.client.AdminClient</argument> <argument>-a</argument> <argument>src/main/sampledocs/Movie1.xml</argument> <argument>src/main/sampledocs/Movie2.xml</argument> <argument>src/main/sampledocs/Movie3.xml</argument> <argument>src/main/sampledocs/Movie4.xml</argument> </arguments> 27 Ejemplos - Ejecución “movies” (11) Actualizar películas Especificar identificador correcto en el fichero XML mvn exec:exec -DAdminClient Modificar parámetros de ejecución en el fichero pom.xml <arguments> <argument>-classpath</argument> <classpath/> <argument>es.udc.ws.movies.client.AdminClient</argument> <argument>-u</argument> <argument>src/main/sampledocs/Movie1.xml</argument> </arguments> 28 Ejemplos - Ejecución “movies” (12) Borrar películas del repositorio (3 es el identificador que se le asignará a una de las películas con fecha de estreno "19 10 2001") mvn exec:exec -DAdminClient Modificar parámetros de ejecución en el fichero pom.xml <arguments> <argument>-classpath</argument> <classpath/> <argument>es.udc.ws.movies.client.AdminClient</argument> <argument>-r</argument> <argument>3</argument> </arguments> 29 Ejemplos - Ejecución “movies” (13) Buscar películas en el repositorio mvn exec:exec -DSearchClient Modificar parámetros de ejecución en el fichero pom.xml <arguments> <argument>-classpath</argument> <classpath/> <argument>es.udc.ws.movies.client.SearchClient</argument> <argument>7</argument> <argument>9</argument> <argument>2001</argument> </arguments> 30 Ejemplos - Ejecución “mashup” (14) Ejecutar aplicación Web usando Jetty. Usar goal jetty:run-exploded para que ejecute la distribución generada en mashup/ui/target/mashup y no la distribución fuente. cd mashup/ui mvn jetty:run-exploded Acceder a http://localhost:8080/mashup-ui 31 Eclipse IDE (http://www.eclipse.org) (1) Compile Run Debug Plugins - Maven - Subclipse - Tomcat -… n o i it s d E or t edit c e j L, ... o r P SQ , L s l o PX, XM o b T P, JS rer WeTML, aJSse explo - H tab a -d . - .. 32 Eclipse - Crear Proyectos (2) Creación de la configuración de proyectos para eclipse (en función de la información del pom.xml) Configuración de Eclipse para importar cada subsistema de los ejemplos como un proyecto Arrancar eclipse mvn eclipse:eclipse eclipse& Crear un nuevo proyecto Java File > New > Project >> Java / Java Project Wizard New Java Project Especificar nombre del proyecto (Project name): ws-util Ponerle el mismo nombre que tiene en maven (tag <artifactId>) para que se resuelvan bien las dependencias entre proyectos. Seleccionar "Create project from existing source" Especificar directorio HOME del proyecto (Browse to ws-javaexamples1.1.0/util directory) Click sobre "Finish". 33 Eclipse - Configurar Proyectos (3) 34 Eclipse & Maven2 (4) 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: Linux: $HOME/.m2/repository en sistemas Linux. Para añadir la variable de entorno M2_REPO a Eclipse C:/Documents and Settings/<userName>/.m2/repository Window > Preferences > Java > Build Path > ClassPath variables. Necesario añadir $JAVA_HOME/lib/tools.jar al JDK de eclipse. Window > Preferences > Java > Installed JREs > Edit 35 Eclipse & Maven2 (5) Se pueden importar automáticamente todos los subproyectos desde eclipse: File > Import > General > Maven Projects Seleccionar el directorio “ws-javaexamples” Chequear los subproyectos de tipo “jar” o “war” util/pom.xml jaxwstutorial/client/pom.xml jaxwstutorial/client/pom.xml movies/common/pom.xml movies/service/pom.xml movies/client/pom.xml 36 Eclipse & Maven2 (6) 37 Eclipse - Depuración de Aplicaciones en Java (7) La opción -g del compilador provoca que se añada código (bytes codes) para poder seguir la traza de la ejecución de un programa La aplicación resultante genera eventos que pueden ser procesados por una aplicación externa (ej. un IDE) Java dispone de una API estándar que permite interceptar estos eventos y acceder al entorno de ejecución de una aplicación compilada con la opción -g. Ej. Un IDE puede registrarse en la aplicación para recibir los eventos correspondientes a los puntos de ruptura que establezca el desarrollador, y posteriormente permitirle al usuario visualizar el entorno de ejecución. 38 Eclipse - Ejecución y Depuración de clases (8) Ejecución 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 jerarquía de clases y con el botón derecho seleccionar Run para que ejecute la clase concreta. Depuración Eclipse posee una perspectiva para depuración de aplicaciones. Permite seguir la traza de ejecución de una aplicación, establecer puntos de interrupción y visualizar el estado de las variables en un instante determinado. Run > Debug As > Java Application 39 Eclipse: Plugin Maven 2 (9) Creación de una nueva configuración “maven” para eclipse. Run > External Tools > Open External Tools Dialog .. > Maven Build botón derecho + "New" Especificar el nombre de la nueva configuración de maven. Main: Especificar el directorio donde se encuentra el pom.xml a utilizar Goals: Indicar los goals a ejecutar en esta configuración. Ejecución de una configuración “maven” para eclipse: Run > External Tools > Nombre de Tarea a Ejecutar. Organización de configuraciones preferidas “Select” para elegir una de las fases del ciclo de vida. Run > External Tools > Organize Favourites Botón derecho sobre un pom.xml > Run As > Maven build … 40 Jetty & Maven 2 Jetty: Servidor HTTP y contenedor de servlets open source escrito 100% en Java. Maven 2 + plugin Jetty Desarrollo ágil: Permite ejecutar una aplicación Web sin empaquetarla en un fichero WAR (entiende los directorios "src" y "target" de la distribución fuente). El plugin puede configurarse para que detecte cambios en los ficheros que serían empaquetados en el fichero WAR (e.g. ficheros .class, JSPs, ficheros de configuración, etc.). Ejecución: cd <module> mvn jetty:run Cargar en el navegador http://localhost:8080/<module> Ejemplo: En el "pom.xml" raíz está configurado para que se compruebe cada 5 segundos. cd jaxwstutorial/service mvn jetty:run http://localhost:8080/ws-jaxwstutorial-service Para parar Jetty: CTRL-C. 41 Jetty & Maven 2 & Eclipse Al modificar los fuentes desde Eclipse, éste los recompila automáticamente y por tanto los cambios se ven reflejados automáticamente en la aplicación Web arrancada a través del plugin de Jetty para Maven 2. Si se utilizase otro IDE que no compilase automáticamente los fuentes, habría que ejecutar “mvn compile” en el módulo correspondiente después de realizar las modificaciones. Depuración Web Arrancando Jetty a través del plugin de Maven 2 de Eclipse. 42 Apache Tomcat Arranque: Finalización: Copiar el fichero WAR al directorio webapps LOGS $CATALINA_HOME/bin/shutdown.sh Instalación de Aplicaciones $CATALINA_HOME/bin/startup.sh Æ http://localhost:8080 logs/localhost.<FECHA>.log logs/catalina.out DEPURACIÓN mvn package + re-instalar + reiniciar shutdown.sh + startup.sh ó http://localhost:8080/manager/html user: tomcat password: tomcat 43 Apache Tomcat + Eclipse Plugin de Tomcat para eclipse. Permite la depuración de aplicaciones Web desde eclipse Window > Preferences > Tomcat Tomcat version: Tomcat 6.x Tomcat_Home: Establecer ruta a tomcat $HOME/Software/apache-tomcat-local-6.0.14 Source Path: Chequear los proyectos que interese depurar para que muestre la línea de ejecución actual en modo depuración línea a línea. Iconos de arranque/parada de Tomcat y consola del servidor. 44 Apache Tomcat + Eclipse (2) 45 Apache Tomcat + Eclipse (3) También se puede crear un servidor usando WTP Window > Preferences > Server > Installed Runtimes > Add > Apache Tomcat v6.x Run As > Run On Server Necesario crear el proyecto con “mvn eclipse:eclipse -Dwtpversion=1.5” 46 Recomendaciones Finales Directorios de logs de Tomcat Borrado periódico La práctica debe poder ser compilada y empaquetada con ‘maven 2’, y ejecutada desde Tomcat, aunque se utilicen Eclipse y Jetty como entorno de desarrollo. 47