Что нового
В данном разделе приведена информация о новой функциональности и возможных несовместимых изменениях в фреймворке 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 к новому методу получения токенов доступа.