Spec-Zone .ru
спецификации, руководства, описания, API
|
Сервер и клиентские программы, выполненные с установленным менеджером безопасности. Когда Вы выполняете любую программу, Вы должны определить файл политики безопасности так, чтобы коду предоставили права доступа, которые это должно выполнить. Вот файл политики в качестве примера, чтобы использовать с программой сервера:
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
команда определяет следующие системные свойства:
java.rmi.server.codebase
свойство определяет расположение, кодовая база URL, с которого могут быть загружены определения для классов, происходящих из этого сервера. Если кодовая база определяет иерархию каталогов (в противоположность файлу JAR), следует включать запаздывающую наклонную черту в конце кодовой базы URL.java.rmi.server.hostname
свойство определяет имя хоста или адрес, чтобы вставить тупики для удаленных объектов, экспортируемых в этой виртуальной машине Java. Это значение является именем хоста или адресом, используемым клиентами, когда они пытаются передать удаленные вызовы метода. По умолчанию реализация RMI использует IP-адрес сервера как обозначено java.net.InetAddress.getLocalHost
API. Однако, иногда, этот адрес не является подходящим для всех клиентов, и полностью определенное имя хоста было бы более эффективным. Гарантировать, что RMI использует имя хоста (или IP-адрес) для сервера, который является routable от всех потенциальных клиентов, набор java.rmi.server.hostname
свойство.java.security.policy
свойство используется, чтобы определить файл политики, который содержит полномочия, которые Вы намереваетесь предоставить.Как только реестр и вычислить механизм работают, можно запустить клиент, определяя следующее:
Pi
class) при использовании java.rmi.server.codebase
свойствоjava.security.policy
свойство, которое используется, чтобы определить файл политики безопасности, который содержит полномочия, которые Вы намереваетесь предоставить различным частям кодаCompute
удаленный объект) и число десятичных разрядов, чтобы использовать в вычисленииЗапустите клиент на другом узле (названный узел 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, используемый, запуская клиент.