Тема 13. Сериализация и RMI

Содержание

  1. Сериализация
    1. Сериализация и десериализация
    2. Объектные потоки
    3. Автоматическая сериализация
    4. Ручная сериализация
    5. Настраиваемая сериализация
    6. Сериализация и версионирование
    7. Сериализация и дескрипторы
  2. Концепции RMI
    1. Предназначение
    2. Схема работы и стек протоколов
    3. Удаленные интерфейсы
    4. Stub и Skeleton
    5. Распределенная сборка мусора
    6. RMI Registry
  3. Применение RMI

Слайды

HTML

Примеры

zip

Домашнее задание 11. Физические лица

  1. Добавьте к банковскому приложению возможность работы с физическими лицами.
    1. У физического лица (Person) можно запросить имя, фамилию и номер паспорта.
    2. Удалённые физические лица (RemotePerson) должны передаваться при помощи удалённых объектов.
    3. Локальные физические лица (LocalPerson) должны передаваться при помощи механизма сериализации, и при последующем использовании не требовать связи с сервером.
    4. Должна быть возможность поиска физического лица по номеру паспорта, с выбором типа возвращаемого лица.
    5. Должна быть возможность создания записи о физическом лице по его данным.
    6. У физического лица может быть несколько счетов, к которым должен предоставляться доступ (через Person).
    7. Счёту физического лица с идентификатором subId должен соответствовать банковский счёт с id вида passport:subId.
    8. Изменения, производимые со счётом в банке (создание и изменение баланса), должны быть видны всем соответствующим RemotePerson, и только тем LocalPerson, которые были созданы после этого изменения.
    9. Изменения в счетах, производимые через RemotePerson, должны сразу применяться глобально, а производимые через LocalPerson – только локально для этого конкретного LocalPerson.
  2. Реализуйте приложение, демонстрирующее работу с физическим лицами.
    1. Аргументы командной строки: имя, фамилия, номер паспорта физического лица, номер счёта, изменение суммы счёта.
    2. Если информация об указанном физическом лице отсутствует, то оно должно быть добавлено. В противном случае – должны быть проверены его данные.
    3. Если у физического лица отсутствует счёт с указанным номером, то он создается с нулевым балансом.
    4. После обновления суммы счёта новый баланс должен выводиться на консоль.
  3. Напишите тесты, проверяющие вышеуказанное поведение как банка, так и приложения.
    • Для реализации тестов рекомендуется использовать JUnit (Tutorial). Множество примеров использования можно найти в тестах.
    • Если вы знакомы с другим тестовым фреймворком (например, TestNG), то можете использовать его.
    • Добавьте jar-файлы используемых библиотек в каталог lib вашего репозитория.
    • Нельзя использовать самописные фреймворки и тесты, запускаемые через main.
  4. Сложный вариант
    1. На каждом счету всегда должно быть неотрицательное количество денег.
    2. Тесты не должны рассчитывать на наличие запущенного RMI Registry.
    3. Создайте класс BankTests, запускающий тесты.
    4. Создайте скрипт, запускающий BankTests и возвращающий код (статус) 0 в случае успеха и 1 в случае неудачи.
    5. Создайте скрипт, запускающий тесты с использованием стандартного подхода для вашего тестового фреймворка. Код возврата должен быть как в предыдущем пункте.
  5. Приложения и тесты должны находится в пакете info.kgeorgiy.ja.*.bank и его подпакетах.