Сериализация и RMI
-
Upload
valentine-salazar -
Category
Documents
-
view
87 -
download
0
description
Transcript of Сериализация и RMI
![Page 1: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/1.jpg)
Сериализация и RMI
Java Advanced
![Page 2: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/2.jpg)
Java Advanced / Сериализация и RMI 2Georgiy Korneev
Содержание
СериализацияКонцепции RMIПрименение RMIЗаключение
![Page 3: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/3.jpg)
СериализацияЧасть 1
![Page 4: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/4.jpg)
Java Advanced / Сериализация и RMI 4Georgiy Korneev
Сериализация и десериализация
Сериализация – запись объекта в байтовый поток
Десериализация – чтение объекта из байтового потока
Пакет java.io
При сериализации и десериализация используется все данные, которые достижимы из объекта
![Page 5: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/5.jpg)
Java Advanced / Сериализация и RMI 5Georgiy Korneev
Десериализация объектов
Чтение объектов Интерфейс ObjectInput extends DataInput Класс ObjectInputStream Метод readObject() Исключение
ClassNotFoundException InvalidClassException
![Page 6: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/6.jpg)
Java Advanced / Сериализация и RMI 6Georgiy Korneev
Сериализация объектов
Запись объектов Интерфейс ObjectOutput extends DataOutput Класс ObjectOutputStream Метод writeObject(object) Исключение NotSerializableException
![Page 7: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/7.jpg)
Java Advanced / Сериализация и RMI 7Georgiy Korneev
Что можно сериализовать
Автоматически сериализуемые классы Маркерный интерфейс Serializable
Классы, сериализуемые в ручную Интерфейс Externalizable
![Page 8: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/8.jpg)
Java Advanced / Сериализация и RMI 8Georgiy Korneev
Автоматическая сериализация
Процесс записи Записывается предок Записываются значения всех полей, не
имеющих модификатора transient
Процесс чтения Выделяется память под объект Считывается предок Считываются значения всех полей , не
имеющих модификатора transient
![Page 9: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/9.jpg)
Java Advanced / Сериализация и RMI 9Georgiy Korneev
Сериализация в ручную
Интерфейс ExternalizableМетоды
readExternal(ObjectInput in) – должен прочесть состояние из потока
writeExternal(ObjectOutput out) – должен записать состояние в поток
Процесс чтения Создание конструктором по умолчанию Вызов метода readExternal
![Page 10: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/10.jpg)
Java Advanced / Сериализация и RMI 10Georgiy Korneev
Настраиваемая сериализация
Применяется для обеспечения совместимости
Методы readObject(ObjectInputStream in) – должен
прочесть состояние из потока writeObject(ObjectOutputStream out) – должен
записать состояние в потокПроцесс чтения
Выделение памяти Чтение родителя Вызов метода readObject
![Page 11: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/11.jpg)
Java Advanced / Сериализация и RMI 11Georgiy Korneev
Запись и чтение дескрипторов
Применяется когда сам объект не должен сериализовываться
Методы Object writeReplace() – какой объект записать
вместо этого Object readResolve() – какой объект реально
был записан
Реализуются у разных классов
![Page 12: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/12.jpg)
Java Advanced / Сериализация и RMI 12Georgiy Korneev
Версии сериализованных классов
Применяется для обеспечения совместимости когда версии сериализованного объекта меняются
Поле private final static long serialVersionUID
Инструмент serialver <имя класса>
![Page 13: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/13.jpg)
Концепции RMIЧасть 2
![Page 14: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/14.jpg)
Java Advanced / Сериализация и RMI 14Georgiy Korneev
Remote Method Invocation
Механизм, позволяющий объектом из одной Java-машины вызывать методы другой Java-машины
RMI работает по сетиПакет java.rmi
![Page 15: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/15.jpg)
Java Advanced / Сериализация и RMI 15Georgiy Korneev
Схема взаимодействия
Transport Layer
Remote Reference Layer Remote Reference Layer
Stub Skeleton
Client Server
IInterface IInterface
![Page 16: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/16.jpg)
Java Advanced / Сериализация и RMI 16Georgiy Korneev
Удаленные интерфейсы
Удаленный интерфейс – интерфейс, унаследованный от Remote
Все методы удаленных интерфейсов должны бросать RemoteException
![Page 17: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/17.jpg)
Java Advanced / Сериализация и RMI 17Georgiy Korneev
Передача данных
Объекты, реализующие интерфейс Remote передаются по удаленным ссылкам
Остальные объекты передаются по значению путем сериализации
![Page 18: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/18.jpg)
Java Advanced / Сериализация и RMI 18Georgiy Korneev
Stub и Skeleton
Stub и Skeleton генерируются по удаленному классу
Stub служит для передачи данных по сети. Реализует все удаленные интерфейсы класса и только их
Skeleton служит для приема данных по сети и вызов методов реальтного объекта
![Page 19: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/19.jpg)
Java Advanced / Сериализация и RMI 19Georgiy Korneev
Distributed Garbage Collecting
Удаление объектов, на которых больше не ссылок в распределенной среде
Механизм лизингаИнтерфейс Unreferenced
Метод unreferenced()
![Page 20: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/20.jpg)
Java Advanced / Сериализация и RMI 20Georgiy Korneev
Поиск удаленных объектов
Ссылки на удаленный объекты публикуются в RMI registry
Удаленные объекты ищутся по URL вида rmi://<host>:<port>/<object>, где host:port – местоположение RMI registry object – зарегистрированное имя объекта
![Page 21: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/21.jpg)
Java Advanced / Сериализация и RMI 21Georgiy Korneev
Прежде чем быть переданными на другую машину объект должен быть экспортирован
Метод UnicastRemoteObject.exportObject(object)
Наследники UnicastRemoteObject экспортируются автоматически
Экспорт объектов
![Page 22: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/22.jpg)
Применение RMIЧасть 3
![Page 23: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/23.jpg)
Java Advanced / Сериализация и RMI 23Georgiy Korneev
Пример: банк
Банк поддерживает счета, идентифицируемые строками
По счету можно Узнать идентификатор Узнать сумму денег на счете Изменить сумму денег на счете
![Page 24: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/24.jpg)
Java Advanced / Сериализация и RMI 24Georgiy Korneev
Удаленный интерфейс банка
public interface Bank extends Remote {
// Создает счет
public Account createAccount(String id)
throws RemoteException;
// Возвращает счет
public Account getAccount(String id)
throws RemoteException;
}
![Page 25: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/25.jpg)
Java Advanced / Сериализация и RMI 25Georgiy Korneev
Удаленный интерфейс счета
public interface Account extends Remote {
// Узнать идентификатор
public String getId()
throws RemoteException;
// Узнать количество денег
public int getAmount()
throws RemoteException;
// Установить количество денег
public void setAmount(int amount)
throws RemoteException;
}
![Page 26: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/26.jpg)
Java Advanced / Сериализация и RMI 26Georgiy Korneev
Реализация счета
Класс AccountImpl implements Accountpublic String getId() {
return id;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
![Page 27: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/27.jpg)
Java Advanced / Сериализация и RMI 27Georgiy Korneev
Реализация банка
Класс BankImpl implements Bankpublic Account createAccount(String id) {
Account account = new AccountImpl(id);
accounts.put(id, account);
return account;
}
public Account getAccount(String id) {
return accounts.get(id);
}
![Page 28: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/28.jpg)
Java Advanced / Сериализация и RMI 28Georgiy Korneev
Сервер
Регистрация банка в RMI registryBank 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");}
![Page 29: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/29.jpg)
Java Advanced / Сериализация и RMI 29Georgiy Korneev
Клиент (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;}
![Page 30: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/30.jpg)
Java Advanced / Сериализация и RMI 30Georgiy Korneev
Клиент (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");
}
![Page 31: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/31.jpg)
Java Advanced / Сериализация и RMI 31Georgiy Korneev
Клиент (3)
Операции со счетомSystem.out.println("Money: " +
account.getAmount());
System.out.println("Adding money");
account.setAmount(account.getAmount() + 100);
System.out.println("Money: " + account.getAmount());
![Page 32: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/32.jpg)
Java Advanced / Сериализация и RMI 32Georgiy Korneev
Запуск
Создание Stub для классов rmic AccountImpl BankImpl
Запуск RMI Registry rmiregistry
Запуск сервераЗапуск клиента
![Page 33: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/33.jpg)
Java Advanced / Сериализация и RMI 33Georgiy Korneev
Дополнительные возможности RMI
Использование callback процедурActivation – технология, позволяющая
создавать удаленные объектыЗагрузка .class файлов с HTTP сервера
![Page 34: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/34.jpg)
ЗаключениеЧасть 4
![Page 35: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/35.jpg)
Java Advanced / Сериализация и RMI 35Georgiy Korneev
Ссылки по сериализации
Java Object Serialization Specification // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/serialTOC.html
Object Serialization (Guide) // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/index.html
Serialization (Tutorial) // http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/serial.html
Serialization FAQ // http://java.sun.com/products/jdk/serialization/faq/
![Page 36: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/36.jpg)
Java Advanced / Сериализация и RMI 36Georgiy Korneev
Ссылки по RMI
RMI (Guide & tutotials) http://java.sun.com/j2se/1.5.0/docs/guide/rmi/
Java RMI Specification // http://java.sun.com/j2se/1.5.0/docs/guide/rmi/spec/rmiTOC.html
RMI Tutorial // http://java.sun.com/developer/onlineTraining/rmi/RMI.html
![Page 37: Сериализация и RMI](https://reader033.fdocuments.us/reader033/viewer/2022061514/5681359b550346895d9d0d4e/html5/thumbnails/37.jpg)
Java Advanced / Сериализация и RMI 37Georgiy Korneev
Вопросы