Задание:
Использование механизма распределённых транзакции для построения информационных систем, работающих с несколькими СУБД
Пояснительная записка должна содержать:
1. Описание фреймворка Spring.
2. Описание пакетов, используемых для создания приложения.
3. Описание созданного приложения: постановка задачи, алгоритм работы, логическое проектирование, диаграмма классов, физическое проектирование, структуры данных и спецификация классов, тестирование, результаты работы.
4. Техническое задание.
5. Руководство пользователя.
6. Программный код.
Теоретическая часть:
- понятие транзакции в реляционной СУБД
- организация работы с транзакциями через JDBC
- принципы организации распределённых транзакций; OpenXA
- обзор библиотек, позволяющих организовать распределённые транзакции в приложениях, написанных на Java
Необходимо, используя фреймворк Spring MVC, реализовать RESTful API сервис перевода средств между банковскими счетами:
GET /accounts - получение списка всех счетов
Формат ответа (application/json):
{
accounts: [
{number: "12345678901234567890", balance: 1234.56},
{number: "12345678901234567891", balance: 4321.56}
]
}
POST /accounts?number={accountNumber}&balance={balance} - добавление нового счёта
Формат ответа (application/json):
{
status: "OK" // возможные значения: OK - счёт успешно добавлен, ERROR - счёт не добавлен (например, такой счёт уже существует)
}
GET /transfers - получение списка всех переводов
Формат ответа (application/json):
{
transfers: [
{id: 1, source: "12345678901234567890", dest=" 12345678901234567891", sum: 1234.56},
{id: 2, source: "12345678901234567890", dest=" 12345678901234567891", sum: 111.11},
{id: 3, source: "12345678901234567891", dest=" 12345678901234567890", sum: 10}
]
}
POST /transfers?source={sourceAccountNumber}&dest={destinationAccountNumber}&sum={transferSum} - выполнение перевода между двумя счетами
Формат ответа (application/json):
{
status: "PROCESSED" // возможные значения: PROCESSED - выполнен, REJECTED - отказан
}
Сервис должен работать с двумя базами данных. В одной из них должна храниться информация о счетах (номер и баланс; для поля "баланс" следует установить ограничение на уровне схемы БД для минимального значения, равного 0), во второй - информация о переводах (счёт списания, счёт зачисления, сумма перевода; для поля "сумма перевода" следует установить ограничение на уровне схемы БД для максимального значения - 15000). В качестве СУБД для первой БД следует использовать H2, второй - Apache Derby. В качестве менеджера распределённых транзакций следует использовать Atomicos.
При старте приложения БД должны заполняться тестовыми данными.