Проблемы при загрузке класса Stub с сервера на клиент - Java RMI - PullRequest
0 голосов
/ 09 июля 2011

У меня проблемы с запуском приложения HelloWorld Java RMI. У меня есть сервер, удаленный класс и удаленный интерфейс на одном компьютере, а клиент и удаленный интерфейс на другом. Сервер и реестр работают нормально. Когда я пытаюсь запустить клиент, я получаю эту ошибку:

Клиент1 исключение: java.rmi.UnmarshalException: ошибка необратимого возврата; Вложенное исключение: java.lang.ClassNotFoundException: Remote_Stub (без менеджера безопасности: загрузчик классов RMI отключен)

Я заметил, что если у меня есть файл Remote_Stub.class в том же каталоге, что и клиент, все работает нормально. Поэтому я решил, что моя проблема заключается в загрузке заглушки с сервера на клиент.

Я не совсем уверен, почему это дает мне эту ошибку или нет, но после проведения некоторых исследований я думаю, что это как-то связано с безопасностью, поскольку у меня нет разрешения загружать файл с одного компьютера на другой (потому там написано "нет менеджера безопасности") Если это так, кто-нибудь знает, как я мог решить эту проблему? Или как я мог установить разрешение?

Спасибо !! Мичил

Ответы [ 3 ]

0 голосов
/ 09 июля 2011

http://download.oracle.com/javase/tutorial/rmi/client.html

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

0 голосов
/ 09 июля 2011

Вам вообще не нужны заглушки из JDK 1.5. См. Класс Javadoc для UnicastRemoteObject.

0 голосов
/ 09 июля 2011

Вашему серверу необходимо установить политику безопасности.Вам необходимо свойство JVM, например:

-Djava.security.policy=/path/to/myserver.policy

Где myserver.policy - это файл с политиками безопасности вашего сервера, например:

grant {  
    permission java.security.AllPermission "", "";  
};

.лично я большой поклонник RMI, потому что в прошлом он давал мне отличные сведения о способах управления версиями классов между сервером и клиентами, а также о том, что это специфично для Java, поэтому ваши клиенты ограничиваются написанием на Java.Если у вас есть возможность выбрать другую технологию клиент-сервер, вам следует взглянуть на сервисы SOAP (AXIS2 неплох) и REST (Restlet выглядит довольно многообещающе).Этот пост может помочь вам с плюсами и минусами:

http://michaeldehaan.net/2008/07/17/xmlrpc-vs-rest-vs-soap-vs-all-your-rpc-options/

...