For the general upgrade process, see the page Upgrading the Nuxeo Platform.
This chapter highlights some major information about upgrade from Nuxeo Platform LTS 2023 (2023.x) to Nuxeo Platform LTS 2025 (2025.x). We strongly encourage you to also have a quick read of the upgrade notes.
Prerequisites
These upgrade notes assume that Nuxeo Server is on 2023 and up to date with the latest hotfixes.
Installation and Configuration
AWS S3
AWS Java SDK was bumpded to version 2. As such, a couple of s3 blob store configuration properties have evolved.
Deprecated S3 blob provider configuration properties:
nuxeo.s3.multipart.copy.part.sizeis deprecated and unused, usenuxeo.s3storage.minimum.upload.part.sizeinstead.nuxeo.s3storage.multipart.copy.thresholdis deprecated and unused,use nuxeo.s3storage.multipart.upload.thresholdinstead.nuxeo.s3storage.multipart.cleanup.disabledis deprecated and unused, see below.
New S3 blob provider configuration properties:
nuxeo.s3storage.concurrency.maxto configure the maximum number of allowed concurrent requests of the AWS CRT client used by the transfer manager for parallel data upload and downloads.nuxeo.s3storage.targetThroughputInGbpsto define the target throughput for transfer requests of the AWS CRT client used by the transfer manager for parallel data upload and downloads.nuxeo.s3storage.crypt.kms.legacymodeSee NXP-32760KMS client-side encryptionnuxeo.s3storage.crypt.kms.legacymodemust be set totruewhen upgrading fromlts-2023tolts-2025if you have objects encrypted client-side with a KMS key using the AWS encryption API v2.nuxeo.s3storage.crypt.keystore.legacymodeSee NXP-32842Keystore client-side encryptionnuxeo.s3storage.crypt.keystore.legacymodemust be set totruewhen upgrading fromlts-2023tolts-2025if you have objects encrypted client-side with a local keystore using the AWS encryption API v1.
Behavior changes
The Nuxeo server no longer aborts old Multipart uploads. Adding a bucket lifecycle configuration to delete incomplete multipart uploads is highly recommended. See AWS documentation.
HEAD requests on Presigned URLs are no longer supported. See NXP-32293 and aws-sdk-java-v2 limiation.
The old and deprecated org.nuxeo.ecm.core.storage.sql.S3BinaryManager implementation has been deleted and is no longer part of the distribution. The remaining classes from the org.nuxeo.ecm.core.storage.sql package have been merged into the org.nuxeo.ecm.blob.s3 one. Please update any dependant project accordingly.
Upgrade Plexus-Archiver
Maven Plugins have been updated
The Maven Plugins used by Nuxeo were updated to not depend on very old libraries, this is the case for:
- maven-clean-plugin
- maven-enforcer-plugin
- maven-install-plugin
- maven-jar-plugin
We had to remove the Maven Eclipse Plugin from our dependency tree as it is unmaintained, if you were leverage it you should add it back to your pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.10</version>
</plugin>
Upgrade PDFBox From 2.0.32 to 3.0.3
Upgraded the PDFBox dependencies from 2.0.32 to 3.0.3:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
</dependency>
Added this dependency:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-io</artifactId>
</dependency>
Added PDFUtils#hex255ToRGBFloat(String inHex).
Followed the PDFBox 3.0 Migration Guide.
Mostly, replaced:
PDDocument pdfDoc = PDDocument.load(inputStream);
by:
try (PDDocument pdfDoc = Loader.loadPDF(file)) {
...
}
Also see the Release Notes.
Configure Tomcat logs with Log4j
If you enabled the Tomcat logs with Log4j configuration feature in LTS 2023; you might need to migrate conf/logging.properties to log4j2.xml if you have one.
The default conf/logging.properties was migrated to this portion of the default log4j2.xml file:
<!-- Tomcat catalina loggers -->
<Logger name="org.apache.catalina" level="warn" additivity="false">
<AppenderRef ref="CATALINA" />
</Logger>
<Logger name="org.apache.catalina.core.AprLifecycleListener" level="info" />
<Logger name="org.apache.catalina.core.ContainerBase" level="info" />
<Logger name="org.apache.catalina.startup.Catalina" level="info">
<AppenderRef ref="CONSOLE" />
</Logger>
<Logger name="org.apache.catalina.startup.VersionLoggerListener" level="info" />
<!-- Tomcat coyote loggers -->
<Logger name="org.apache.coyote" level="warn" additivity="false">
<AppenderRef ref="CATALINA" />
</Logger>
<!-- Tomcat jasper loggers -->
<Logger name="org.apache.jasper" level="warn" additivity="false">
<AppenderRef ref="CATALINA" />
</Logger>
The JUL configuration present under conf/logging.properties will be removed in LTS 2025.
The log files: classloader.log, stderr.log, and tomcat.log will also be removed in LTS 2025 as their logs are now written to catalina.log.
Core Storage
MongoDB Java Driver Upgrade
Upgraded the MongoDB Java driver org.mongodb:mongodb-driver-sync from 4.11.4 to 5.1.4.
Migration Tool to Extract Full Text From Mongo DB to an S3 Blob
In order to reduce the MongoDB collection size, it’s now possible to move in a efficient way the fulltext extracted from binaries (stored in MongoDB) to a s3 bucket on an existing instance. See the 4 step migration process in the upgrade notes.
Here is the 4 step migration process when you want to switch the storage of binary fulltext from the repository (MongoDB) to a S3 bucket on an existing instance.
- Update the
nuxeo.confand restart all nodes:
nuxeo.vcs.fulltext.storedInBlob=true
# when fulltext is stored in blob, repository fulltext search is disabled
nuxeo.vcs.fulltext.search.disabled=true
# bucket prefix to store fulltext blobs
nuxeo.s3storage.fulltext.storeInBlob.bucket_prefix=fulltext
# enable the fulltext migration
nuxeo.bulk.action.fixBinaryFulltextStorage.enabled=true
nuxeo.bulk.action.fixBinaryFulltextStorage.defaultConcurrency=2
nuxeo.bulk.action.fixBinaryFulltextStorage.defaultPartitions=4
After this, the binary fulltext of new blob will be stored in the s3 bucket under /fulltext/ prefix.
Everything should work properly while there are two different storages for the binary fulltext.
Re-indexing will not change this state, running extractBinaryFulltext will do but this is not efficient since it’s slow and expensive, follow the next steps for the migration.
- Clean MongoDB fulltext
Since we have disabled the fulltext search from the repository, we can remove existing index and fields, check if MongoDB fulltext index exists
db.default.getIndex("fulltext")
{
v: 2,
key: { _fts: 'text', _ftsx: 1 },
name: 'fulltext',
weights: { 'ecm:fulltextBinary': 1, 'ecm:fulltextSimple': 1 },
default_language: 'english',
language_override: '__language',
textIndexVersion: 3
},
then remove it
db.default.dropIndex('fulltext')
Remove MongoDB field ecm:fulltextSimple this can be a long operation depending on the db size.
db.default.updateMany({}, {$unset: {"ecm:fulltextSimple":1}});
- Run the migration
curl -s -X POST "http://localhost:8080/nuxeo/api/v1/management/fulltext/fixBinaryStorage" -u Administrator:Administrator
It’s possible to test it by providing a custom NXQL query. The default query match all docs that is not a proxy.
- Remove the migration bulk action and restart all nodes
Change the nuxeo.conf and restart
nuxeo.bulk.action.fixBinaryFulltextStorage.enabled=false
Make possible to run Nuxeo with MongoDB without H2
In order to leverage the no H2 deployment you must remove the default template from your nuxeo.templates nuxeo.conf properties.
For instance, if you have:
nuxeo.templates=default,mongodb
You must update it to:
nuxeo.templates=mongodb
Align quartz-mongodb on quartz-2.5.0
The upgrade of quartz breaks the compatibility with quartz-mongodb but since the project GitHub is in an abandoned state we have to fork it to apply the require changes. This result in a change in the groupId of the dependency, so if you’re using this dependency in your project, you must update it to:
<dependency>
<groupId>org.nuxeo.lib.novemberain</groupId>
<artifactId>quartz-mongodb</artifactId>
</dependency>
Improve UIDGeneratorService Modularity
The default UIDSequencer in Nuxeo Platform has changed in LTS 2025, it is now KeyValueStoreUIDSequencer, so you might need to migrate your custom sequences, or install and use a former UIDSequencer (JPA, ElasticSearch/OpenSearch, MongoDB).
There’s only one sequence that is being used by Nuxeo Platform itself, it is the audit sequence. This sequence doesn’t not need to be migrated because the audit backends that needs it will init the sequence at the right value during the Nuxeo Platform start.
To migrate your custom sequences, before the upgrade, we recommend to stop activity on Nuxeo Platform, then request the sequences value with the Management REST API:
curl -u USERNAME:PASSWORD -XGET https://NUXEO_INSTANCE/nuxeo/api/v1/management/sequencers
You will receive all the defined sequencers and all its sequences with their current values.
Save the couple key/value somewhere in order to push them after the upgrade.
Upgrade Nuxeo to LTS 2025, then, before enabling activities, init each of your custom sequences with:
curl -u USERNAME:PASSWORD -XPOST https://NUXEO_INSTANCE/nuxeo/api/v1/management/sequencers/default -d 'key=customSequence1&value=customValue1'
curl -u USERNAME:PASSWORD -XPOST https://NUXEO_INSTANCE/nuxeo/api/v1/management/sequencers/default -d 'key=customSequence2&value=customValue2'
...
curl -u USERNAME:PASSWORD -XPOST https://NUXEO_INSTANCE/nuxeo/api/v1/management/sequencers/default -d 'key=customSequenceN&value=customValueN'
Nuxeo Streams
Create a Nuxeo Stream Log4j2 Appender Package
You need to install nuxeo-log4j-stream package when upgrading to LTS 2025 if you were using NuxeoStreamAppender in your log4j2.xml file.
Deprecated
Deprecated 10.10 code removal
Configuration Properties
Configuration Service
org.nuxeo.ecm.core.uidgen.sequencer.hibernate was removed, the default sequencer is always used
Contributions
Extension point
org.nuxeo.ecm.platform.audit.service.NXAuditEventsService#bulk has been removed as it is replaced by Nuxeo Stream
org.nuxeo.ecm.platform.comment.service.CommentService#config has been removed as it is not used in newer implementations
Constants
org.nuxeo.ecm.automation.io.rest.operations.JsonRequestReader.targetMediaTypeNXReq was referencing application/json+nxrequest media type, application/json should be used
org.nuxeo.ecm.core.api.AbstractSession#TRASH_KEEP_CHECKED_IN_PROPERTY no replacement in new implementations
org.nuxeo.ecm.core.api.LifeCycleConstants#DELETED_STATE was replaced by TrashService
org.nuxeo.ecm.core.api.LifeCycleConstants#DELETE_TRANSITION was replaced by TrashService
org.nuxeo.ecm.core.api.LifeCycleConstants#UNDELETE_TRANSITION was replaced by TrashService
org.nuxeo.ecm.core.api.LifeCycleConstants#DOCUMENT_UNDELETED was replaced by TrashService
org.nuxeo.ecm.core.api.NuxeoPrincipal#TRANSIENT_USER_FORMAT was not used, no replacement
org.nuxeo.ecm.core.io.download.DownloadService#NXBLOBSTATUS was replaced by the @async web adapter mechanism
org.nuxeo.ecm.platform.ec.notification.service.NotificationService#SUBSCRIPTION_NAME was not used, no replacement
org.nuxeo.ecm.platform.versioning.service.VersioningManagerImpl#COMPONENT_ID was not used, no replacement
Methods
org.nuxeo.common.utils.FileUtils#copyFile(File, File) was not used, use org.apache.commons.io.FileUtils#copyFile(File, File) or org.apache.commons.io.FileUtils#copyFileToDirectory(File, File) instead
org.nuxeo.common.utils.FileUtils#copyTree(File, File) was not used, no replacement
org.nuxeo.common.utils.FileUtils#copyTree(File, File, PathFilter) was not used, no replacement
org.nuxeo.common.utils.ZipUtils#getEntryContentAsStream(File, String) was not used, no replacement
org.nuxeo.common.utils.ZipUtils#getEntryContentAsString(File, String) was not used, no replacement
org.nuxeo.common.utils.ZipUtils#getEntryContentAsBytes(File, String) was not used, no replacement
org.nuxeo.ecm.automation.server.AutomationServer#addBinding(RestBinding) was not used, no replacement
org.nuxeo.ecm.automation.server.AutomationServer#removeBinding(RestBinding) was not used, no replacement
org.nuxeo.ecm.collections.api.CollectionManager#getUserDefaultCollections(DocumentModel, CoreSession) was replaced by org.nuxeo.ecm.collections.api.CollectionManager#getUserDefaultCollections(CoreSession)
org.nuxeo.ecm.collections.api.FavoritesManager#getFavorites(DocumentModel, CoreSession) was replaced by org.nuxeo.ecm.collections.api.FavoritesManager#getFavorites(CoreSession)
org.nuxeo.ecm.core.NXCore#getLifeCycleService() was not used, use org.nuxeo.runtime.api.Framework#getService(Class) instead
org.nuxeo.ecm.core.api.CoreSession#close() not useful anymore, no replacement
org.nuxeo.ecm.core.api.DocumentModel#isPrefetched(String) not useful anymore, no replacement
org.nuxeo.ecm.core.api.DocumentModel#isPrefetched(String, String) not useful anymore, no replacement
org.nuxeo.ecm.core.convert.service.MimeTypeTranslationHelper#getDestinationMimeTypes(String) was not used, no replacement
org.nuxeo.ecm.core.convert.service.MimeTypeTranslationHelper#getSourceMimeTypes(String) was not used, no replacement
org.nuxeo.ecm.core.event.Event#isLocal() was not used, no replacement
org.nuxeo.ecm.core.event.Event#setLocal(String) was not used, no replacement
org.nuxeo.ecm.core.event.Event#isPublic() was not used, no replacement
org.nuxeo.ecm.core.event.Event#setPublic(String) was not used, no replacement
org.nuxeo.ecm.core.io.download.DownloadService#downloadBlobStatus(HttpServletRequest, HttpServletResponse, String, String) was replaced by the @async web adapter mechanism
org.nuxeo.ecm.core.io.registry.MarshallerHelper#listToJson(Class, String, RenderingContext) was replaced by org.nuxeo.ecm.core.io.registry.MarshallerHelper#jsonToList(Class, String, RenderingContext)
org.nuxeo.ecm.core.io.registry.MarshallerHelper#objectToJson(Class, String, RenderingContext) was replaced by org.nuxeo.ecm.core.io.registry.MarshallerHelper#jsonToObject(Class, String, RenderingContext)
org.nuxeo.ecm.core.io.registry.MarshallerHelper#objectToJson(Class, Type, String, RenderingContext) was replaced by org.nuxeo.ecm.core.io.registry.MarshallerHelper#jsonToObject(Class, String, Type, RenderingContext)
org.nuxeo.ecm.core.io.upload.Batch#addChunk(String, InputStream, int, int, String, String, long) was replaced by org.nuxeo.ecm.core.io.upload.Batch#addFile(String, Blob, int, int, String, String, long)
org.nuxeo.ecm.core.io.upload.Batch#addFile(String, InputStream, String, String) was replaced by org.nuxeo.ecm.core.io.upload.Batch#addFile(String, Blob, String, String)
org.nuxeo.ecm.core.io.upload.BatchManager#addStream(String, String, InputStream, String, String) was replaced by org.nuxeo.ecm.core.io.upload.BatchManager#addBlob(String, String, Blob, String, String)
org.nuxeo.ecm.core.io.upload.BatchManager#addStream(String, String, InputStream, int, int, String, String, long) was replaced by org.nuxeo.ecm.core.io.upload.BatchManager#addBlob(String, String, Blob, int, int, String, String, long)
org.nuxeo.ecm.core.io.upload.BatchManager#getTransientStore() was moved within batch handlers
org.nuxeo.ecm.core.transientstore.api.TransientStoreConfig#setAbsoluteMaxSizeMB(int) was not used, no replacement
org.nuxeo.ecm.core.transientstore.api.TransientStoreConfig#setFirstLevelTTL(int) was not used, no replacement
org.nuxeo.ecm.core.transientstore.api.TransientStoreConfig#setSecondLevelTTL(int) was not used, no replacement
org.nuxeo.ecm.core.transientstore.api.TransientStoreConfig#setTargetMaxSizeMB(int) was not used, no replacement
org.nuxeo.ecm.core.work.WorkManager#find(String, State) was not scalable, no replacement
org.nuxeo.ecm.core.work.WorkManager#listWork(String, State) was not scalable, no replacement
org.nuxeo.ecm.core.work.WorkManager#listWorkIds(String, State) was not scalable, no replacement
org.nuxeo.ecm.permissions.TransientUserPermissionHelper#acquireToken(String, DocumentModel, String) was replaced by org.nuxeo.ecm.permissions.TransientUserPermissionHelper#addToken(String)
org.nuxeo.ecm.platform.audit.api.AuditLogger#logEvent(Event) was replaced by contributions
org.nuxeo.ecm.platform.audit.api.AuditLogger#logEvents(EventBundle) was replaced by contributions
org.nuxeo.ecm.platform.comment.api.CommentManager#getComments(DocumentModel, DocumentModel) was replaced by org.nuxeo.ecm.platform.comment.api.CommentManager#getComments(DocumentModel)
org.nuxeo.ecm.platform.comment.api.CommentManager#createComment(DocumentModel, String) was replaced by org.nuxeo.ecm.platform.comment.api.CommentManager#createComment(CoreSession, Comment)
org.nuxeo.ecm.platform.comment.api.CommentManager#createComment(DocumentModel, String, String) was replaced by org.nuxeo.ecm.platform.comment.api.CommentManager#createComment(CoreSession, Comment)
org.nuxeo.ecm.platform.comment.api.CommentManager#createComment(DocumentModel, DocumentModel, DocumentModel) was replaced by org.nuxeo.ecm.platform.comment.api.CommentManager#createComment(CoreSession, Comment)
org.nuxeo.ecm.platform.comment.api.CommentManager#deleteComment(DocumentModel, DocumentModel) was replaced by org.nuxeo.ecm.platform.comment.api.CommentManager#createComment(CoreSession, String)
org.nuxeo.ecm.platform.comment.api.CommentManager#getDocumentsForComment(DocumentModel) not used anymore, no replacement
org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageService#setCreationDate(DocumentModel, Calendar, Event) was replaced by org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageService#setCreationDate(DocumentModel, Calendar)
org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageService#setModificationDate(DocumentModel, Calendar, Event) was replaced by org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageService#setModificationDate(DocumentModel, Calendar)
org.nuxeo.ecm.platform.ec.notification.email.EmailAuthenticator#value(String) was replaced by org.nuxeo.ecm.platform.ec.notification.email.EmailAuthenticator#protocolValue(String)
org.nuxeo.ecm.platform.ec.notification.email.EmailAuthenticator#defaultValue(String) was replaced by org.nuxeo.ecm.platform.ec.notification.email.EmailAuthenticator#protocolValue(String)
org.nuxeo.ecm.platform.ec.notification.service.NotificationRegistryImpl#getNotificationRegistry() was not used, no replacement
org.nuxeo.ecm.platform.filemanager.api.FileManager#createDocumentFromBlob(CoreSession, Blob, String, boolean, String) was replaced by org.nuxeo.ecm.platform.filemanager.api.FileManager#createOrUpdateDocument(FileImporterContext)
org.nuxeo.ecm.platform.filemanager.api.FileManager#createDocumentFromBlob(CoreSession, Blob, String, boolean, String, boolean) was replaced by org.nuxeo.ecm.platform.filemanager.api.FileManager#createOrUpdateDocument(FileImporterContext)
org.nuxeo.ecm.platform.filemanager.api.FileManager#updateDocumentFromBlob(CoreSession, Blob, String, String) was not used, no replacement
org.nuxeo.ecm.platform.filemanager.service.extension.AbstractFileImporter#getFileManagerService() was not used, use org.nuxeo.runtime.api.Framework#getService(Class) instead
org.nuxeo.ecm.platform.filemanager.service.extension.FileImporter#setFileManagerService(FileManagerService) was not used, no replacement
org.nuxeo.ecm.platform.filemanager.service.extension.FileImporter#create(CoreSession, Blob, String, boolean, String, TypeManager) was replaced by org.nuxeo.ecm.platform.filemanager.service.extension.FileImporter#createOrUpdate(FileImporterContext)
org.nuxeo.ecm.platform.importer.factories.DefaultDocumentModelFactory#getMimeType(String) was not used, no replacement
org.nuxeo.ecm.platform.rendition.service.RenditionServiceImpl#getRenditionDefinition(String) was replaced by org.nuxeo.ecm.platform.rendition.service.RenditionServiceImpl#getAvailableRenditionDefinition(DocumentModel, String)
org.nuxeo.ecm.platform.rendition.service.RenditionServiceImpl#storeRendition(DocumentModel, Rendition) was replaced by org.nuxeo.ecm.platform.rendition.service.RenditionServiceImpl#storeRendition(DocumentModel, Rendition, RenditionDefinition)
org.nuxeo.ecm.platform.ui.web.auth.LoginScreenHelper#registerLoginProvider(String, String, String, String, String, LoginProviderLinkComputer) was replaced by org.nuxeo.ecm.platform.ui.web.auth.LoginScreenHelper#registerSingleProviderLoginScreenConfig(String, String, String, String, String, LoginProviderLinkComputer)
org.nuxeo.ecm.platform.ui.web.auth.service.LoginScreenConfig#registerLoginProvider(String, String, String, String, String, LoginProviderLinkComputer) was replaced by org.nuxeo.ecm.platform.ui.web.auth.service.LoginScreenConfig#LoginScreenConfig(LoginProviderLink)
org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerManager#getCorsConfigForRequest(HttpServletRequest) was replaced by org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerManager#getCorsFilterForRequest(HttpServletRequest)
org.nuxeo.ecm.quota.QuotaStatsService#computeInitialStatistics(String, CoreSession, QuotaStatsInitialWork) was replaced by org.nuxeo.ecm.quota.QuotaStatsService#computeInitialStatistics(String, CoreSession, QuotaStatsInitialWork, String)
org.nuxeo.ecm.quota.QuotaStatsService#launchInitialStatisticsComputation(String, String) was replaced by org.nuxeo.ecm.quota.QuotaStatsService#computeInitialStatistics(String, String, String)
org.nuxeo.ecm.quota.QuotaStatsUpdater#computeInitialStatistics(CoreSession, QuotaStatsInitialWork) was replaced by org.nuxeo.ecm.quota.QuotaStatsUpdater#computeInitialStatistics(CoreSession, QuotaStatsInitialWork, String)
org.nuxeo.lib.stream.computation.ComputationPolicy#isSkipFailure() was replaced by org.nuxeo.lib.stream.computation.ComputationPolicy#continueOnFailure()
org.nuxeo.runtime.test.runner.RuntimeHarness#deployFolder(File, ClassLoader) was not used, no replacement
org.nuxeo.runtime.test.runner.RuntimeHarness#deployTestContrib(String, String) was replaced by org.nuxeo.runtime.test.runner.RuntimeHarness#deployContrib(String, String)
org.nuxeo.runtime.test.runner.RuntimeHarness#deployTestContrib(String, URL) was replaced by org.nuxeo.runtime.test.runner.RuntimeHarness#deployContrib(String, String)
org.nuxeo.runtime.test.runner.RuntimeHarness#getProperties() was not used, use org.nuxeo.runtime.api.Framework#getProperties() instead
org.nuxeo.runtime.test.runner.RuntimeHarness#isRestart() was not used, no replacement
org.nuxeo.runtime.test.runner.RuntimeHarness#restart() was not used, no replacement
org.nuxeo.runtime.test.runner.RuntimeHarness#getClassLoaderFiles() was not used, no replacement
org.nuxeo.runtime.test.runner.TransactionFeature.Waiter#await(long) was replaced by org.nuxeo.runtime.test.runner.TransactionFeature.Waiter#await(Duration)
org.nuxeo.runtime.test.runner.TransactionFeature#nextTransaction(long, TimeUnit) was replaced by org.nuxeo.runtime.test.runner.TransactionFeature#nextTransaction(Duration)
Classes
org.nuxeo.ecm.core.api.impl.blob.AsyncBlob was replaced by the @async web adapter mechanism
org.nuxeo.ecm.core.trash.LifeCycleTrashService was replaced by org.nuxeo.ecm.core.trash.PropertyTrashService
org.nuxeo.ecm.core.trash.TrashService was replaced by org.nuxeo.ecm.core.api.trash.TrashService
org.nuxeo.ecm.directory.sql.filter.SQLBetweenFilter was replaced by org.nuxeo.ecm.core.query.sql.model.QueryBuilder
org.nuxeo.ecm.directory.sql.filter.SQLComplexFilter was replaced by org.nuxeo.ecm.core.query.sql.model.QueryBuilder
org.nuxeo.ecm.directory.sql.filter.SQLOperatorFilter was replaced by org.nuxeo.ecm.core.query.sql.model.QueryBuilder
org.nuxeo.ecm.liveconnect.core.JSONLiveConnectBlobDecoder was replaced by org.nuxeo.ecm.automation.core.util.JSONManagedBlobDecoder
org.nuxeo.ecm.platform.audit.listener.AuditEventLogger was replaced by org.nuxeo.ecm.platform.audit.listener.StreamAuditEventListener
org.nuxeo.ecm.platform.audit.service.AuditBulker was replaced by Nuxeo Stream mechanism
org.nuxeo.ecm.platform.audit.service.DefaultAuditBulker was replaced by Nuxeo Stream mechanism
org.nuxeo.ecm.platform.audit.service.NoopAuditBulker was replaced by Nuxeo Stream mechanism
org.nuxeo.ecm.platform.audit.service.extension.AuditBulkerDescriptor was replaced by Nuxeo Stream mechanism
org.nuxeo.ecm.platform.audit.service.management.AuditBulkerMBean was replaced by Nuxeo Stream mechanism
org.nuxeo.ecm.platform.comment.impl.CommentManagerImpl was replaced by org.nuxeo.ecm.platform.comment.impl.TreeCommentManager
org.nuxeo.ecm.platform.comment.service.CommentServiceHelper was not used, use org.nuxeo.runtime.api.Framework#getProperties() instead
org.nuxeo.ecm.platform.dublincore.NXDublinCore was not used, no replacement
org.nuxeo.ecm.platform.preview.adapter.PlainImagePreviewer was not used, no replacement
org.nuxeo.ecm.restapi.server.BulkDocumentsObject was replaced by the Bulk Action Framework
org.nuxeo.drive.operations.GetRepositoriesOperation was not used, no replacement
org.nuxeo.drive.operations.NuxeoDriveAddToLocallyEditedCollection was not used, no replacement
org.nuxeo.drive.operations.NuxeoDriveCanMove was not used, no replacement
org.nuxeo.drive.operations.NuxeoDriveGenerateConflictedItemName was not used, no replacement
org.nuxeo.drive.operations.NuxeoDriveGetClientUpdateInfo was not used, no replacement
org.nuxeo.drive.operations.test.NuxeoDriveWaitForAsyncCompletion was not used, no replacement
org.nuxeo.runtime.test.runner.ContainerFeature was replaced by org.nuxeo.runtime.test.runner.TransactionalFeature
org.nuxeo.runtime.test.runner.LocalDeploy was replaced by org.nuxeo.runtime.test.runner.Deploy
org.nuxeo.runtime.test.runner.ServletContainer was replaced by org.nuxeo.runtime.test.runner.ServletContainerFeature automatic port allocation mechanism
org.nuxeo.runtime.test.runner.SimpleFeature was superseeded by Java default in interface, use org.nuxeo.runtime.test.runner.RunnerFeature instead
Operations
The parameter username/user of operation Document.AddPermission/Document.AddACL was replaced by users
Rest Endpoints
The endpoints GET|PUT|DELETE /api/v1/bulk was removed in favor of Bulk Action Framework endpoints
The endpoints GET|PUT|DELETE /api/v1/oauth2/token/{providerName}/{nxLogin} were replaced by /api/v1/oauth2/token/provider/{providerName}/user/{nxLogin}
The endpoint GET /api/v1/search/lang/{queryLanguage}/execute was replaced by /api/v1/search/execute
The endpoint POST /api/v1/search/lang/{queryLanguage}/bulk/actionId was replaced by /api/v1/search/bulk/actionId
Dependencies Removal
Joda Time
Joda Time library is no longer part of the default nuxeo distribution. Users are asked to migrate to java.time - a core part of the JDK which replaces this project.