Все статьи
Содержание

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

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

    В этой статье мы коротко расскажем об основных изменениях, с полным списком можно ознакомиться в соответствующих release notes:
    platform-6.5-release
    studio-6.5-release

    Содержание

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

    Uber JAR

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

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

    text

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

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

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

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

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

    text

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

    Версионирование 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>
    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    text

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

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

    text

    Заключение

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

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