Введение

Добро пожаловать в документацию Jmix!

Что такое Jmix?

Jmix – это высокоуровневый фреймворк для разработки корпоративных веб-приложений. Он предлагает передовой инструментарий и богатый набор функциональных модулей.

Jmix лучше всего подходит для создания ориентированных на данные приложений со сложной моделью данных и насыщенным пользовательским интерфейсом. Это full-stack фреймворк, что означает поддержку разработки и backend, и UI вашего приложения.

Jmix основан на Spring Boot, что является фактически стандартом для разработки корпоративных веб-приложений на Java. Это означает, что вы можете использовать множество сторонних библиотек и фреймворков после минимальной конфигурации в дополнение к функционалу самого Jmix.

Jmix Studio – это плагин для IntelliJ IDEA, который помогает на всех этапах разработки приложений: создание и конфигурация проекта, определение модели данных, генерация скриптов для миграции базы данных, разработка UI экранов в визуальном редакторе. Он предоставляет продвинутую навигацию, автодополнение кода и инспекции, специфичные для Jmix-проектов.

Начало работы

Если вы новичок в Jmix, посмотрите 15-минутное ознакомительное видео: Quick Start.

Пройдите Tutorial чтобы изучить базовые концепции и приемы программирования на Jmix.

Если вы хотите получить высокоуровневое представление о Jmix перед тем как погрузиться в разработку, взгляните на архитектурные диаграммы, приведенные ниже.

Используйте данную документацию при разработке на Jmix:

  • В разделе Использование Studio детально представлены особенности Jmix Studio и варианты установки.

  • Корневые разделы от Модели данных до Развертывания объясняют основные функции, помогающие при разработке приложений любого типа.

  • Раздел Дополнения описывает дополнительные модули, которые вы можете использовать в своем проекте.

Обзор архитектуры

Здесь представлены несколько диаграмм в нотации C4, которые показывают общую картину ландшафта Jmix.

Контейнеры

Во-первых, давайте разделим типичную информационную систему, построенную с помощью Jmix, на контейнеры. Контейнер здесь – это отдельно запускаемый / развертываемый модуль, который выполняет код или хранит данные.

architecture containers.drawio

Как видите, основная часть системы включает в себя веб-приложение, работающее на JVM, и реляционную базу данных. Веб-приложение основано на Spring Boot и может быть написано на Java или Kotlin. Реляционная база данных используется для хранения данных подсистем Jmix (например, конфигурации безопасности) и в качестве основного хранилища данных приложений.

Приложение Jmix может подключаться к любому количеству дополнительных хранилищ данных и использовать отдельное файловое хранилище в файловой системе или в облаке. Кроме того, Jmix предлагает интеграцию с Elasticsearch для полнотекстового поиска по данным приложения и с сервером OIDC для внешней аутентификации и единого входа.

Приложение Jmix предоставляет пользователям веб-интерфейс. Он создан на Java/Kotlin и XML с использованием подсистемы пользовательского интерфейса Jmix.

Вы также можете создать отдельное интерфейсное приложение и подключить его к бэкенду Jmix через Jmix REST API или путем создания собственных конечных точек API. Обратите внимание, что интерфейсные приложения выходят за рамки Jmix, и вы можете создавать их с помощью любой технологии по вашему выбору.

Компоненты

Давайте подробнее рассмотрим контейнер Jmix Application и его компоненты.

architecture jmix application.drawio

Приложение Jmix всегда содержит зависимости от Spring Boot и ряда подсистем Jmix. Существует две категории подсистем Jmix:

  • Основные подсистемы (Core subsystems) обеспечивают функциональность системного уровня и включены в большинство проектов.

  • Дополнения (Add-ons) – это дополнительные подсистемы, которые могут быть включены в проект по требованию. Они публикуются в Каталоге дополнений Jmix.

Технически, как основные подсистемы, так и дополнения организованы одинаково. Подсистема содержит один или несколько функциональных модулей и соответствующие средства запуска Spring Boot, каждый из которых упакован в JAR-файл. Подсистема может зависеть от других подсистем: например, многие дополнения содержат экраны, которые требуют зависимости от основной подсистемы пользовательского интерфейса.