Лабораторная работа: Удаленный вызов методом RMI
Использование RMI
Сейчас наступило время создать рабочую RMI‑систему и получить практический опыт. Вы создадите простую удаленную службу, реализующую калькулятор, и попробуете использовать ее из клиентской программы.
Рабочая RMI‑система состоит из нескольких частей.
• Определение интерфейсов для удаленных служб
• Реализация удаленных служб
• Файлы заглушки и скелета
• Сервер, предоставляющий удаленные службы
• Служба имен RMI, дающая возможность клиентам найти удаленные службы
• Поставщик файла классов (HTTP или FTP‑сервер)
• Клиентская программа, которая нуждается в удаленных службах
Для упрощения задачи вы будете использовать один и тот же каталог для кода как клиента, так и сервера. При запуске клиента и сервера из одного и того же каталога вам не придется настраивать HTTP или FTP серверы для доступа к файлам классов. (Использование серверов HTTP и FTP в качестве поставщиков файлов классов детально рассматривается в разделе «Распространение и установка программного обеспечения RMI »)
Если предположить, что RMI‑система уже спроектирована, для ее создания необходимо выполнить следующие шаги:
1. Написать и откомпилировать Java‑код для интерфейсов
2. Написать и откомпилировать Java‑код для классов реализации
3. Создать файлы классов заглушки и скелета из классов реализации
4. Написать Java‑код программы хоста для удаленного обслуживания
5. Разработать Java‑код для клиентской программы RMI
6. Установить и запустить RMI‑систему
1. Интерфейсы
Первым шагом является написание и компилирование Java‑кода для интерфейсов служб.
Когда вы создаете удаленный интерфейс, вы должны следовать следующим правилам:
1. Удаленный интерфейс должен быть публичным – public (он не может иметь «доступ на уровне пакета», так же он не может быть «дружественным»). В противном случае клиенты будут получать ошибку при попытке загрузки объекта, реализующего удаленный интерфейс.
2. Удаленный интерфейс должен расширять интерфейс java.rmi. Remote .
3. Каждый метод удаленного интерфейса должен объявлять java.rmi. RemoteException в своем предложении throws в добавок к любым исключениям, специфичным для приложения.
4. Удаленный объект, передаваемый как аргумент или возвращаемое значение (либо напрямую, либо как к части локального объекта), должен быть объявлен как удаленный интерфейс, а не реализация класса.
Интерфейс Calculator определяет все удаленные возможности, предлагаемые службой:
public interface Calculator
extends java.rmi. Remote {public long add (long a, long b)
throws j ava.rmi. RemoteException;