Ограничения

В этом разделе описаны текущие ограничения дополнения Dynamic Model. Объяснение используемых ниже терминов см. в разделе Концепции.

Хранение и хранилища данных

  • Дополнительные таблицы, в которых хранятся динамические атрибуты статической сущности, всегда создаются в том же хранилище данных, что и владеющая ими статическая сущность.

  • Поддерживаются только хранилища данных на основе JPA: основное и дополнительные с типом JpaDataStore.

  • Динамические ссылки и динамические коллекции разрешены только между сущностями, принадлежащими одному хранилищу данных.

Ограничения идентификаторов

  • Динамические ссылочные атрибуты не поддерживают составные идентификаторы: целевая сущность должна иметь простой ID.

  • Динамические атрибуты-коллекции не поддерживаются для статических владельцев, имеющих составной идентификатор.

Коллекции

Динамические атрибуты-коллекции поддерживаются только как упорядоченные композиции List.

Поддержка запросов

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

  • Как для загрузок со статическим корнем, так и для загрузок с динамическим корнем не поддерживаются:

    • Макросы даты/времени.

    • Условия по путям динамических атрибутов со значениями-коллекциями.

    • Фильтрация и сортировка по вычисляемым атрибутам (они вычисляются при обращении и не хранятся в базе данных).

  • Для загрузок с динамическим корнем (где запрашиваемая сущность является динамической) дополнительно не поддерживаются:

    • Условия JPQL.

    • Операции с членами коллекций.

Редактирование модели в административном UI

Административный UI сохраняет семантику конфигурации Динамической модели, но преобразование модели в графический редактор и обратно не сохраняет исходное форматирование YAML, комментарии, якоря, псевдонимы или порядок ключей раздела model.

Произвольные вложенные значения объектов, такие как parameters валидации и templateParams экрана, редактируются как необработанные YAML-фрагменты. Это сохраняет их типы значений нетронутыми, но не предоставляет типизированного графического редактора для таких вложенных объектов.

Атомарность применения

Публикация новых метаданных является атомарной, а деструктивная очистка удалённых метаданных и объектов схемы откладывается до тех пор, пока предыдущее поколение модели больше не используется выполняющимися операциями. Однако аддитивная работа, выполняемая до публикации, не является транзакционной и не откатывается, если применение завершается неудачей:

  • Неудачное применение может оставить в базе данных аддитивные таблицы, столбцы или ограничения уникальности. Они не содержат данных и никогда не заполняются, пока опубликованное поколение модели не сошлётся на них. Они повторно используются при следующем применении.

  • Неудачное применение может оставить сгенерированные классы сущностей и перечислений загруженными в память на время жизни JVM. Это не влияет на базу данных или корректность и перезаписывается при следующем успешном применении.

  • Развёртывание динамических экранов выполняется после публикации метаданных, а не как часть атомарного применения. Объявления экранов проверяются до применения, но если развёртывание завершается неудачей после этого, новое поколение модели уже работает, в то время как некоторые динамические экраны могут отсутствовать или быть устаревшими. Повторное применение модели восстанавливает экраны.

Кластер серверов приложения

Текущая реализация не поддерживает работу в кластере. Только один экземпляр сервера приложения может работать с динамической моделью, потому что модель, примененная на одном экземпляре, не распространяется на другие во время выполнения. Поддержка кластера запланирована для следующего релиза Jmix.