Критические изменения ================================================== На этой странице собраны изменения, которые могут нарушить обратную совместимость при обновлении платформы Citeck. При переходе на новую версию рекомендуется ознакомиться с соответствующим разделом и выполнить необходимые миграционные действия до обновления продуктивной среды. .. _breaking_changes_2025.8: Релиз 2025.8 -------------------- Изменена логика вычисления прав по умолчанию для системных артефактов ecos-data (ecos-webapp-common:3.18.23). Если артефакт системный, то права на чтение имеют все пользователи, права на запись — только администраторы. Если в пользовательских типах данных есть указанные как **system**, то к ним будет применена новая логика. Если необходимо сделать доступ на редактирование, то выставить **system=false**, тогда редактировать смогут все, либо сделать матрицу прав. .. _breaking_changes_2024.8: Релиз 2024.8 -------------------- В рамках релиза 2024.8 было выполнено обновление всех коробочных микросервисов и библиотек. Обновления версий ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Обновление версии java до 21 (последняя LTS на момент миграции); 2. Обновление spring boot до 3.3.2 (последняя стабильная на момент миграции); 3. Обновление spring до 6.1.11 (подтянулся при обновлении spring boot); 4. Обновление версии kotlin до 2.0.0; 5. Обновление camunda до 7.21.0; 6. Обновление всех остальных зависимостей до последних стабильных версий. Обновление технологий ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Движок для скриптов nashorn был заменён на GraalVM JS. GraalVM JS — современный аналог устаревшему nashorn. Обновление позволяет использовать функционал новых версий JS. `Подробнее `_ о миграции и совместимости движков. Доработки ~~~~~~~~~~~~~~~~~~~~ 1. Полностью переписан **ecos-gateway** на основе **spring-cloud-gateway** на реактивных технологиях и виртуальных потоках. Это позволит обрабатывать большое количество одновременных запросов, не упираясь в лимит потоков. 2. Доработаны **контексты** вроде AuthContext, I18nContext и др. с тем, чтобы они не заполняли стектрейс запроса на уровне HTTP фильтров (на 4-5 строк все стектрейсы по входящим HTTP запросам сократились). 3. Микросервисы больше не регистрируются в ecos-registry. **Service Discovery** работает на базе реестра приложений в Zookeeper. 4. Исправлена проблема, которая не давала подняться приложению с новой версией hazelcast, если приложение со старой версией еще работает (rolling update при повышении версии — Enterprise фича hazelcast). 5. Добавлен spring профиль **json_logs**. Если его включить, то логи будут записываться в виде json объектов. Удаление устаревшего кода ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Удален старый RecordsService и все старые RecordsDao интерфейсы. Метод RecordsServiceFactory.recordsServiceV1 переименован в RecordsServiceFactory.recordsService. 2. Удален RecordRef. 3. **RecordEvaluatorService** и связанные с ним классы перенесены из ecos-records в ecos-uiserv, т.к. данный функционал используется только там. 4. Все микросервисы используют стандартные библиотеки **jackson/snakeyaml/guava**. 5. **REST контроллер для RecordsAPI** удален из ecos-webapp-commons и размещен только в ecos-gateway. Микросервисы между собой должны общаться по ECOS WebAPI, REST нужен только для запросов извне. 6. Удалена **логика фасадов** из ecos-history и убрана его зависимость от mongo. Совместимость ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ По Records API совместимость любых новых и старых микросервисов полная. Микросервисы с обновленным parent'ом перестают регистрироваться в ecos-registry и как следствие — старая версия ecos-gateway не может прокидывать на них обычные REST запросы (например /gateway/uiserv/api/ui-cache?types=theme). Если сначала обновить gateway до 3.0.0+, то любые другие микросервисы можно уже обновлять по отдельности. Возможные проблемы со скриптами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Новый движок в противовес старому использует подход «безопасный по умолчанию». Это означает, что многие функции, которые были доступны в nashorn «из коробки», отключены. В нашем решении мы включили некоторые из **этих функций по умолчанию**: .. code-block:: kotlin val defaultHostAccess: HostAccess = HostAccess.newBuilder(HostAccess.SCOPED) .allowMapAccess(true) .allowListAccess(true) .allowArrayAccess(true) .allowBigIntegerNumberAccess(true) .allowIterableAccess(true) .allowIteratorAccess(true) .allowAccessInheritance(true) .build() Но некоторые части всё ещё требуют миграции (флаг совместимости с nashorn лучше не включать по возможности из соображений безопасности): 1. Функционал доступа к геттерам через простое указание имени свойства (т.е. возможность вместо abc.getName() писать abc.name) в новом движке «из коробки» отключен. 2. Функционал доступа к java классам «из коробки» отключен. 3. Java классы, с которыми идет работа внутри js, должны иметь аннотацию @Export на методах и полях, к которым должен быть доступ из скрипта. Если есть глобальные проблемы в скриптах BPMN процессов, вычисляемых атрибутах или вычисляемых ролях, то всегда можно включить режим совместимости со старым js движком через spring свойства: .. code-block:: yaml 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. Изменение классов и методов ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :widths: 20 20 :header-rows: 1 :align: center :class: tight-table * - До - После * - 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) Мигрированные микросервисы ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :widths: 20 20 :align: center :class: tight-table * - 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.