Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
rmi.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
200.7 Кб
Скачать

Компиляция программ примера

В реальном сценарии, когда сервис, подобный вычислителю, устанавливается, установщик будет скорее всего создавать JAR-файл, содержащий интерфейсы Compute и Task для классов сервера и клиентскую программу. Далее установщик, возможно, тот же самый создатель JAR-файла, напишет реализацию интерфейса Compute и установит этот сервис на машине, доступной для клиентов. Разработчики клиентских программ смогут использовать интерфейсы Compute и Task, содержащиеся в JAR-файле, и независимо разрабатывать задачи и клиентские программы, которые используют сервис Compute.

В этом разделе вы изучите, как установить JAR-файл, серверные классы и клиентские классы. Вы увидите, что клиентский класс Pi будет "скачан" на сервер во время выполнения. Также и удаленная заглушка для ComputeEngine будет "скачана" во время выполнения с сервера на клиент.

Пример разделяет интерфейсы, реализацию удаленного объекта и клиентский код в три пакета:

  • compute (интерфейсы Compute и Task)

  • engine (класс реализации и заглушка ComputeEngine)

  • client (клиентский код ComputePi и реализация задачи Pi)

Давайте сначала соберем JAR-файл интерфейсов, чтобы обеспечить разработчиков сервера и клиентов.

Сборка jar-файла интерфейсных классов

Прежде всего вам необходимо компилировать исходные файлы интерфейсов в пакет compute, а затем собрать JAR-файл. который содержит их файлы классов. Предположим, пользователь user, должен написать эти конкретные интерфейсы и поместить исходные файлы в каталог c:\home\user\src\compute (на UNIX:/home/user/src/compute). При данном маршруте вы можете использовать следующие команды для компиляции интерфейсов и создания JAR-файла.

Microsoft Windows:

cd c:\home\user\src

javac compute\Compute.java

javac compute\Task.java

jar cvf compute.jar compute\*.class

UNIX:

cd /home/user/src

javac compute/Compute.java

javac compute/Task.java

jar cvf compute.jar compute/*.class

Команда jar выведет следующее (при наличии опции -v):

added manifest

adding: compute/Compute.class (in=281) (out=196)

(deflated 30%)

adding: compute/Task.class (in=200) (out=164)

(deflated 18%)

Теперь вы можете передавать файл compute.jar разработчикам сервера и клиентских приложений, так что они могут использовать эти интерфейсы.

Когда вы собираете либо серверные, либо клиентские классы при помощи компиляторов javac и rmic, вам обычно необходимо указать, где должны располагаться результирующие файлы классов, чтобы они были доступными в сети. В нашем примере их расположение: для UNIX - /home/user/public_html/classes, поскольку некоторые Web-серверы разрешают доступ к пользовательскому каталогу public_html через HTTP с URL, сконструированным как: http://host/~user/. Если ваш Web-сервер не поддерживает это соглашение, вы можете использовать файловый URL. Файловые URL имеют форму: file:/home/user/public_html/classes/ в UNIX или, на платформе Microsoft Windows, file:/c:/home/user/public_html/classes/. Вы можете выбрать и другой тип URL, как вам будет удобнее.

Доступность файлов классов через сеть позволяет среде выполнения RMI "скачивать" коды при необходимости. Вместо того, чтобы определять собственный протокол для "скачивания", RMI использует для этого протоколы URL, поддерживаемые платформой Java (например, HTTP). Заметьте, что полновесный Web-сервер не нуждается в выполнении этого скачивания файлов классов. Фактически, простой HTTP-сервер может обеспечить всю функциональность, необходимую для "скачивания" в RMI через HTTP, такой сервер есть по адресу: ftp://ftp.javasoft.com/pub/jdk1.1/rmi/class-server.zip.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]