Я делаю первые шаги с 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?