2013-06-02 3 views
3

Я работаю над твиттером вроде, используя rmi. Я работаю, на Windows и все работает нормально.java.rmi.server.codebase не работает на linux

Но на Linux у меня есть:

java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.lang.ClassNotFoundException: server.SimpleBark 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:196) 
    ... 

Это исключение выскакивает на стороне клиента, и, кажется, что клиент не использует сервер кодовой базы, сервер кодовый не получает никакой связи.

Я повторяю, что все хорошо работает в Windows, я не могу найти, откуда это взялось.

+0

Это может быть проблема с именем хоста или другой связанной проблемой, если код работает в Windows? Вы пытались указать следующее: -Djava.rmi.server.hostname = ipAddressHere? – rimero

+0

Я работаю только на одном компьютере, все работает нормально на Linux, кроме сервера кодовой базы, и да, я попробовал -Djava.rmi.server.hostname ничего не изменил – Giacogiac

ответ

4

From the JDK 7 guides

С JDK 7 Update 21, свойство RMI java.rmi.server.useCodebaseOnly устанавливается истина по умолчанию.

From the JDK 7 guides, that hasn't been updated

java.rmi.server.useCodebaseOnly

Если это значение истинно, автоматическая загрузка классов запрещена , кроме как от местного CLASSPATH и от java.rmi .server.codebase , установленный на этой виртуальной машине. Использование этого свойства запрещает клиентам виртуальные машины от динамически загружать байт-коды из других кодовых баз. Это свойство игнорируется в реализациях 1.2 и 1.2.1 из-за ошибки.

Так что, похоже, что версия Java на вашей машине Windows устарела. После обновления лучший способ исправить это - включить необходимые классы на стороне клиента, а не динамически загружать классы по сети.

+0

Спасибо, -Djava.rmi.server.useCodebaseOnly = ложный сделал трюк. Но это проект для школы, и мне нужно динамически загружать классы. У меня есть способ сделать это безопасно? – Giacogiac

0

Просто удалите классы из путей клиента и пути к реестру.