Hola!, Somos estudiantes de la Universidad Simón Bolívar y en la asignatura de Sistemas de Operación III nos han asignado la tarea de implementar una aplicación peer-to-peer. En el primer avance investigamos sobre algunas herramientas, frameworks o plataformas para desarrollar aplicaciones p2p. Entre ellas hemos seleccionado JADE (Java Agent Development Framework) por ser la herramienta que mejor se ajusta a nuestros objetivos y por ser la que parecía más sencilla de usar e instalar.
A continuación se detallaran los pasos que se siguieron para instalar y configurar el framework JADE, los problemas que surgieron durante este proceso y la manera en que los solucionamos (si es que pudimos). La instalación se ha realizado sobre el sistema operativo Ubuntu 11.4 (Natty Narwhal) y Linux Mint 12.
Para descargar los paquetes de JADE nos registramos en la página oficial jade.tilab.com en la sección de descarga (download), la útima versión en este momento es la 4.2.0.
Una vez leída la licencia, si se aceptan los términos podremos ver el paquete jadeAll (compuesto a su vez por 4 paquetes). Una vez descargado, hay que descomprimirlo con el comando jar xvf (por recomendación de la página oficial), luego descomprimir el subdirectorio "JADE-bin" con el mismo comando. Finalmente descomprimimos los subdirectorios restantes de cualquier manera (ejemplo: en la interfaz gráfica, click secundario, extraer).
En la carpeta jade-doc encontraremos el archivo README que siempre es recomendable leer!!.
En la carpeta jade-doc encontraremos el archivo README que siempre es recomendable leer!!.
Al seguir los pasos nos encontramos con el requerimiento de agregar al classpath los archivos .jar que se encuentran en el directorio JADE/JADE-bin/lib, sin embargo en la versión 4.2.0 solo existe una librería llamada jade.jar ¿En donde se encuentran los archivos jadeTools.jar, Base64.jar y http.jar que se nombran en el ejemplo posterior? ¿Son realmente necesarios? Nosotras hemos decidido no tomar en cuenta por ahora esas librerías (puede que sean de versiones anteriores).
Para agregar la librería jade.jar al CLASSPATH, en Ubuntu, podemos editar nuestro archivo .bashrc que se encuentra en la carpeta home y agregar el siguiente comando al final :
export CLASSPATH=$CLASSPATH:/home/<user>/JADE/jade-bin/lib/jade.jar
Nota: Recuerda sustituir <user> por tu nombre de usuario y modificar el path en general según sea tu caso.
Luego de guardar los cambios y volver a la línea de comandos, ejecutar:
source .bashrc
En mi Linux Mint 12 no existía el archivo .bashrc sin embargo lo cree y agregue el comando export mencionado anteriormente (igual que para Ubuntu) y luego de reiniciar la sesión funcionó. Si no se desea reiniciar la sesión se puede optar por escribir el comando directamente en la terminal, pero solo tendrá validez en esa terminal en particular.
Una vez que tenemos la librería agregada al classpath retomamos los pasos del archivo README. Nos encontramos con que debemos ejecutar el comando:
java jade.Boot -gui
Esto es para iniciar el contenedor principal (con la interfaz gráfica) , que es el encargado de proveer los servicios de localización de los peers entre otras funciones. Si al ejecutar este comando se produjo un error que incluye una descripción como esta:
ADVERTENCIA: Error adding ICP jade.imtp.leap.JICP.JICPPeer@3ecfff[Error: Not possible to launch JADE on a remote host (127.0.1.1). Check the -host and -local-host options.].
.......
INFO: JADE is closing down now.
Entonces es porque debes incluir el argumento "-local-host" con la dirección IP de la máquina en la quieres iniciar el contenedor principal:
java jade.Boot -gui
Esto es para iniciar el contenedor principal (con la interfaz gráfica) , que es el encargado de proveer los servicios de localización de los peers entre otras funciones. Si al ejecutar este comando se produjo un error que incluye una descripción como esta:
ADVERTENCIA: Error adding ICP jade.imtp.leap.JICP.JICPPeer@3ecfff[Error: Not possible to launch JADE on a remote host (127.0.1.1). Check the -host and -local-host options.].
.......
INFO: JADE is closing down now.
Entonces es porque debes incluir el argumento "-local-host" con la dirección IP de la máquina en la quieres iniciar el contenedor principal:
java jade.Boot -gui -local-host <direccionIP>
El siguiente paso es familiarizarnos con la administración de la plataforma de JADE, para ello nos sirvió de gran ayuda leer el Jade Administration Tutorial, en él se puede comprender la utilidad de los containers, la organización en plataformas, la creación y la comunicación entre los agentes. Por ello esta es una parada obligatoria si aún no se tiene conocimiento de lo mencionado.
El problema que se no presentó siguiendo dicha guía ha sido principalmente:
- Para agregar un nuevo agente en un container se debe agregar al classpath la dirección de la carpeta con las clases compiladas. Para ello creamos una carpeta "classes" ubicada en el directorio JADE/jade-bin con la finalidad de guardar todas las clases (agentes) compiladas. Luego modificamos el classpath de nuestro archivo .bashrc de la siguiente manera:
export CLASSPATH=$CLASSPATH:/home/<user>/JADE/jade-bin/lib/jade.jar:/home/<user>/JADE/jade-bin/classes
Y repetimos el procedimiento descrito anteriormente al incluir la primera ruta al classpath.
Luego de conocer la administración debemos ser capaces de crear nuestros propios agentes y ejecutarlos, para ello podemos seguir el siguiente tutorial: JADE Programing Tutorial.
Por último para poder lograr el compartimiento de archivos dentro de una red peer to peer de manera eficiente se debe tomar en cuenta que toma considerable tiempo planificar la estructura de búsqueda. Se recopiló la siguiente información:
El siguiente link proporciona la opinión de dos desarrolladores:
http://avalon.tilab.com/pipermail/jade-develop/2004q3/004883.html
Y en este otro link podemos ver un ejemplo de como enviar un mensaje con un archivo. Sin embargo esto se limita a leer el archivo, introducir su contenido en bytes en la clase ACLMessage y enviarlo. El agente receptor deberá leer el mensaje, crear un nuevo archivo y copiar el contenido.
http://avalon.tilab.com/pipermail/jade-develop/2010q2/015248.html
El producto final de este proyecto por nuestra parte ha sido un ejemplo de como crear dos agentes. Uno que dado un path de un archivo lo envía a varios agentes que sean de un tipo determinado. El ejemplo de este código puede ser observado a través del siguiente link: Transferencia de archivos en JADE.
Esperamos que este articulo haya sido de ayuda. ¡Hasta luego!
El siguiente paso es familiarizarnos con la administración de la plataforma de JADE, para ello nos sirvió de gran ayuda leer el Jade Administration Tutorial, en él se puede comprender la utilidad de los containers, la organización en plataformas, la creación y la comunicación entre los agentes. Por ello esta es una parada obligatoria si aún no se tiene conocimiento de lo mencionado.
El problema que se no presentó siguiendo dicha guía ha sido principalmente:
- Para agregar un nuevo agente en un container se debe agregar al classpath la dirección de la carpeta con las clases compiladas. Para ello creamos una carpeta "classes" ubicada en el directorio JADE/jade-bin con la finalidad de guardar todas las clases (agentes) compiladas. Luego modificamos el classpath de nuestro archivo .bashrc de la siguiente manera:
export CLASSPATH=$CLASSPATH:/home/<user>/JADE/jade-bin/lib/jade.jar:/home/<user>/JADE/jade-bin/classes
Y repetimos el procedimiento descrito anteriormente al incluir la primera ruta al classpath.
Luego de conocer la administración debemos ser capaces de crear nuestros propios agentes y ejecutarlos, para ello podemos seguir el siguiente tutorial: JADE Programing Tutorial.
Por último para poder lograr el compartimiento de archivos dentro de una red peer to peer de manera eficiente se debe tomar en cuenta que toma considerable tiempo planificar la estructura de búsqueda. Se recopiló la siguiente información:
El siguiente link proporciona la opinión de dos desarrolladores:
http://avalon.tilab.com/pipermail/jade-develop/2004q3/004883.html
Y en este otro link podemos ver un ejemplo de como enviar un mensaje con un archivo. Sin embargo esto se limita a leer el archivo, introducir su contenido en bytes en la clase ACLMessage y enviarlo. El agente receptor deberá leer el mensaje, crear un nuevo archivo y copiar el contenido.
http://avalon.tilab.com/pipermail/jade-develop/2010q2/015248.html
El producto final de este proyecto por nuestra parte ha sido un ejemplo de como crear dos agentes. Uno que dado un path de un archivo lo envía a varios agentes que sean de un tipo determinado. El ejemplo de este código puede ser observado a través del siguiente link: Transferencia de archivos en JADE.
Esperamos que este articulo haya sido de ayuda. ¡Hasta luego!
No hay comentarios:
Publicar un comentario