Нужны ли мне все классы на клиенте, сервере и реестре для работы RMI?

Я делаю первые шаги с RMI, и у меня есть простой вопрос.

У меня есть файл .jar, в котором реализовано несколько методы из библиотеки. Я хочу вызвать эти методы в файле .jar с помощью RMI.

Я пытаюсь создать для этого своего рода оболочку .

Итак, я работаю над примерно так:

Класс интерфейса : этот интерфейс имеет методы, которые должны быть реализованы удаленным объектом.

Класс реализации : Этот класс имеет реализацию методов интерфейса, каждая реализация вызывает соответствующий метод в файле .jar. Например, в файле jar есть метод getDetails (), который возвращает объект ResponseDetail. ResponseDetail - это класс ответа, который у меня есть в .jar.

класс сервера : он связывает методы с классом клиента rmiregistry

: он будет использовать методы, реализованные в реализации ].

Пока все хорошо? :)

Теперь у меня есть папка lib, в которой находится файл .jar.

На сервере я развернул классы интерфейса, реализации и сервера. Я создал заглушку и успешно запустил rmiregistry, но со следующими деталями:

Чтобы запустить rmiregistry, мне пришлось установить путь к классам в командной строке для ссылки на файлы .jar, иначе я получу java .lang.NoClassDefFoundError. Я сделал это с помощью этого файла .sh:

THE_CLASSPATH=
for i in `ls ./lib/*.jar`
do
    THE_CLASSPATH=${THE_CLASSPATH}:${i}
done

rmiregistry -J-classpath -J".:${THE_CLASSPATH}" 

Чтобы запустить сервер, мне пришлось также установить путь к классам для ссылки на файлы .jar, иначе я получаю ошибку java.lang.NoClassDefFoundError. Я использовал что-то вроде этого:

THE_CLASSPATH=
for i in `ls ./lib/*.jar` do
  THE_CLASSPATH=${THE_CLASSPATH}:${i}
done

java -classpath ".:${THE_CLASSPATH}" Server

Клиентская машина: Чтобы запустить файл Client.class с клиентского компьютера, мне пришлось скопировать в него файлы .jar и сделать ссылку на них в пути к классам, потому что в противном случае он не запускается, и я получаю java.lang.NoClassDefFoundError. Мне пришлось использовать это на клиентской машине:

THE_CLASSPATH=
for i in `ls ./lib/*.jar`
do
   THE_CLASSPATH=${THE_CLASSPATH}:${i}
done

java -classpath ".:${THE_CLASSPATH}" HelloClient

Это нормально? Я имею в виду, нужно ли мне копировать файлы .jar на клиентский компьютер для выполнения методов через RMI?

7
задан Paŭlo Ebermann 16 August 2011 в 21:31
поделиться