Выпуск Jmix 2.0 — важная веха в развитии платформы. В первую очередь мы провели глобальное обновление технологического стека, что гарантирует актуальность в долгосрочной перспективе.
Перед тем, как мы перейдем к разговору о новой версии, напомним, что продукт собой представляет. Jmix объединяет надежные и популярные open-source технологии, помогая кратно повысить эффективность разработки.
Ядро на Spring.
Визуальные инструменты разработки в сочетании с редактором кода IntelliJ IDEA.
Готовые подключаемые дополнения.
Встроенный визуальный редактор BPMN.
Платформу используют как корпоративные заказчики, так и самостоятельные Java-разработчики. Подробнее о том, что мы делаем, можно прочитать на сайте платформы https://www.jmix.ru.
А теперь — об основных нововведениях Jmix 2.0 и о том, что они значат для пользователей.
Обновленный технологический стек
Как мы уже упоминали, самое главное изменение в Jmix 2.0 — это новый технологический стек.
Фреймворк теперь основан на последних версиях базовых технологий:
Spring Boot 3.1, Spring Framework 6.0, Spring Security 6.1 в ядре Jmix.
Vaadin 24.0 в подсистеме Flow UI.
EclipseLink 4.0 в качестве имплементации JPA в подсистеме доступа к данным.
Flowable 7.0 в качестве движка BPM.
У новых версий базовых библиотек впереди долгий период поддержки, что гарантирует стабильное развитие платформы и приложений Jmix. Но есть и обратная сторона медали: теперь вам нужен как минимум JDK 17 для сборки и запуска приложений. Если вы развертываете свое приложение в WAR, необходимо обновить сервер Tomcat до версии 10.
Кроме того, в Jmix 2.0 не включена подсистема Classic UI, так как Vaadin 8, используемый в Classic UI, не совместим с новым Jakarta Servlet API и Spring 6. Поэтому чтобы перейти с Jmix 1.5 Classic UI на Jmix 2.0, вам необходимо заменить слой пользовательского интерфейса. Более подробно ситуация описана в нашем блоге в статье «Расширенная поддержка классического UI».
Для приложения Jmix 1.5 с Flow UI новая Studio 2.0 обеспечивает гладкую миграцию.
Flow UI для дополнений
Мы реализовали Flow UI для дополнений BPM, Business Calendars, Email и Reports, так что теперь вы можете использовать их с Jmix 2.0.
Дополнение BPM теперь имеет полнофункциональный runtime BPMN моделер и UI для администрирования процессов:
Новый UI дополнения Business Calendars:
Экран Email history:
Дизайнер отчетов стал визуально менее загруженным, теперь его удобнее использовать на экранах с низким разрешением:
Чтобы упростить UI для большинства случаев, дизайнер отчетов предполагает, что у полосы есть только один набор данных. Но если вы установите флажок Multiple Datasets, дизайнер переключится на более сложный вид:
Компонент GenericFilter
Компонент genericFilter теперь полнофункционален и позволяет создавать конфигурации и пользовательские условия как во время разработки, так и во время выполнения приложения. Конфигурациями времени выполнения и пользовательскими условиями могут управлять конечные пользователи:
Компонент CodeEditor
Новый компонент CodeEditor, основанный на Ace editor, позволяет пользователям просматривать и редактировать код с подсветкой синтаксиса и другими расширенными функциями, такими как различные цветовые темы:
Предотвращение закрытия вкладки браузера
Частой проблемой в веб-приложениях является потеря введенных данных, если пользователь случайно закрывает вкладку браузера. Теперь браузер показывает стандартное подтверждение о выходе со страницы, если пользователь пытается закрыть вкладку браузера во время отображения экрана деталей сущности:
Такое поведение можно включить или выключить в любом экране с помощью его метода setPreventBrowserTabClosing().
Быстрое развертывание в облаке
Разработчикам часто приходится демонстрировать свое приложение пользователям, руководству или коллегам. Это легко сделать непосредственно на своем локальном компьютере или c конвейером CI/CD, разворачивающим приложение в демонстрационной или тестовой среде. Но если вы индивидуальный разработчик и вам нужно продемонстрировать приложение людям на другом конце света, лучший вариант — развернуть его в облаке.
Теперь Jmix Studio позволяет это сделать за несколько простых шагов, которые не требуют каких-либо специальных знаний о деплойменте или облаках:
Зарегистрируйте учетную запись на AWS;
Установите Docker на свой локальный компьютер;
Выполните несколько шагов мастера Quick Cloud Deployment в Studio.
В результате за несколько минут ваше приложение будет запущено на сервере AWS EC2 и доступно пользователям по всему миру.
Studio самостоятельно генерирует docker-compose.yaml для вашего приложения, создает экземпляр EC2 через AWS API, устанавливает на него Docker, создает образ с приложением на сервере и запускает docker-compose с контейнерами приложения и базы данных PostgreSQL. Данные БД и файлового хранилища отображаются на файловую систему сервера, гарантируя сохранность при изменении исходного кода, перестройке и повторном развертывании приложения.
Эта функция долгое время считалась незавершенной и была скрыта в Studio. Теперь, в версии 2.0, она наконец готова к использованию.
Усовершенствования в Studio UI/UX
Окно инструментов Jmix теперь отображает раздел со всеми бинами Spring, определенными в проекте:
Вы можете сгруппировать бины и другие элементы по пакетам, используя следующую опцию:
В разделе Beans отображаются только бины, определенные аннотацией @Component или @Service в классе бина. Бины, созданные в конфигурациях Java с использованием аннотаций @Bean, здесь не показаны.
В диалоговом окне Inject теперь отображаются все бины, определенные во всем classpath, включая те, которые определены в конфигурациях Java с аннотациями @Bean. В разделе Other Beans предусмотрена группировка для упрощения поиска доступных бинов:
На нашем форуме была тема, где пользователь жаловался, что Studio генерирует код, который немедленно порождает предупреждения от IntelliJ типа «something can have ‘final’ modifier». Мы решили, что это справедливое замечание, и Studio должна соответствовать стандартному набору проверок IDE. В результате весь сгенерированный код теперь включает рекомендуемые модификаторы final. При желании эту опцию можно отключить в настройках плагина Jmix на вкладке Project Settings.
Еще одно улучшение, влияющее на генерируемый код, заключается в том, что теперь для временных меток в чертах (traits) Audit of creation, Audit of modification и Soft Delete используется тип OffsetDateTime. Поэтому база данных будет хранить временные метки с указанием часового пояса.
BPM in Studio
Если ваш проект включает дополнение BPM, в окне инструментов Jmix появляется соответствующий раздел. В нем отображаются процессы BPMN, черновики процессов и таблицы DMN:
Вы можете копировать определения процессов между папками Process Drafts и Processes, используя кнопки действий в верхней части окна моделера. Это позволяет организовать работу следующим образом: вы работаете с определением процесса BPMN в папке Process Drafts и копируете его в Processes, как только определение готово. Все определения процессов, расположенные в папке Processes, будут развернуты при следующем запуске приложения. Если что-то пойдет не так с развертыванием, вы можете скопировать процесс обратно в черновики и удалить его из Processes, чтобы позволить приложению запуститься.
Аутентификация в универсальном REST
В версии 1.4 мы представили Jmix Authorization Server в качестве функциональности для предварительного просмотра. В версии 2.0 он стал основным способом аутентификации в универсальном REST. Мотивация для этого изменения двоякая. С одной стороны, старый модуль Jmix Security OAuth2 нельзя использовать в Jmix 2.0, поскольку он зависит от устаревшего Spring Security OAuth, который несовместим с Spring Boot 3. С другой стороны, мы должны были следовать рекомендациям и избавиться от устаревшего процесса OAuth Password grant.
Теперь, если вы используете универсальный REST, вам нужно выбрать «тип гранта», который определяет, как клиенты REST будут получать токены доступа. Jmix Authorization Server поддерживает два типа гранта: Client Credentials и Authorization Code. У них обоих есть преимущество перед Password grant в том, что они не позволяют клиентскому приложению знать пароль пользователя.
Наиболее похожим на старый Password grant и простым в реализации является Client Credentials grant. Его следует использовать для обмена данными между серверами, например, для интеграции со сторонней системой. В этом случае конфигурация Jmix Authorization Server включает в себя назначение клиенту списка существующих ролей приложения, например rest-minimal, order-management и т.п. Чтобы получить токен доступа, клиенту просто нужно передать свои client-id и client-secret в заголовке базовой аутентификации. Последующие вызовы API с этим токеном будут иметь контекст безопасности специального пользователя с именем, равным client-id, и списком ролей, настроенных для этого клиента в свойствах приложения. Другими словами, клиент получает статический набор разрешений и никогда не работает как реальный пользователь приложения.
Authorization Code grant более сложный, но он позволяет клиенту работать от имени реального пользователя приложения. При таком типе гранта, когда клиент запрашивает аутентификацию, Jmix Authorization Server сам показывает страницу логина для пользователя, на которой он должен ввести свое имя и пароль. Затем сервер возвращает клиенту промежуточный код авторизации. Клиент обменивает код на токен доступа и использует токен для вызовов API. Таким образом, клиент работает как пользователь, но при этом не получая его пароля.
Заключение
С переходом на обновленный технологический стек и полноценный Flow UI платформа Jmix завершает этап модернизации и переходит к устойчивому развитию. Наша команда продолжит работу над созданием новой функциональности и постоянным улучшением общего качества продукта.
Для следующего функционального релиза, который выйдет в октябре 2023 года, мы уже запланировали несколько важных обновлений. Они включают реализацию Flow UI для еще нескольких дополнений, добавление SuggestionField и SettingsFacet в Flow UI, а также улучшения в поддержке репозиториев данных. Наша подробная дорожная карта опубликована в виде проекта GitHub и регулярно обновляется.
Мы будем рады увидеть ваши отзывы на нашем форуме!
Спасибо всем, кто поделился своими идеями, предложениями и сообщениями об ошибках!