Как сделать массив удаленно доступным - PullRequest
3 голосов
/ 23 февраля 2011

У меня есть проект, в котором я использую Java RMI, чтобы сделать объекты удаленно доступными для других объектов. Мне нужно сделать следующий класс удаленным:

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

Проблема, с которой я столкнулся, заключается в том, что, поскольку ArrayList содержит объекты CloudEntry, при вызове метода getMarketBB из другого объекта ничего не возвращается.

Есть ли способ сделать классы ArrayList из CloudEntry удаленно доступными?

Вот код для класса CloudEntry:

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;

}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2011

Ваш CloudEntryImpl не сериализуем. Попробуйте изменить его на:

public class CloudEntryImpl extends UnicastRemoteObject implements CloudEntry {
    //...
}
0 голосов
/ 23 февраля 2011

getMarketBB () возвращает копию ArrayList.Вы не можете заставить его возвращать «живое» представление списка.

Вместо этого я бы предложил вам предоставить методы, которые соответствуют тому, что вы пытаетесь сделать со списком.ИМХО Это лучшая практика с или без RMI.

public void addCloudEntry(CloudEntry ce);
public CloudEntry getCloudEntry(int i);
...