jueves, 18 de febrero de 2010

Jade + Librerias IDK (Ingenias Development Kit) en Ubuntu

Continuando con los posts que va generando el desarrollo de mi proyecto de tesis. En estos momentos me toca implementar algunas partes del Sistema Multi-Agente que es de lo que se trata mi proyecto, que está siendo desarrollado siguiendo la Metodología INGENIAS. Esta metodología incorpora en el proceso de desarrollo una excelente herramienta denominada  IDK (ingenias Development Kit) que guía en las fases de análisis, diseño e implementación incluyendo la generación de código fuente en Java. El código que genera esta herramienta está basado en  el framework para el desarrollo de sistemas multi-agente JADE, incorporando sus propias librerías a las que trae consigo Jade. Y como está basado en sus librerías, los sistemas que se diseñan y codifican mediante  IDK necesitan una plataforma Jade Corriendo en los servidores que corren este tipo de sistemas. Así que es aquí donde nace esta guía, que está basada en la estupenda guía desarrollada por  eveliotc, entonces como se dice manos a la presa… en este caso al teclado…

1.- descargamos jade… (Nada del otro mundo…) toca registrarse

2.- en un terminal nos desplazamos al escritorio tecleando

cd /home/juankasar/Escritorio
3.- descomprimimos el archivo descargado con:
unzip /home/juankasar/Escritorio/JADE-all-3.7.zip
4.- y luego descomprimimos los zips que se generan del paso anterior con:
unzip JADE-bin-3.5.zip
unzip JADE-examples-3.5.zip
unzip JADE-doc-3.5.zip
unzip JADE-src-3.5.zip
Si a todo lo que pregunte
 

5.- Hay que crear directorios para Jade como root
sudo mkdir /usr/lib/jade
sudo mkdir /usr/share/jade
 6.- movemos las librerías de Jade a los directorios creados
sudo mv jade/lib/* /usr/lib/jade/
sudo mv jade /usr/share/jade
 5.- al definir estas variables de entorno nos evitarnos el problema de manejar classpath por cada agente, para lo cual editando nuestro .bashrc
gedit ~/.bashrc
 6 agregamos al final las variables y unos alias que son las siguientes lineas:
#jade
export JADE_LIB=/usr/lib/jade
export
JADE_CP=$JADE_LIB/http.jar:$JADE_LIB/iiop.jar:$JADE_LIB/jade.jar:$JADE_LIB/jadeTools.jar:$JADE_LIB/commons-codec/commons-codec-1.3.jar
alias runJade='java -cp $JADE_CP jade.Boot'
alias compJade='javac -cp $JADE_CP'
 7.se puede correr el monitor de Jade mediante
runJade -gui
Ahora viene la parte diferente el IDK genera nuevas librerías que incorporan cambios en las existentes en Jade par lo cual lo que yo desarrolle es copiar el conjunto de librerías que utiliza el IDK en vez de las incorporadas por Jade y ya pude correr mi monstruo… para ello hacemos:
sudo rm –fr /lib/jade/jade.jar
sudo rm –fr /lib/jade/jadeTools.jar
sudo cp /home/juankasar/Escritorio/libsIngenias/* /lib/jade/
 probamos denuevo con
runJade –gui

 y listo a seguir con el proy..



Manejo de Fechas en Java incluidos TimeStamp y Unix Timestamp

Mientras desarrollo el sistema que acompaña mi proyecto de tesis van surgiendo algunos puntos que deben irse tratando en el camino cuando desarrollaba un modulo en java que monitoriza los accesos de los estudiantes al EVA (Entorno Virtual de Aprendizaje) de mi Universidad, desarrollado bajo moodle, me encontre con que las fechas se manejaban mediante un sistema denominado unix timestamp que segun dice la literatura es usado en todos los sitemas unix y algunos motores de bases de datos... y Segun consite en que desde el primero de enero de 1970 se cuentan los segundos hasta la fecha que se desea obtener y con eso se tiene una fecha exacta hasta el nivel de segundos de algun acontesimiento. Y fue aqui cuando empeso mi calvario, busque mil y una formas de como pasar ese valor a una fecha mas tratable en java ya que necesitaba hacer comparaciones entre las mismas. No encontre practicamente nada asi que toco hacer un estudio intensivo de clases de fechas y como mismo podia interpretar los valores unix timestamp en java. El relajo empezo cuando descubri que los timestamps en java esta en nanosegundos asi que tocaba equiparalos... y bueno despues de tanta introduccion les dejo el codigo resultante para ver si a alguna persona le quito mas de un dolor de cabeza.

Codigo fuente

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author juankasar
 */
public class Tiempos {
    public static Date unixTimestampToDate(String fecha) {
        Date resultado=null;
        Date aux = stringToDate("1970-01-01 00:00:00");
        Timestamp aux1 = dateToTimeStamp(aux);
        long val = (Long) Long.valueOf(fecha);
        val = val * 1000;
        val = val + aux1.getTime();
        Timestamp aux2 = new Timestamp(val);
        resultado = timestampToDate(aux2);
        return resultado;
    }

    public static String dateToUnixTimestamp(Date fecha){
        String res = "";
        Date aux = stringToDate("1970-01-01 00:00:00");
        Timestamp aux1 = dateToTimeStamp(aux);
        Timestamp aux2 = dateToTimeStamp(fecha);
        long diferenciaMils = aux2.getTime() - aux1.getTime();
        long segundos = diferenciaMils / 1000;
        return res+segundos;
    }

    public static String dateToString(Date fecha){
        String result = null;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        result = format.format(fecha);
        return result;
    }
    
    public static Date stringToDate(String fecha){
        // Solo funciona con string en el formato yyyy-MM-dd HH:mm:ss
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date res = null;
        try{
                res = format.parse(fecha);
        }catch(Exception e){}
        return res;
    }

    public static Timestamp dateToTimeStamp(Date fecha){
        return new Timestamp(fecha.getTime());
    }

    public static Date fechaHoraSistema(){
        return new Date(System.currentTimeMillis());
    }

    private static Date timestampToDate(Timestamp timestamp) {
        return new Date(timestamp.getTime());
    }
}

Saludos Espero que les sirva