Проблемы с загрузкой класса Stub с сервера на клиент — Java RMI

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

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

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

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

Спасибо!! Майкл


person Micheal    schedule 09.07.2011    source источник


Ответы (3)


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

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

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

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

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

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

person Moe Matar    schedule 09.07.2011

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

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

person Kal    schedule 09.07.2011

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

person user207421    schedule 09.07.2011