Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java / лекции / лекция 12.ppt
Скачиваний:
102
Добавлен:
17.04.2018
Размер:
162.82 Кб
Скачать

Определение удаленных объектов

public ProductImpl(String d) throws RemoteException

{

descr = d;

}

public String getDescription() throws RemoteException

{

return "I am a " + secr + ". Buy me!";

}

}

Диаграмма наследования классов

Object

Remote

RemoteObject

RemoteStub

 

RemoteServer

 

 

 

UnicastRemoteObject

Соглашения именования RMI

Без суффикса (напр. Product)

Суффикс Impl (ProductImpl)

Суффикс Server

Суффикс Client

Суффикс Stub

Суффикс Skel

Удаленный интерфейс

Класс-сервер, реализующий этот интерфейс

Программа-сервер, создающая объекты- серверы

Программа-клиент, вызывающая удаленные методы

Класс-заглушка (до JDK 5.0)

Класс-структура (до JDK 5.0)

Поиск объекта-сервера

Для организации доступа к объекту серверу, надо получить ссылку локальный на объект- заглушку.

Сервер:

ProducImpl p1 = new ProductImpl("Toaster"); Context namingContext = new InitialContext(); namingContext.bind("rmi:toaster", p1);

Клиент:

Product p = (Product) namingContext.lookup("rmi://yourserber.com/ toaster");

Программа-сервер

public class ProductServer

{

public static void main(String args[])

{

try

{

ProductImpl p1 = new ProductImpl("Toaster");

ProductImpl p2 = new

ProductImpl("Microware Oven");

Программа-сервер (продолжение)

Context namingContext = new

InitialContext();

namingContext.bind("rmi:toaster",p1);

namingContext.bind("rmi:microwave",

p2);

} catch (Exception e) { e.printStackTrace();

}

}

}

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

Для запуска программы сервер необходимо предварительно запустить программу rmiregistry

Программа-сервер не завершает работу по окончанию регистрации объектов

Запуск программы клиента

Перед запуском программы-клиента необходимо проверить правильность регистрации удаленных объектов.

try {

Context namingContext = new InitialContext(); NamingEnumeration<NameClassPair> e =

namingContext.list("rmi:"); while (e.hasMore()) {

System.out.println(e.next().getName());

}

} catch (Exception e) { e.printStackTrace();

Программный код на стороне клиента

Если классы-заглушки не устанолвнеы локально на стороне клиента, необходимо установить диспетчера защиты:

System.setSecurityManager(new

RMISecurityManager());

Пример программы клиента:

public class ProductClient {

public static void main(String[] args)

{

System.setProperty("java.security.policy",

client.policy");

Программный код на стороне клиента (продолжение)

System.setSecurityManager(

new RMISecurityManager()); String url = "rmi://localhost/"; try {

Context namingContext = new InitialContext();

Product c1 = (Product) namingContext

.lookup(url + "toaster");

Product c2 = (Product) namingContext

.lookup(url + "microwave"); System.out.println(c1.getDescription()); System.out.println(c2.getDescription());

} catch (Exception e) {

e.printStackTrace();

}

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