Все статьи

Выпущена версия Jmix 1.4

Недавно мы выпустили новую версию Jmix 1.4. В этой статье я расскажу о ключевых обновлениях, представленных в этом функциональном релизе.

Как обычно, полную информацию об изменениях и инструкции по обновлению смотрите на странице документации "Что нового".

Стабильное ядро Flow UI

Наиболее заметным изменением, без сомнения, является стабильное ядро модуля Flow UI, основанного на Vaadin 23. Теперь вы можете использовать его для создания новых проектов и ожидать обычного развития API и функциональности в будущем, с обратно совместимыми патчами и возможными незначительными несовместимостями в функциональных релизах.

Flow UI позволяет создавать адаптивные mobile-friendly веб-приложения без каких-либо особых усилий, используя ту же модель Java-программирования на стороне сервера и XML-компоновку с поддержкой в визуальном дизайнере Studio.

С точки зрения пользователя, интерфейс приложения Flow UI ближе к обычным веб-приложениям, чем у приложения, созданного с использованием классического пользовательского интерфейса Jmix. CRUD-экраны (views) теперь имеют уникальные URL-адреса, которые можно использовать в качестве глубоких ссылок на функциональность приложения. В главном окне больше нет внутренних вкладок, но главное меню позволяет пользователям открывать экраны в отдельных вкладках или окнах браузера, используя контекстное меню браузера или Ctrl/Cmd +Click.

Новый визуальный дизайнер для Flow UI имеет панель предварительного просмотра, которая показывает точный внешний вид экрана с учетом темы приложения и конкретных стилей компонентов. Кроме того, у него есть существенное отличие от дизайнера классического UI: здесь нет окна инструментов Palette. Вместо него используется действие Add Component, доступное через верхнюю панель действий, контекстное меню иерархии компонентов и меню Generate (Alt+Ins / Cmd+N).

Jmix Flow UI в данный момент находится на ранней стадии развития, и нам предстоит еще многое сделать, чтобы он стал таким же полнофункциональным, как классический UI. Многие важные функции, такие как универсальный фильтр, встроенное редактирование в DataGrid, фоновые задачи, диалоги ввода, сейчас отсутствуют и будут реализованы в следующем релизе.

В настоящее время модули Flow UI доступны для подсистемы безопасности (роли, политики), дополнений Audit и Data Tools (Entity Log, User Sessions, Entity Inspector). Таким образом, в проектах с Flow UI вы можете использовать эти дополнения и дополнения без UI, такие как REST, OIDC, хранилища файлов и т.п. Другие важные дополнения получат Flow UI в будущих релизах в следующем году.

Улучшения в Studio

В Jmix Studio 1.4 добавлен ряд полезных возможностей.

Раздел Конфигурация окна инструментов Jmix теперь отображает все классы, аннотированные @Configuration и производными от нее аннотациями (например, @SpringBootApplication), классы @ConfigurationProperties, а также файлы конфигурации запросов и сервисов REST:

Компоненты Spring, имеющие методы с сущностью в аргументах или результате, показываются в разделе Beans данной сущности:

Действие Inject для бинов Spring теперь поддерживает инжекцию в конструктор, что считается лучшей практикой. Чтобы использовать его вместо инжекции в поля, установите флажок Use constructor injection, и Studio создаст финальное поле и аргумент конструктора:

@Component
public class CustomerService {

    private final DataManager dataManager;

    public CustomerService(DataManager dataManager) {
        this.dataManager = dataManager;
    }

Новый мастер помогает создавать роли уровня строк. Чтобы создать такую роль, нажмите New → Row-level Role в окне инструментов Jmix и введите параметры роли в диалоговом окне:

Студия создаст аннотированный класс роли. Политики можно добавлять, используя действия Add Policy:

Теперь вы можете создать собственный набор шаблонов проектов, адаптированных для вашей организации.

Эта функция работает следующим образом: вы создаете JAR-файл с шаблонами и публикуете его в собственном репозитории артефактов. Разработчики устанавливают координаты артефакта в настройках IDE и выбирают ваш репозиторий в мастере New Project. Тогда Studio загружает как стандартные шаблоны (если их артефакт присутствует в репозитории), так и ваши, и показывает объединенный список шаблонов разработчику.

Более подробная информация о создании собственного артефакта шаблонов находится в документации.

Улучшения во фреймворке

Мы добавили пару точек расширения в подсистему безопасности.

Первая из них находится в механизме смены паролей пользователями. Вы можете предоставить собственные валидаторы паролей в виде компонентов Spring, реализующих интерфейс PasswordValidator:

@Component
public class MyPasswordValidator implements PasswordValidator<User> {

    @Override
    public void validate(PasswordValidationContext<User> context) throws PasswordValidationException {
         if (context.getPassword().length() < 3)
            throw new PasswordValidationException("Password is too short, must be >= 3 characters");
    }
}

Еще одна точка расширения находится в конфигурациях Spring security, предоставляемых фреймворком и дополнениями. Раньше, чтобы настроить некоторую конфигурацию, необходимо было скопировать всю конфигурацию в свой проект. Начиная с Jmix 1.4, вы можете просто создать компонент AbstractHttpConfigurer с вашей специфической логикой и присвоить ему квалификатор, который указывает на унаследованную конфигурацию для ее настройки:

@Component
@Qualifier(StandardSecurityConfiguration.SECURITY_CONFIGURER_QUALIFIER)
public class MySecurityConfigurer extends AbstractHttpConfigurer<MySecurityConfigurer, HttpSecurity> {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        MyFilter myFilter = new MyFilter();
        http.addFilterBefore(myFilter, UsernamePasswordAuthenticationFilter.class);
    }
}

Теперь вы можете блокировать записи на уровне базы данных при загрузке сущностей с помощью DataManager. Его fluent-интерфейс загрузки принимает значение перечисления javax.persistence.LockModeType в методе LockMode():

var customer = dataManager.load(Customer.class)
        .id(customerId)
        .lockMode(LockModeType.PESSIMISTIC_WRITE)
        .one();

При работе с JPA-сущностями это приводит к выполнению SQL-инструкции select ... for update.

Предварительная версия Jmix Authorization Server

Текущий модуль Jmix Security OAuth2, который используется для выдачи токенов при работе с REST, основан на ныне устаревшем проекте Spring Security OAuth. Кроме того, он реализует только Password Grant, который не рекомендуется спецификацией OAuth.

Чтобы решить обе эти проблемы, мы создали новый модуль OAuth, основанный на современном проекте Spring Authorization Server. Он поддерживает Authorization Code Grant и Client Credentials Grant.

Jmix Authorization Server находится на стадии предварительного просмотра и будет дорабатываться на основе ваших отзывов. Документация по нему находится в README проекта.

Что дальше?

В ближайшие месяцы мы собираемся довести основные функции Flow UI до уровня, сопоставимого с классическим UI, и предоставить модули Flow UI для наиболее важных дополнений, таких как BPM, Multitenancy и Reports.

В Studio мы работаем над стабильностю и планируем предоставить новый способ создания пользовательского интерфейса для элементов модели данных.

Наша подробная дорожная карта опубликована в виде проекта GitHub и регулярно обновляется.

Мы также постоянно работаем над исправлением проблем в текущем релизе 1.4. Патчи 1.4.x будут выходить примерно раз в месяц.

Мы будем рады увидеть ваши отзывы на нашем форуме!

Спасибо всем, кто поделился своими идеями, предложениями и сообщениями об ошибках!

Jmix - это open-source платфора быстрой разработки бизнес-приложений на Java