Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java1_2013_2014 / java23.pptx
Скачиваний:
136
Добавлен:
16.04.2015
Размер:
156.94 Кб
Скачать

Менеджер безопасности

ComputeServer использует менеджер безопасности, поставляемый как часть системы RMI,-

RMISecurityManager.

Менеджер безопасности защищает системные ресурсы от выполнения на виртуальной машине непроверенных "скачанных" кодов.

Менеджер безопасности определяет, имеют ли "скачанные" коды доступ к локальной файловой системе и могут ли они выполнять другие привилегированные операции.

RMISecurityManager реализует политику безопасности (sandbox), похожую на типовую политику для апплетов, то есть он консервативен в разрешении доступа.

(С)Сафонов В.О. 2013

Передача объектов в RMI

Любая сущность любого типа может быть передана в

удаленный метод или из него, если эта сущность является экземпляром типа, который является примитивным типом, удаленным объектом или

сериализуемым объектом (он должен реализовать интерфейс java.io.Serializable)

Удаленные объекты, в сущности, передаются по

ссылкам. Ссылка на удаленный объект - это заглушка,

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

Локальные объекты передаются копией, с использованием сериализации объектов. По умолчанию копируются все поля, кроме тех, которые отмечены static

или transient.

(С)Сафонов В.О. 2013

Клиентская часть

Клиент должен не только вызвать сервер, но и определить задачу Task для вычислителя (то есть реализовать интерфейс Task)

Рассматриваемая задача состоит в том, что клиент делает запрос, передавая два числа, а сервер возвращает их сумму

public class Sum implements Task { private double m_a1;

private double m_a2;

(С) Сафонов В.О. 2013

Клиентская часть

public Sum( double p_a1, double p_a2) { m_a1 = p_a1;

m_a2 = p_a2;

}

public Object execute() {

return (Double)(m_a1 + m_a2);

}

}

Следующий шаг – создание самого клиента. Самое важное в этом коде - это поиск и получение удаленного интерфейса с сервера.

(С) Сафонов В.О. 2013

ComputeClient.java

import java.rmi.*;

public class ComputeSum {

public static void main( String[] args) { try {

String serverURL=“rmi://” + args[0] +

“/ComputeService”;

Compute comp =

(Compute)Naming.lookup(ServerURL);

(С) Сафонов В.О. 2013

ComputeService

double d1 = Double.valueOf(args[1]).doubleValue(); double d2 = Double.valueOf(args[2]).doubleValue(); Sum sum = new Sum( args[1], args[2] );

System.out.println(comp.executeTask(sum)); } catch (Exception e) {

System.err.println("ComputeSum exception: " + e.getMessage());

e.printStackTrace();

}

}

}

(С) Сафонов В.О. 2013

ComputeClient

ComputeClient принимает 3 параметра командной строки: IP-адрес или имя машины сервера и два числа, которые нужно сложить.

Далее формируется URL-адрес, который начинается с “rmi://”. Этот адрес содержит адрес машины сервера

иимя удаленного объекта.

Клиент использует метод Naming.lookup() для поиска удаленного объекта по имени в реестре сервера(имя удаленного объекта было связано с ним командой rebind() ).

lookup() возвращает ссылку на удаленный объект (на самом деле это ссылка на заглушку, которая “скачивается” на машину клиента).

(С)Сафонов В.О. 2013

 

 

 

 

 

 

 

p

 

 

 

 

 

 

u

 

 

 

 

 

k

 

 

 

 

 

o

 

 

 

 

 

o

 

 

 

 

 

l

 

 

 

 

 

.

 

 

 

 

 

g

 

 

 

 

 

 

n

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

m

 

 

 

 

 

 

a

 

 

 

 

 

 

N

 

 

 

 

 

 

 

ComputeClient

c o m p . e x e c u t e T a s k

rmiregistry

Naming.rebind

ComputeServer

(С) Сафонов В.О. 2013

Заглушки

Удаленно реализованные объекты, такие как экземпляры ComputeImpl, никогда не покидают виртуальную машину, в которой они созданы, так что, когда клиент выполняет поиск в реестре удаленных объектов сервера, возвращается ссылка на заглушку

Объекты-заглушки принимают удаленные вызовы метода и передают эти вызовы RMI, который выполняет сетевые соединения, позволяющие клиентам взаимодействовать с удаленным объектом

(С)Сафонов В.О. 2013

Скелетные схемы

Скелетные схемы в Java 2 и выше не используются. Однако они требуются для RMI модели Java 1.1. Поэтому скелеты требуются для совместимости между Java 1.1 и Java 2.

Скелет – это объект Java, который постоянно находится на машине сервера. Он работает с другими частями RMI системы Java 1.1, чтобы принимать запросы, выполнять десериализацию и вызывать соответствующий код на сервере.

Замечание: Для кода Java 2 не требуется не только скелетный механизм, но и совместимость с Java 1.1.

(С)Сафонов В.О. 2013

Соседние файлы в папке java1_2013_2014