2011-02-23 66 views
3

我有一個項目,我正在使用Java RMI使對象可以遠程訪問其他對象。我需要做下面的類遠程​​:如何使arraylist可遠程訪問

public interface MarketBB extends Remote 
{ 
    public ArrayList<CloudEntry> getMarketBB() throws RemoteException; 
    public void moveAMP(int fromCloud, int toCloud) throws RemoteException; 
} 

,我有是,由於ArrayList中持有CloudEntry對象,當getMarketBB方法是從另一個對象調用,不會返回任何問題。

有沒有辦法使CloudEntry類的ArrayList可以遠程訪問?

下面是CloudEntry類的代碼:)

public interface CloudEntry extends Remote { 

    public void setNoAmps(int noAmps) throws RemoteException; 

    public String getCloudName() throws RemoteException; 

    public String getCloudDetails() throws RemoteException; 

} 
+0

u能解釋一下你的意思是什麼都不返回 –

+1

你有CloudEntry的源代碼? CloudEntry類是否實現了Serializable? – Dunaril

+0

我有CloudEntry的來源,它實現了一個擴展遠程的接口。它基本上只有幾個字段和方法來獲取和設置這些字段。我不確定是要上傳代碼作爲評論還是新的回覆,但我認爲它會讓我很願意上傳代碼 – ryanthescot

回答

0

您的CloudEntryImpl不可序列化。嘗試將其更改爲:

public class CloudEntryImpl extends UnicastRemoteObject implements CloudEntry { 
    //... 
} 
+0

謝謝。我會試試這個。我認爲通過實現可以使CloudEntryImpl可序列化的CloudEntry? – ryanthescot

+0

你是對的。非常感謝。 – ryanthescot

0

getMarketBB(返回ArrayList中的副本:

public class CloudEntryImpl implements CloudEntry { 

    int cloudId; 
    String cloudName; 
    double speedGHz; 
    double costPerGhzH; 
    double commsCost; 
    double commsTime; 
    int noAMPs; 

    //constructor, get and set methods for fields 

} 

而且CloudEntry接口。您不能讓它返回列表的「實時」視圖。

相反,我會建議你提供的方法與你正在試圖做的列表匹配。恕我直言,這是帶或不帶RMI的最佳做法。

public void addCloudEntry(CloudEntry ce); 
public CloudEntry getCloudEntry(int i); 
+0

我需要返回數組中的條目的完整列表。從我看到的那裏不僅會得到1?我想我可以單獨得到他們... – ryanthescot

+0

你可以得到一個完整的列表,但它只會得到一個快照。 –