Архитектура системы
Система электронного документооборота ТЕЗИС является тиражируемым продуктом, созданным на основе платформы для разработки бизнес-приложений CUBA. Поэтому основные характеристики, описываемые в данной статье, определяются возможностями платформы. На самом высоком уровне компоненты системы представлены следующей схемой:
Здесь:
- Middleware — слой бизнес-логики, является ядром системы;
- Web client — клиентский слой, обеспечивающий взаимодействие с пользователями через веб-браузер;
- Web portal — клиентский слой, обеспечивающий взаимодействие со сторонними приложениями;
- Desktop client — пользовательский интерфейс в виде десктопного приложения (для системы ТЕЗИС не реализован).
Рассмотрим основные компоненты системы более подробно.
СУБД
В качестве сервера базы данных используется свободно распространяемая СУБД PostgreSQL >= 9.6 <= 10 и MSSQL >= 2008 R2 <= 2016. Однако, платформа CUBA и СЭД ТЕЗИС в стандартной конфигурации практически не зависят от особенностей конкретной СУБД, поэтому могут быть портированы практически на любую промышленную РСУБД, например, Oracle и пр. Решение о портировании может быть принято на основе требований конкретных клиентских проектов.
Middleware
Средний слой, содержащий основную бизнес-логику приложения и выполняющий обращения к базе данных. Представляет собой отдельное веб-приложение под управлением стандартного контейнера Java EE Web Profile. В стандартной конфигурации в качестве сервера используется Apache Tomcat версии 8. Middleware имеет четкую границу для взаимодействия с клиентами — слой сервисных интерфейсов, что позволяет инкапсулировать бизнес-логику и обеспечить надежную проверку прав доступа к данным.
Web client
Основной блок клиентского уровня создан на основе фреймворка Vaadin. Принцип работы веб-слоя следующий:
- на стороне сервера в JVM формируется объектное представление пользовательского интерфейса — дерево визуальных компонентов;
- информация о текущем состоянии UI передается в браузер пользователя в формате JSON;
- в браузере JavaScript-engine фреймворка создает DOM текущей страницы на основе JSON, полученного с сервера;
- в качестве библиотеки визуальных компонентов на стороне браузера используется Google Web Toolkit;
- события UI из браузера (нажатия кнопок и т.д.) передаются в формате JSON обратно на сервер и влияют на серверное представление UI.
В результате мы получаем веб-интерфейс с богатыми возможностями взаимодействия с пользователем, при этом избегая необходимости прямого применения HTML+CSS+JavaScript в прикладном коде. Следует отметить, что платформа CUBA предоставляет дополнительный уровень абстракции для создания пользовательского интерфейса: слой GenericUI, который позволяет описывать визуальное представление экранов с помощью XML и создавать Java-классы (контроллеры), выполняющие инициализацию экранов и обработку событий. Данный подход позволяет:
- хорошо структурировать код, отделяя описание визуального представления от логики обработки событий;
- упростить разработку UI, избавляя от необходимости оперировать тонкостями сторонних фреймворков и разнородных технологий;
- создавать единый код для отображения в web и desktop клиентах.
Desktop client
Данный компонент платформы CUBA не используется в системе ТЕЗИС, однако при возникновении специфических требований со стороны клиентских проектов (как например, более удобная работа с клавиатуры, повышенные требования к отказоустойчивости) некоторые экраны системы могут быть реализованы в десктопном приложении.
Web portal
Дополнительный блок клиентского уровня. Содержит интерфейс для внешних пользователей и средства интеграции с мобильными устройствами и сторонними приложениями. Представляет собой отдельное веб-приложение под управлением стандартного контейнера Java EE Web Profile. Реализация пользовательского интерфейса основана на фреймворке Spring MVC. Основные возможности сервисов:
- получение информации о модели данных (сущности и атрибуты);
- загрузка графов сущностей по идентификатору или по запросу на языке JPQL;
- сохранение графов сущностей;
- вызов методов сервисов middleware;
- передача данных в форматах XML или JSON, в зависимости от параметра запроса;
- контроль доступа к данным на основе профиля пользователя, от имени которого производится работа с веб-сервисом.