Что нового

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

Следующие дополнения теперь доступны в проектах с Flow UI:

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 теперь отображаются все бины, определенные в проекте.

Используйте команду OptionsGroup by Packages чтобы переключиться с плоского списка на структурированное представление.

BPM в окне инструментов Jmix

Если ваш проект включает дополнение BPM, в окне инструментов Jmix появляется раздел BPM. В этом разделе отображаются BPMN-процессы, черновики процессов и DMN-таблицы из следующих каталогов проекта:

Подраздел Каталог Расширение файлов

Processes

src/main/resources/processes

.bpmn или .bpmn20.xml

Process Drafts

src/main/resources/process-drafts

.draft.bpmn

DMN Tables

src/main/resources/dmn

.dmn.xml

При выполнении команды NewBPMN 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, без необходимости поиска нужных каталогов и файлов. Очистка может помочь, если у вас возникли проблемы с шаблонами проектов, созданием экранов или с дизайнером экранов.

Выполните команду FileInvalidate Caches, выберите флажок Delete Jmix Studio templates and artifacts caches и нажмите Invalidate and Restart.

Опасные изменения

Переименованные свойства и классы

  1. Префикс jmix.flowui свойств приложения изменен на jmix.ui. [1]

  2. Переименованы специальные политики безопасности:

    • 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

  3. Базовый класс io.jmix.core.metamodel.datatype.impl.EnumClass перемещен в пакет io.jmix.core.metamodel.datatype. [1]

  4. Фасет queryParameters переименован в urlQueryParameters. [1]

  5. Префикс list_ добавлен к именам типов стандартных действий списка. [1]

  6. Переименованы типы действий:

    • excelExportgrdexp_excelExport

    • showRoleAssignmentssec_showRoleAssignments

    • showRoleAssignmentssec_showRoleAssignments

    • resetPasswordsec_resetPassword

  7. Во всех классах фреймворка, за исключением конфигураций и авто-конфигураций Spring, префикс Flowui удален или заменен на Ui. Использование класса io.jmix.flowui.kit.component.FlowuiComponentUtils автоматически заменяется на ComponentUtils процедурой миграции Studio. Если в вашем проекте используются другие классы с префиксом Flowui, измените имена классов вручную. Детальная информация об изменениях в тикете #1830.

Удаленная функциональность

  1. Удалены методы интерфейса Actions, создающие действие по его классу. Замените данные методы методами создания действий по их строковым идентификаторам. Подробнее см. тикет #1529.

  2. Поддержка tooltip удалена из следующий UI компонентов: ComboButton, DropdownButton, SimplePagination, UserIndicator.

  3. Удален класс UiLoginProperties, объявленный устаревшим в Jmix 1.5. Если вы создавали проект еще на Jmix 1.4, данный класс используется в вашем LoginView, поэтому вам необходимо изменить класс LoginView и его XML-дескриптор на те, которые предоставляются шаблоном создания проекта в Jmix 2.0.

  4. Jmix BOM более не описывает зависимость commons-fileupload:commons-fileupload.

  5. Удалено свойство 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 к новому методу получения токенов доступа.

Список изменений


1. Процедура миграции Studio производит необходимые изменения в вашем проекте автоматически.