Критические изменения
Релиз 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