Критические изменения
На этой странице собраны изменения, которые могут нарушить обратную совместимость при обновлении платформы Citeck. При переходе на новую версию рекомендуется ознакомиться с соответствующим разделом и выполнить необходимые миграционные действия до обновления продуктивной среды.
Релиз 2025.8
Изменена логика вычисления прав по умолчанию для системных артефактов ecos-data (ecos-webapp-common:3.18.23). Если артефакт системный, то права на чтение имеют все пользователи, права на запись — только администраторы.
Если в пользовательских типах данных есть указанные как system, то к ним будет применена новая логика. Если необходимо сделать доступ на редактирование, то выставить system=false, тогда редактировать смогут все, либо сделать матрицу прав.
Релиз 2024.8
В рамках релиза 2024.8 было выполнено обновление всех коробочных микросервисов и библиотек.
Обновления версий
Обновление версии java до 21 (последняя LTS на момент миграции);
Обновление spring boot до 3.3.2 (последняя стабильная на момент миграции);
Обновление spring до 6.1.11 (подтянулся при обновлении spring boot);
Обновление версии kotlin до 2.0.0;
Обновление camunda до 7.21.0;
Обновление всех остальных зависимостей до последних стабильных версий.
Обновление технологий
Движок для скриптов nashorn был заменён на GraalVM JS. GraalVM JS — современный аналог устаревшему nashorn. Обновление позволяет использовать функционал новых версий JS.
Подробнее о миграции и совместимости движков.
Доработки
Полностью переписан ecos-gateway на основе spring-cloud-gateway на реактивных технологиях и виртуальных потоках. Это позволит обрабатывать большое количество одновременных запросов, не упираясь в лимит потоков.
Доработаны контексты вроде AuthContext, I18nContext и др. с тем, чтобы они не заполняли стектрейс запроса на уровне HTTP фильтров (на 4-5 строк все стектрейсы по входящим HTTP запросам сократились).
Микросервисы больше не регистрируются в ecos-registry. Service Discovery работает на базе реестра приложений в Zookeeper.
Исправлена проблема, которая не давала подняться приложению с новой версией hazelcast, если приложение со старой версией еще работает (rolling update при повышении версии — Enterprise фича hazelcast).
Добавлен spring профиль json_logs. Если его включить, то логи будут записываться в виде json объектов.
Удаление устаревшего кода
Удален старый RecordsService и все старые RecordsDao интерфейсы. Метод RecordsServiceFactory.recordsServiceV1 переименован в RecordsServiceFactory.recordsService.
Удален RecordRef.
RecordEvaluatorService и связанные с ним классы перенесены из ecos-records в ecos-uiserv, т.к. данный функционал используется только там.
Все микросервисы используют стандартные библиотеки jackson/snakeyaml/guava.
REST контроллер для RecordsAPI удален из ecos-webapp-commons и размещен только в ecos-gateway. Микросервисы между собой должны общаться по ECOS WebAPI, REST нужен только для запросов извне.
Удалена логика фасадов из ecos-history и убрана его зависимость от mongo.
Совместимость
По Records API совместимость любых новых и старых микросервисов полная. Микросервисы с обновленным parent’ом перестают регистрироваться в ecos-registry и как следствие — старая версия ecos-gateway не может прокидывать на них обычные REST запросы (например /gateway/uiserv/api/ui-cache?types=theme). Если сначала обновить gateway до 3.0.0+, то любые другие микросервисы можно уже обновлять по отдельности.
Возможные проблемы со скриптами
Новый движок в противовес старому использует подход «безопасный по умолчанию». Это означает, что многие функции, которые были доступны в nashorn «из коробки», отключены.
В нашем решении мы включили некоторые из этих функций по умолчанию:
val defaultHostAccess: HostAccess = HostAccess.newBuilder(HostAccess.SCOPED)
.allowMapAccess(true)
.allowListAccess(true)
.allowArrayAccess(true)
.allowBigIntegerNumberAccess(true)
.allowIterableAccess(true)
.allowIteratorAccess(true)
.allowAccessInheritance(true)
.build()
Но некоторые части всё ещё требуют миграции (флаг совместимости с nashorn лучше не включать по возможности из соображений безопасности):
Функционал доступа к геттерам через простое указание имени свойства (т.е. возможность вместо abc.getName() писать abc.name) в новом движке «из коробки» отключен.
Функционал доступа к java классам «из коробки» отключен.
Java классы, с которыми идет работа внутри js, должны иметь аннотацию @Export на методах и полях, к которым должен быть доступ из скрипта.
Если есть глобальные проблемы в скриптах BPMN процессов, вычисляемых атрибутах или вычисляемых ролях, то всегда можно включить режим совместимости со старым js движком через spring свойства:
ecos.webapp.scripts.graaljs.camunda.nashornCompat: true # задается в ecos-process для скриптов в процессах
ecos.webapp.scripts.graaljs.records.nashornCompat: true # задается в любом микросервисе где хранятся данные (как правило ecos-model)
Этот режим желательно включать только как временное решение, в рамках которого начать миграцию скриптов в совместимый с graalvm вид.
Подробнее о миграции и совместимости движков.
Изменения в библиотеках
Все библиотеки с версиями, которые собираются на java 8 и предназначены для старых версий микросервисов и alfresco, помечены постфиксом _j8 в имени версии, а мастер ветка для них именуется master-j8.
Эти версии в дальнейшем будут вестись независимо от основной нумерации. Исключением является ecos-commons, который для java 21 имеет версию 3.4+, а для java 8 — версию 2.* и мастер ветку master-2.
Изменение классов и методов
До |
После |
|---|---|
mu.KotlinLogging |
io.github.oshai.kotlinlogging.KotlinLogging |
ecos.guava30.com.google.* |
com.google.* |
ru.citeck.ecos.records2.RecordRef |
ru.citeck.ecos.webapp.api.entity.EntityRef |
org.apache.commons.collections.* |
org.apache.commons.collections4.* |
ecos.com.fasterxml.jackson210.* |
com.fasterxml.jackson.* |
javax.* |
jakarta.*
(не для всех классов, но если javax.* недоступно после повышения версии, то следует использовать jakarta)
|
ecos.org.snakeyaml.engine21.* |
org.snakeyaml.engine.* |
ru.citeck.ecos.commons.utils.func.* |
ru.citeck.ecos.webapp.api.func.* |
ru.citeck.ecos.commons.promise.Promises |
ru.citeck.ecos.webapp.api.promise.Promises |
ru.citeck.ecos.records2.rest.RemoteRecordsUtils.runAsSystem |
ru.citeck.ecos.context.lib.auth.AuthContext.runAsSystem(J) |
Мигрированные микросервисы
ecos-model |
2.28.0+ |
ecos-notifications |
2.20.0+ |
ecos-content |
1.2.0+ |
ecos-uiserv |
2.26.0+ |
ecos-edi |
1.2.0+ |
ecos-service-desk |
1.11.0+ |
ecos-gateway |
3.0.0+ |
ecos-process |
2.21.0+ |
ecos-integrations |
2.21.0+ |
ecos-ecom |
1.8.0+ |
ecos-transformations |
1.11.0+ |
ecos-history |
2.20.0+ |
ecos-apps |
2.20.0+ |
Мигрированная версия ecos-community-core — 4.25.0.