2012-05-03 21 views
6

Birisi basit bir RMI Geri Çağırma Örneği Merhaba Dünya Örneğini verebilir mi? Araştırmaya çalışıyorum ama anladığım birini bulamıyorum. Geri çağlamanın ne olduğunu anlamıyorum. Eğer yardımı, bu benim şimdiki Merhaba Dünya RMI olduğunuBasit RMI Geri Arama Örneği

...

Arayüz

package example.hello; 

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

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

Müşteri

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

} 

Sunucu

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

bu tezin bölüm 4: http: //www.scribd.com/doc/67084961/MasterArbeit RMI ile geri aramalar anlamanıza yardımcı olur –

cevap

11

ben uzman değilim RMI'de söyleyebilirim ama Sen "David ve Michael Reilley" den "Java Ağ Programlama ve Dağıtılmış Hesaplama" kitabını arayabilirsiniz. Sayfa 278'de başlayan RMI CALLBACK uygulamasının harika bir örneğini bulabileceksiniz!

yazar bunu anlamak için iyi bir yol tanımlar, bu yüzden kendi yapmaya olmadığı kadar kopyalama/yapıştırma için daha iyi olacağını tought, burada o da:

  • "basit yolu bir geri arama anlama bir telefon görüşmesi düşünmek olduğunu düşünürsünüz.Bir hisse senedi fiyatının belirli bir seviyeye ulaşıp ulaşmadığını öğrenmek istediğinizi varsayalım ve sizden komisyoncudan ne zaman geri çağırma yapmasını isteyeceğinizi, komisyoncu (olayın kaynağı) hisse senedi fiyatının yansıdığını fark ettiğinde. Sizin parametreleriniz, sizi yeni fiyattan haberdar etmek için sizi geri arar. Bu bir geri dönüş. "

Varsayılan olarak, RMI, sunucu ana bilgisayarındaki uzak servislerin (uzak nesneler) eylemlerini talep etmek için, CLIENT (SİPARİŞ) ile SUNUCU arasında iletişimi sağlar. Geri arama yöntemini, Sunucunuzun konuşmasını Müşterinize yapmaktan daha fazla kullanabilirsiniz!

Thast harika! Çevrimiçi olup olmadığını (veya düşürmediyse/devre dışı bırakmadığını) kontrol etmek istediğiniz bir sunucuya sahip olup olmadığını düşünün! Size, aslında çevrimiçi olan bir boole değeri (örneğin) söylemesi gereken uzak bir nesnenin sürekli kullanımını talep etmeniz gerekir.

Bu korkunç olurdu! Çünkü ağ bant genişliğini kaybedersiniz, tekrar sunucuya tekrar talepte bulunursunuz, tekrar tekrar ve ... tekrar bağlantı kurmaya neden oluyorsunuz!

Benim cevapla geri arama ne olduğu hakkında biraz anlayabiliyorum umut geri arama ;-)

kullanmak bu gibi durumlarda, yararlı olmalıdır wy That/yok.

Saygılarımızla, belki