Javac не создает заглушки для RMI - PullRequest
3 голосов
/ 20 января 2011

Я ищу RMI для университетского проекта, и у меня возникла небольшая проблема.Из того, что я прочитал, java версии 5 и выше должен автоматически генерировать необходимые файлы-заглушки (как я понимаю, ранее требовался дополнительный шаг).

Однако, следуя этому уроку здесь http://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html и скомпилировав мои классы с помощью Javac, я получил только стандартные файлы классов, никаких признаков моих заглушек.

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

NB, запуск java -version дает мне это:

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Я полагаю, вы использовали что-то вроде

RemoteInterface stub =
(RemoteInterface) UnicastRemoteObject.exportObject(server);

на вашем сервере, вместо

RemoteInterface stub =
(RemoteInterface) UnicastRemoteObject.exportObject(server, 0);

Обратите внимание на два аргумента exportObject() - вторая версия возвращает другой тип. Это действительно имеет значение для меня.

1 голос
/ 21 января 2011
Заглушки

не нужны или генерируются при> = 5.0 jvms.Возможно, что некоторые пути неверны, в руководстве не совсем ясно, как настроить каталоги / пути и откуда вы запускаете материал.

Для меня сработало следующее:

~/tmp$ mkdir -p hello/example
~/tmp$ vim hello/example/Hello.java [copy/paste the code of Hello.java here]
~/tmp$ vim hello/example/Server.java [copy/paste the code of Server.java here]
~/tmp$ vim hello/example/Client.java [copy/paste the code of Client.java here]
~/tmp$ mkdir build
~/tmp$ javac -d build/   hello/example/*.java
~/tmp$ rmiregistry &
~/tmp$ java -classpath build -Djava.rmi.server.codebase=file:build/ example.hello.Server &
Server ready
~/tmp$ java  -classpath build  example.hello.Client
response: Hello, world!

Важной частью здесь является то, в каком каталоге вы находитесь при сборке и запуске, а также при передаче соответствующих каталогов в classpath и -Djava.rmi.server.codebase.

...