Сериализация и RMI Java Advanced. 2Georgiy KorneevJava Advanced / Сериализация и RMI Содержание Сериализация Концепции RMI Применение RMI Заключение.

Презентация:



Advertisements
Похожие презентации
Remote Method Invocation (RMI). Задачи распределенного программирования Получить некоторую информацию от одной удаленной машины и переслать ее другой.
Advertisements

Javadoc Java Advanced. 2Georgiy KorneevJava Advanced / Javadoc Содержание 1.Структура Javadoc 2.Блочные тэги 3.Строчные тэги 4.Применение Javadoc 5.Компиляция.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Многопоточное программирование на Java Java Advanced.
Многопоточное программирование на Java Java Advanced.
Новые возможности Java 5 Java Advanced. 2Georgiy KorneevJava Advanced / Новые возможности Java 5 Содержание Перечисления Метаданные Другие возможности.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Изучение динамического определения типов. Класс Class. Динамическая загрузка и инстанцирование классов. В Java вся информация о классе хранится в специальном.
Типовые расчёты Растворы
Кафедра ОСУ, Java 2004 Слайд 1 Наследование Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует.

Reflection Java Advanced. 2Georgiy KorneevJava Advanced / Reflection Содержание Введение Структура класса Массивы Загрузчики классов Proxy Заключение.
Michael Jackson
Saint Petersburg, 2011 Java Lecture #06 Exceptions.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Стандартная библиотека Java: java.util, java.io, java.net.
Лекция 2 Раздел 2.1 Windows Phone Темы раздела 3.

