1 / 45

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

Сериализация и RMI. Java Advanced. http://kgeorgiy.info/courses/java-advanced/. Содержание. Сериализация Концепции RMI Применение RMI Дополнительные возможности RMI Заключение. Часть 1. Сериализация. Сериализация и десериализация. Сериализация – запись объекта в байтовый поток

sonya-price
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Сериализацияи RMI Java Advanced http://kgeorgiy.info/courses/java-advanced/

  2. Содержание • Сериализация • Концепции RMI • Применение RMI • Дополнительные возможности RMI • Заключение Java Advanced / Сериализация иRMI

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

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

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

  6. Десериализацияобъектов • Чтение объектов • Интерфейс ObjectInputextends DataInput • Класс ObjectInputStream • Метод readObject() • Исключение • ClassNotFoundException • InvalidClassException Java Advanced / Сериализация иRMI

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

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

  9. Пример 1. Автоматическая сериализация public class Data implements Serializable { private List<Integer> data; ... } public class Data2 extends Data { private transient String toStringCache; ... } Java Advanced / Сериализация иRMI

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

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

  12. Сериализация с несериализуемым предком • Несериализуемый предок должен иметь конструктор по умолчанию • ObjectOutputStream.defaultWriteObject() – записывает поля текущего класса • ObjectInputStream.defaultReadObject() – считывает поля текущего класса Java Advanced / Сериализация иRMI

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

  14. Ручная сериализация полей • Константа ObjectStreamField[] serialPersistentFields– сериализуемые поля • ObjectOutputStream.PutField putFields() – поля для записи • writeFields()– записывает поля • ObjectInputStream.GetField readFields() – читает поля из потока Java Advanced / Сериализация иRMI

  15. Старая версия class Rectangle { int x1; int y1; int x2; int y2; } Новая версия class Rectangle { int x; int y; int width; int height; } Пример ручной сериализации (1) Java Advanced / Сериализация иRMI

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

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

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

  19. Схема взаимодействия Java Advanced / Сериализация иRMI

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

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

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

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

  24. Поиск удаленных объектов (1) • Ссылки на удаленный объекты публикуются в RMI registry • Удаленные объекты ищутся по URLвида rmi://<host>:<port>/<object>,где • host:port – местоположение RMI registry • object – зарегистрированное имя объекта Java Advanced / Сериализация иRMI

  25. Поиск удаленных объектов (2) • Класс Naming – интерфейс к RMI registry • Методы класса • bind(name, object) – зарегистрировать объект • lookup(name) – получить объект по имени • unbind(name) – отменить регистрацию объекта • rebind(name, object) – зарегистрировать новый объект Java Advanced / Сериализация иRMI

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

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

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

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

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

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

  32. Реализация банка • Класс 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); } Java Advanced / Сериализация иRMI

  33. Сервер • Регистрация банкав 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"); } Java Advanced / Сериализация иRMI

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

  35. Клиент (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"); } Java Advanced / Сериализация иRMI

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

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

  38. Часть 4 Дополнительные возможности RMI

  39. Фабрики сокетов • Класс RMIClientSocketFactory – фабрика клиентских сокетов • Метод Socket createSocket(String host, int port) • Класс RMIServerSocketFactory – фабрика серверных сокетов • Метод ServerSocket createServerSocket(int port) • Класс RMISocketFactory – фабрика сокетов, применяемая по умолчанию • UnicastRemoteObject.exportObject(object, port, csf, ssf) – экспортирует объект Java Advanced / Сериализация иRMI

  40. Создание Registry на лету • Интерфейс Registry – экземпляр RMI registry • Класс LocateRegistry – позволяет находить и создавать экземпляры RMI registry • getRegistry(host?, port?) – найти RMI registry • createRegistry(port) – создать экземпляр RMI registry Java Advanced / Сериализация иRMI

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

  42. Часть 5 Заключение

  43. Ссылкипо сериализации • 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/ Java Advanced / Сериализация иRMI

  44. Ссылкипо 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 Java Advanced / Сериализация иRMI

  45. Вопросы Java Advanced / Сериализация иRMI

More Related