En este artículo voy a explicar cómo instalar el proyecto que hice para la carrera. De momento no está tan avanzado como me gustaría, pero tengo intención de continuarlo y hablar de él aquí para todos aquellos a los que pueda interesar usarlo o aprender algo de Java, Tomcat, PostgreSQL o Struts a medida que continúo con su desarrollo (si es que tengo tiempo, que en breve empezaré a trabajar).
El primer paso es descargarlo de mi página de
sourceforge. Para ello bajamos el único fichero que hay (de momento, espero tener alguna actualización en breve)
JuegOnline-0.1.0.tar.gz. Dentro de este fichero se encuentra otro fichero comprimido con el código de la aplicación, llamado juego-0.1-src.tar.gz (que extraeremos donde queramos, quedando el directorio juego-0.1) y un fichero README con las instrucciones para hacerlo funcionar, las cuales explicaré ahora.
El software utilizado para desarrollar la aplicación fue el siguiente:
-Sistema operativo: Ubuntu Linux 7.04 y Mac OS X 10.4, aunque debería poder funcionar en cualquier sistema UNIX sin muchos cambios. Ahora estoy utilizando Ubuntu Linux 8.04, por lo que muchos programas se instalarán mediante apt, aunque todos ellos se pueden compilar directamente y ser usados de la misma manera (lo que he tenido que hacer para OS X y que explicaré en otra entrada).
-Una implementación de J2SE 5.0: En Linux he usado el JDK 1.6.0 de Sun y en OS X el JDK 1.5 de Apple.
-La herramienta
maven 2 para gestionar el proyecto (compilar, generar la documentación, los jars, etc). Es una herramienta con utilidades similares a Ant, pero más avanzada y con más posibilidades.
-Base de datos PostgreSQL 8.2 con el driver postgresql-8.2-504.jdbc3.jar. Aunque se puede cambiar por otra base de datos relacional cambiando unos pocos scripts. En algún momento intentaré hacerlo compatible con MySQL.
-Un servidor de aplicaciones conforme a las especificaciones Servlet 2.4 y JSP 2.0. Yo he usado Apache Tomcat 5.5.
-Una implementación de JSP Standard Tag Library 1.1 (JSTL). He usado Jakarta Standard Taglibs 1.1.2.
-El framework Modelo-Vista-Controlador Apache Struts 1.2.9 para JSP.
Dado que hace ya un año que acabé el proyecto, hay versiones nuevas de casi todo el software usado (de algunos ya las había incluso cuando empecé a programar...), así que tendré que ver si de alguna merece la pena actualizar o si hay algún problema de compatibilidad con las versiones nuevas.
Antes de nada, y dado que vamos a instalar una aplicación hecha en
Java, tendremos que instalar el JDK (Java Development Kit). En mi caso he usado el JDK oficial de Sun, que se encuentra en los repositorios de Ubuntu (multiverse). Para instalarlo:
$sudo aptitude install sun-java6-jdk
Una vez hecho esto, el primer paso será instalar maven. Cuando hice el proyecto tuve que compilarlo desde las fuentes, pero ahora está disponible en los repositorios de Ubuntu (universe), así que para instalarlo llega con:
$sudo aptitude install maven2
Con esto se instalará la versión 2.0.8. Para comprobar si está instalado correctamente y si detecta la instalación de java:
$mvn --version
El siguiente paso es un poco más complicado. Se trata de la instalación de la base de datos. A pesar de estar ya disponible la versión 8.3 de PostgreSQL (también en los repositorios de Ubuntu) instalaremos la versión 8.2, que es la que he usado durante el desarrollo de la aplicación. Para ello basta con escribir:
$sudo aptitude install postgresql-8.2
Para poder controlar la ejecución del servidor de bases de datos, deberíamos borrarlo del directorio init.d (directorio donde están los servicios del sistema). Para pararlo:
$sudo /etc/init.d/postgresql-8.2 stop
Para que no se ejecute al encender el ordenador:
$sudo chmod -x /etc/init.d/postgresql-8.2
Los binarios de postgresql no se encuentran en el PATH una vez instalado, por lo que habrá que añadirlos a mano:
$export PATH=/usr/lib/postgresql/8.2/bin:$PATH
Antes de inicializar la base de datos debemos indicar en qué directorio se guardarán los datos, para ello, utilizamos la variable de entorno PGDATA. No debemos crear el directorio, sólo especificarlo, ya que postgresql se encarga de crearlo. Dicho directorio pertenecerá al usuario que ejecute la base de datos:
$export PGDATA=$HOME/PostgreSQLData
$initdb
Una vez hecho esto, debemos crear los usuarios y las bases de datos del juego. Para no tener que cambiar la configuración (aunque sería recomendable), crearemos la base de datos "juego" y el usuario "juego" con contraseña "juego". Para ello:
- Debemos arrancar el servidor de bases de datos:
$postgres / postmaster /pg_ctl start
- Crearemos el usuario con la orden:
$createuser -P juego
La opción -P hace que postgresql nos pida una contraseña para el usuario (que será juego). Luego nos preguntará si será superusuario, debemos responder que no. Ahora nos preguntará si podrá crear bases de datos y nuevos usuarios y sólo responderemos que sí a la creación de nuevas bases de datos. El siguiente paso es crear la base de datos llamada juego y que pertenecerá al usuario juego, para ello:
$createdb -U juego -W juego --enconding=UNICODE
Ahora ya sólo queda comprobar que todo haya salido bien; para ello intentaremos entrar a la base de datos mediante el usuario juego tecleando:
$psql juego juego
Para parar el servidor de bases de datos tan sólo hay que pulsar CTRL-C en el terminal desde el cual hemos lanzado postgres o, en caso de haber usado pg_ctl, escribir:
$pg_ctl stop
Ahora instalaremos el contenedor de aplicaciones
Apache Tomcat en su versión 5.5, que se encuentra en los repositorios de Ubuntu. Para ello bastará con escribir:
$sudo aptitude install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps
Ahora, para evitar problemas más adelante, debemos pararlo y eliminar los permisos de ejecución para que no se inicie al arrancar el sistema:
$sudo /etc/init.d/tomcat5.5 stop
$sudo chmod -x /etc/init.d/tomcat5.5
Una vez instalado debemos crear la variable de entorno CATALINA_HOME, apuntando al directorio base de Tomcat. En mi caso:
$export CATALINA_HOME=/usr/share/tomcat5.5
Debemos modificar el fichero
conf/tomcat-users.xml para crear un usuario en el rol de gestor del servidor, en mi caso he modificado el usuario tomcat:
<user username="tomcat" password="tomcat" roles="tomcat,manager"></user>
De esta forma podremos acceder a la aplicación web
Tomcat Manager como el usuario "tomcat" con la contraseña "tomcat" (esta contraseña debería cambiarse al usar la aplicación).
Para que la aplicación pueda conectarse a la base de datos, necesitamos bajar el driver JDBC para Postgresql. En mi caso, uso la versión
8.2-508 JDBC 3. Una vez descargado, se copia al directorio
$CATALINA_HOME/common/lib. Ahora hay que definir un datasource global llamado "jdbc/GameDS". Para ello añadiremos lo siguiente al fichero
conf/server.xml dentro de la etiqueta <GlobalNamingResources>:
<!-- PostgreSQL -->
<resource name="jdbc/GameDS" auth="Container" type="javax.sql.DataSource" driverclassname="org.postgresql.Driver" url="jdbc:postgresql://localhost/juego" username="juego" password="juego" maxactive="4" maxidle="2" maxwait="10000" removeabandoned="true" removeabandonedtimeout="60" logabandoned="true" validationquery="SELECT COUNT(*) FROM PingTable"/>
Y añadimos las siguientes líneas a
conf/context.xml dentro de la etiqueta
<Context>:<ResourceLink name="jdbc/GameDS" global="jdbc/Game" type="javax.sql.DataSource"/>
Ahora necesitamos compilar y ejecutar el código de la aplicación, que, gracias a maven, debería ser bastante sencillo. Lo primero es crear el paquete .war de la aplicación. Para ello, desde el directorio base de la aplicación, juego-0.1, ejecutamos:
$mvn package
En ese directorio se encuentra el fichero
pom.xml que especifica los parámetros necesarios para que maven compile la aplicación. Con esto conseguimos crear el fichero
Game.war en el directorio
~/juego-0.1/dev/game/target/.
Ahora que ya tenemos todo lo necesario para ejecutar la aplicación, vamos a listar los pasos a seguir:
1. Arrancar el servidor de bases de datos. Debemos arrancarla con el mismo usuario con el que ejecutamos initdb, escribiendo:
$postmaster
o
$postgres
En ambos casos, el servidor se ejecuta en primer plano, por lo que podremos ver el registro de la base de datos en la pantalla sin necesidad de abrir ningún fichero.
En mi caso tengo un problema, me obliga a crear, cada vez que reinicio la máquina, un directorio
/var/run/postgresql perteneciente al root (ya que un usuario normal no tiene permisos para ello) y con permisos de lectura, escritura y ejecución para el usuario que ejecuta postgres. Si alguien me puede explicar cómo cambiar eso, por favor, que lo haga en los comentarios. Yo aún no he tenido tiempo de mirarlo bien.
2. Arrancar el contendor de aplicaciones web Tomcat. Para ello debemos tomar antes el rol de root, de lo contrario, la aplicación no tendrá permisos para acceder a los ficheros necesarios y dará errores. Luego, tecleamos:
$$CATALINA_HOME/bin/startup.sh
3. Ahora debemos iniciar la base de datos del juego, para ello se proporciona un script sql que se ejecuta con la siguiente orden:
$mvn sql:execute
Me acabo de dar cuenta de que en la versión que he subido a sourceforge hay un par de errores en este script, que debemos corregir antes de ejecutar la orden anterior. El fichero es
~/juego-0.1/src/resources/sql/PostgreSQLCreateTables.sql. Para solucionar dichos problemas, debemos añadir, en cualquier parte del fichero:
-- Table PingTable:
DROP TABLE PingTable;
CREATE TABLE PingTable();
Y cambiar
nexval('UsersSeq') por
nextval('UsersSeq'). Espero subir en breve una versión con estos errores corregidos.
4. El último paso es desplegar la aplicación. Para ello tenemos las siguientes órdenes de maven:
$mvn install
$mvn tomcat:deploy
No sé por qué, pero fallan. Cuando hice el proyecto funcionaban sin problemas, así que ya veré cómo puedo hacerlo en otro momento. De todas formas, esto se puede hacer fácilmente con Tomcat Manager. Para acceder a él, escribimos en el navegador
http://localhost:8180/manager/html, nos pedirá el nombre de usuario y contraseña que hemos definido antes (en mi caso, Tomcat, Tomcat) y ya estaremos en la página de gestión de Tomcat. Desde ahí podremos desplegar nuestra aplicación manualmente especificando la ruta del fichero
Game.war.
5. Para acceder a la aplicación, escribiremos en la barra de direcciones de nuestro navegador
http://localhost:8180/Game/.
Para ir terminando, os copio aquí un fragmento de mi fichero
/etc/bash.bashrc:
# ------------------------------------------------------
# Programming Tools.
# ------------------------------------------------------
# This sets JAVA_HOME for maven:
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export PATH=$PATH:$JAVA_HOME
# This changes the data directory for PostgreSQL:
export PGDATA=$HOME/PostgreSQLData
# This adds PostgreSQL binaries to PATH:
export PATH=/usr/lib/postgresql/8.2/bin:$PATH
# This is needed to use Tomcat:
export CATALINA_HOME=/usr/share/tomcat5.5
La ventaja de usar
/etc/bash.bashrc con respecto a
~/.bashrc, es que esas variables de entorno estarán presentes para todos los usuarios del sistema, aunque hay que tener privilegios de root para poder editar ese fichero.
Para próximas entradas dejo:
- Cómo arreglar los errores que he comentado aquí.
- Qué voy a añadir en las próximas versiones.
- Cómo usar eclipse para el desarrollo y cómo integrarlo con maven (puede que esto ayude).
- Un pequeño manual de instrucciones.
- Instalación en Mac OS X.
- Hacer la aplicación disponible desde fuera de nuestra máquina (esto ni lo he intentado, de momento...).
- Explicaros cómo podéis ayudar a traducir la aplicación, que ya está preparada para ello.
Por último, recordad que la aplicación está alojada en
sourceforge y que para todas aquellas dudas que tengáis al respecto tengo la dirección de correo
borjadp@users.sourceforge.net.
Y si alguien ha tenido la paciencia de leer esto y, sobretodo, de probar la aplicación, ¡¡gracias!!