RMI нет такого объекта в таблице, ошибка связи с сервером - PullRequest
0 голосов
/ 17 апреля 2010

Моя цель - создать программу распределенных вычислений, которая запускает сервер и клиент одновременно.Мне нужно, чтобы его можно было установить на пару машин, и чтобы все машины связывались друг с другом, т.е. главный узел и 5 подчиненных узлов - все из одного приложения.

Моя проблема заключается в том, что я не могу правильно использовать unicastRef, Я думаю, что это проблема с запуском всего на том же порту, есть ли лучший способ, который я пропускаю?

это часть моего кода (часть, которая имеет значение)

try {

        RMIServer obj = new RMIServer();
        obj.start(5225);

    } catch (Exception e) {
       e.printStackTrace();

    }


      try {
            System.out.println("We are slave's ");
            Registry rr = LocateRegistry.getRegistry("127.0.0.1", Store.PORT, new RClient());

            Call ss = (Call) rr.lookup("FILLER");

            System.out.println(ss.getHello());

        } catch (Exception e) {
            e.printStackTrace();
        }
}

это мой основной класс (вверху)

это класс сервера (ниже)

public RMIServer () {}

    public void start(int port) throws Exception {

        try {

            Registry registry = LocateRegistry.createRegistry(port, new RClient(), new RServer());

            Call stuff = new Call();

            registry.bind("FILLER", stuff);

            System.out.println("Server ready");
        } catch (Exception e) {
            System.err.println("Server exception: " + e.toString());
            e.printStackTrace();
        }
    }

Я не знаю, что мне не хватает или что я пропускаю, но вывод выглядит следующим образом.

Прослушивание 5225 Прослушивание на 8776 Готово к серверу Мы являемся ведомым устройством Прослушивание на 8776 java.rmi.NoSuchObjectException: такого объекта нет в таблице на сайте sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer (StreamRemoteCall.java:255) на sun.rmi.transport.StreamRemoteCall.executeCall (StreamRemoteCall.java:rmiser.java:rmiser.java:rmiser.java:2miser.java:rmiser.java:rmiser.java:2miser.java:rmiser.java:2miser.java:2miser.java:2miser.java:rmiser.java:rmiser.java:2miser.java:2miser.java:2miser.java:233ser.jpgicastRef.invoke (UnicastRef.java:359) в sun.rmi.registry.RegistryImpl_Stub.lookup (неизвестный источник) в Main.main (Main.java:62)

, строка 62 - это ::: Call ss= (Call) rr.lookup ("FILLER");

1 Ответ

1 голос
/ 17 апреля 2010

Возможно, это потому, что ваша ссылка на заглушку в вашем классе сервера является локальной по отношению к блоку try, и ссылка сразу же собирается после мусора. Попробуйте вместо этого сделать stuff переменную класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...