Ява.РМО.UnmarshalException: ошибка unmarshalling аргументы; вложенное исключение: java.ленг.ClassNotFoundException: ServicesTableau
мне нужна ваша помощь вокруг JAVA RMI, я разработал образец программы, используемой для сортировки таблицы. но я получил это исключение:
Erreur RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: ServicesTableau
и это мой исходный код сервера :
public class Serveur {
public static void main(String args[]) {
try {
System.out.println("Server start ...");
ServicesTableauImpl od = new ServicesTableauImpl();
String url = "rmi://" + args[0] + "/ServicesTableauImpl";
System.out.println("Passe");
Naming.rebind(url, od);
System.out.println("Attente d'invocations de client / CTRL-C pour stopper");
} catch (Exception e) {
System.out.println("Erreur " + e.getMessage());
}
/*
catch(java.net.MalformatedURLException e){
System.out.println("Mauvais nom de serveur");
System.exit(1);
}
catch(RemoteException e){
System.out.println("Pas de Rmiregistry");
System.exit(1);
}
*/
}
}
3 ответов
этот класс недоступен в пути к классам реестра RMI. Самый простой способ исправить это-запустить реестр в той же JVM, через LocateRegistry.createRegistry().
сохраните результат в статическом поле.
в некоторых случаях вам нужно переместить код клиентов rmi (интерфейс и main) в пакет по умолчанию. Повторите его на стороне сервера. Это может решить вашу проблему (работа с упаковкой в rmi не так очевидна).
эта ошибка из-за не написания кода security manager, из-за которого класс не может быть загружен.
Поэтому убедитесь, что вы добавили код для security manager.
Если компилятор не находит Security manager, создайте новый.Добавьте код в метод main.
if (System.getSecurityManager() == null) then
System.setSecurityManager(new RMISecurityManager())