- Организовать хранение коллекции в реляционной СУБД
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. Шаблоны проектирования.