Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

Como usar RMI en java (llamada a procesos remotos)

Esta fue una pequeña guia que surguio en base a que un amigo me pregunto que ondas con RMI de java…. Esta guia la realice con java 1.4.X

No cambia mucho en versiones posteriores.

Generando los codigos necesarios para la Parte Servidor
En la parte servidor generaremos tres ficheros java…..

Fichero 1 — CalculadoraRMI.java
Lo primero sera generar una interface que Herede todos los metodos publicos de java.rmi.Remote

import java.rmi.*;

public interface CalculadoraRMI extends Remote{

    //Método encargado de sumar...
    public int Suma(int x, int y) throws RemoteException;

    //Método encargado de restar...
    public int Resta(int x, int y) throws RemoteException;
}

Fichero 2 — ImplementacionCalculadoraRMI.java
Lo segundo sera generar una clase que implemente la interface RMI (en nuestro caso Calculadora RMI)
Esta clase tambien debera heredar de UnicastRemoteObject

import java.rmi.server.*;
import java.rmi.*;

public class ImplementacionCalculadoraRMI extends UnicastRemoteObject implements CalculadoraRMI{

    /** Creates a new instance of ImplementacionCalculadoraRMI */
    /** Notece que el constructor tambien tomara la
        la excepcion remota si es que algo fallace
        en la construccion de una instancia de esta clase */
    public ImplementacionCalculadoraRMI() throws RemoteException {
        // Ejecutamos el Construcctor de la clase padre
        super();
    }

    //Método encargado de sumar...
    public int Suma(int x, int y) throws RemoteException{
        return (x + y);
    }

    //Método encargado de restar...
    public int Resta(int x, int y) throws RemoteException{
        return (x - y);
    }
}

Fichero 3 — ServidorCalculadoraRMI.java
Aqui implementaremos el programa que fungira como Servidor
de los metodos remotos que ofrece nuestra calculadora

import java.rmi.Naming;

public class ServidorCalculadoraRMI {

    /** Creates a new instance of ServidorCalculadoraRMI */
    public ServidorCalculadoraRMI() {
        try {
            //Creamos la instancia de ImplementacionCalculadoraRMI...
            ImplementacionCalculadoraRMI imp_remote_calc = new ImplementacionCalculadoraRMI();

            //Le asignamos un nombre a la instancia para su uso remoto...
            Naming.rebind("rmi://localhost:1099/CalculadoraRMI",imp_remote_calc );
            }
            catch (Exception e) { System.out.println("Problema: " + e); }
    }

    public static void main(String args[]) {
        new ServidorCalculadoraRMI();
    }
}

Generando los codigos necesarios para la parte Cliente de RMI

Fichero 4 — ClienteCalculadoraRMI.java

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;

public class ClienteCalculadoraRMI {

    /** Creates a new instance of ClienteCalculadoraRMI */
    public ClienteCalculadoraRMI() {
    }

    public static void main(String[] args) {
        try{
            //Obtener la instancia del servidor...
            CalculadoraRMI calculadora = (CalculadoraRMI)Naming.lookup("rmi://localhost:1099/CalculadoraRMI");

            //Llamamos entonces a los metodos de nuestra instancia
            // obtenida via RMI
            System.out.println("Imprimiendo resultado de Resta:" + calculadora.Resta(3,1));
            System.out.println("Imprimiendo resultado de Suma:" + calculadora.Suma(3,1));

            // Aqui cachamos las posibles Excepciones que se pudieran dar..
        }
        catch(RemoteException re) {
            System.out.println("RemoteException: " + re);
        }
        catch (MalformedURLException murle) {
            System.out.println("MalformedURLException: " + murle);
        }
        catch (NotBoundException nbe) {
            System.out.println("NotBoundException: " + nbe);
        }
        catch (java.lang.ArithmeticException ae) {
            System.out.println("java.lang.ArithmeticException: " + ae);
        }
    }

La ventaja de RMI.. es que al ser el cliente java y el servidor
java… se puede transmitir entre ellos tipos de datos complejos
Ya que si usasemos webservices … solo podriamos transmitir entre
cliente y servidor los tipos de datos especificados en la especificacion
SOAP.

:)

Elabore esta guia rapida sobre RMI… para analizar los alcances del mismo
y la camparacion que hacen a veces de ellos con los webservices.

Comenta