Сокеты TCP/IP Лекция Понятие сокета Если требуется получить доступ к сетевым операциям низкого уровня (класс URL обеспечивает выполнение только.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Транксрипт:

Сериализация и RMI Java Advanced

2Georgiy KorneevJava Advanced / Сериализация и RMI Содержание Сериализация Концепции RMI Применение RMI Заключение

Сериализация Часть 1

4Georgiy KorneevJava Advanced / Сериализация и RMI Сериализация и десериализация Сериализация – запись объекта в байтовый поток Десериализация – чтение объекта из байтового потока Пакет java.io При сериализации и десериализация используется все данные, которые достижимы из объекта

5Georgiy KorneevJava Advanced / Сериализация и RMI Десериализация объектов Чтение объектов Интерфейс ObjectInput extends DataInput Класс ObjectInputStream Метод readObject() Исключение ClassNotFoundException InvalidClassException

6Georgiy KorneevJava Advanced / Сериализация и RMI Сериализация объектов Запись объектов Интерфейс ObjectOutput extends DataOutput Класс ObjectOutputStream Метод writeObject(object) Исключение NotSerializableException

7Georgiy KorneevJava Advanced / Сериализация и RMI Что можно сериализовать Автоматически сериализуемые классы Маркерный интерфейс Serializable Классы, сериализуемые в ручную Интерфейс Externalizable

8Georgiy KorneevJava Advanced / Сериализация и RMI Автоматическая сериализация Процесс записи Записывается предок Записываются значения всех полей, не имеющих модификатора transient Процесс чтения Выделяется память под объект Считывается предок Считываются значения всех полей, не имеющих модификатора transient

9Georgiy KorneevJava Advanced / Сериализация и RMI Сериализация в ручную Интерфейс Externalizable Методы readExternal(ObjectInput in) – должен прочесть состояние из потока writeExternal(ObjectOutput out) – должен записать состояние в поток Процесс чтения Создание конструктором по умолчанию Вызов метода readExternal

10Georgiy KorneevJava Advanced / Сериализация и RMI Настраиваемая сериализация Применяется для обеспечения совместимости Методы readObject(ObjectInputStream in) – должен прочесть состояние из потока writeObject(ObjectOutputStream out) – должен записать состояние в поток Процесс чтения Выделение памяти Чтение родителя Вызов метода readObject

11Georgiy KorneevJava Advanced / Сериализация и RMI Запись и чтение дескрипторов Применяется когда сам объект не должен сериализовываться Методы Object writeReplace() – какой объект записать вместо этого Object readResolve() – какой объект реально был записан Реализуются у разных классов

12Georgiy KorneevJava Advanced / Сериализация и RMI Версии сериализованных классов Применяется для обеспечения совместимости когда версии сериализованного объекта меняются Поле private final static long serialVersionUID Инструмент serialver

Концепции RMI Часть 2

14Georgiy KorneevJava Advanced / Сериализация и RMI Remote Method Invocation Механизм, позволяющий объектом из одной Java-машины вызывать методы другой Java-машины RMI работает по сети Пакет java.rmi

15Georgiy KorneevJava Advanced / Сериализация и RMI Схема взаимодействия

16Georgiy KorneevJava Advanced / Сериализация и RMI Удаленные интерфейсы Удаленный интерфейс – интерфейс, унаследованный от Remote Все методы удаленных интерфейсов должны бросать RemoteException

17Georgiy KorneevJava Advanced / Сериализация и RMI Передача данных Объекты, реализующие интерфейс Remote передаются по удаленным ссылкам Остальные объекты передаются по значению путем сериализации

18Georgiy KorneevJava Advanced / Сериализация и RMI Stub и Skeleton Stub и Skeleton генерируются по удаленному классу Stub служит для передачи данных по сети. Реализует все удаленные интерфейсы класса и только их Skeleton служит для приема данных по сети и вызов методов реальтного объекта

19Georgiy KorneevJava Advanced / Сериализация и RMI Distributed Garbage Collecting Удаление объектов, на которых больше не ссылок в распределенной среде Механизм лизинга Интерфейс Unreferenced Метод unreferenced()

20Georgiy KorneevJava Advanced / Сериализация и RMI Поиск удаленных объектов Ссылки на удаленный объекты публикуются в RMI registry Удаленные объекты ищутся по URL вида rmi:// : /, где host:port – местоположение RMI registry object – зарегистрированное имя объекта

21Georgiy KorneevJava Advanced / Сериализация и RMI Прежде чем быть переданными на другую машину объект должен быть экспортирован Метод UnicastRemoteObject.exportObject(object) Наследники UnicastRemoteObject экспортируются автоматически Экспорт объектов

Применение RMI Часть 3

23Georgiy KorneevJava Advanced / Сериализация и RMI Пример: банк Банк поддерживает счета, идентифицируемые строками По счету можно Узнать идентификатор Узнать сумму денег на счете Изменить сумму денег на счете

24Georgiy KorneevJava Advanced / Сериализация и RMI Удаленный интерфейс банка public interface Bank extends Remote { // Создает счет public Account createAccount(String id) throws RemoteException; // Возвращает счет public Account getAccount(String id) throws RemoteException; }

25Georgiy KorneevJava Advanced / Сериализация и RMI Удаленный интерфейс счета public interface Account extends Remote { // Узнать идентификатор public String getId() throws RemoteException; // Узнать количество денег public int getAmount() throws RemoteException; // Установить количество денег public void setAmount(int amount) throws RemoteException; }

26Georgiy KorneevJava Advanced / Сериализация и RMI Реализация счета Класс AccountImpl implements Account public String getId() { return id; } public int getAmount() { return amount; } public void setAmount(int amount) { this.amount = amount; }

27Georgiy KorneevJava Advanced / Сериализация и RMI Реализация банка Класс BankImpl implements Bank public Account createAccount(String id) { Account account = new AccountImpl(id); accounts.put(id, account); return account; } public Account getAccount(String id) { return accounts.get(id); }

28Georgiy KorneevJava Advanced / Сериализация и RMI Сервер Регистрация банка в RMI registry Bank bank = new BankImpl(); try { UnicastRemoteObject.exportObject(bank); Naming.rebind("rmi://localhost/bank", bank); } catch (RemoteException e) { System.out.println("Cannot export object: " + e.getMessage()); e.printStackTrace(); } catch (MalformedURLException e) { System.out.println("Malformed URL"); }

29Georgiy KorneevJava Advanced / Сериализация и RMI Клиент (1) Получение ссылки на банк Bank bank; try { bank = (Bank) Naming.lookup("rmi://localhost/bank"); } catch (NotBoundException e) { System.out.println("Bank URL is invalid"); return; } catch (MalformedURLException e) { System.out.println("Bank is not bound"); return; }

30Georgiy KorneevJava Advanced / Сериализация и RMI Клиент (2) Создание счета Account account = bank.getAccount("geo"); if (account == null) { System.out.println("Creating account"); account = bank.createAccount("geo"); } else { System.out.println("Account already exists"); }

31Georgiy KorneevJava Advanced / Сериализация и RMI Клиент (3) Операции со счетом System.out.println("Money: " + account.getAmount()); System.out.println("Adding money"); account.setAmount(account.getAmount() + 100); System.out.println("Money: " + account.getAmount());

32Georgiy KorneevJava Advanced / Сериализация и RMI Запуск Создание Stub для классов rmic AccountImpl BankImpl Запуск RMI Registry rmiregistry Запуск сервера Запуск клиента

33Georgiy KorneevJava Advanced / Сериализация и RMI Дополнительные возможности RMI Использование callback процедур Activation – технология, позволяющая создавать удаленные объекты Загрузка.class файлов с HTTP сервера

Заключение Часть 4

35Georgiy KorneevJava Advanced / Сериализация и RMI Ссылки по сериализации Java Object Serialization Specification // alization/spec/serialTOC.html alization/spec/serialTOC.html Object Serialization (Guide) // alization/index.html alization/index.html Serialization (Tutorial) // Programming/BasicJava2/serial.html Programming/BasicJava2/serial.html Serialization FAQ // aq/ aq/

36Georgiy KorneevJava Advanced / Сериализация и RMI Ссылки по RMI RMI (Guide & tutotials) Java RMI Specification // spec/rmiTOC.html spec/rmiTOC.html RMI Tutorial // mi/RMI.html mi/RMI.html

37Georgiy KorneevJava Advanced / Сериализация и RMI Вопросы