Skip to content

Latest commit

 

History

History

lab7

Вариант 3131700

Доработать программу из лабораторной работы №6 следующим образом:

  • Организовать хранение коллекции в реляционной СУБД PostgreSQL. Убрать хранение коллекции в файле.
  • Для генерации поля id использовать средства базы данных sequence.
  • Обновлять состояние коллекции в памяти только при успешном добавлении объекта в БД.
  • Все команды получения данных должны работать с коллекцией в памяти, а не в БД.
  • Организовать возможность регистрации и авторизации пользователей. У пользователя есть возможность указать пароль.
  • Пароли при хранении хэшировать алгоритмом MD2.
  • Запретить выполнение команд не авторизованным пользователям.
  • При хранении объектов сохранять информацию о пользователе, который создал этот объект.
  • Пользователи должны иметь возможность просмотра всех объектов коллекции, но модифицировать могут только принадлежащие им.
  • Для идентификации пользователя отправлять логин и пароль с каждым запросом.

Необходимо реализовать многопоточную обработку запросов:

  • Для многопоточного чтения запросов использовать создание нового потока java.lang.Thread.
  • Для многопоточной обработки полученного запроса использовать Fixed thread pool.
  • Для многопоточной отправки ответа использовать Cached thread pool.
  • Для синхронизации доступа к коллекции использовать синхронизацию чтения и записи с помощью java.util.concurrent.locks.ReentrantLock.

Порядок выполнения работы:

  • В качестве базы данных использовать PostgreSQL.
  • Для подключения к БД на кафедральном сервере использовать хост pg, имя базы данных - studs, имя пользователя/пароль совпадают с таковыми для подключения к серверу.

Отчёт по работе должен содержать:

1) Текст задания.
2) Диаграмма классов разработанной программы.
3) Исходный код программы.
4) Выводы по работе.

Вопросы к защите лабораторной работы:

1. Многопоточность. Класс `Thread`, интерфейс `Runnable`. Модификатор `synchronized`.
2. Методы wait(), notify() класса Object, интерфейсы `Lock` и `Condition`.
3. Классы-сихронизаторы из пакета `java.util.concurrent`.
4. Модификатор `volatile`. Атомарные типы данных и операции.
5. Коллекции из пакета `java.util.concurrent`.
6. Интерфейсы `Executor`, `ExecutorService`, `Callable`, `Future`.
7. Пулы потоков.
8. `JDBC`. Порядок взаимодействия с базой данных. Класс `DriverManager`. Интерфейс `Connection`.
9. Интерфейсы `Statement`, `PreparedStatement`, `ResultSet`, `RowSet`.
10. Шаблоны проектирования.