2011-02-23 8 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; 
} 

私が持っている問題はgetMarketBBメソッドが別のオブジェクトから呼び出されたときのArrayListは、CloudEntryオブジェクトを保持しているので、何も返されないことです。

CloudEntryクラスの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インタフェース:

public interface CloudEntry extends Remote { 

    public void setNoAmps(int noAmps) throws RemoteException; 

    public String getCloudName() throws RemoteException; 

    public String getCloudDetails() throws RemoteException; 

} 
+0

uはあなたが何によって何を意味するか説明することができますが、あなたがCloudEntryのソースコードを持っています –

+1

が返されます。それを変更してみてください?クラスCloudEntryはSerializableを実装していますか? – Dunaril

+0

私はCloudEntryのソースを持っており、それはリモートを拡張するインタフェースを実装しています。基本的には、これらのフィールドを取得および設定するためのフィールドとメソッドがいくつかあります。私はコードをコメントとしてアップロードするのか、新しい返信としてアップロードするのかはわかりませんが、コードの残りの部分をアップロードするにはどうすればいいのでしょうか。 – ryanthescot

答えて

0

CloudEntryImplはシリアル化できません。

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

私はこれを試みます。私はCloudEntryImplをシリアライズ可能にするCloudEntryを実装することでそれを考えましたか? – ryanthescot

+0

あなたは正しいです。どうもありがとう。 – ryanthescot

0

getMarketBB()のArrayListのコピーを返すここ

はCloudEntryクラスのコードです。リストの「ライブ」ビューを返すことはできません。

代わりに、あなたがリストでやろうとしていることに合った方法を提供することをお勧めします。 IMHOこれはRMIの有無にかかわらずベストプラクティスです。

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

私は配列のエントリの完全なリストを返す必要があります。私はそれが1を得るだけではないことを見るものから?私はそれらをすべて個別に得ることができると思います... – ryanthescot

+0

あなたは完全なリストを得ることができますが、それは単なるスナップショットを取得します。ありがとう。 –

関連する問題