https://github.com/maxbarsukov-itmo/information-systems-labs
👩🏻💻ℹ Информационные системы: Лабораторные работы №1, №2, №3
https://github.com/maxbarsukov-itmo/information-systems-labs
information-systems itmo java laboratory-work maxbarsukov pmpknu spring-boot
Last synced: 6 months ago
JSON representation
👩🏻💻ℹ Информационные системы: Лабораторные работы №1, №2, №3
- Host: GitHub
- URL: https://github.com/maxbarsukov-itmo/information-systems-labs
- Owner: maxbarsukov-itmo
- License: mit
- Created: 2024-10-03T21:30:34.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2024-12-15T12:48:01.000Z (10 months ago)
- Last Synced: 2025-02-02T04:41:16.305Z (8 months ago)
- Topics: information-systems, itmo, java, laboratory-work, maxbarsukov, pmpknu, spring-boot
- Language: TypeScript
- Homepage: https://se.ifmo.ru/courses/is
- Size: 8.06 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Лабораторная работа 3
## Вариант `331501`
> There are only two hard problems in two-phase distributed transactions: \
> 2\. Exactly-once delivery \
> 1\. Guaranteed order of messages \
> 2\. Exactly-once delivery[](https://spring.io/)
[](https://spring.io/projects/spring-boot)
[](https://spring.io/projects/spring-security) \
[](https://www.java.com)
[](https://min.io/)
[](https://www.red-gate.com/products/flyway/) \
[](https://www.postgresql.org/)
[](https://www.docker.com/) \
[](https://react.dev/)
[](https://redux.js.org/)
[](https://mui.com/)
[](https://cssinjs.org/?v=v10.10.1)|.pdf|.docx|
|-|-|
| [report](./docs/report.pdf) | [report](./docs/report.docx) |---
### Команда
- **Группа:** `P3315`
- **Студенты:**
- [@maxbarsukov](https://github.com/maxbarsukov): Барсуков Максим Андреевич `367081`;
- [@pmpknu](https://github.com/pmpknu): Горляков Даниил Петрович `367165`.### Задание
* [Текст задания](./docs/task.png) с [_se.ifmo.ru_](https://se.ifmo.ru/courses/is).
Доработать ИС из [`ЛР2`](https://github.com/maxbarsukov-itmo/information-systems-labs/tree/lab-2) следующим образом:
- Реализовать сохранение загруженных на сервер файлов, используемых для импорта данных, в файловом хранилище `MinIO` (можно взять любое другое *S3-совместимое хранилище*). Поднять и настроить `MinIO` требуется самостоятельно. Загруженные файлы должны быть доступны для скачивания из таблицы с логом импорта.
- Сохранение загруженных файлов в файловом хранилище должно быть реализовано **транзакционно по отношению к операциям**, реализующим непосредственную вставку объектов в БД при импорте.
- Для реализации распределенной транзакции из пункта 2 разрешается использовать любые инструменты. Рекомендуется решать задачу при помощи собственной реализации двух фазного коммита.
- Необходимо на защите быть готовым продемонстрировать корректность реализованной распределенной транзакции в следующих условиях:
- **отказ файлового хранилища** (БД продолжает работать)
- **отказ БД** (файловое хранилище продолжает работать)
- **ошибка в бизнес-логике сервера** (работают и БД, и файловое хранилище, однако в коде сервера вылетает `RuntimeException` между запросами в разные источники данных)
- Необходимо на защите быть готовым продемонстрировать корректность работы распределенной транзакции в условиях параллельных запросов от нескольких пользователей (реализованный в [`ЛР2`](https://github.com/maxbarsukov-itmo/information-systems-labs/tree/lab-2) сценарий для `Apache JMeter`, тестирующий функцию импорта, должен продолжать корректно отрабатывать).### Содержание отчёта:
1. Текст задания.
2. UML-диаграммы классов и пакетов разработанного приложения.
3. Исходный код системы или ссылка на репозиторий с исходным кодом.
4. Выводы по работе.### Вопросы к защите лабораторной работы:
1. `Java Transaction API`. Основные принципы и программные интерфейсы. Работа с `JTA` в приложениях на базе `Spring`.
2. Двухфазная фиксация в распределенных транзакциях (**two-phase commit protocol**).
3. **Распределенные транзакции**, спецификация XA. Реализация в приложениях на базе `Jakarta EE` и `Spring`.
4. **Менеджеры транзакций**. Использование менеджера транзакций в приложениях на базе `Spring`.### Как запустить?
Экспорт переменных окружения:
export $(cat .env | xargs)
База данных и MinIO:
docker compose up
Запуск **back-end**:
./gradlew bootRun
Запуск **front-end**:
cd frontend
yarn install
yarn startПроект доступен с открытым исходным кодом на условиях [Лицензии MIT](https://opensource.org/licenses/MIT). \
*Авторские права 2024 Max Barsukov***Поставьте звезду :star:, если вы нашли этот проект полезным.**