2013-12-15 70 views
0
Class FoodItem{ 
private String name; 
private int numCalories; 

public FoodItem(String s, int cals) 
{ 
name = s; 
numCalories = cals 
} 
public String getName() 
{ 
return name; 
} 
public int getNumOfCalories() 
{ 
return numCalories; 
} 
} 

public class FoodItemServer 
{ 
public static void main(String [] args) 
{ 
FoodItem f1 = new FoodItem("Wispa", 254); 
FoodItem f2 = new FoodItem("Apple", 45); 
System.out.println("Food Name: " + f1.getName + 「has 「 + 
f1.getCalories +「calories」); 
} 
} 

我們最近開始使用RMI,我很努力地理解它。使用RMI訪問對象

在前面的例子中(我會在下面)使用工廠來存儲我們的對象,並在我們工廠調用的實例的服務器類中使用Naming.rebind()

在上面的例子中,我只有實現和服務器類,工廠沒有被使用,我如何重新分解代碼,以便我可以遠程訪問對象,我會再次使用Naming.rebind()還是還有另一種實現?

這是我使用之前:您需要哪種實現java.rmi.Remote接口 接口

import java.rmi.Naming; 

/* 
* Creates the server for using RMI 
*/ 
public class PlayerServer 
{ 
    public static void main(String args[]) 
    { 
      System.out.println("Player Server Starting"); 
      try{ 
       PlayerFactory aFactory = PlayerFactory.getInstance(); 
       Naming.rebind("factory", aFactory); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 

回答

1

爲了使用RMI和你FoodItemServer必須從java.rmi.server.UnicastRemoteObject和延伸實現這個接口。

此外,您需要在RMIRegistry上註冊此課程,其中 必須另外啓動。這是一個提供JNDI 接口的特殊服務器。

客戶端可以多問rmiregistry中,以便接收使用java.naming機制RMI遠程接口的類型的實例,

+0

好吧,我明白你的意思,它類似於我們在此之前做過,在日食中不適應它,我應該沒問題,謝謝基督徒,我儘快接受你的回答 – user2757842

+0

還可以看看EJB技術,或者如果可能的話使用WebService(SOAP/Rest)。 RMI仍然是可能的,但在大多數情況下,如果可能的話,最好使用這些更復雜的技術。 – Diversity

+0

RMI註冊表提供了一個RMI接口。 JNDI提供了一個RMI接口。註冊表不提供JNDI接口。擴展UnicastRemoteObject或將對象綁定到註冊表不是必需的:在每種情況下都有其他選擇。 – EJP