Integración de Sistemas Laboratorio de Prácticas L0.1
Índice Objetivos Estructura del Laboratorio Entorno de Desarrollo Instalación del SW Local y Ejemplos Estableciendo Variables de Entorno Creación de las Bases de Datos MySQL PostgreSQL Estructura de los Ejemplos Gestión de Proyectos: Apache Ant Ficheros de Configuración de Ant Configuración de los Ejemplos Ejecución de Pruebas de JDBCTutorial Eclipse IDE (Entorno de Desarrollo Integrado) Ejemplo de Ejecución/Depuración de aplicaciones con eclipse Cliente de Bases de Datos utilizando JDBC 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: 2 ó 3 personas. 3
Estructura del Laboratorio Red de 30 máquinas (tornoxy) Sistema Operativo Linux, Ubuntu 6.06 LTS (Junio 2006) Cuotas de usuario aumentadas a 300MB Crear un directorio $HOME/NOBACKUP para todo aquello de lo que NO se precise realización de Backups Directorios de datos de bases de datos, SW local, bytecodes generados al compilar las aplicaciones,... 4
Entorno de Desarrollo Navegador Firefox 1.5.0.7 (inglés) Configuración del proxy para acceso a Internet: 10.10.120.40 3128 Permitir acceso a localhost y a Internet: No proxy for: localhost, 127.0.0.1 Visualizador documentos PDFs Acrobat Reader Herramientas de modelado de aplicaciones MagicDraw for UML 11.0 - Professional Java Edition IDE de desarrollo Eclipse 3.2.1 Web Tools Platform 1.5.1 Con plugins para depuración aplicaciones Web con Tomcat 5
Entorno de Desarrollo Software instalado como paquetes ubuntu: Postgresql-8.1.4 Software en /opt/isyadoo-0607 apache-ant-1.6.5 (añadido junit.jar) apache-tomcat-5.5.17 (configuración especial + drivers JDBC) eclipse-3.2.1-wtp-1.5.1-gtk (+plugin para Tomcat) jakarta-taglibs-standard-1.1.2 jboss-4.0.4.ga (configuración especial + drivers JDBC) jdk1.5.0_08 junit4.1 mysql-standard-5.0.24a-linux-i686-glibc23 struts-1.2.9-bin Documentacion JDBC-Drivers SoftwareLocal 6
Entorno de Desarrollo /opt/isyadoo-0607/documentacion /opt/isyadoo-0607/documentacion/comun/ CodeConventions.pdf JavaSE-5.0-doc apache-ant-1.6.5-docs apache-tomcat-5.5.17-docs /opt/isyadoo-0607/documentacion/is/ postgresql-8.1/postgresql-8.1-a4.pdf mysql-standard-5.0.24a/refman-5.0-en.a4.pdf struts-1.2.9/tiles-docs struts-1.2.9/docs junit4.1/javadoc junit4.1/doc jakarta-taglibs-standard-1.1.2/doc jakarta-taglibs-standard-1.1.2/javadoc J2EE/jboss/startguide40 J2EE/jboss/startguide40/startguide.pdf J2EE/jboss/hibernate_annotations.pdf J2EE/jboss/hibernate_entitymanager.pdf J2EE/jboss/hibernate_reference.pdf J2EE/jboss/adminguide.pdf J2EE/jboss/EJB3Trail J2EE/JavaEETutorial.pdf J2EE/JavaEE-5.0-doc 7
Entorno de Desarrollo SoftwareLocal & JDBCDrivers /opt/isyadoo-0607/softwarelocal LEEME apache-tomcat-local-5.5.17.tar.gz jboss-local-4.0.4.ga.tar.gz templates/is/bashrc templates/is/my.cnf (adaptar el HOME al usuario concreto) templates/is/commonproperties.xml (adaptar el HOME al usuario concreto) templates/is/commonenvironmentvariables.sh /opt/isyadoo-0607/jdbc-drivers mysql-connector-java-3.1.13/mysql-connector-java-3.1.13- bin.jar postgresql-jdbc3/postgresql-8.1-407.jdbc3.jar 8
Instalación del SW Local (ver fichero /opt/isyadoo-0607/softwarelocal/leeme) Apache Tomcat Local cd $HOME mkdir p NOBACKUP/Software cd NOBACKUP/Software tar zxvf /opt/isyadoo-0607/softwarelocal/apache-tomcat-local-5.5.17.tar.gz NOTA: tomcat-users.xml (tomcat rol manager para utilizar aplicación manager) server.xml (configuración de datasources, por defecto MySQL) JBoss Application Server Local cd $HOME/NOBACKUP/Software tar zxvf /opt/isyadoo-0607/softwarelocal/jboss-local-4.0.4.ga.tar.gz NOTA: Configurados $JBOSS_HOME/server/default/deploy/mysql-ds.xml y postgres-ds.xml con los datos de conexión de BD apropiados para localhost, usuario j2ee, contraseña j2ee, base de datos j2ee. 9
Instalación Ejemplos http://www.tic.udc.es/~fbellas/teaching/is/j2ee-examples-src-2.1.tar.gz Instalación: cd $HOME/NOBACKUP tar zxvf J2EE-Examples-src-2.1.tar.gz cd J2EE-Examples-src-2.1/Subsystems 10
Estableciendo Variables de Entorno ( ver fichero /opt/isyadoo-0607/softwarelocal/templates/is/bashrc ) # J2SE. JAVA_HOME=/opt/ISyADOO-0607/jdk1.5.0_08 export JAVA_HOME # For convenience. PATH=$JAVA_HOME/bin:$PATH # Ant. ANT_HOME=/opt/ISyADOO-0607/apache-ant-1.6.5 export ANT_HOME PATH=$PATH:$ANT_HOME/bin # PostgreSQL. POSTGRESQL_HOME=/usr/lib/postgresql/8.1 PGDATA=$HOME/NOBACKUP/.PostgreSQLData export PGDATA PATH=$PATH:$POSTGRESQL_HOME/bin # MySQL. MYSQL_HOME=/opt/ISyADOO-0607/mysql-standard-5.0.24a-linux-i686-glibc23 export MYSQL_HOME PATH=$PATH:$MYSQL_HOME/bin # Tomcat. CATALINA_HOME=$HOME/NOBACKUP/Software/apache-tomcat-local-5.5.17 export CATALINA_HOME 11
Estableciendo Variables de Entorno # ----------------------------------------------------------------------- # J2EE-Examples. # ----------------------------------------------------------------------- # The home directory of the examples. J2EE_EXAMPLES_HOME=$HOME/NOBACKUP/J2EE-Examples-src-2.1 export J2EE_EXAMPLES_HOME # Eclipse PATH=/opt/ISyADOO-0607/eclipse-3.2.1-wtp-1.5.1-gtk:$PATH En resumen... cp /opt/isyadoo-0607/softwarelocal/templates/is/bashrc $HOME/.bashrc Para hacer efectivas las variables de entorno Ejecutar ". ~/.bashrc" Cerrar la sesión y volver a entrar en el sistema (RECOMENDADO) 12
MySQL: Inicialización Crear el directorio de datos de MySQL mkdir $HOME/NOBACKUP/.MySQLData Crear el fichero $HOME/.my.cnf con un contenido similar al siguiente (/opt/isyadoo-0607/softwarelocal/templates/is/my.cnf) No se pueden usar variables de entorno [mysqld] datadir=/home/i5/usuario0/nobackup/.mysqldata Inicializar la base de datos (creación de las bases de datos mysql y test ) cd /opt/isyadoo-0607/mysql-standard-5.0.24a-linux-i686-glibc23/ scripts/mysql_install_db Iniciar servidor MySQL --log para depuración($home/nobackup/.mysqldata/<máquina>.log) mysqld -b /opt/isyadoo-0607/mysql-standard-5.0.24a-linux-i686-glibc23 13
MySQL: Configuración y Arranque Base de datos: j2ee, user: j2ee, password: j2ee Crear base de datos j2ee mysqladmin -u root create j2ee Crear usuario con nombre j2ee y password j2ee mysql -u root GRANT ALL PRIVILEGES ON j2ee.* to j2ee@localhost IDENTIFIED BY 'j2ee'; Acceder a la base de datos j2ee : mysql -u j2ee --password=j2ee j2ee \. nombrescript.sql exit (salir) Finalizar el servidor mysqladmin -u root shutdown 14
Más sobre MySQL Arranque del servidor en un puerto distinto al por defecto Por defecto: puerto 3306, socket /tmp/mysql.sock mysqld \ -b /opt/isyadoo-0607/mysql-standard-5.0.24a-linux-i686-glibc23 \ -P <puerto> --socket /tmp/<nombrefichero>.sock Conexiones desde localhost mysql -S /tmp/<nombrefichero>.sock -u j2ee --password=j2ee j2ee mysqladmin -S /tmp/<nombrefichero>.sock -u root shutdown NOTA Si el nombre del socket se indica con path relativo, mysqld lo crea en el directorio de datos del usuario, mientras que mysql y mysqladmin lo buscan en el /tmp Conexiones desde una máquina remota mysql h <máquina> -P <puerto> -u j2ee --password=j2ee j2ee 15
PostgreSQL: Inicialización initdb Definir la variable de entorno PGDATA para el directorio de datos de PostgreSQL (ver sección de variables de entorno) Inicializar la base de datos (encoding UTF-8) Iniciar servidor PostgreSQL postmaster k /tmp Por defecto, crea los ficheros de bloqueo en /var/run/postgresql. -k para cambiar el directorio Finalizar el servidor CTRL + C sobre la consola del servidor (no lanzar en background) 16
PostgreSQL: Configuración y Arranque Base de datos: j2ee, user: j2ee, password: j2ee Crear usuario con nombre j2ee y password j2ee Solicita la contraseña - 2 veces y es necesario confirmar si el usuario puede crear bases de datos o permite crear nuevos usuarios. createuser h localhost -P j2ee Crear base de datos j2ee createdb h localhost -U j2ee -W j2ee Acceder a la base de datos j2ee : psql h localhost j2ee j2ee \i nombrescript.sql \q (salir) \h (Ayuda) \d (Lista de relaciones) \d <name> -> Desc \l (lista de bases de datos) 17
Más sobre PostgreSQL Arranque del servidor en un puerto distinto al por defecto Por defecto: puerto 5432, directorio /var/run/postgresql -k Modificado a /tmp Arrancar el servidor de BD en otro puerto: postmaster k /tmp -p <puerto> psql h localhost -p <puerto> j2ee j2ee 18
Drivers JDBC MySQL Jar: mysql-connector-java-3.1.13-bin.jar ClassName: com.mysql.jdbc.driver URI: jdbc:mysql://localhost[:<puerto>]/<basededatos> PostgreSQL Jar: postgresql-8.1-407.jdbc3.jar ClassName: org.postgresql.driver URI: jdbc:postgresql://localhost[:<puerto>]/<basededatos> 19
Estructura de los Ejemplos - J2EE_EXAMPLES_HOME ConfigurationParameters.properties ServiceLocatorJNDIInitialContext.properties CommonEnvironmentVariables.{bat,sh} build.xml CommonPathReferences.xml CommonProperties.xml MySQLCreateTables.sql PostgreSQLCreateTables.sql build.xml 20
Gestión de Proyectos: Apache Ant (1) Herramienta del tipo de make (gnumake, nmake...) Open Source Proyecto Apache (http://ant.apache.org) Inicialmente Jakarta Apache Utilizada en otros desarrollos (ej. Tomcat) Desarrollada en Java. Otras herramientas existentes. Shell-based Ejecutan comandos específicos del sistema operativo (no reutilizables en diferentes plataformas). Formatos 'estrictos' (ej. tabuladores en Makefiles) Ant es más portable. Las tareas son ejecutadas por clases Java. Solo requiere una MV Java 1.1 o superior (Reutilizable en diferentes plataformas) Existe una tarea que permite ejecutar comandos basados en el SO sobre el que se esté utilizando. Utiliza ficheros de configuración XML (project, targets, tasks). 21
Gestión de Proyectos: Apache Ant (2) Ejecución de ant Por defecto busca el fichero build.xml en el directorio actual. Se pueden especificar uno o más targets a ejecutar. Por defecto ejecuta el target indicado en el atributo default de la etiqueta <project >. Se pueden establecer propiedades que sobreescriban a las especificadas en el buildfile. -Dproperty=value Variables de entorno: ant -DMYVAR=$MYVAR... Fichero Ant: Sección de propiedades a ser utilizadas. Puede realizarse en el mismo fichero o en ficheros externos,.properties o.xml. Sección de targets que definen acciones a realizar, utilizando tareas estándar de Ant o tareas nuevas definidas por el usuario. Permite crear dependencias entre targets 22
Gestión de Proyectos: Apache Ant (3) <project name="myproject" default="dist" basedir="."> <!-- set global properties for this build --> <property name="src" value="."/> <property name="build" value="build"/> <property name="dist" value="dist"/> <target name="init"> <!-- Create the time stamp --> <tstamp/> <!-- Create the build directory structure used by compile --> <mkdir dir="${build}"/> </target> <target name="compile" depends="init"> <!-- Compile the java code from ${src} into ${build} --> ç <javac srcdir="${src}" destdir="${build}"/> </target> <target name="dist" depends="compile"> <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> <jar jarfile="${dist}/lib/myproject-${dstamp}.jar" basedir="${build}"/> </target> <target name="clean"> <!-- Delete the ${build} and ${dist} directory trees --> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project> 23
Ficheros build.xml de los Ejemplos build.xml global a todos los subsistemas. all compile (default) ears init initdb jars javadoc rebuild sourcedist wars NOTA Cada fichero build.xml incluye los ficheros CommonProperties.xml y CommonPathReferences.xml del directorio Subsystems. Los targets del fichero build.xml general enlazan a los targets equivalentes en los build.xml de cada subsistema particular. ant projecthelp muestra los targets que define un fichero build.xml build.xml de un Subsistema particular (MiniBank) clean cleanclasses compile (default) deployejbear deployplainwar deployrmiwar ears ejbear ejbmodeljar ejbwar entitiesjar init jars javadoc plainwar rebuild rmijars rmiwar wars TestAccountFacadeDelegateFactory 24
Configuración de los Ejemplos Linux, Windows // Mysql, PostgreSQL Configuración por defecto: Linux, Mysql, Base de Datos j2ee (default port), usuario j2ee, password j2ee Copiar de /opt/isyadoo-0607/softwarelocal/templates/is/ los archivos de configuración adaptados al laboratorio, sobre: $J2EE_EXAMPLES_HOME/Scripts/CommonEnvironmentVariables.sh $J2EE_EXAMPLES_HOME/Subsystems/CommonProperties.xml Es necesario cambiar las referencias a /home/usuario0 por el HOME de cada usuario en el archivo CommonProperties.xml. tomcat.home, jboss.home Arrancar la base de datos Utilizar ant para compilar/generar javadoc de los ejemplos y crear las tablas en la base de datos cd $J2EE_EXAMPLES_HOME/Subsystems ant all initdb 25
Ejemplos con PostgreSQL Subsystems/CommonProperties.xml Descomentar zona de declaración de Drivers JDBC de la BD utilizada Scripts/CommonEnvironmentVariables.{sh,bat} Seleccionar el Driver JDBC de la BD utilizada PropertiesConfiguration/ConfigurationParameters.properties Descomentar la declaración de SimpleDataSource para PostgreSQL (comentar MySQL) Modificar los DAOS utilizados por Account y AccountOperations teniendo en cuenta que PostgreSQL es un gestor de bases de datos que proporciona generador de identificadores (secuencias) mientras que MySQL proporciona columnas contador. SQLAccountDAOFactory/daoClassName=es.udc.fbellas.j2ee.minibank.model.account.dao.IGSQL AccountDAO SQLAccountOperationDAOFactory/daoClassName=es.udc.fbellas.j2ee.minibank.model.accounto peration.dao.igsqlaccountoperationdao MiniBank/Sources/HTMLView/WEB-INF/plainweb.xml Adaptar según BD la referencia a DAOs de Account y AccountOperation MiniBank/Sources/EJBConfiguration/persistence.xml (Adaptar según BD) <jta-data-source>java:/postgresds</jta-data-source> <property name="hibernate.dialect" value="org.hibernate.dialect.postgresqldialect"/> MiniPortal/Sources/EJBConfiguration/persistence.xml (ídem anterior) AdvancedCMPTutorial/Sources/EJBConfiguration/psa-persistence.xml (ídem anterior) Tomcat: conf/server.xml Descomentar zona de declaración de Datasources de la BD utilizada 26
Ejecución Pruebas de JDBCTutorial Iniciar la base de datos Ejecutar el script. $J2EE_EXAMPLES_HOME/Scripts/CommonEnvironmentVariables.sh Ejecutar las clases de prueba... java -classpath $J2EE_EXAMPLES_CLASSPATH <classname> siendo <classname>: 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 27
Ejecución de Pruebas de Unidad No hacen uso de JUnit En el resto de subsistemas, para ejecutar las pruebas de unidad Descomentar los métodos main de las clases a probar Puede haber que descomentar los imports que haya debajo del comentario // For Testing. En algunos subsistemas existen targets ant para ejecutar las pruebas de unidad. 28
Depuración de Aplicaciones en Java 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. Configuración utilizada en Ant en los Ejemplos: <property name="javac.debug" value="on"/> 29
Eclipse IDE (http://www.eclipse.org) Compile Run Debug Plugins -Ant -Tomcat - Web Tools Project Edition - HTML, JSP, JSPX, XML, SQL,... editors - database explorer -... 30
Utilizando Eclipse Configuración de Eclipse para importar todos los subsistemas de los ejemplos, utilizando un directorio propio (Build/Eclipse) para tareas internas de Eclipse, y Ant para el resto de tareas de compilación/generación de aplicaciones (JAR/WAR/EAR),... Arrancar eclipse eclipse& Crear un nuevo proyecto Java File > New > Project >> Java / Java Project Wizard New Java Project Especificar nombre del proyecto (Project name): J2EE-Examples Seleccionar "Create project at external location" Especificar directorio HOME del proyecto (Browse to J2EE-Examplessrc-2.1 directory) Click sobre "Next" para especificar las librerías necesarias para la compilación del proyecto Wizard "Java Settings" (siguiente transparencia) Click sobre "Finish". 31
Utilizando Eclipse Wizard "Java Settings" Source: Directorio de fuentes del proyecto (por defecto busca directorios dentro del HOME del proyecto que contengan fuentes Java) Projects: Necesario para especificar dependencias entre proyectos. Libraries: Borrar todos los Jars. Libraries: (Add External Jars) Drivers JDBC /opt/isyadoo-0607/jdbc-drivers/mysql-connector-java-3.1.13/mysql-connector-java-3.1.13-bin.jar /opt/isyadoo-0607/jdbc-drivers/postgresql-jdbc3/postgresql-8.1-407.jdbc3.jar Librerías requeridas para aplicaciones Web /opt/isyadoo-0607/apache-tomcat-5.5.17/common/lib/servlet-api.jar Jars de struts /opt/isyadoo-0607/struts-1.2.9/lib/*.jar Librerías requeridas por aplicaciones J2EE /opt/isyadoo-0607/jboss-4.0.4.ga/client/*.jar /opt/isyadoo-0607/jboss-4.0.4.ga/server/default/deploy/ejb3.deployer/*.jar /opt/isyadoo-0607/jboss-4.0.4.ga/server/default/deploy/jboss-aop-jdk50.deployer/*.jar Libraries: (Add Class Folder) Directorio en el que se almacenan los ficheros de configuración, para pruebas de unidad. Properties Configuration Order and Export: Especificación del orden de carga de Jars en el CLASSPATH. Default output folder: J2EE-Examples-src-2.1/Build/Eclipse 32
Utilizando Eclipse Plugin Ant para Eclipse Creación de una nueva tarea "ant" para eclipse (conjunto de tareas "ant"). Run > External Tools > External Tools > Ant Build botón derecho + "New" Especificar el nombre de la nueva "tarea" de ant para eclipse. Main: Especificar el fichero build.xml a utilizar Targets: Indicar las tareas "ant" a ejecutar en esta tarea de eclipse. Ejecución de una tarea "ant" para eclipse Run > External Tools > Nombre de Tarea a Ejecutar. Organización de tareas preferidas Run > External Tools > Organize Favourites Ejecución de una clase Run > Run As > Java Application > Seleccionar la clase a ejecutar. 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 ejecuta la clase concreta. Depuración de una clase 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 Otros Windows > Show View > Ant Window > Show View > Other > Data Database Explorer 33
Recomendaciones Finales Directorio NOBACKUP Fuentes de la práctica fuera de NOBACKUP! Directorios de logs de Tomcat Borrado periódico Gestores de bases de datos Finalizarlos de forma correcta para evitar tener que cambiar los puertos utilizados por defecto por cada gestor. La práctica debe poder ser compilada con ant, aunque se utilice Eclipse como entorno de desarrollo. 34