viernes, 30 de abril de 2010

Actualizador y Lanzador de Aplicaciones Escrito en Java.

He creado una aplicación muy básica en java, la cual se encarga de manter actualizados los sistemas que tenemos, descargando las nuevas versiones de los archivos a través del ftp, al final de la actualización, lanza el sistema.

Su configuración es desde un simple archivo de texto plano (params.conf), el cual contiene los siguientes parámetros:
username:nombre_usuario_ftp
password:contraseña
port=21
exe:si
path_exe:c:\ruta\ejecutable.exe
El parámetro "host", indica cual es el servidor ftp al que debe conectarse, "username" es el usuario ftp, "password" es la contraseña asociada, el puerto del servidor va configurado en "port". El parametro "exe" sirve para decirle si al final de la actualización debe o no lanzar algún ejecutable, el cual se define en "path_exe". Si los parametros host,username y password, no tienen valor, serán pedidos al usuario durante la ejecución.

La lógica de actualización esta basada en la comparación del archivo ctrlversiones, el cual debe existir en el servidor ftp, junto a los otros archivos que se estarán disponibles para ser descargados. La estructura de este archivo tambien es simple, por cada archivo deberá escribirse una línea con el nombre del archivo a descargar, su número de versión y la ruta donde va a ser descargado dentro del disco duro local, un ejemplo de este archivo sería tener:
archivo1 0.01 /home/usuario/
archivo2 0.01 /tmp/datos/
archivo3 0.01
ctrlversiones 0.01
Con esta estructura, los archivos "archivo3" y "ctrlversiones" serán descargados dentro de la misma carpeta, desde la cual se esta ejecutando el programa actualizador, el archivo "archivo1" sera descargado en el directorio /home/usuario/ y por consiguiente el archivo "archivo2" en /tmp/datos/
Cuando el programa actualizador se corre por primera vez, no existe en el disco local el archivo ctrlversiones, por lo tanto descarga todo lo configurado en el archivo ctrlversiones que se encuentra en el servidor.
Para poner a disposición una nueva versión de alguno de los archivos, primero hay que subirlo al servidor, luego modificar el archivo ctrlversiones en el servidor, incrementando el número de versión. Ejemplo: Ya tengo una nueva versión del archivo archivo3, y se encuentra disponible en el servidor ftp, lo que restaria es modificar ctrlversiones en la linea correspondiente:
archivo1 0.01 /home/usuario/
archivo2 0.01 /tmp/datos/
archivo3 0.02 <------------- incrementado
ctrlversiones 0.01
Para la conexión ftp utilice una libreria de clases muy recomendable, desarrollada por ENTERPRISE DISTRIBUTED TECHNOLOGIES http://www.enterprisedt.com/products/edtftpj/ la cual tiene licencia LGPL.
Una vista rápida de la estructura de la clase principal:
import com.enterprisedt.net.ftp.FTPConnectMode;
import com.enterprisedt.net.ftp.FileTransferClient;
...
public class Launcher extends JFrame {
    public Launcher() {
       this.launch=this;
       actualizar = new Vector();
       launch.cargarConfiguracion();

        launch.conectarFTP();
        if (launch.descargarArchivo("ctrlversiones", "main", "",false)) {
            launch.compararVersiones();
        } else {
            System.out.println("No se ha podido establecer la conexión con el servidor.");
            JOptionPane.showMessageDialog(null, "No se ha podido establecer la conexión con el servidor.", ":: Error ::", JOptionPane.ERROR_MESSAGE);
        }
        if(exe.compareTo("si")==0){
            launch.lanzarExe();
            try{
            } catch (Exception e) {
            System.out.println(e.getMessage());
            }
        }
    }   
    private void cargarConfiguracion(){}
    private void compararVersiones(){}
    protected void comparacionLineas(String lineServer, String lineLocal){}
    private boolean verificarEstadoArchivo(File file){}
    private boolean conectarFTP(){}
    private boolean descargarArchivo(String ftpFile, String ruta, String ver, boolean actualizarBarra){}
    private int obtenerTotalMB(){}
    private void lanzarExe(){}
  
    public static void main(String argv[]) {
        new Launcher();       
    }
}
Puedes descargarlo el proyecto en NetBeans aquí y puedes probarlo utilizando un servidor de ftp que he creado con fines de testeo, los datos de conexión son:
host ftp.usuarios.multimania.es
usuario ftp00
contraseña 123456
---
NOTA: Falta considerar algunas excepciones.


1 comentarios:

Publicar un comentario