2012-05-03 16 views
6

¿Alguien puede dar un simple retorno de llamada de RMI Ejemplo de Hello World? He estado tratando de investigarlo, pero parece que no puedo encontrar uno que entiendo. No entiendo qué es/es una devolución de llamada.Ejemplo simple de devolución de llamada de RMI

Ésta es mi actual Hello World RMI si ayuda ...

interfaz

package example.hello; 

import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface Hello extends Remote { 
    String sayHello() throws RemoteException; 
} 

cliente

package example.hello; 

import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 

public class Client { 

    private Client(){} 

    public static void main(String[] args){ 

     String host = (args.length < 1) ? null : args[0]; 

     try{ 
      Registry registry = LocateRegistry.getRegistry(host); 
      Hello stub = (Hello) registry.lookup("Hello"); 
      String response = stub.sayHello(); 
      System.out.println("response: " + response); 
     } catch (Exception e) { 
      System.err.println("Client exception: " + e.toString()); 
      e.printStackTrace(); 
     } 
    } 

} 

servidor

package example.hello; 

import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
import java.rmi.server.UnicastRemoteObject; 

public class Server implements Hello { 

    public Server(){} 

    @Override 
    public String sayHello() { 
     System.out.println("responded!"); 
     return "Hello, world!"; 
    } 

    public static void main(String[] args) { 

     try{ 
      Server obj = new Server(); 
      Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); 

      // Bind the remote object's stub in the registry 
      Registry registry = LocateRegistry.getRegistry(); 
      registry.bind("Hello", stub); 

      System.err.println("Server ready"); 
     } catch (Exception e) { 
      System.err.println("Server exception: " + e.toString()); 
      e.printStackTrace(); 
     } 
    } 
} 
+0

quizá el capítulo 4 de esta tesis: http: //www.scribd.com/doc/67084961/MasterArbeit le ayudaría a entender las devoluciones de llamada con RMI –

Respuesta

11

No soy un experto en RMI pero puedo decir usted es que puede buscar el libro "Java Network Programming and Distributed Computing" de "David and Michael Reilley". ¡Podrá encontrar un gran ejemplo de implementación RMI CALLBACK que comienza en la página 278!

El autor define una buena manera de entenderlo, así que me listada sería mejor para copiar/pegar de tratar de hacer mi propia, aquí va:

  • "La forma más sencilla de entender una devolución de llamada es pensar en una llamada telefónica. Supongamos que quiere saber si el precio de una acción alcanza cierto nivel, y le pide a su agente que devuelva la llamada cuando lo hace. Cuando el agente (el origen del evento) nota que el precio de la acción refleja sus parámetros, él o ella le devuelve la llamada, para notificarle del nuevo precio. Esa es una devolución de llamada ".

En la implementación predeterminada, RMI solo permite la comunicación entre el CLIENTE y el SERVIDOR, solicitando acciones de servicios remotos (objetos remotos) en el servidor host. Puede utilizar el método de devolución de llamada que hacer que su servidor hable con su cliente.

Thast's great! Imagínese si tiene un servidor que desea verificar si está en línea (o si no cayó/apagó) a través del cliente. Tendría que solicitar el uso continuo de un objeto remoto que debería devolverle algún valor booleano (por ejemplo) diciendo que de hecho está en línea.

¡Eso sería horrible! Porque perderá algo del ancho de banda de la red, volviendo a solicitar en el servidor, una y otra vez ... ¡causando una acumulación de conexiones en él!

Eso es wy debería ser útiles, en estos casos utilizar RETROLLAMADA ;-)

espero que puedan entender con mi respuesta un poco acerca de lo que es devolución de llamada/hace.

Saludos,

Cuestiones relacionadas