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.
