Это веб-приложение на базе Spring MVC, предназначенное для управления персонажами, драконами и локациями. Система позволяет выполнять полный набор CRUD операций, а также дополнительные функции для манипуляции объектами (например, перемещение персонажей между локациями, фиксация победы группы персонажей над драконом, etc)
- Backend Framework: Spring MVC 6.0.12
- ORM: JPA + Hibernate
- Database: PostgreSQL
- HikariCP
- Infinispan
- MinIO
- Build Tool: Maven 3
- Java Version: 17
- Packaging: WAR (Web Application Archive)
- Dragon
- Character
- Location
- Coordinates
- Фильтрация таблиц по строковым колонкам (неполное совпадение)
- Сортировка объектов в таблицах
- Автоматическое обновление интерфейса у всех пользователей при изменении данных
- Синхронизация изменений с базой данных на сервере
- Расчет среднего значения поля age для всех драконов
- Подсчет количества драконов с определенными характеристиками головы
- Поиск драконов по названию
- Убийство указанного дракона
- Отправка команды убийц в пещеру
Система оперирует следующими основными сущностями:
public class Dragon {
private long id; // Автогенерируемый уникальный ID
private String name; // Название дракона (не может быть пусто)
private Coordinates coordinates; // Координаты дракона
private ZonedDateTime creationDate; // Дата создания (автогенерируется)
private DragonCave cave; // Пещера дракона
private Person killer; // Убийца дракона (может быть null)
private long age; // Возраст дракона (> 0)
private Color color; // Цвет дракона
private DragonType type; // Тип дракона
private DragonCharacter character; // Характер дракона
private DragonHead head; // Голова дракона
}public class Person {
private long id; // Автогенерируемый уникальный ID
private String name; // Имя персонажа (не может быть пусто)
private Color eyeColor; // Цвет глаз (может быть null)
private Color hairColor; // Цвет волос (может быть null)
private Location location; // Локация персонажа
private Long weight; // Вес персонажа (> 0, может быть null)
private Country nationality; // Национальность (не может быть null)
}public class Location {
private long id; // Автогенерируемый уникальный ID
private Double x; // X координата
private float y; // Y координата
private Float z; // Z координата
private String name; // Название локации (не может быть пусто)
}public class Coordinates {
private long id; // Автогенерируемый уникальный ID
private Integer x; // X координата (> -842)
private Long y; // Y координата (≤ 154)
}DragonCave
depth: Integer (может быть null)
DragonHead
eyesCount: Integer (не может быть null)
Color: RED, BLACK, ORANGE, WHITE, BROWN
DragonType: WATER, UNDERGROUND, AIR, FIRE
DragonCharacter: CUNNING, WISE, GOOD, CHAOTIC, CHAOTIC_EVIL
Country: GERMANY, VATICAN, JAPAN
- Java 17+
- Maven 3+
- PostgreSQL (для базы данных)
mvn clean installПриложение упаковывается в файл .war, который можно развернуть на сервере приложений (Tomcat, WildFly и т.д.):
mvn clean packageСкомпилированный WAR файл будет находиться в директории target/lab1-1.0-SNAPSHOT.war
src/
├── main/
│ ├── java/org/lia/
│ │ ├── controller/ # REST контроллеры
│ │ ├── service/ # Бизнес-логика
│ │ ├── repository/ # Доступ к данным
│ │ ├── models/ # Модели данных (Dragon, Person, etc.)
│ │ ├── dto/ # Data Transfer Objects
│ │ ├── config/ # Конфигурация Spring
│ │ ├── cache/ # Кеширование
│ │ ├── imports/ # Импорт данных
│ │ └── web/ # Веб-конфигурация
│ ├── resources/
│ │ ├── application.properties # Конфигурация приложения
│ │ ├── hotrod-client.properties
│ │ ├── message.properties
│ │ └── webapp/
│ │ ├── css/ # Стили
│ │ ├── js/ # JavaScript файлы
│ │ └── WEB-INF/
│ │ ├── views/ # JSP страницы
│ │ ├── web.xml # Дескриптор развертывания
│ │ └── jboss-deployment-structure.xml
│ └── test/
└── target/
└── Собранные артефакты и classes
Обработчики HTTP запросов для CRUD операций над драконами и выполнения специальных операций.
Реализация бизнес-логики приложения, включая валидацию данных и выполнение специальных операций.
DAO слой для взаимодействия с базой данных через JPA/Hibernate.
Сущности JPA, отображающиеся на таблицы в базе данных.
Пользовательский интерфейс в виде JSP страниц:
index.jsp- главная страница со списком драконовdragon/create.jsp- форма создания драконаdragon/edit.jsp- форма редактирования дракона- Другие страницы для управления связанными объектами
Некоторые операции реализованы как SQL функции в PostgreSQL для эффективного выполнения на уровне БД:
- Расчет среднего возраста драконов
- Подсчет драконов по параметрам головы
- Поиск драконов по названию
- Операции убийства
- Все операции с данными выполняются на сервере и синхронизируются с БД
- При удалении объекта, у которого есть связанные объекты, операция будет отменена
- Изменения видны всем авторизованным пользователям в реальном времени
- Система использует пул соединений HikariCP для оптимального управления подключениями к БД
Для тестирования используются тестовые данные из файлов:
sample_dragons2.json- примеры драконов для импортаpersons.json- примеры персонажей
Проект включает Docker Compose конфигурацию для запуска сервисов:
docker-compose up -d