Spec-Zone .ru
спецификации, руководства, описания, API
След: RMI
Раздел: Компиляция и Выполнение Примера
Выполнение Примеров программы
Домашняя страница > RMI

Выполнение Примеров программы

Примечание О Безопасности

Сервер и клиентские программы, выполненные с установленным менеджером безопасности. Когда Вы выполняете любую программу, Вы должны определить файл политики безопасности так, чтобы коду предоставили права доступа, которые это должно выполнить. Вот файл политики в качестве примера, чтобы использовать с программой сервера:

grant codeBase "file:/home/ann/src/" {
    permission java.security.AllPermission;
};

Вот файл политики в качестве примера, чтобы использовать с клиентской программой:

grant codeBase "file:/home/jones/src/" {
    permission java.security.AllPermission;
};

Для обоих файлов политики в качестве примера все полномочия предоставляют классам в локальном пути class программы, потому что коду местного применения доверяют, но никакие полномочия не предоставляют кодировать загруженный с других расположений. Поэтому, вычислить сервер механизма ограничивает задачи, которые он выполняет (чьему коду, как является известным, не доверяют и мог бы быть враждебным) от выполнения любых операций, которые требуют прав доступа. Клиент в качестве примера Pi задача не требует, чтобы никакие полномочия выполнились.

В этом примере называют файл политики для программы сервера server.policy, и файл политики для клиентской программы называют client.policy.

Запуск Сервера

Прежде, чем запустить вычислить механизм, Вы должны запустить реестр RMI. Реестр RMI является простым серверным средством именования начальной загрузки, которое позволяет удаленным клиентам получить ссылку на начальный удаленный объект. Это может быть запущено с rmiregistry команда. Прежде, чем Вы выполнитесь rmiregistry, следует удостовериться, что оболочка или окно, в котором Вы будете работать rmiregistry любой имеет нет CLASSPATH у набора переменной окружения или есть a CLASSPATH переменная окружения, которая не включает путь к любым классам, которые Вы хотите загруженный на клиенты Ваших удаленных объектов.

Чтобы запустить реестр на сервере, выполнитесь rmiregistry команда. Эта команда не производит вывода и обычно выполняется в фоновом режиме. Для этого примера реестр запускается на узле mycomputer.

Microsoft Windows (использование javaw если start не доступно):

start rmiregistry

Солярис ОС или Linux:

rmiregistry &

По умолчанию реестр работает на порту 1099. Чтобы запустить реестр на различном порту, определите номер порта на командной строке. Не забывайте сбрасывать Ваш CLASSPATH переменная окружения.

Microsoft Windows:

start rmiregistry 2001

Солярис ОС или Linux:

rmiregistry 2001 &

Как только реестр запускается, можно запустить сервер. Вы должны удостовериться это оба compute.jar файл и реализация удаленного объекта class находятся в Вашем пути class. Когда Вы запускаете вычислить механизм, Вы должны определить, используя java.rmi.server.codebase свойство, где классы сервера являются доступной сетью. В этом примере серверные классы, которые будут сделаны доступный для того, чтобы загрузить, Compute и Task интерфейсы, которые доступны в compute.jar файл в public_html\classes каталог пользователя ann. Вычислить сервер механизма запускается на узле mycomputer, тот же самый узел, на котором был запущен реестр.

Microsoft Windows:

java -cp c:\home\ann\src;c:\home\ann\public_html\classes\compute.jar
     -Djava.rmi.server.codebase=file:/c:/home/ann/public_html/classes/compute.jar
     -Djava.rmi.server.hostname=mycomputer.example.com
     -Djava.security.policy=server.policy
        engine.ComputeEngine

Солярис ОС или Linux:

java -cp /home/ann/src:/home/ann/public_html/classes/compute.jar
     -Djava.rmi.server.codebase=http://mycomputer/~ann/classes/compute.jar
     -Djava.rmi.server.hostname=mycomputer.example.com
     -Djava.security.policy=server.policy
        engine.ComputeEngine

Вышеупомянутое java команда определяет следующие системные свойства:

Запуск Клиента

Как только реестр и вычислить механизм работают, можно запустить клиент, определяя следующее:

Запустите клиент на другом узле (названный узел mysecondcomputer, например) следующим образом:


Microsoft Windows:

java -cp c:\home\jones\src;c:\home\jones\public_html\classes\compute.jar
     -Djava.rmi.server.codebase=file:/c:/home/jones/public_html/classes/
     -Djava.security.policy=client.policy
        client.ComputePi mycomputer.example.com 45

Солярис ОС или Linux:

java -cp /home/jones/src:/home/jones/public_html/classes/compute.jar
     -Djava.rmi.server.codebase=http://mysecondcomputer/~jones/classes/
     -Djava.security.policy=client.policy
        client.ComputePi mycomputer.example.com 45

Отметьте, что путь class устанавливается на командной строке так, чтобы интерпретатор мог найти клиентские классы и файл JAR, содержащий интерфейсы. Также отметьте что значение java.rmi.server.codebase свойство, которое определяет иерархию каталогов, концы с запаздывающей наклонной чертой.

После того, как Вы запускаете клиент, следующий вывод выводится на экран:

3.141592653589793238462643383279502884197169399

Следующее число иллюстрирует где rmiregistry, ComputeEngine сервер, и ComputePi клиент получает классы во время выполнения программы.

реестр, вычислить механизм, и клиент, получающий классы во время выполнения программы

Когда ComputeEngine сервер связывает свою ссылку удаленного объекта в реестре, реестр загружает Compute и Task интерфейсы, от которых зависит тупиковый class. Эти классы загружаются от любого ComputeEngine веб-сервер сервера или файловая система, в зависимости от типа кодовой базы URL, используемый, запуская сервер.

Поскольку ComputePi у клиента есть оба Compute и Task интерфейсы, доступные в его пути class, это загружает их определения из своего пути class, не из кодовой базы сервера.

Наконец, Pi class загружается в ComputeEngine виртуальная машина Java сервера, когда Pi объект передают в executeTask отдалите звонок ComputeEngine объект. Pi class загружается сервером или из веб-сервера клиента или из файловой системы, в зависимости от типа кодовой базы URL, используемый, запуская клиент.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Компиляция Примеров программы
Следующая страница: Конец Следа