проблемы с регистрацией - PullRequest
       67

проблемы с регистрацией

2 голосов
/ 26 апреля 2011

Уважаемые пользователи переполнения стека.

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

Я строю многопользовательскую игру для школьного проекта. Требуется использовать Java RMI, поэтому я создал 3 хороших jar-файла. Сервер, содержащий (только) основной класс, который публикует эту вещь на удаленном сервере и загружает некоторые вещи, такие как карта и т. Д. Клиент, содержащий некий свинг-мусор, отображающий несколько приятных форм. И, в-третьих, библиотека, которая содержит весь код pacman.

Теперь, когда я запускаю сервер локально, он запускает rmiregistry и привязывает к нему игру (конечно, после настройки). Затем я подключаю к нему мой клиент и могу играть красиво. Все работает, и я могу запустить клиент представления, подключившийся к моей локальной rmiregistery, и получить объект игры красиво. после этого я загрузил реестр независимо от сервера и снова запустил программу успешно. Даже через IP моего ноутбука (не 127.0.0.1) он работал нормально. Обратите внимание, что я не установил classpath реестра.

Итак, после этого я переместил материал на сервер (2008). Я запустил rmiregistry там без пути к классам и попытался подключить к нему свой server.jar, но потерпел неудачу. (не удалось найти исключение класса ..spel), поэтому я исправил путь к классу .... безрезультатно .... поэтому я открыл новую консоль, запустил новый реестр, скопировал pacman.jar в c: \ и запустил сервер .jar с параметром -Djava.rmi.server.codebase = c: \ parameterther .... безрезультатно ... затем я установил диспетчер безопасности ... (System.setSecurityManager(new RMISecurityManager());) и создал политику, содержащую: grant {permission java.security.AllPermission;}; и выполнил сервер, используя server.jar -Djava.rmi.server.codebase = c: -Djava.security.policy = server.policy ... снова без эффекта.

Я получаю одно и то же исключение:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
        java.lang.ClassNotFoundException: Tervoort.Bram.Packman.Spel
        at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
        at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
        at sun.rmi.transport.Transport$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)

Кто-нибудь знает, в чем проблема? и как это исправить?

1 Ответ

0 голосов
/ 26 апреля 2011

Это также может помочь.Посмотрите на A.2.Кажется, по какой-то причине.Класс / классы не могут быть найдены по предоставленной ссылке.Убедитесь, что URL сформирован правильно и все необходимые классы находятся в пути к классам.

"Когда удаленный объект маршалируется RMI (в качестве аргумента удаленного вызова или в качестве возвращаемого значения), база кодакласс заглушки извлекается RMI и используется для аннотирования сериализованной заглушки. Когда заглушка распакована, кодовая база используется для загрузки файла заглушки с использованием RMIClassLoader, если только класс уже не может быть найден в CLASSPATH или в загрузчике классов контекстадля принимающего объекта, такого как кодовая база апплета.

Если класс _Stub был загружен RMIClassLoader, то RMI уже знает, какую кодовую базу использовать для своей аннотации. Если класс _Stub был загружен из CLASSPATH, тоочевидной кодовой базы нет, и RMI обращается к системному свойству java.rmi.server.codebase, чтобы найти кодовую базу. Если системное свойство не установлено, то заглушка маршалируется с нулевой кодовой базой, что означает, что ее нельзя использовать, если толькоу клиента есть подходящая копияфайла класса _Stub в CLASSPATH клиента. "

...