Что нового
В данном разделе приведена информация о новой функциональности и возможных несовместимых изменениях в фреймворке Jmix и Jmix Studio версии 2.0. Примите их во внимание при обновлении с предыдущей версии фреймворка.
Для создания новых проектов в Jmix 2.0 или для апгрейда существующего проекта требуется Studio 2.0 или более поздней версии, поэтому в первую очередь обновите плагин Jmix Studio. Минимальная требуемая версия IntelliJ IDEA - 2022.3. Автоматическая миграция с Jmix 1.5 на 2.0 возможна только в том случае, если ваш проект основан на Flow UI и использует JDK 17. |
Раздел Апгрейд проекта содержит информацию о том, как обновить проект с помощью Studio. Процедура автоматической миграции вносит следующие изменения в ваш проект:
-
Обновляет версию Jmix BOM, которая, в свою очередь, определяет версии всех зависимостей.
-
Обновляет версию Jmix Gradle plugin.
-
Обновляет версию Gradle wrapper до 8.0.2 в
gradle/wrapper/gradle-wrapper.properties
. -
Заменяет пакеты Java EE на Jakarta EE (
javax
наjakarta
за некоторыми исключениями). -
Заменяет использование
io.jmix.core.metamodel.datatype.impl.EnumClass
наio.jmix.core.metamodel.datatype.EnumClass
. -
Заменяет использование
io.jmix.flow ui.kit.component.FlowuiComponentUtils
наio.jmix.flow ui.kit.component.ComponentUtils
. -
Заменяет использование
javax.annotation.Nullable
наorg.springframework.lang.Nullable
. -
Заменяет свойства приложения, начинающиеся с
jmix.flowui
наjmix.ui
. -
Заменяет специальное разрешение
flowui.loginToUi
наui.loginToUi
. -
В дескрипторах экранов:
-
Изменяет элемент
queryParameters
наurlQueryParameters
. -
Изменяет стандартные типы действий со списком на
list_
.
-
-
Добавляет блок скрипта в файл
index.html
.
См. полный список опасных изменений, которые могут затронуть ваш проект после обновления.
Обновленные зависимости
Обновлены слеудющие важные зависимости:
-
Spring Boot 3.1
-
Vaadin 24.0
-
EclipseLink 4.0
-
Flowable 7.0
Для сборки и запуска приложений теперь требуется JDK 17.
Для WAR-развертывания требуется Tomcat 10.
Новая и улучшенная функциональность
Flow UI Test Assist
Модуль Flow UI Test Assist был улучшен и теперь поддерживает взаимодействие между экранами. Пример UI-теста для экранов управления пользователями генерируется в новом проекте приложения.
Подробности в тикете #1467.
Компонент GenericFilter
Компонент genericFilter
теперь позволяет создавать конфигурации и собственные условия во время разработки и во время выполнения. Конфигурациями времени выполнения и пользовательскими условиями могут управлять конечные пользователи.
Пример конфигурации времени разработки:
<genericFilter id="genericFilter" dataLoader="usersDl">
<properties include=".*"/>
<configurations>
<configuration id="byEmail" name="By email">
<propertyFilter operation="CONTAINS" property="email"/>
</configuration>
</configurations>
</genericFilter>
Чтобы создать конфигурацию во время работы приложения, добавьте несколько условий, а затем сохраните их как конфигурацию, используя меню настроек фильтра (кнопка "шестеренка").
Чтобы создать пользовательское условие, используйте кнопку Create в диалоговом окне Add condition.
Компонент CodeEditor
Новый компонент codeEditor
, основанный на Ace editor, позволяет пользователям просматривать и редактировать код с подсветкой синтаксиса, автоматическими отступами и другими расширенными функциями. В то же время он обеспечивает декларативную привязку данных с помощью атрибутов dataContainer
и property
.
Например:
<codeEditor id="codeEditor" mode="GROOVY"
dataContainer="taskDc" property="script"/>
Предотвращение закрытия вкладки браузера
Веб-браузер теперь показывает стандартное подтверждение о выходе со страницы, если пользователь закрывает вкладку браузера при отображении экрана деталей сущности. Это предотвращает случайную потерю несохраненных данных.
Чтобы отключить подтверждение для некоторого экрана, вызовите его метод setPreventBrowserTabClosing()
в обработчике InitEvent
:
@Subscribe
public void onInit(final InitEvent event) {
setPreventBrowserTabClosing(false);
}
Передача параметров при навигации
Введен новый способ передачи параметров экранам, открываемым с помощью навигации: использование обработчика AfterViewNavigationEvent
, создаваемого в вызывающем коде. Данный способ позволяет легко передавать сложные типы данных, но параметры не отражаются в URL-адресе и теряются, если пользователь обновляет веб-страницу.
Подробная информация приведена в разделе Открытие экранов.
Быстрое развертывание в облаке
Функциональность быстрого развертывания в облаке была полностью переработана и теперь доступна по умолчанию в окне инструментов Jmix. Она позволяет вам легко развернуть приложение на автоматически создаваемом сервере AWS EC2.
Бины в окне инструментов Jmix
В окне инструментов Jmix теперь отображаются все бины, определенные в проекте.
Используйте команду Options → Group by Packages чтобы переключиться с плоского списка на структурированное представление.
BPM в окне инструментов Jmix
Если ваш проект включает дополнение BPM, в окне инструментов Jmix появляется раздел BPM
. В этом разделе отображаются BPMN-процессы, черновики процессов и DMN-таблицы из следующих каталогов проекта:
Подраздел | Каталог | Расширение файлов |
---|---|---|
Processes |
|
|
Process Drafts |
|
|
DMN Tables |
|
|
При выполнении команды New → BPMN Process, Studio создает новый черновик процесса и отображает его в разделе Process Drafts
. Когда процесс готов, нажмите кнопку Copy to Processes в верхней панели действий дизайнера BPM, или используйте контекстное меню в окне инструментов Jmix. Studio скопирует черновик в раздел Processes
и удалит расширение draft
из имени файла.
Содержимое разделов Processes
и DMN Tables
автоматически развертывается на старте приложения.
Все бины в диалоге Inject
В диалоговом окне Inject теперь отображаются все бины, определенные в classpath проекта, включая те, которые определены в Java-конфигурациях аннотациями @Bean
.
Когда включена опция группировки на панели инструментов диалогового окна, разделы Other Beans
и Other Properties
группируют содержимое по первой части имени пакета, не являющейся TLD (доменом верхнего уровня).
Наличие класса в диалоговом окне Inject не гарантирует, что компонент будет успешно инжектирован во время выполнения. Это зависит от многих условий, которые не могут быть надежно проанализированы студией во время разработки. |
Использование модификатора final
Studio теперь использует модификатор final
для полей, переменных и параметров метода при генерации кода.
Вы можете отключить эту функцию в разделе Project Settings на странице настроек плагина Jmix.
OffsetDateTime для полей аудита
Атрибуты сущности, используемые в качестве временных меток в чертах (traits) Audit of creation
, Audit of modification
и Soft Delete
, теперь создаются с типом OffsetDateTime
. Таким образом, база данных хранит временную метку с указанием часового пояса.
Очистка кэшей Studio
Теперь вы можете удалить информацию, сохраненную Studio в каталоге конфигурации IDE, без необходимости поиска нужных каталогов и файлов. Очистка может помочь, если у вас возникли проблемы с шаблонами проектов, созданием экранов или с дизайнером экранов.
Выполните команду File → Invalidate Caches, выберите флажок Delete Jmix Studio templates and artifacts caches и нажмите Invalidate and Restart.
Опасные изменения
Переименованные свойства и классы
-
Префикс
jmix.flowui
свойств приложения изменен наjmix.ui
. [1] -
Переименованы специальные политики безопасности:
-
datatools.flowui.showEntityInfo
>datatools.showEntityInfo
-
flowui.loginToUi
>ui.loginToUi
[1] -
flowui.showExceptionDetails
>ui.showExceptionDetails
-
flowui.filter.modifyJpqlCondition
>ui.genericfilter.modifyJpqlCondition
-
flowui.filter.modifyConfiguration
>ui.genericfilter.modifyConfiguration
-
flowui.genericfilter.modifyGlobalConfiguration
>ui.genericfilter.modifyGlobalConfiguration
-
-
Базовый класс
io.jmix.core.metamodel.datatype.impl.EnumClass
перемещен в пакетio.jmix.core.metamodel.datatype
. [1] -
Фасет
queryParameters
переименован вurlQueryParameters
. [1] -
Префикс
list_
добавлен к именам типов стандартных действий списка. [1] -
Переименованы типы действий:
-
excelExport
→grdexp_excelExport
-
showRoleAssignments
→sec_showRoleAssignments
-
showRoleAssignments
→sec_showRoleAssignments
-
resetPassword
→sec_resetPassword
-
-
Во всех классах фреймворка, за исключением конфигураций и авто-конфигураций Spring, префикс
Flowui
удален или заменен наUi
. Использование классаio.jmix.flowui.kit.component.FlowuiComponentUtils
автоматически заменяется наComponentUtils
процедурой миграции Studio. Если в вашем проекте используются другие классы с префиксомFlowui
, измените имена классов вручную. Детальная информация об изменениях в тикете #1830.
Удаленная функциональность
-
Удалены методы интерфейса
Actions
, создающие действие по его классу. Замените данные методы методами создания действий по их строковым идентификаторам. Подробнее см. тикет #1529. -
Поддержка tooltip удалена из следующий UI компонентов:
ComboButton
,DropdownButton
,SimplePagination
,UserIndicator
. -
Удален класс
UiLoginProperties
, объявленный устаревшим в Jmix 1.5. Если вы создавали проект еще на Jmix 1.4, данный класс используется в вашем LoginView, поэтому вам необходимо изменить класс LoginView и его XML-дескриптор на те, которые предоставляются шаблоном создания проекта в Jmix 2.0. -
Jmix BOM более не описывает зависимость
commons-fileupload:commons-fileupload
. -
Удалено свойство
jmix.rest.max-upload-size
. Вместо него используйте свойствоspring.servlet.multipart.max-file-size
и другие из MultipartProperties. Подробнее см. тикет #1496.
Инициализация репозиториев данных
Опциональная ранее аннотация @EnableJmixDataRepositories
теперь обязательна для инициализации репозиториев данных в проекте. Подробнее см. тикет #1589.
Округление в Datatype
Реализации интерфейса Datatype для типов BigDecimal
, Double
и Float
теперь округляют значения в соответствии с указанными для них форматами при парсинге из строк. Например, строка "12.3456"
становится числом 12.35
, если установлен формат #.##
.
Чтобы вернуть предыдущее поведение, установите свойство jmix.core.round-decimal-value-by-format
в false. Подробности в тикете #968.
Bean Validation на уровне персистенции
Bean validation на уровне персистенции теперь включено по умолчанию. Это означает, что при сохранении сущности через DataManager
, EntityManager
или репозитории данных, она будет провалидирована и если ее состояние невалидно, будет выброшено исключение.
Bean validation на уровне персистенции можно отключить путем установки следующего свойства приложения:
jakarta.persistence.validation.mode = NONE
Контроль доступа в Generic REST
Дополнение Универсальный REST теперь использует Jmix Authorization Server для получения токенов доступа. Подробная информация приведена в разделе Контроль доступа.
Если в вашем проекте используется Универсальный REST, необходимо выполнить следующее:
-
Заменить зависимость
io.jmix.security:jmix-security-oauth2-starter
наio.jmix.authserver:jmix-authserver-starter
. -
Сконфигурировать Client Credentials или Authorization Code грант в приложении.
-
Адаптировать клиентов вашего REST к новому методу получения токенов доступа.