- PVSM.RU - https://www.pvsm.ru -

Что нового в CUBA Platform 6.5

Вы могли заметить, что мы опубликовали новые минорные релизы платформы CUBA [1] и CUBA Studio. В новой версии реализованы улучшения, в основном касающиеся текущего функционала, но мы добавили и несколько новых полезных фич.

Под катом:

  • Uber JAR
  • UI-компонент для предиктивного поиска
  • Версионирование REST API
  • Балансировка нагрузки в кластере
  • Компонент приложения ZooKeeper
  • Улучшения в Polymer UI
  • Поддержка Bean Validation в CUBA Studio
  • Поддержка Groovy в слушателях сущностей

Uber JAR

Наиболее ожидаемая фича в сообществе разработчиков платформы. Благодаря Uber JAR мы максимально упростили распространение CUBA приложений.

Для создания Uber JAR достаточно определить нужную конфигурацию в CUBA Studio или в вашей IDE и в пару кликов собрать JAR файлы.

CUBA Studio overview

Чтобы запустить приложение, достаточно выполнить две команды:

java -jar app-core.jar
java -jar app.jar

Uber JAR уже содержит в себе все зависимые компоненты, а также легкий HTTP Сервер. Дополнительную информацию можно найти в этой главе [2] документации.

Ввод текста с подсказками

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

SuggestionPickerField

Подробнее – в документации [3]. «Вживую» компонент можно пощупать в онлайн демо-приложении Sampler [4].

Версионирование REST API

Когда приложение уже находится в промышленной эксплутации, бывает так, что из-за обычного рефакторинга имён сущностей или атрибутов универсальный REST API становится несовместимым со старой версией клиента (например, мобильным приложением) или внешними системами.

Для решения этой проблемы, в новой версии CUBA добавлен механизм трансформации REST запросов. Правила трансформации могут быть заданы в простом XML формате, согласно которому платформа приводит запросы в старом формате к последней версии API.

Например, если мы переименуем сущность OldOrder в NewOrder, а также её атрибут date в deliveryDate, то используя нижеприведённый XML для трансформаций, мы сохраним совместимость с клиентами, которые используют старый API.

<?xml version="1.0"?>
<transformations xmlns="http://schemas.haulmont.com/cuba/rest-json-transformations.xsd">
    <transformation modelVersion="1.0"
                    oldEntityName="sales$OldOrder"
                    currentEntityName="sales$NewOrder">
        <renameAttribute oldName="date" currentName="deliveryDate"/>
        <toVersion>
            <removeAttribute name="discount"/>
        </toVersion>
    </transformation>
</transformations>

Как обычно, детали описаны в документации [5].

Балансировка нагрузки в кластере

До версии 6.5 в платформе не поддерживалась балансировка нагрузки между веб- и средним слоем. Соответственно, веб сервер с самого начала выбирал сервер среднего слоя из списка cuba.connectionUrlList и не менял его до того момента, пока тот не становился недоступным.

В последней версии платформы распределение осуществляется на уровне пользовательской сессии. Сервер среднего слоя выбирается случайным образом во время первого удаленного соединения. Установленная сессия является sticky и закрепляет выбранный сервер на всей своей продолжительности. Если запрос приходит от анонимной сессии или без сессии, то закрепления не происходит и запрос идет на случайно заданный сервер в кластере.

Если в отдельном случае Вам потребуется самостоятельно задать правила распределения, то это можно будет сделать переопределением бина cuba_ServerSorter, который по умолчанию использует класс RandomServerSorter.

Компонент приложения ZooKeeper

Благодаря добавлению этого компонента значительно упрощается управление конфигурацией кластера. Новый компонент интегрирует Ваше приложение с Apache ZooKeeper [6] – централизованным сервисом для поддержания информации о конфигурации.

Теперь для управления топологией кластера Вам достаточно дать адрес ZooKeeper. После этого серверы среднего слоя будут публиковать свои адреса через каталог ZooKeeper, а механизмы обнаружения нового компонента будут запрашивать у ZooKeeper адреса доступных серверов. Если сервер среднего слоя становится недоступным, то он автоматически исключается из каталога — в тот же момент или после таймаута.

Исходный код компонента приложения с документацией доступен на GitHub [7]. Бинарные артефакты опубликованы в стандартных репозиториях CUBA.

Улучшения в Polymer UI

Судя по активности на форуме поддержки, всё больше разработчиков начинает использовать новый веб-клиент для CUBA приложений на основе Google Polymer. В этом релизе мы добавили ряд фич, которые призваны упростить разработку.

Во-первых, при открытии на редактирование сущности из списка, пользователь будет перенаправлен на форму для редактирования, находящуюся по другому URL. То есть теперь можно использовать стандартный механизм отслеживания истории в браузере, и прямые ссылки на редактор конкретной сущности.

Вторая доработка – это компонент cuba-lookup [8]. Он позволяет выбирать значение ссылочного атрибута не из выпадающего списка, а из всплывающего окна со списком сущностей.

Наконец, в библиотеке визуальных компонентов добавлен компонент [9] для загрузки файлов на сервер. Загруженный файл отображается в виде активной ссылки.

Поддержка Bean Validation в CUBA Studio

Настройка валидации данных теперь поддерживается из пользовательского интерфейса CUBA Studio. Вы можете определить ограничения атрибутов, а также сообщения, которые будут выводиться при несоответствии введенных значений заданным ограничениям.

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

Bean Validation

Поддержка Groovy в слушателях сущностей

Теперь CUBA Studio поддерживает скаффолдинг обработчиков событий изменения сущностей (Entity Listeners) на Groovy. Для этого достаточно включить Groovy Support в Project properties > Advanced tab.

Groovy Entity Listeners

Резюме

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

platform-6.5-release (англ.) [10]
studio-6.5-release (англ.) [11]

Также, приглашаем посмотреть видеозапись вебинара [12], посвящённой релизу (англ.).

Автор: Haulmont

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/260279

Ссылки в тексте:

[1] платформы CUBA: https://www.cuba-platform.ru/

[2] этой главе: https://doc.cuba-platform.com/manual-6.5/uberjar_deployment.html

[3] документации: https://doc.cuba-platform.com/manual-6.5/gui_SuggestionPickerField.html

[4] Sampler: https://demo.cuba-platform.com/sampler/open?screen=datasource-suggestion-picker-field

[5] документации: https://doc.cuba-platform.com/manual-6.5/rest_api_v2_data_model_versioning.html

[6] Apache ZooKeeper: https://zookeeper.apache.org/

[7] GitHub: https://github.com/cuba-platform/cuba-zk

[8] cuba-lookup: https://cuba-elements.github.io/cuba-elements/components/cuba-ui/

[9] компонент: https://cuba-elements.github.io/cuba-elements/components/cuba-file-field/

[10] platform-6.5-release (англ.): http://files.cuba-platform.com/cuba/release-notes/6.5/#platform

[11] studio-6.5-release (англ.): http://files.cuba-platform.com/cuba/release-notes/6.5/#studio

[12] видеозапись вебинара: https://vimeo.com/214066066

[13] Источник: https://habrahabr.ru/post/332906/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best