Empezar con jaxmpp2

De ChuWiki
Revisión del 13:43 2 may 2011 de Chuidiang (Discusión | contribuciones) (Los servidores)

Saltar a: navegación, buscar

Introducción

jaxmpp2 es una librería GWT que nos permite hacer un cliente web de chat usando GWT y con el protocolo XMPP (en el que se basa jabber). Puesto que la documentación de esta librería es bastante escasa, en este tutorial vamos a ver un pequeño ejemplo sobre cómo empezar con ella, lo básico para entrar en una sala de multiconferencia.

Las librerías

Lo primero que necesitamos son las librerías jaxmpp2. Podemos bajarlas de subversion desde https://svn.tigase.org/reps/jaxmpp2 . En ese repositorio hay tres librerías, sólo necesitamos jaxmpp-core y jaxmpp-gwt. Pero si queremos utilizar maven, necesitaremos sacar los tres proyectos y el pom.xml principal.

Una vez extraidas las dos librerías, sólo necesitamos generar para cada una de ellas un jar que contenga los fuentes, los .class y el fichero gwt.xml que hay en los directorios correspondientes. Si hemos extraído todo el proyecto y usamos maven, nos bastará con ejecutar el comando "mvn install" en el directorio principal para que los jar queden en nuestro repositorio de maven, o bien ejecutar mvn package y luego recoger los jar de los directorios target correspondientes

./jaxmpp-core/target/jaxmpp-core-2.0.0-SNAPSHOT.jar
./jaxmpp-gwt/target/jaxmpp-gwt-2.0.0-SNAPSHOT.jar

y añadirlas a nuestro proyecto gwt.

Los servidores

Como servidor de chat puede valernos, por ejemplo, openfire, que se instala fácilmente. Openfire atiende por defecto a clientes http por el puerto 7070.

Nuestro cliente, aunque lo hagamos con java, GWT lo traducirá a unas páginas html con javascript, por lo que usaremos también un servidor apache para alojar esas páginas.

Tener que usar dos puertos en el mismo servidor (el 7070 de openfire y el 80 de Apache), nos puede dar dos problemas:

  • El puerto 7070 puede estar bloqueado por los proxys, cortafuegos, routers, etc. No así el puerto 80, que al ser el estándar para navegar por internet, suele estar abierto.
  • Al tener una aplicación (nuestro chat) que intenta acceder simultáneamente a dos servidores en puertos distintos (Apache en el 80 y Openfire en el 7070), podemos tener problemas con nuestro navegador. Por seguridad, los navegadores no suelen permitir en determinadas condiciones que una página se componga usando javascript accediendo a la vez a dos servidores (ver cross site scripting). Eso hará que nuestra aplicación no funcione correctamente al no tener los permisos adecuados.

Para evitar ambos problemas, es necesario hacer una redirección en este servidor apache, de forma que nuestra aplicación hablará con el chat a través de una URL normal del apache (por ejemplo, http://servidor/http-bind/) y será apache el que redirija estas peticiones al servidor openfire, puerto 7070. Esta redirección se hace con un virtual host de apache. En nuestro ejemplo, la definición del virtual host será la siguiente

<VirtualHost *:80>
  ServerName openfire
  DocumentRoot "C:/wamp/www/"
  RewriteEngine on
  RewriteRule /http-bind http://openfire:7070/http-bind/ [P]
</VirtualHost>

con esto, cualquier llamada a http://servidor/http-bind se redirigirá a http://openfire:7070/http-bind/. Por supuesto, podemos poner el nombre de servidor que queramos, debemos poner la ubicación real de nuestro openfire, etc, etc.

Esta redirección hace difícil que podamos ejecutar nuestro programa java con GWT en nuestro entorno de trabajo favorito (eclipse, netbeans), ya que en el servidor interno de estos IDEs no podremos hacer estas redirecciones.

Establecer la conexión

Lo primero de todo es establecer la conexión con el servidor.