Java RMI - Ejecucion de codigo remoto

Hago este post, porque me cance de ver tutoriales sobre este tema muy poco claros o que no funcionan. Para entender el codigo se necesita conocimiento basico sobre programacion.
------------------------------------
RMI o Invocación de metodo remoto es un mecanismo de Java, que permite la ejecucion de codigo desde un programa cliente a uno servidor, ubicado en otro equipo en la red.

Servidor:
-El servidor cuenta con la clase "InterfazRemota" que hereda de java.RMI.Remote con los métodos que luego redefinirá el "ObjetoRemoto".

public interface InterfazRemota extends java.rmi.Remote{
public String Imprimir(String mensaje) throws java.rmi.RemoteException;
}


-El "ObjetoRemoto" va a implementar la clase InterfazRemota. En el constructor de la clase se utiliza el método Naming.rebind para vincular la dirección y el nombre del objeto remoto al registro rmi. Y debajo se redefiniran los metodos ha utilizar. De esta clase se obtiene el Stub.

import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class ObjetoRemoto extends UnicastRemoteObject implements InterfazRemota{
public ObjetoRemoto(String nombre) throws java.rmi.RemoteException{
super();
try{
Naming.rebind(nombre, this);
}
catch(Exception e){

System.out.println("Excepcion: "+e.getMessage());
e.printStackTrace();
}
}
public String Imprimir(String mensaje) throws java.rmi.RemoteException{
System.out.println("Mensaje Recibido: "+ mensaje);
return mensaje;
}
}


-La clase "Servidor" tendrá el main, solo creará un objeto de la clase ObjetoRemoto, y pasará por parámetro el puerto y el nombre.

import java.rmi.*;
import java.rmi.server.*;
public class Servidor{
public static void main (String args[]){
try{
ObjetoRemoto obj = new ObjetoRemoto("//:80/pruebaRMI");
System.out.println("Servidor de ObjetoRemoto listo.");
}
catch(Exception e){
System.out.println("Excepcion: "+e.getMessage());
e.printStackTrace();
}
}
}

Cliente:
-El cliente debe tener la InterfazRemota y el Stub, utilizados en el servidor. La clase cliente, crea un objeto de InterfazRemota y buscará el objeto remoto mediante Naming.lookup, la sentencia args[0] permite obtener la dirección ip que se le pasara por parámetros, así poder ejecutar el método remoto.

import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
public class Cliente {
public static void main(String args[]){
try{
String mensajeRecibido;
String mensajeEnviado = "mensaje de prueba";
InterfazRemota obj = (InterfazRemota)Naming.lookup("rmi://"+ args[0] + ":80/pruebaRMI");
System.out.print("Msj>");
mensajeRecibido = obj.Imprimir(mensajeEnviado);
System.out.println(mensajeRecibido);
System.out.print("Msj>");
}
catch(Exception e){
System.err.println("Excepcion de Sistema:"+e);
}
System.exit(0);
}
}


------------------------------------
Compilar el Servidor mediante javac *.java y generar el stub con rmic objetoremoto

Copiar el stub y la interfaz a la carpeta del cliente y compilar cliente con javac cliente.java

Arrancar el registro con start rmiregistry puerto, iniciar el servidor con java servidor, y el cliente con java cliente ip_equipo

Prueba en dos dos equipos diferentes:

-----------------------------------
En el ejemplo solo se imprime un mensaje en el equipo con el servidor, pero imagínense el potencial. Generar un jar con una ventana corriendo en segundo plano, inmune a un antivirus, utilizar métodos como toolkits para obtener información del equipo o ejecutar código arbitrario mediante exec, etc.
En fin, me despido hasta la próxima entrada. Saludos

Comentarios

  1. ENVIRONMENTAL STRESS CRACKING – The susceptibility of a thermoplastic article to crack or craze formation under the affect of sure chemicals or getting older, or weather and stress. DWELL– A pause within the utility of stress to a mould made just before Boxers the mould is totally closed to permit the escape of gas from the molding material. DRY COLORING– Method commonly used by fabricators for coloring plastic by tumble blending uncolored particles of the plastic material with selected dyes and pigments. DESTATICIZATION– Treating plastics materials to attenuate their accumulation of static electrical energy, and subsequently the quantity of dust picked up by the plastics because of such charges. CRYSTALLINITY– A state of molecular structure in some resins which denotes uniformity and compactness of the molecular chains forming the polymer. Normally can be attributed to the formation of solid crystals having a definite geometric kind.

    ResponderEliminar

Publicar un comentario

Entradas populares