Está en la página 1de 6

SIGNIFICADO DE SIGLAS

RMI: Remote Method Invocation (Invocación Remota de Métodos)


¿QUÉ ES RMI?
RMI es una tecnología desarrollada por Sun para permitir la colaboración de
objetos que están localizados remotamente. Esta tecnología se enmarca en la
idea de permitir colaboración entre Objetos Remotos. La idea no es que los
objetos se comuniquen a través de la programación del usuario de protocolos
estándares de red. La idea es tener un objeto cliente, donde podamos podamos
completar un requerimiento de datos. El cliente luego prepara el requerimiento que
envía a un objeto ubicado en un servidor. El objeto remoto prepara la información
requerida (accediendo a bases de datos, otros objetos, etc). Finalmente el objeto
remoto envía la respuesta al cliente. En lo posible esta interacción debería ser lo
más semejante posible a requerimientos hechos localmente.
Imagen ilustrativa de RMI

Caracteristicas de la estructura rmi


Características
*Facilidad de uso en la programación por estar específicamente diseñado para
JAVA.
 Proporciona paso de objetos por referencia.
 Recolección de basura distribuida.
 Paso de tipos arbitrarios.

Invocación
1) Encapsulado de los parámetros.
2) Invocación del método (del cliente con el servidor). El invocador se queda
esperando una respuesta.
3) Al terminar la ejecución, el servidor serializa el valor de retorno y lo envía al
cliente.
4) El código cliente recibe la respuesta y continúa como si la invocación hubiera
sido local.
Arquitectura
Puede verse como un modelo de cuatro capas.
Primera Capa: es la de aplicación y corresponde con la implementación real de las
aplicaciones cliente y servidor.
Segunda Capa: es la que interactúa directamente con la capa de aplicación. Se
encuentran las llamadas a objetos remotos y acciones junto con sus parámetros y
retornos de objetos.
Tercera Capa: es la de referencia remota, y es responsable del manejo de la parte
semántica de las invocaciones remotas. Es responsable de la replicación de
objetos.
Cuarta Capa: es la de transporte; es la responsable de realizar las conexiones
necesarias y manejo del transporte de los datos de una máquina a otra.
Es una interfaz de programación de aplicaciones provistas por los creadores del
lenguaje java, y que da a los programadores los medios para desarrollar
aplicaciones Java.
LA API de Java provee un conjunto de clases utilitarias para efectuar toda clase de
tareas dentro de un programa.
Codigo java para rmi
import java.rmi.*;
import java.rmi.server.*;

class ServicioEcoImpl extends UnicastRemoteObject implements ServicioEco


{
ServicioEcoImpl() throws RemoteException {
}
public String eco(String s) throws RemoteException {
return s.toUpperCase();
}
}
Codigo java RMI
El código de la interfaz remota ejecutor es el siguiente:

package callback;
import java.rmi.*;
public interface ejecutor
extends Remote{
public String ejecutar(Tarea t) throws RemoteException;
}
El código de la interfaz Tarea es el siguiente:

package callback;
import java.io.Serializable;
public interface Tarea extends Serializable{
public String recado();
}
La interfaz ejecutor contiene un único método ejecutar, que recibe como
argumento un objeto de la clase Tarea, que es la interfaz definida por el cliente.
De esta forma el cliente implementa la tarea (de cálculo, por ejemplo) que desea
realice el servidor. Para ello define el método recado.

Se implementa la interfaz remota. La clase que la implementa debe heredar de


RemoteServer y lo habitual es hacerlo heredando de UnicastRemoteObject. El
código de la implementación ejecutor_Imp es el siguiente:
package callback;
import java.rmi.*;
import java.rmi.server.*;

public class ejecutor_Imp extends UnicastRemoteObject


implements ejecutor {
protected ejecutor_Imp() throws RemoteException {
super();
}
public String ejecutar(Tarea t) throws RemoteException {
return t.recado();
}
}

El código para la implementación del servidor es el siguiente:

package callback;
import java.rmi.*;

public class servidor {


private servidor(){
try{
if (System.getSecurityManager()==null)
System.setSecurityManager(new RMISecurityManager());
ejecutor imp=new ejecutor_Imp();
Naming.rebind("rmi://192.168.2.2/Motor_Computo",imp);
}catch(Exception e){
System.out.println("Error: "+e.getMessage());
e.printStackTrace();
}
}

public static void main(String args[]){


System.out.println("Levantando el servidor...");
servidor server=new servidor();
}
}
El código de la clase que implementa la interfaz Tarea es el siguiente:

package callback;
public class tarea_Imp implements Tarea{
public String recado() {
return "Hello World";
}
}
El código para la implementación del cliente es el siguiente:

package callback;
import java.rmi.*;

public class cliente {


public static void main(String args[]){
try{
if (System.getSecurityManager()==null)
System.setSecurityManager(new RMISecurityManager());
ejecutor ej=(ejecutor)
Naming.lookup("rmi://192.168.2.2/Motor_Computo");
Tarea tarea=new tarea_Imp();
String respuesta=ej.ejecutar(tarea);
System.out.println(respuesta);
}catch(Exception e){
System.out.println("Error: "+e.getMessage());
}
}
}
Bibliografia
http://www.iuma.ulpgc.es/users/lhdez/inves/pfcs/memoria-domingo/node17.html

http://profesores.elo.utfsm.cl/~agv/elo330/2s09/lectures/RMI/RMI.html

http://poncevero.blogspot.com/2014/11/rmi-remote-method-invocation.html

También podría gustarte