Presentación Especialista Java Enterprise
 

Guía de laboratorio

En esta sesión de ejercicios vamos a describir los aspectos más importantes de las distintas plataformas, utilidades y sitios web necesarios para el desarrollo de las prácticas del Especialista.

A continuación vamos a detallar el uso de estos elementos y algunos otros también necesarios para el desarrollo de las prácticas del especialista.

Ordenadores de la EPS

Los laboratorios en los que se realizarán las prácticas están gestionados por la Escuela Politécnica Superior. Para acceder a ellos se debe contar con una cuenta de usuario en la EPS. Es posible cambiar la contraseña entrando como usuario anónimo en la zona de servicios de la EPS (más información).

Al arrancar el ordenador deberás seleccionar como sistema operativo Linux Ubuntu. En este sistema operativo se encuentra el programa VirtualBox con el que se pondrá en marcha la MV en la que se realizarán las prácticas.

Recomendamos que en los ordenadores de la EPS trabajes directamente sobre la imagen de la MV del disco externo. Así evitas el tiempo de copiar la imagen al disco local, aunque tendrás la penalización de la velocidad limitada del puerto USB 2.0 del ordenador de la EPS.

¡Cuidado con tus datos! Debes tener precaución con el disco externo. Si le sucediera algo a la máquina virtual perderías todo lo hecho en el curso. Por ello debes tener cuidado de copiar la máquina virtual en tu ordenador de casa y de copiar los proyectos Java en el repositorio SVN del curso (ver sección 3).

Máquina virtual VirtualBox

Uno de los elementos más importantes de las prácticas del curso es la MV con una distribución de Linux Ubuntu y con las herramientas necesarias para realizar los ejercicios. Su uso te hace sencillo continuar en casa los ejercicios y prácticas realizados en clase y garantiza que todos utilizamos el mismo entorno de trabajo. También nos hace inmunes a posibles cambios en las instalaciones de los ordenadores de la EPS.

El disco imagen de la MV original se encuentra en el disco externo y comprimida en la zona restringida de apuntes de la web del Especialista: especialistajee2011.zip.

La MV Ubuntu es compatible con las últimas versiones VirtualBox. La hemos probado con la última versión 4.0 y la 4.1. La versión de las Guest Additions instalada en la MV es la 4.1.

VirtualBox es multiplataforma y opensource. Existen versiones para Windows, Mac y Linux y es posible trabajar con la misma máquina virtual en distintos sistemas operativos. Puedes, por ejemplo, trabajar en la EPS en Windows y después continuar el trabajo en casa en Mac. En el disco duro externo hemos incluido las versiones de Mac y Windows.

Instalación de Ubuntu

La instalación de Ubuntu en la MV es la 10.04, con las actualizaciones disponibles a Septiembre de 2011.

En la MV se ha creado el usuario especialista con la contraseña especialista. Tendrás que utilizar este login para entrar en el sistema, para ejecutar comandos en modo superusuario o cuando se bloquee la pantalla:

Las aplicaciones instaladas son Java, Eclipse, Tomcat y MySQL.

Java

Se ha instalado la versión 6.0 update 27.

El JDK de Java se ha instalado en el directorio /opt/jdk1.6.0_27 de la MV Ubuntu.

Para añadir los comandos java y javac al path hemos hecho:

$ sudo update-alternatives --install "/usr/bin/java" "java" "/opt/jdk1.6.0_27/bin/java" 1
$ sudo update-alternatives --set java /opt/jdk1.6.0_27/bin/java
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/jdk1.6.0_27/bin/javac" 1
$ sudo update-alternatives --set javac /opt/jdk1.6.0_27/bin/javac

