2012-05-03 21 views
6

誰かがHello Worldの単純なRMIコールバックの例を与えることはできますか?私はそれを研究しようとしていますが、私は理解しているものを見つけることはできません。私はコールバックが何であるかを理解していません。それは場合に役立ちます。これは私の現在のHello World RMIある単純なRMIコールバックの例

...

インタフェース

package example.hello; 

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

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

クライアント

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

} 

サーバー

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

この論文の第4章:のhttp://www.scribd.com/doc/67084961/MasterArbeitはRMIとコールバックを理解するのに役立ちます –

答えて

11

は、私は専門家ですRMIで私は言うことができますあなたは "David Network and Michael Reilley"から "Java Network Programming and Distributed Computing"という本を探すことができます。 276ページから始まるRMI CALLBACKの実装の素晴らしい例を見つけることができます!

著者はそれを理解するための良い方法を定義するので、私は自分の作ってみるよりも、それをコピーする/ペースト方が良いだろう取り払わ、ここではそれが行く:

  • 「コールバックを理解する最も簡単な方法株価が一定の水準に達しているかどうかを知りたい場合は、ブローカーにコールバックを依頼します。ブローカー(イベントの発信元)が株価が反映されていることを認識するとあなたのパラメータは、彼または彼女は新しい価格をあなたに通知するためにあなたを呼び戻します。それはコールバックです。

デフォルトでは、RMIはCLIENTとSERVER間の通信を許可し、サーバーホスト内のリモートサービス(リモートオブジェクト)の動作を要求します。コールバックメソッドを使用すると、サーバーとクライアントとの通信を行うことができます。

Thast's great! 1つのサーバがオンラインかどうか(またはドロップ/シャットダウンがなかった場合)、クライアントをチェックしたいと考えているとします。実際にオンラインであることを伝えるなど、ブール値を返すリモートオブジェクトを継続的に使用するように要求する必要があります。

これは恐ろしいでしょう!何らかのネットワーク帯域幅を失うので、サーバーを再度要求し、再度、再度...接続プールをいくつか引き起こします!私はあなたが私の答えで何コールバックについて少し理解することを願ってWYはCALLBACK ;-)

を使用するには、これらの例では、便利であるべきの

/しています。

敬具、おそらく