2012-05-03 14 views
6

Czy ktoś może podać prosty przykład wywołania zwrotnego RMI dla Hello World? Próbowałem go zbadać, ale nie mogę znaleźć takiego, który rozumiem. Nie rozumiem, czym jest/działa wywołanie zwrotne.Proste wywołanie zwrotne RMI Przykład

To jest mój obecny Hello World RMI, czy to pomaga ...

Interfejs

package example.hello; 

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

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

Client

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(); 
     } 
    } 

} 

Server

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

może rozdziale 4 tej tezy: http: //www.scribd.com/doc/67084961/MasterArbeit pomoże Ci zrozumieć wywołania zwrotne z RMI –

Odpowiedz

11

Nie jestem ekspertem w RMI, ale mogę powiedzieć jesteś, że możesz wyszukać książkę "Java Network Programming and Distributed Computing" z "David and Michael Reilley". Będziesz mógł znaleźć świetny przykład implementacji RMI CALLBACK, która zaczyna się na stronie 278!

Autorka definiuje dobry sposób, żeby go zrozumieć, więc myślałam, że byłoby lepiej, aby kopiuj/wklej, niż starać się mój własny, tu idzie:

  • „Najprostszym sposobem rozumienia zwrotnego to pomyśleć o rozmowie telefonicznej. Załóżmy, że chcesz wiedzieć, czy cena akcji osiągnęła określony poziom, i poprosić swojego brokera o oddzwonienie, kiedy to nastąpi. Gdy pośrednik (źródło zdarzenia) zauważy, że cena akcji odzwierciedla Twoje parametry, on lub ona oddzwania do Ciebie, aby powiadomić Cię o nowej cenie. To jest oddzwanianie. "

W domyślnej implementacji, RMI po prostu umożliwia komunikację między KLIENTEM a SERWEREM, żądając akcji zdalnych usług (obiektów zdalnych) na hoście serwera. Możesz użyć metody oddzwaniania, aby serwer porozmawiał z twoim klientem!

Thast's great! Wyobraź sobie, że jeśli masz JEDEN serwer, który chcesz sprawdzić, czy jest on w trybie online (lub jeśli nie zrobiłeś/aś), trought klienta! Musiałbyś zażądać ciągłego używania zdalnego obiektu, który powinien zwrócić wartość boolowską (na przykład) informującą, że jest w rzeczywistości online.

To byłoby okropne! Ponieważ straciłbyś przepustowość sieci, zażądaj od serwera ponownie, i znowu, i znowu ... powodując pewne połączenie z połączeniem!

To wy powinien być przydatny w takich przypadkach korzystać oddzwonienia ;-)

Mam nadzieję, że można zrozumieć z moją odpowiedź trochę o co zwrotna jest/ma.

poważaniem,

Powiązane problemy