- •Распределенные системы обработки информации. Недашковский Вячеслав Михайлович
- •Лекция 3.09.04 Литература
- •1.Язык программирования Java
- •1.1.История и предпосылки
- •1.3.Архитектура Java
- •1.3.4Класс Object
- •1.3.5Класс Class
- •1.3.1Именованные константы
- •1.3.2Классы и объекты
- •1.3.3Комментарии
- •Лекция 21.09.04
- •Синхронизация
- •Взаимодействие потоков
- •1.5.Библиотека Swing
- •1.5.2Панели
- •1.5.3Обработка событий
- •2.1.1Требования к системе
- •2.1.2Прозрачность системы
- •2.2.Общие сведения о промежуточном слое
- •2.3.Типы промежуточного слоя
- •2.4.Удаленный вызов процедур
- •Лекция 2.11.04
- •2.5.Передача параметров
- •2.6.Передача параметров по ссылке.
- •2.7.Расширение модели rpc. Асинхронный вызов.
- •3.Общие сведения об объектно-ориентированном промежуточном слое. Обращение к удаленным объектам.
- •3.1.Привязка клиента к распределенному объекту.
- •3.2.Объекты времени компиляции и объекты времени выполнения (раздел)
- •3.3.Сохранные и не резидентные объекты.
- •3.3.1Привязка клиента к объекту.
- •3.4.Реализация ссылок на объект
- •Лекция 9.11.04
- •3.4.1Идентификатор сервера. Об именовании. Имена, идентификаторы, адреса.
- •Идентификатор сервера
- •3.5.2Динамическое обращение
- •Передача параметров
- •3.5.3Сервер объектов
- •3.5.4Адаптер объекта
- •3.6.Перенос кода
- •3.6.1Модели переноса кода
- •3.8.4Реализация технологии клиент-сервер на Java (работа с сетями)
- •Лекция 30.11.04
- •3.8.5Клиентская часть
- •Объяснение в виде диаграммы последовательности
- •3.8.6Дополнительные сведения rmi.Java
- •Разница между удаленными и локальными объектами.
- •Блокировка объектов
- •Вопрос удаленных объектов
- •4.Последний раздел языка Java: интерфейс jdbc при работе с бд
- •4.1.Определение местонахождения распределенных объектов
- •Именование
- •Трейдинг
- •Лекция 7.12.04
- •4.2.Иерархические подходы в службах локализации.
- •4.2.1Кэширование указателей
- •4.2.2Масштабирование
- •4.3.Объектный трейдинг.
- •4.5.Алгоритм Крестиана
- •4.6.Алгоритм Беркли
- •4.7.Логические часы. Алгоритм Лампорта.
- •4.8.Жизненный цикл объекта
- •4.9.Миграция объектов на удаленный хост
3.8.4Реализация технологии клиент-сервер на Java (работа с сетями)
Вызывается telnet с соотв. параметрами.
import java.io.*;
import java.net.*;
public class SocketTest {
public static void main (String[] args) {
try {
socket = new socket(addr, port);
// смотри методичку;
Лекция 30.11.04
// сервер
import java.rm.*;
import java.rmi.server.*;
public class ProdbctServer{
public static void main(string []args)
{
try{
ProductImpl P1 = new ProductImpl(“Toaster”);
ProductImpl P2 = new ProductImpl(“Microwave”);
// Вот создали 2 удаленных объекта. Теперь их надо зарегистрировать, иначе они будут не видны.
Naming.rebind(“toaster”, P1);
Naming.rebind(“microwave”, P2);
}
catch {...}
}
}
На прошлой лекции определили класс ProductImpl. Также определили интерфейс: Product, который расширяет интерфейс Remote, расширив методом, возвращающим адрес продукта.
При регистрации могли пользовться:
start rmiregistry
start java ProductServer.
Вот так на Java оформляется сревер удаленных объектов.
Если захотим посмотреть зарегистрированные объекты, то Naming.list().
3.8.5Клиентская часть
В ней нужно установить менеджер обеспечения безопасности, так как обращаемся к удаленным объектам и не известно, что они нам преподнесут. Для этого есть RMISecurityManager. Его нужно устанавливать.
Вот пример для использования удаленных объектов: import java.rmi.*; import java.server.*; public class ProductClient{ public static void main(string[] args){ // Устанавливается служба безопасности System.setSecurityManager(new RMISecurityManager); // Формируем URL String URL = “rmi://localhost/”; //Далее суть rmi try{ Product c1 = (Product)Naming.lookup(url+”toaster”); // Это ссылка на заместителя на клиентской части в адресном пространстве клиента. //Вот на сколько спрятано от программиста в механизме rmi: создание заглушек, заместителей по описанию интерфейса, обращение к службе Naming. Product c2 = (Product)Naming.lookup(url+”microwave”); System.out.println(c1.getDescription()); // А здесь нужно проиллюстрировать как идет обращение к методу удаленного объекта и этой строчки для этого не достаточно. Аналогично: (Можно объяснять и диаграммой и словами) System.out.println(c2.getDescription()); } cathc{..} } }
Объяснение в виде диаграммы последовательности
Последовательность вызовов.
Рис. 3.17.
На стороне сервера есть класс ProductImpl – класс – удаленный объект.
Клиент обращается к службе именования за информацией об уделенном объекте по имени – связывание. Результат – создание заглушки.
Клиент обращается к заглушке в процессе обращения к методу.
Заглушка формирует запрос: упаковывает параметры, осуществляет маршашинг и обращается к серверной части.
Получатель осуществляет демарш-г и действительно обращается локально к методу Description и возвращает результат обращения. Если обращение не удачно, то исключение – передается на клиентскую сторону.
Получатель осуществляет маршалиг этого результата. Свернутое, значит подвергнутое маршалингу. Результат – строка или исключение.
Вот что стоит за 2 командами клиентской части. Каждый раз выполняется на 1 команду.