(tomado de http://www.guia-ubuntu.org/)

Tomcat

Se ha descargado la versión 7.0.21 en el directorio /opt/apache-tomcat-7.0.21. No se ha activado ningún servicio de httpd en Ubuntu, porque ejecutaremos la mayoría de aplicaciones web desde Eclipse. Más adelante comentaremos cómo referenciar esta ruta desde Eclipse.

MySql

Se ha instalado con el sistema de actualización de paquetes de Ubuntu (Synaptic). Se han instalado los paquetes mysql-server, mysql-query-browser y mysql-admin. Una vez instalados, se han añadido automáticamente las aplicaciones en el menú Aplicaciones > Programación. El servicio de MySQL se arranca por defecto cada vez que arranca el ordenador.

La contraseña del usuario root de MySQL es especialista.

IDE Eclipse

Se ha instalado la versión más actualizada de Eclipse Helios en /opt/eclipse.

Cómo crear la MV Ubuntu

Lo primero que tenemos que hacer en el ordenador de la EPS es crear con VirtualBox la máquina virtual en la que vamos a trabajar. Vamos a crear la MV para que trabaje con la imagen de disco que tenemos en el disco externo (especialistajee2011.vdi).

Arranca VirtualBox y crea una nueva MV de tipo Linux Ubuntu con el nombre Especialista Java EE

Define el tamaño de la memoria de la MV en 1024 MB. También podría funcionar correctamente con menos memoria, pero así nos aseguramos de que Eclipse tiene suficiente memoria para compilar y lanzar las aplicaciones que desarrollemos.

Ahora debemos vincular la imagen vdi del disco externo con la máquina virtual que estamos creando. Para ello, en la pantalla Disco Duro Virtual seleccionamos la opción la opción Usar un disco duro existente.

Seleccionamos el fichero Especialista Java EE 2011.vdi en el disco duro externo y terminamos:

Debes realizar un proceso similar en tu ordenador de casa, para crear allí una MV con las mismas características y disco duro que en el laboratorio de la EPS. De esta forma podrás continuar trabajando en la misma MV que en el laboratorio. Podrías incluso mejorar el rendimiento copiando la imagen .vdi en el disco duro local y crear la MV con esa copia. El (pequeño) inconveniente de esta opción es que debes recordar copiar la imagen de nuevo al disco duro externo para tener allí la última versión de la MV. La ventaja es que así te aseguras de que siempre tienes una copia de respaldo de la MV.

La configuración de la máquina virtual creada se guarda en la carpeta VirtualBox VMs del directorio de usuario.

Configuración adicional

Una vez creada la máquina virtual es conveniente afinar su configuración para que funcione a pleno rendimiento. Debemos configurar la máquina virtual, añadir el pack de extensión de Oracle, Guest Additions y el directorio compartido.

En primer lugar, si es posible, es recomendable que actives la opción de más de un procesador en la MV. Para ellos debe habilitar la opción Configuración > Habilitar IO APIC y definir más de un procesador en Configuración > Sistema > Procesador.

Para poder trabajar con discos USB en la MV, hay que instalar el pack de extensión de Oracle en Virtual Box. Basta con hacer doble click en el fichero Oracle_VM_VirtualBox_Extension_Pack disponible en el disco externo.

También es recomendable instalar las Guest Additions. Con ellas instaladas es posible pasar del SO invitado (Ubuntu) al SO anfitrión sin tener que pulsar ninguna combinación de teclas, sólo moviendo el cursor. También son útiles para copiar y pegar texto entre ambos sistemas operativos, así como para cambiar fácilmente la resolución de la pantalla.

Las Guest Additions ya están instaladas en la imagen inicial. Si en algún momento actualizas VirtualBox, deberás también actualizar la versión de Guest Additions. Para ellos debes seleccionar la opción Dispositivos > Instalar "Guest Additions" del menú de Virtual Box que aparece cuando estamos ejecutando la MV. Esto montará un disco en Ubuntu que tiene activada la opción de autoejecución. Acepta la autoejecución y se lanzará el comando que instala el Guest Additions en el host invitado. Una vez instaladas, debes desmontar el CD y reiniciar Ubuntu.

Una vez instaladas las Guest Additions es posible compartir directorios entre el ordenador invitado (Ubuntu) y el anfitrión (Windows, Mac, etc.). Para ello selecciona la opción Dispositivos > Directorios Compartidos y pulsa en el icono para añadir un nuevo directorio transitorio (no se guardan los datos de un arranque a otro). Aparecerá una ventana en la que debes indicar la ruta del directorio del ordenador anfitrión que se quiere compartir y un nombre simbólico con el que identificar ese directorio. Para indicar la ruta del directorio en el anfitrión puedes también escoger la opción del desplegable que abre el navegador de archivos para seleccionarlo gráficamente. Escogemos por ejemplo el escritorio y como nombre simbólico para ese directorio escribimos Compartido. De esta forma estamos creando un dispositivo que puede ser montado en el sistema y que tiene como nombre Compartido.

Para montar el directorio debemos crear un directorio en Ubuntu (o usar un directorio existente) y llamar al comando mount como root:

$ cd Escritorio 
$ mkdir Host
$ sudo mount -t vboxsf -o uid=1000,gid=1000 Compartido Host

Los parámetros uid=1000,gid=1000 hacen que el propietario de la carpeta compartida sea el propio usuario, con lo que no es necesario ser root para explorarla.

Para desmontar el directorio llamamos al comando umount:

$ sudo umount Host

Cómo copiar la MV

Supongamos que en tu casa trabajas con la imagen de la MV en tu disco local y que en el disco externo tienes la versión más actualizada resultado de trabajar en el laboratorio de la EPS. Lo único que tienes que hacer es copiar la MV más reciente del disco externo a tu disco local (¡Cuidado en no hacerlo al revés). Cuando arranques la MV de tu casa ya estarás trabajando con la misma versión con la que terminaste en la EPS. Cuando termines de trabajar en casa, debes actualizar la imagen del disco externo: apaga la MV con cambios (así salimos limpiamente de Ubuntu sin dejar ficheros abiertos en el disco duro virtual) y copia el fichero Especialista Java EE 2011.vdi al disco externo. Para trabajar sin problemas con la imagen de la MV es importante que la hayas apagado correctamente, y que no la hayas dejado suspendida.

Apuntes del Especialista

Los apuntes, trasparencias, plantillas para los ejercicios y demás material docente se encuentran en un sitio web restringido a los alumnos del Especialista. Puedes acceder a esta zona pinchando en el recuadro correspondiente (azul) en la web pública del Especialista (http://web.ua.es/especialistajava) o escribiendo directamente la URL http://www.jtech.ua.es/j2ee/restringido/. Una vez introduzcas tu usuario de Especialista Java Enterprise y tu contraseña podrás acceder a esta web.

El login en este sitio web es las iniciales de tu nombre y tu primer apellido. La contraseña es el número de DNI, sin la letra de control. Por ejemplo, si el nombre del alumno es Pedro Pérez, su login es pperez

Si deseas cambiar tu contraseña (o no la recuerdas), puedes pulsar en el enlace correspondiente. Se enviará un mensaje a tu dirección de correo con un enlace con el que podrás modificar la contraseña.

Moodle

Vamos a utilizar Moodle como plataforma de trabajo colaborativo. La usaremos para gestionar los foros, las entregas de ejercicios y alguna que otra encuesta que iremos presentando .Se accede pinchando en el recuadro correspondiente (amarillo) en la web del Especialista o escribiendo directamente la URL http://moodle.jtech.ua.es.

Al igual que el resto de recursos de acceso restringido, el usuario de acceso será las iniciales del nombre y tu primer apellido. La contraseña inicial será el DNI, y la primera vez que te registres te pedirá una nueva contraseña.

Uno de los elementos principales que utilizaremos de Moodle son los foros, que utilizaremos para resolver dudas y para las sesiones de consulta on-line del proyecto de integración. Desde el frontal de Moodle se puede acceder directamente a estos foros. Se llaman Foro general y Foro sesiones on-line. Para poder utilizar correctamente el foro es muy importante que actualices tu foto. Para eso, debes pinchar en tu nombre (en la zona de Usuarios en línea o abajo a la derecha, donde pone Usted se ha autentificado como) y seleccionar la pestaña Editar información. Allí puedes colocar tu foto. Cuando todos tenemos la foto es mucho más sencillo contestar e interactuar en el foro. La siguiente imagen muestra un ejemplo del foro general en la edición 2009-2010 del especialista:

En la página principal del curso puedes encontrar también enlaces a las tareas de entregas de ejercicios de cada uno de los módulos, una vista del calendario Google con las clases del especialista y una vista del Twitter del espcialista:

Más adelante explicaremos cómo entregar los ejercicios y rellenar la tarea de Moodle.

Proyectos y espacios de trabajo en Eclipse

Eclipse es el entorno de programación que se va a usar en todas los módulos del curso. El trabajo en Eclipse se organiza en proyectos que se guardan en carpetas que Eclipse denomina espacios de trabajo (Workspaces). Un espacio de trabajo se corresponde con un directorio físico del disco duro y los proyectos se corresponden con subdirectorios suyos. Para organizar mejor los trabajos que se irán realizando, trabajaremos con dos espacios de trabajo. Uno para los proyectos realizados en los distintos módulos del especialista y otro para los distintos proyectos de integración.

Nota
Eclipse guarda la configuración del espacio de trabajo y de los proyectos en ficheros ocultos que residen en los mismos directorios que los espacios de trabajo y los proyectos. Los ficheros más importantes son .metadata que se guarda en el directorio raíz del espacio de trabajo, .project que se guarda en el directorio raíz de cada proyecto y otro fichero .classpath en cada proyecto con información necesaria para la compilación en Java de las clases del proyecto.

Cuando arrancamos Eclipse por primera vez aparece un cuadro de diálogo en el que nos pide el espacio de trabajo en el que vamos a trabajar.

Por defecto, Eclipse sugiere el directorio llamado workspace en el home del usuario. En el caso de la MV el directorio que sugiere Eclipse es /home/especialista/workspace. Si aceptamos ese espacio de trabajo, Eclipse crea el directorio y comenzaremos a trabajar en él.

Podemos abrir otro espacio de trabajo pulsando el botón Browse o escribiendo su ruta en el campo de texto. Eclipse abrirá el directorio correspondiente, o creará un nuevo directorio si no existe.

Un espacio de trabajo puede contener distintos proyectos. Cada proyecto puede contener (entre otras cosas) un conjunto de clases Java y un conjunto de librerías. Los proyectos pueden estar relacionados, de forma que uno utilice clases o librerías Java que residen en otro. Veremos todo esto con detalle en el módulo Java y Herramientas de Desarrollo. En la sesión de hoy estudiaremos los aspectos más sencillos relacionados con los proyectos. Entre otras cosas, cómo crearlos, importarlos, guardar una copia de seguridad o subirlos a un repositorio SVN. Por último, explicaremos cómo realizar una entrega de los ejercicios realizados utilizando el repositorio SVN.

Creación e importación de proyectos

En este pequeño ejercicio vamos a comprobar lo sencillo que es crear nuevos proyectos en el espacio de trabajo Eclipse. Durante el curso, vamos a trabajar con dos espacios de trabajo:

  • El espacio de trabajo por defecto (workspace) en el que guardaremos los proyectos de los módulos
  • El espacio de trabajo del proyecto de integración, que llamaremos (proyint)

Vamos a empezar creando un pequeño proyecto Java. Para ello seguiremos los siguientes pasos:

  1. Abrimos Eclipse con el espacio de trabajo workspace.
  2. Creamos un proyecto (pperez-pres-agenda) y algún fichero dentro del proyecto.
  3. Importamos otro proyecto en el espacio de trabajo.

Vamos a continuación a realizar estos pasos de forma detallada.

Arrancamos Eclipse con el espacio de trabajo workspacedefinido. Tendrá el siguiente aspecto:

2. El panel vertical izquierdo es el destinado a contener los proyectos, ahora está vacío. Para crear un proyecto podemos escoger la opción File > New > Java Project... o pulsar el botón derecho sobre el panel de proyectos y escoger la opción New > Java Project.... En cualquiera de estos casos, aparecerá un asistente que nos guiará para crear el tipo de proyecto que deseemos. En este caso vamos a crear nuestro primer proyecto Java. Escribimos como nombre del proyecto pres-agenda, precedido por nuestro nombre de usuario: pperez-pres-agenda. Todos los nombres de proyecto vamos a escribirlos utilizando este formato: nuestro nombre de usuario, el nombre corto del módulo en que estemos haciendo los ejercicios y el nombre del proyecto. De esta forma podremos almacenarlos todos en un mismo directorio o repositorio (el espacio de trabajo workspace de Eclipse y el repositorio SVN). La utilización de tu login en el prefijo hará posible publicar, compartir o corregir los mismos proyectos realizados por distintos alumnos.

Cuando pulsamos Finish Eclipse crea el proyecto, creando un directorio nuevo en el espacio de trabajo. Aparece como una carpeta en el panel de proyectos. Una vez creado el proyecto, vamos a crear en él un pequeño programa Java, que nos va a servir para demostrar algunas de las características de Eclipse. En el programa vamos a definir una clase Tarjeta con los datos de una tarjeta de contactos: id (int), nombre (String) y eMail (String) y una clase Main con el programa principal de la aplicación, que crea un par de tarjetas, las guarda en un array y lo recorre para mostrarlas por la salida estándar.

Todas las clases deben estar en el paquete org.especialistajee.agenda. Es una costumbre habitual utilizar como prefijo en el nombre del paquete la URL de la empresa u organización que desarrolla el código en orden inverso. De esta forma se garantiza que el nombre completo de la clase es único y no coincide con otras clases desarrolladas por otras organizaciones. En nuestro caso la URL http://especialistajee.org está redirigida al frontal del Especialista: http://web.ua.es/especialistajava.

Para crear una clase seleccionamos New > Class y rellenamos el cuadro de diálogo con el nombre de la clase y el paquete. Comenzamos con la clase Tarjeta:

Escribimos la clase Tarjeta con los campos indicados, los getters y setters correspondiente y un constructor que cree una tarjeta nueva a partir de un identificador. Podemos probar a utilizar la ayuda de Eclipse para generar código con la opción Source > Generate Getters and Setters ... o Source > Generate Constructor using fields .... Generamos también de forma automática el método toString.

Creamos una clase Main en la que declaramos un array de tarjetas, creamos y añadimos un par de tarjetas y recorremos el array imprimiendo sus datos en la salida estándar. La estructura de clases que aparece en el proyecto es esta:

Antes de lanzar la aplicación vamos a probar a modificar la configuración de los paneles en la perspectiva actual. Una perspectiva es un conjunto de vistas en unas posiciones determinadas. Una vista es un panel especializado de Eclipse que permite interactuar sobre una determinada característica del proyecto. Eclipse contiene una enorme cantidad de vistas que permiten gestionar múltiples aspectos del desarrollo: listas de tareas por hacer, baterías de pruebas, despliegue, edición y compilación, etc. Todas estas vistas se organizan en un conjunto de perspectivas predefinidas.

Las perspectivas que vamos a utilizar principalmente en el curso son Java y Java EE.

Añadimos la vista Navigator que nos permite explorar la estructura de archivos creados en el disco duro. La podemos colocar junto a la vista Package Explorer:

Vemos que Eclipse realiza automáticamente todo el trabajo de compilar las clases .java a ficheros .class y colocarlos en los directorios correspondientes a sus paquetes. También podemos ver los ficheros .settings, .classpath y .project donde guarda distintas características del proyecto. Es recomendable dejar esta vista Navigator porque la utilizaremos más de una vez para visualizar la estrucutura real del sistema de archivos.

En algunos casos, puede ser que al mover las distintas vistas dejemos bastante cambiada una perspectiva. Si queremos volver a la configuración por defecto debemos seleccionar Window > Reset Perspective..

3. Ejecutamos la aplicación con la opción Run > Run As > Java Application. Una forma rápida de acceder a esta opción es con el icono de play en la barra superior de eclipse.

4. Por último vamos a probar la importación de proyectos Eclipse. Vamos a hacer la prueba con un proyecto que hemos creado para esta sesión. Se encuentra comprimido en el fichero sesion01-ejercicios.zip, en la página principal de los apuntes de este módulo (lo puedes descargar directamente desde este enlace). Guarda el fichero ZIP en la carpeta de descargas, por ejemplo, y descomprímelo. Verás el proyecto PuntosEnCanvas. Se trata de una sencilla aplicación Java en la que se abre una ventana y se dibujan algunos puntos en ella.

Importa el proyecto con la opción File > Import... (o pulsando el botón derecho sobre el panel y seleccionando Import > Import...). Selecciona General > Existing Project into Workspace. Selecciona Select root directory y escoge el directorio del proyecto que acabas de descargar. Puedes ver cómo aparece marcada la opción Copy projects into workspace, indicando que Eclipse copiará físicamente el proyecto al espacio de trabajo. Si se dejara desmarcada Eclipse trabajaría los ficheros del proyecto en su localización original. La dejamos marcada:

Una vez importado, puedes consultar el código fuente del proyecto y también ejecutarlo. Después, para seguir el convenio de que todos los proyectos de un mismo módulo comiencen su nombre con el módulo, cambia el nombre del proyecto a pperez-pres-puntosEnCanvas con la opción Refactor > Rename...:

Una vez creados e importados los proyectos, vamos a ver en el siguiente apartado cómo subirlos al repositorio SVN.

Nota
Hay que hacer notar la gran portabilidad de los proyectos de Eclipse (debido sobre todo a que Eclipse está desarrollado en Java). Es posible comenzar a trabajar en Windows y seguir trabajando en cualquier otro sistema operativo (Linux o Mac OS X). El único detalle a tener en cuenta es el de asegurarse de usar la misma codificación de texto (text encoding) en todos los sistemas. Por defecto, Eclipse usa la codificación de texto del sistema operativo, lo que puede dar lugar a problemas de compatibilidad al abrir ficheros de texto creados en otros sistemas operativos. Lo recomendable cuando vamos a trabajar con distintos SOs es escoger una única codificación (ISO-8859-1, por ejemplo) y un único delimitador de fin de linea (el de Unix, por ejemplo). Para escoger la codificación en la que va a trabajar Eclipse hay que seleccionar la opción Window > Preferences > General > Workspace.

Repositorios SVN

Los sistemas de control de versiones permiten mantener una historia de los cambios que se realizan en los ficheros que componen un proyecto. En el caso de los sistemas distribuidos, como CVS o SVN, permiten además que distintos desarrolladores puedan trabajar simultáneamente en proyectos compartidos. El sistema registra los cambios de cada desarrollador y guarda las versiones en un repositorio común accesible a todos.

Uno de los sistemas más veteranos de control de versiones es CVS. Está muy extendido en múltiples comunidades de desarrolladores y existen bastantes herramientas gráficas y clientes que lo soportan. Apache Subversion (SVN) se desarrolla para mejorar algunos aspectos de CVS, pero manteniendo su filosofía y funcionamiento.

Tanto CVS como SVN proporcionan un sistema cliente-servidor de control de versiones y permiten que varios desarrolladores trabajen simultáneamente en un mismo proyecto. Permiten sincronizar un único repositorio remoto (donde se encuentra el proyecto en el que se está trabajando) con múltiples clientes locales (desarrolladores), de forma que todos los clientes comparte el mismo proyecto, pueden subir sus cambios y mantener sus proyectos sincronizados. Existe una gran variedad de sistemas de control de versiones como Subversion, Mercurial o Git. Hemos escogido CVS/SVN por motivos históricos (es uno de los sistemas más antiguos y extendidos) y por la robustez y la integración del cliente de Eclipse. En esta sección vamos a comprobar cómo funciona el sistema y cómo será el ciclo de trabajo habitual de desarrollo.

Un escenario común de uso de SVN en los equipos de desarrollo de software es el que se representa en la imagen anterior. El servidor SVN guarda la última versión y la historia del proyecto en desarrollo. Un desarrollador trabaja en su copia local hasta haber codificado (¡y probado!) algunos cambios en algunos ficheros del proyecto. Una vez se ha asegurado de que los cambios son correctos, se realiza un commit (confirmación) de los ficheros, subiéndolos al servidor. Allí se sustituyen los ficheros antiguos por los nuevos, anotándose la historia de cambios. Los otros desarrolladores que están trabando simultáneamente también subirán sus cambios (normalmente, en ficheros diferentes). En la siguiente sesión de desarrollo, cada desarrollador debe realizar un update para actualizar sus proyectos locales antes de proceder de nuevo a su modificación. Si más de un desarrollador modifica el mismo fichero, SVN lo detecta y lanza un error, para que se solucionen manualmente los conflictos.

Los clientes SVN proporcionan un interfaz gráfico que simplifica la conexión al repositorio y la realización de todos estos commit y update. Eclipse contiene un cliente SVN que utilizaremos para subir todos los proyectos desarrollados.

El ciclo de trabajo recomendable para trabajar con SVN es el siguiente:

  1. Realizar un update del proyecto para actualizar la versión local con los posibles cambios de los compañeros.
  2. Trabajar en el código del proyecto.
  3. Hacer un update para comprobar si algún cambio subido al repositorio entra en conflicto con lo que hemos desarrollado.
  4. Finalmente hacer un commit para subir nuestros cambios al repositorio.

Cada alumno tiene disponible en el servidor del especialista (server.jtech.ua.es) un repositorio privado en el que puede mantener de forma remota los proyectos en los que está trabajando. El nombre del repositorio coincide con el login del alumno. El login es el mismo que con el que se accede al servidor de apuntes: iniciales del nombre + primer apellido, sin espacios y en minúscula. Por ejemplo, el login de Ana Isabel Pérez Carrascosa sería aiperez. La contraseña es el número del DNI, sin la letra de control.

Hay creados dos directorios en el repositorio de cada alumno. Uno para subir los proyectos de los módulos y otro para subir los del proyecto de integración:

  • URL del repositorio SVN de los proyectos de los módulos: svn+ssh://server.jtech.ua.es/home/svn/pperez/modulos/trunk
  • URL del repositorio SVN del proyecto de integración: svn+ssh://server.jtech.ua.es/home/svn/pperez/proyint/trunk

El directorio trunk es el directorio principal en el que se guardarán los proyectos que subamos al repositorio. Además, existe el convenio de crear los directorios tags y branches en los que se pueden guardar versiones y ramas de los proyectos. Utilizaremos más adelante los tags para marcar las entregas de los módulos.

Cómo subir un proyecto al repositorio SVN

Eclipse permite publicar en SVN los proyectos de forma individual mediante un asistente que proporciona una interfaz a los comandos svn con los que se interactua realmente con el repositorio. Vamos a probarlo. Comencemos guardaando el proyecto pperez-pres-agenda creado en esta sesión.

Nota
Antes de continuar, una breve nota sobre los nombres de los proyectos. Es necesario que todos los proyectos desarrollados en el especialista tengan nombres distintos, ya que todos van a residir en el mismo directorio del repositorio SVN. Para evitar coincidencias en el nombre de los proyectos, seguiremos la norma de que las primeras letras del proyecto será siempre el nombre corto del módulo en el que estamos trabajando (pres para el módulo Presentación, jhd para el módulo Java y Herramientas de Desarrollo, etc.). Además, para facilitar la corrección y permitir en algún momento la publicación junto con otros proyectos de distintos alumnos, precederemos el nombre del proyecto con el login.

Para subir el proyecto al repositorio SVN lo seleccionamos, pulsamos el botón derecho y escogemos la opción Team > Share Project.. > SVN.

Aparecerá una ventana en la que hay que proporcionar los datos del repositorio SVN. Estos datos se grabarán en el directorio de trabajo de Eclipse y no tendrás que introducirlos de nuevo. Si marcamos la opción para grabar el usuario y contraseña Eclipse pedirá adicionalmente una contraseña maestra para encriptar el login y contraseña introducidos.

Eclipse detecta que el direcorio trunk es un directorio especial (en él se guarda la rama principal del proyecto) y nos pide si queremos normalizar la URL. Aceptamos su sugerencia y decimos que sí.

A continuación debemos indicar qué directorios se van a crear en el repositorio SVN. El asistente nos pide la localización del proyecto en el repositorio. Debemos marcar la opción Advanced Mode, Use project name y Use Repository Layout. En el repositorio se creará bajo el directorio trunk un directorio con el mismo nombre que el mismo nombre que el proyecto:

Pulsando el botón Next nos pide un comentario inicial para la subida del proyecto. Podemos aceptar el que ofrece por defecto. Pulsando el botón Next> aparecerá la siguiente pantalla en la que podrás revisar qué ficheros se van a guardar en el directorio recién creado. No debería aparecer el directorio bin ni ningún fichero compilado .class. Son ficheros que no deben residir en el repositorio común, porque se generan cada vez en el espacio de trabajo local.

Repasamos que todo está correcto, ponemos el comentario indicado y pulsamos OK. Una vez guardados los ficheros en el repositorio, el proyecto quedará enlazado al repositorio SVN. En el panel de proyectos de Eclipse aparecerá el proyecto con una etiqueta indicando la URL del repositorio y un icono en los ficheros y directorios que están enlazados con el repositorio:

Nota
La conexión entre los proyectos locales y repositorio SVN queda grabada en el disco duro en forma de unos directorios llamados .SVN que se crean en los directorios enlazados. Los datos del repositorio SVN quedan también grabados en el directorio local del proyecto. De esta forma, al copiar el proyecto también se copia la conexión con el repositorio SVN.

Cómo subir al repositorio cambios en el proyecto local

Una vez creado o descargado un repositorio en un proyecto haremos modificaciones en el proyecto local: modificaremos el contenido de algún fichero, crearemos nuevos ficheros y directorios o borraremos ficheros existentes. Eclipse marca todos aquellos recursos que se han modificado con un símbolo especial (">"). Para comprobarlo, cambiamos el método toString de la clase Tarjeta:

Para subir los cambios, seleccionamos el directorio raíz del proyecto y escogemos la opción Team > Commit.... Al igual que cuando hemos subido el proyecto por primera vez, aparecerá la ventana Commit en la que podrás escribir un comentario sobre los cambios realizados. Una vez que aceptamos el commit, Eclipse se conecta con el repositorio y actualiza los cambios. Veremos que desaparece el signo '>' que marcaba las diferencias con el repositorio.

Aviso
Al final de cada sesión de ejercicios debes subir los proyectos con los que has estado trabajando al repositorio SVN. También lo puedes hacer si trabajas en casa y tienes conexión a Internet. De esta forma, el repositorio SVN estará siempre actualizado, te será más cómodo realizar la entrega de los ejercicios y siempre tendrás una copia de seguridad, aparte de la propia copia de la máquina virtual.

Cómo explorar versiones de un fichero

Una vez que se han subido distintas versiones de un mismo fichero es posible consultar su historia de cambios y comparar distintas versiones subidas al repositorio SVN.

Para ver la historia de cambios de un fichero o un directorio, lo seleccionamos con el botón derecho y pulsamos la opción Team > Show History. Aparece el panel History en la parte inferior de la ventana de Eclipse. Si lo hacemos con todo el proyecto pperez-pres-agenda debe aparecer algo como esto:

Este panel es bastante interesante y tiene muchas funcionalidades. No tenemos demasiado tiempo para probarlas, pero sería interesante que las investigaras por tu propia cuenta. Investiga la historia de algún fichero concreto (por ejemplo, Tarjeta.java) y prueba a hacer lo siguiente:

  • Haciendo un doble click en cualquiera de las versiones se abre en el panel del editor su contenido.
  • Es posible comparar distintas versiones del documento pulsando el botón derecho sobre la versión que queremos comparar y escogiendo la opción Compare Current with 1.X.

Cómo bajar proyectos del repositorio SVN

Supongamos que la máquina virtual se ha estropeado y que queremos recuperar algún proyecto subido al servidor. ¿Cómo lo hacemos?. Empezamos borrando el proyecto pperez-pres-agenda del espacio de trabajo. Para ello seleccionamos el proyecto y escogemos con el botón derecho la opción Delete. Activamos también la opción Delete project contents on disk para que borre físicamente el directorio. Si no lo hiciéramos así, Eclipse borraría el proyecto del espacio de trabajo, pero no del disco duro.

Una vez borrado, vamos a recuperarlo del repositorio. Para ello seleccionamos con el botón derecho sobre la vista de proyectos la opción Import > Import... > SVN > Project from SVN.... Seleccionamos la localización del repositorio SVN en la que está el proyecto y Next.

Pinchamos ahora en el botón Browse para explorar el repositorio y seleccionar el módulo que queremos descargar (modulos > trunk > pperez-pres-agenda). Pulsamos OK y Finish y aparecerá una última pantalla en la que Eclipse nos pregunta cómo debe descargar el proyecto. Escogemos que lo importe como un proyecto con el nombre indicado:

Podríamos incluso descargar versiones anteriores del proyecto. Pulsamos Finish y el proyecto volverá a aparecer en el espacio de trabajo.

Cómo realizar la entrega de los ejercicios mediante SVN

En cada módulo se va a solicitar la realización de ejercicios, en forma de proyectos. Otros años las entregas de estos ejercicios se han hecho comprimiendo los proyectos en un fichero ZIP y subiéndolo a Moodle, en una tarea específica allí creada. Este año vamos a cambiar y vamos a utilizar el propio SVN para realizar las entregas.

Para realizar una entrega vamos a utilizar la funcionalidad de Subversion de etiquetar instantáneas del desarrollo de un proyecto con etiquetas. En concreto, vamos a usar la etiqueta entrega-modulo para marcar el estado final de aquellos proyectos que forman parte de la entrega. modulo será la abreviatura del módulo que estemos entregando. Por ejemplo, la etiqueta de la presentación será entrega-pres, la del módulo de "Java y herramientas de desarrollo" será entrega-jhd. En cada módulo se indicará la etiqueta con la que hay que marcar los proyectos.

Para etiquetar un conjunto de proyectos tenemos que seleccionarlos en el espacio de trabajo, pulsar el botón derecho y seleccionar la opción Team > Tag.... Aparecerá la siguiente pantalla:

Escribimos el nombre de la etiqueta. En este caso entrega-pres y no marcamos Start working in the tag. Si lo marcáramos, los proyectos quedarían conectados a la rama definida por la etiqueta y los cambios se subirían a esa rama. Al no hacerlo, los proyectos siguen conectados al trunk, con lo que podríamos seguir trabajando en ellos (en el caso en que hubiera más de una entrega del mismo proyecto, por ejemplo en el proyecto de integración).

Pulsamos OK y se creará la etiqueta en el servidor. Lo que ha pasado allí es que se ha creado físicamente un nuevo directorio dentro del directorio tags con el nombre de la etiqueta y se han copiado allí los proyectos indicados.

Podemos comprobar los directorios que se han creado en el servidor con la perspectiva SVN Repository Exploring. Si la seleccionamos, aparecerá la vista SVN Repositories, en la que podemos explorar el repositorio. Por ejemplo, desplegando el directorio modulos > tags debe aparecer la etiqueta que acabamos de crear con los proyectos entregados:

En el directorio trunk seguirá estando la rama principal con todos los proyectos realizados en todos los módulos. Actualmente coinciden con los entregados:

Una vez realizada la entrega, podemos borrar los proyectos del espacio de trabajo. Seguirán estando en el directorio workspace y podremos importarlos cuando lo necesitamos, pero así no estorbarán cuando estemos desarrollando otros proyectos de otros módulos.

Para terminar la entrega hay que entrar en Moodle y rellenar allí un formulario confirmando la entrega, e indicando cualquier incidencia que haya podido ocurrir (un cambio en el nombre de la etiqueta, etc). En Moodle también dejaremos las calificaciones de los ejercicios.

En la tarea de Moodle está indicada el plazo límite para realizar la entrega. Esta información también la podemos encontrar en el calendario de Google.