What's New in LTS 2021.1 / LTS 2021-HF01
Nuxeo Server
Core Repository
Record, Retention and Hold Low-Level Implementation dev user
The notion of a document being a record is added. The notion of retention date and legal hold is added to records. Once a document is a record, this is forever. Copies of records (including versions) are not initially records.
When a record has a legal hold or has a retention date in the future, modification or deletion of the main blob (file:content
) is prevented, even indirectly through removal of the document or of an ancestor, even for Administrators.
The following APIs are added:
CoreSession.makeRecord(doc)
Only for users with permissionMakeRecord
.
A record can never be set back to non-record (there is no unmakeRecord() API).
When a document is turned into a record, the document blob manager will take care of unsharing the blob and moving it to the record blob provider.CoreSession.isRecord(doc)
CoreSession.setRetainUntil(doc, datetime)
Only for users with permissionSetRetention.
A specialCoreSession.RETAIN_UNTIL_INDETERMINATE
value is also available.
The retention date can only be increased, except if it was indeterminate, in which case it can be set to an actual date.CoreSession.getRetainUntil(doc)
CoreSession.setLegalHold(doc, boolean)
Only for users with permissionManageLegalHold
.
If a hold is removed and the retention has expired, a "retention expired" event will be sent (after which the document may be deleted, along with its blob, depending on high-level policies).CoreSession.hasLegalHold(doc)
CoreSession.isUnderRetentionOrLegalHold(doc)
Convenience method doinghasLegalHold()
ORgetRetainUntil()
>currentDate()
And for convenience some getters are added:
DocumentModel.isRecord()
DocumentModel.getRetainUntil()
DocumentModel.hasLegalHold()
DocumentModel.isUnderRetentionOrLegalHold()
The following APIs, that have never been used, are deprecated:
CoreSession.setRetentionActive(doc, boolean)
CoreSession.isRetentionActive(doc)
NXQL has the following new special properties:
ecm:isRecord
ecm:retainUntil
ecm:hasLegalHold
Note that NXQL does not have ecm:isUnderRetentionOrLegalHold
, instead one should use ecm:retainUntil > NOW() OR ecm:hasLegalHold = 1
.
At the storage level, VCS has 3 additional columns in the table hierarchy:
isrecord
retainuntil
haslegalhold
Some specific blob providers implementations can now be in "record mode":
BlobProvider.isRecordMode()
When in record mode the blob providers behave differently:
- They are transactional (blobs aren't actually written/deleted in the underlying storage until the transaction commits, and transaction rollback is possible).
- They don't do de-duplication, each blob is stored individually.
- They store only one blob per document (the main blob,
file:content
). - They can replace or delete a document's blob.
- They have hooks to store additional metadata alongside the blob (for diagnostics/recovery).
More on JIRA ticket NXP-27435
Support Flagging Repositories as Headless dev
A new "headless" attribute has been added to the repository descriptor to allow flagging repositories as headless:
<extension target="org.nuxeo.ecm.core.storage.sql.RepositoryService"
point="repository">
<repository name="second" label="label.second.repository" headless="true">
...
</repository>
</extension>
By default repositories are not headless.
For 10.10, all repositories, except for the "default" one are headless unless explicitly set otherwise.
More on JIRA ticket NXP-29331
Configure Transient Store Cache dev
Four new configuration properties were introduced to control transient store first and second level cache:
nuxeo.transientstore.ttl=120
nuxeo.transientstore.ttl2=10
and for S3:
nuxeo.s3storage.transient.ttl=120
nuxeo.s3storage.transient.ttl2=10
More on JIRA ticket NXP-29291
Allow to Bypass Allowed Subtype Check in FileManager dev
A new flag is exposed to bypass the subtype check when creating a document with FileManager.
The allowed subtype check done by the FileManager can be bypassed using:
FileImporterContext.builder(coreSession, blob, parentpath)
.bypassAllowedSubtypeCheck(true)
.build();
Added:
FileImporterContext#bypassAllowedSubtypeCheck
FileImporterContext#isBypassAllowedSubtypeCheck()
FileImporterContext#Builder#bypassAllowedSubtypeCheck
FileImporterContext#Builder#bypassAllowedSubtypeCheck(boolean bypassAllowedSubtypeCheck)
AbstractFileImporter#checkSecurity(CoreSession session, String path)
AbstractFileImporter#checkAllowedSubtypes(CoreSession session, String path, String typeName)
Deprecated:
AbstractFileImporter#doSecurityCheck(CoreSession documentManager, String path, String typeName)
AbstractFileImporter#doSecurityCheck(CoreSession documentManager, String path, String typeName, TypeManager typeService)
More on JIRA ticket NXP-29138
Support Double Format for Long Properties Values in Document Model dev
(also available in 10.10)
Number values can now be written to both Long and Double properties.
More on JIRA ticket NXP-29840
Core Storage
Compatibility with MongoDB 4.X dev admin
Nuxeo DBS MongoDB implementation is now compatible and continuously tested with MongoDB 4.x.
MongoDB Java Driver has been upgraded from 3.x to 4.1 which brings breaking changes, you may need to re-compile your code if you were using the driver directly. See MongoDB related documentation.
More on JIRA ticket NXP-29636
PostgreSQL 13.x dev admin
PostgreSQL 13.x is the recommended PostgreSQL Server version for Nuxeo Platform LTS 2021 (PostgreSQL 11 and 12 are also supported).
More on JIRA ticket NXP-29734
Allow Optimized MongoDB Ids With Shorter Size dev admin
(also available in 10.10)
We can now use 8 bytes MongoDB ids (instead of 36 bytes) to reduce database and index sizes.
To use optimized ids, provide the following XML configuration (or adapt it):
<require>default-repository-config</require>
<extension target="org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService" point="repository">
<repository name="default">
<idType>sequenceHexRandomized</idType>
<nativeId>true</nativeId>
</repository>
</extension>
More on JIRA ticket NXP-28763
Allow Configuration of MongoDB Query Max Execution Time dev admin
Query max execution time can be configured using:
<extension target="org.nuxeo.runtime.mongodb.MongoDBComponent" point="connection">
<connection id="default">
<maxTime>10 m</maxTime>
</connection>
</extension>
The default is 1h.
More on JIRA ticket NXP-29112
Allow Full Configuration of MongoDB Connection dev
All MongoDB options can now be configured using a Nuxeo contribution.
To contribute options to MongoDB one can now use the following syntax:
<extension target="org.nuxeo.runtime.mongodb.MongoDBComponent" point="connection">
<connection id="default">
<property name="requiredReplicaSetName">myreplicaset</property>
<property name="readPreference">primary</property>
<property name="readConcern">majority</property>
<property name="writeConcern">majority</property>
</connection>
</extension>
The properties that can be used are those of the MongoClientOptions.Builder
class.
More on JIRA ticket NXP-29111
Blob Provider Improvements dev
(also available in 10.10)
A new blob provider implementation has been added to provide more flexibility and more options:
- making them transactional,
- adding a caching layer,
- allowing direct deletion,
- changing the digest computation for keys into something based on doc or blob info,
- passing down more information to the storage layer (as filename, mime type, username,...),
- avoid temporary files when streaming decrypted binaries (TL-318).
This new blob provider can be enabled using a property in nuxeo.config
When using this new provider, blobs stored in S3 now have the following informative metadata automatically set:
Content-Type: MIME type
Content-Disposition: attachment; filename=...
In addition, if the metadata.addusername
part of the S3 connector XML configuration (or framework property nuxeo.s3storage.metadata.addusername
) is set, the following Nuxeo-specific header is also set:
x-amz-meta-username: username
These headers are NOT modified for subsequent changes to the document, they are only set the first time a given blob is written to S3.
More on the following JIRA tickets:
Better Management of Temporary Files for the Encrypted (AES) Blob Provider dev
(also available in 10.10)
A new implementation of the AESBinaryManager
has been added to improve temporary files management.
More on JIRA ticket NXP-28456
DefaultBlobDispatcher Supports Full Regexp-Based Match dev
(also available in 10.10)
Full regexp-based match has been added to DefaultBlobDispatcher
.
More on JIRA ticket NXP-28267
Add ecm:path
Variable to the Default Blob Dispatcher dev
(also available in 10.10)
ecm:path
variable is added to the default blob dispatcher.
More on JIRA ticket NXP-28227
Allow Avoiding Use of the HTTP Proxy for S3 Connections if the S3 Endpoint Is Internal dev
(also available in 10.10)
In some situations, the S3BinaryManager needs to connect to a local S3-compatible endpoint that must not go through the global nuxeo.http.proxy.host
defined.
More on JIRA ticket NXP-28185
New Implementation S3BlobProvider
dev
admin
A new blob provider org.nuxeo.ecm.blob.s3.S3BlobProvider
is available.
It has the same configuration properties as the old org.nuxeo.ecm.core.storage.sql.S3BinaryManager
but in addition:
- it allows configuration in record or transactional mode (see NXP-28276)
- it allows additional metadata in S3 (see NXP-25712)
- it allows interaction with Glacier storage (see NXP-28417)
- it allows direct configuration of CloudFront (without using CloudFrontBinaryManager).
The CloudFront properties are:
cloudfront.enabled
: must be true to activate CloudFrontcloudfront.privKey
: the path to the private keycloudfront.privKeyId
: the id of the private keycloudfront.distribDomain
: the distribution domaincloudfront.protocol
: the protocol (http or https)
More on JIRA ticket NXP-28460
Allow Simple S3 Blob Provider Implementation Override, and Use Proper Require dev
To switch to the new S3 blob provider implementation from NXP-28460 add in nuxeo.conf
:
nuxeo.core.binarymanager=org.nuxeo.ecm.blob.s3.S3BlobProvider
This assumes of course that the s3binaries template is used (which is automatically done when installing the Amazon S3 Online Storage package).
More on JIRA ticket NXP-28716
Blob Properties Should Expose Final URL If Possible dev
If a document's blob provider is configured for direct download, it's now possible to get direct links to the final download URL (to S3 or CloudFront typically) returned in the JSON document output.
To activate this feature, the following must be configured:
<require>org.nuxeo.ecm.core.io.download.DownloadService</require>
<extension target="org.nuxeo.runtime.ConfigurationService" point="configuration">
<property name="org.nuxeo.download.url.follow.redirect">true</property>
</extension>
More on JIRA ticket NXP-28599
Make S3BinaryManager.abortOldUploads
Async and Optional dev
The startup process that cleans up old (> 1 day) S3 multipart uploads can be disabled by defining:
<extension target="org.nuxeo.ecm.core.blob.BlobManager" point="configuration">
<blobprovider name="default">
...
<property name="multipart.cleanup.disabled">true</property>
</blobprovider>
</extension>
Or for backward compatibility when XML configuration is not possible by setting the nuxeo.conf
property:
nuxeo.s3storage.multipart.cleanup.disabled=true
More on JIRA ticket NXP-28571
Use AWS TransferManager in S3DirectBatchHandler dev
AWS TransferManager is now used for copy by S3DirectBatchHandler.
More on JIRA ticket NXP-29292
S3 Direct Upload for Little Files (SSE-KMS) dev
S3 Direct upload now works with SSE-KMS enabled.
It introduces a new configuration property to setup SSE/KMS on the transient bucket (for direct upload):
nuxeo.s3storage.transient.crypt.kms.key=<sse-kms-key-id>
More on JIRA ticket NXP-29496
Allow Using Arbitrary File Keys in S3 dev
Objects can now be stored in S3 with an arbitrary file key instead of the MD5 digest.
To be able to use arbitrary file keys generated either by the provider or by a trusted upload client, the new S3BlobProvider should be used and the key strategy should be set to managed
(default key strategy is digest
):
nuxeo.core.binarymanager=org.nuxeo.ecm.blob.s3.S3BlobProvider
nuxeo.core.blobstore.keyStrategy=managed
More on JIRA ticket NXP-29319
Allow Blob Provider to Do Optimized Byte Range Requests dev
The internal API BlobProvider.getStream(blobKey, byteRange)
can now be used by code that needs to access a byte range of a blob without fetching the full blob.
This assumes that the blob provider implementation is compatible with this, and that BlobProvider.allowByteRange()
returns true (which is the case when the blob provider has been registered with <property name="allowByteRange">true</property>)
.
This is implemented for the S3BlobProvider
.
More on JIRA ticket NXP-28919
Allow Blob Provider to Access Document When Reading Blob dev
The new API BlobProvider.readBlob(BlobInfoContext)
should be implemented by blob providers that wish to get information about the Document
or the blob's XPath while reading the blob.
This is mostly useful for blob providers that implement "virtual" blobs whose information is derived from properties of the document itself.
More on JIRA ticket NXP-28900
Add BlobProvider.supportsSync()
to Avoid Relying on Binarymanager for Sync Tests dev
New API: BlobProvider.supportsSync()
Sync refers to the fact that a blob from this provider may be synced with a remote system (like Nuxeo Drive) or with a process that updates things in the blob (like Binary Metadata or WOPI).
More on JIRA ticket NXP-28488
Allow Avoiding Use of the HTTP Proxy for S3 Connections If the S3 Endpoint Is Internal dev
To disable usage of the proxy environment variables (nuxeo.http.proxy.*
) for the connection to the S3 endpoint, defined the nuxeo.conf
property:
nuxeo.s3.proxy.disabled=true
More on JIRA ticket NXP-28185
More flexibility in the Blob Providers Infrastructure dev
New implementation of BlobProvider:
org.nuxeo.ecm.core.blob.LocalBlobProvider
They have the same configuration properties as the old ones, with additions. The XML configuration can now also include:
<property name="record">true</property>
: to activate Record mode (see NXP-27435). This mode is also transactional.<property name="transactional">true</property>
: to activate transactional mode independently of the record mode (useful for other features like Glacier).
More on JIRA ticket NXP-28276
Add Full Regexp-Based Match to DefaultBlobDispatcher dev
The default blob dispatcher now has a new operator ^
to match based on a full regexp (in addition to the already-existing glob-based match using ~
).
For instance the following will match any document somewhere under a folder named images:
<property name="ecm:path^.*/images/.*">test</property>
More on JIRA ticket NXP-28267
Add ecm:path
Variable to the Default Blob Dispatcher dev
The default blob dispatcher now has a pseudo-property ecm:path
representing the document path.
For example the following will match any JPG document somewhere under a folder named images:
<property name="ecm:path~*/images/*">test</property>
More on JIRA ticket NXP-28227
Allow Configurable Digest with the S3BinaryManager dev
The digest algorithm to use to compute a unique key when storing blobs in S3 can now be configured, using:
nuxeo.s3storage.digest=SHA-256
Or if a full XML configuration is used (necessary if there are several different S3 blob providers):
<extension target="org.nuxeo.ecm.core.blob.BlobManager" point="configuration">
<blobprovider name="default">
<class>org.nuxeo.ecm.core.storage.sql.S3BinaryManager</class>
...
<property name="digest">SHA-256</property>
...
</blobprovider>
</extension>
The default is MD5. The valid digest algorithms are those available to the Java runtime, the standard ones are listed here for Java 8 and here for Java 11.
This feature is not compatible with S3 Direct Upload.
More on JIRA ticket NXP-27805
Support of S3 Transfer Acceleration dev
The S3 connector now has new nuxeo.conf
parameters to configure S3 accelerate mode:
nuxeo.s3storage.accelerateMode
(defaultfalse
)nuxeo.s3storage.transient.accelerateMode
(defaultfalse
) (for direct upload)
For example:
nuxeo.s3storage.accelerateMode=true
nuxeo.s3storage.transient.accelerateMode=true
Note that accelerate mode is incompatible with path-style access (NXP-27805, see S3 documentation.
More on JIRA ticket NXP-27657
Enforce the Server Side Encryption Header in S3 Client Request dev admin
S3 copy (used during direct upload in particular) now correctly takes into account the server-side encryption configuration for the destination bucket. For direct upload, this requires setting the property:
nuxeo.s3storage.transient.crypt.serverside=true
More on JIRA ticket NXP-26901
Allow S3 Multipart Part Size configuration dev
There is a new configuration property nuxeo.s3.multipart.copy.part.size
to change the S3 multipart copy part size. The default is 5242880
(5MB).
It can be changed with:
<extension target="org.nuxeo.runtime.ConfigurationService" point="configuration">
<property name="nuxeo.s3.multipart.copy.part.size">5242880</property>
</extension>
Note that the maximum allowed by S3 is 5368709120
(5GB).
More on JIRA ticket NXP-26899
Allow Storing Extracted Fulltext in Blobs dev
Fulltext extracted from binaries can be stored in a blob provider instead of metadata in the repository by defining:
nuxeo.vcs.fulltext.storedInBlob=true
(Note that despite the vcs
in the name, which is here for regularity with other properties, it also applies to DBS/MongoDB.)
When doing so, by default a BlobProvider named fulltext will be used to store these blobs. When using a custom blob provider configuration instead of the default local filesystem storage, this fulltext blob provider must be defined accordingly. Usage of this specific blob provider is configured through a blob dispatcher in the default configuration, which may be overridden if needed.
When defining additional repositories, fulltext blob storage will need to be enabled with XML in the repository contribution:
<fulltext ... storedInBlob="true" ... />
and a custom blob dispatcher configuration will be needed to take into account this repository.
Note that when fulltext blob storage is enabled, repository-based fulltext search is automatically disabled (equivalent to nuxeo.vcs.fulltext.search.disabled=true
or <fulltext ... searchDisabled="true" ... />
).
More on JIRA ticket NXP-26704
New Implementation for the Encrypted (AES) Blob Provider dev
A new blob provider org.nuxeo.ecm.core.blob.AESBlobProvider
is available.
It has the same configuration properties as the old one:
org.nuxeo.ecm.core.blob.binary.AESBinaryManager
To encrypt a binary, an AES key is needed. This key can be retrieved from a keystore, or generated from a password using PBKDF2 (in which case each stored file contains a different salt for security reasons).
The blob provider configuration holds the keystore information to retrieve the AES key, or the password that is used to generate a per-file key using PBKDF2.
For keystore use, the following properties are available:
keyStoreType
: the keystore type, for instance JCEKSkeyStoreFile
: the path to the keystore, if applicablekeyStorePassword
: the keystore passwordkeyAlias
: the alias (name) of the key in the keystorekeyPassword
: the key password
And for PBKDF2 use:
password
: the password
In addition, the following property may be specified to define where the encrypted blobs are stored:
path
: the filesystem path for the storage (if relative, under nxserver/data). The default is binaries.
For backward compatibility, the encryption properties can also be included in the <property name="key">prop1=value1,prop2=value2,...</property>
of the blob provider configuration.
More on JIRA ticket NXP-28456
S3DirectBatchHandler Must Work With the New S3BlobProvider dev
A new S3 permission (action) is necessary to use DirectUpload with the new S3BlobProvider
: s3:GetBucketVersioning
More on JIRA ticket NXP-29122
Define nuxeo.binarystores.root
for the Root of All Binaries Store dev
A new property nuxeo.binarystores.root
is now available, and its use is recommended over the now-deprecated repository.binary.store
.
The old repository.binary.store
is equivalent to ${nuxeo.binarystores.root}/binaries
More on JIRA ticket NXP-27109
Better Management of Authentication Parameters for Google Storage dev
(also available in 10.10)
We can now reference a file with the JSON content rather than the JSON value itself as a framework property.
More on JIRA ticket NXP-27925
S3 Cache and Connection Parameters Configurable Through nuxeo.conf
dev
Instead of editing the template defining the S3 blob provider, we can now set the S3 cache and the connection parameters in nuxeo.conf
More on JIRA ticket NXP-27777
Configure S3 Multipart Part Size dev
(also available in 10.10)
It is now possible to configure the chunk size of multipart part size (from 5MB to 5GB).
More on JIRA ticket NXP-26899
Document Deletion With Bulk Action Framework on DBS dev
We now use the Bulk Action Framework to delete massively documents. This is supported for DBS only.
More on JIRA ticket NXP-26908
MongoDB New Indexes dev
To improve performances, new indexes have been added on the metadata rend:sourceId
and rend:sourceVersionableId
that are used for standard queries on Nuxeo Server.
More on JIRA ticket NXP-26676
Improved Concurrent Updates Removing Elements From Lists on MongoDB dev
The way elements are removed from lists on MongoDB is improved during concurrent updates, to prevent any update loss.
More on JIRA ticket NXP-30010
Directory
Allow Directory Initialization to Just Add Missing Entries dev
It is now possible to initialize a directory by adding missing entries and keep the existing entries untouched.
To do so, a new optional parameter has been added in the DirectoryService
for initialization : "dataloadingPolicy"
in order to define the expected behavior when there are duplicate entries among:
- Ignore the duplicates
- Update the duplicates
- Error when duplicates
Available values:
legacy
: previous behaviornever_load
: never update (only creation)skip_duplicate
: Ignore the duplicatesreject_duplicate
: Error when duplicatesupdate_duplicate
: Update the duplicates
More on JIRA ticket NXP-27877
Workflow
Support Task Variables on Nuxeo-Dropzone dev
Nuxeo-dropzone has been improved to be usable on workflow tasks layouts for uploading blobs to variables.
More on JIRA ticket NXP-28263
Task Endpoint Paginable dev
(also available in 10.10)
The Task endpoint is now paginable.
More on JIRA ticket NXP-28008
workflowInstanceId
Alias for Workflow.GetOpenTasks
Operation
The processId
parameter of the Workflow.GetOpenTasks
operation now has a workflowInstanceId
alias.
This allows to run this operation within a chain called from a workflow (transition, escalation rule, ...) without passing any parameters, as the nodeId
and processId
(= workflowInstanceId
) parameters will be automatically bound to the operation context variables named the same way.
More on JIRA ticket NXP-28078
Delete the Related Workflow Instances When a Document Is Deleted dev
Workflow instances related to deleted documents are now also removed.
More on JIRA ticket NXP-29100
Nuxeo Streams
Kafka 2.6.x dev admin
The Nuxeo Platform now relies on Kafka 2.6.x (2.5.x is also supported).
More on JIRA ticket NXP-29740
Report Stream lag and latency from Nuxeo dev admin
Previously, the stream processing lag and latency could be monitored by using Nuxeo stream.sh
.
Stream lag and latency are now directly delivered by Nuxeo Server.
More on JIRA ticket NXP-28801
Expose Nuxeo Stream latency metrics to Datadog dev admin
(also available in 10.10)
Similarly to what has been done for Graphite (cf. NXP-26248), we can now expose Nuxeo Stream lag and latency in Datadog.
More on JIRA ticket NXP-28508
Nuxeo Stream probe in the default health check dev
The default Nuxeo health check that is used by the runningstatus
REST endpoint now includes a probe to check Nuxeo Stream Processors.
More on JIRA ticket NXP-28094
Nuxeo Stream Expose Latency to Prometheus dev
Nuxeo deployments with Nuxeo Stream/Kafka on Kubernetes/OpenShift now expose latency to Prometheus, the metrics and monitoring engine commonly bundled with Kubernetes/OpenShift.
More on JIRA ticket NXP-26416
Enable to Register a Processor Without Running It dev
There are cases where a processor needs to be defined but not start/stop by the StreamService. For instance, an import processor can be registered and start/stop using a REST API. Another case is when having different processors that work together, we may want to initialize all the streams first and then control the order the processors are started.
More on JIRA ticket NXP-28356
Recovery Procedure for Systematic Failure in a Stream Processor dev
There is a new option to recover from systematic stream processor failure.
First, add nuxeo.stream.recovery.skipFirstFailures=1
to a single Nuxeo node, Processors will skip the first record in failure instead of terminating.
Second, once the problematic record is skipped remove the option from the nuxeo.conf
and perform a rolling restart of other Nuxeo nodes to restore all processor threads.
More on JIRA ticket NXP-27529
Expose Stream Processor Failures as Metrics dev
A new counter metric has been added when the processing enters in termination due to an error. Also, even if the probe is disabled, it will be nice to have the stream processor probe output to list which processing is failing.
More on JIRA ticket NXP-27471
Stream Processor Probe in The runningstatus
dev
You can now activate a health check probe to check the status of stream processors.
The option to activate in nuxeo.conf
is:nuxeo.stream.healthCheck.enabled=true
If a stream processor fails after retries and its failover policy is to stop on error the runningstatus
will be in error.
When this happens the Nuxeo node needs to be restarted to continue the processing.
Note that, by default, the health check probe is not activated.
More on JIRA ticket NXP-27164
Allow to Disable Stream Processing dev
An option is now available to disable Stream Processing on a given node.
All Stream Processors can be disabled on a Nuxeo node using:
nuxeo.stream.processing.enabled=false
All WorkManager processing can be disabled on a Nuxeo node using:
nuxeo.work.processing.enabled=false
More on JIRA ticket NXP-29361
New Rest API Endpoint to Expose the Stream Introspection dev
You can now introspect the Nuxeo Stream configuration and state for an entire cluster.
First configure your Nuxeo with:
metrics.enabled=true
metrics.streams.enabled=true
A JSON representation is available at the following endpoint:
curl -u Administrator:Administrator http://nuxeo.docker.localhost/nuxeo/api/v1/management/stream
It is also available as a PUML representation:
curl -u Administrator:Administrator http://nuxeo.docker.localhost/nuxeo/api/v1/management/stream/puml/ > /tmp/streams.puml
An SVG chart can be generated using plantuml.jar
:
java -DPLANTUML_LIMIT_SIZE=16384 -jar ~/Downloads/plantuml.jar /tmp/streams.puml -tsvg
More on JIRA ticket NXP-29940
WorkManager
Trigger an Action after Completion of a Group of Works dev
(also available in 10.10)
The StreamWorkManager provides the capability to trigger an action once all tasks of a group of Works are completed. For instance, it is now possible to fire a document rendition done Event once all the renderings for a document are completed.
More on JIRA ticket NXP-28182
New Metrics for Works DLQ Usage dev
(also available in 10.10)
Introduce a new metric nuxeo.works.dlq.count
that counts the Works in failure that has been put in the dead letter queue (DLQ) stream since the instance is up.
More on JIRA ticket NXP-27673
Store Work in Failure in DLQ for Repair Purpose dev
(also available in 10.10)
After retries, Works in failure are stored in a dead letter queue (DLQ) stream named dlq-work
.
This DLQ is activated by default on both WorkManager implementations (default and StreamWorkManager).
Works in this DLQ can be re-executed for repair purpose using an automation operation. Note that in cluster mode when NOT using Kafka you need to run this automation operation on each Nuxeo node.
More on JIRA ticket NXP-27148
WorkManager Processing Disabling dev
You can now use nuxeo.work.processing.disable=true
to disable WorkManager processing
More on JIRA ticket NXP-24314
Get Work Main Properties of the Default WorkManager Queue dev
There is now a way to get statistics (Work class, category, name) on the type of Works that are processed in the default WorkManager queue:
./bin/stream.sh workCat --chronicle /var/lib/nuxeo/stream/ -l work/default -n 10 --codec avro
...
pos,class,fullname,category,name
work-default-01:+79907866542080,ListenerWork,org.nuxeo.ecm.core.event.impl.AsyncEventExecutor.ListenerWork,pictureViewsGenerationListener,ListenerWork(Listener...
More on JIRA ticket NXP-29945
Scheduler
Scheduler Services to Support Multiple Nuxeo Nodes Startup dev admin
(also available in 10.10)
The scheduler services handle the startup with multiple Nuxeo nodes.
More on JIRA ticket NXP-285585
Configure SchedulerService Initialization Timeout dev
In cluster mode, the scheduler service is initialized non-concurrently in a cluster-wide critical section.
When a cluster node attempts to initialize the scheduler service and another node is already doing the same thing, it will wait for 1 min for the cluster-wide lock to be released and do its own initialization. If this timeout expires, then initialization fails with an exception.
The following nuxeo.conf
property can be used to change this timeout:
org.nuxeo.scheduler.cluster.start.duration=1m
In case where there's a startup crash while a lock is held, it may be necessary to manually clean up the key/value store of its locks. The key corresponding to the lock is:
nuxeo:cluster:start-scheduler
For a MongoDB key/value store, the key is stored in the collection kv.cluster
More on JIRA ticket NXP-28558
Audit
Export Audit in CSV Files user
(also available in 10.10)
Audit is now exportable as a CSV file.
More on JIRA ticket NXP-27935
Query
NOW Expression in NXQL dev user
(also available in 10.10)
NXQL can now use a NOW()
function.
NOW()
returns the current date/time.
NOW(period) returns the current date/time plus the given period. The period is a string expressed in ISO-8601 period format, PnYnMnDTnHnMnS. A leading minus sign, and negative values for the units, are allowed.
So for instance:
NOW('P1D')
: in one dayNOW('-P1D')
: one day agoNOW('PT1H')
: in one hourNOW('P-1DT1H')
: one days less one hour ago (usually 23 hours ago, except when DST changes)NOW('P1Y2M3DT4H5M6S')
: in one year, two months, three days, four hours, five minutes and six seconds.
More on JIRA ticket NXP-26305
Fix Permission Check on a NXQL Query With SQL Server When a User Belongs to Many Groups dev admin
On SQL Server it's now possible to configure VCS to use an increased size to store the Read ACLs optimization tables, which may be necessary if users belong to many groups (total size of group names + the user name + "Everyone" > 4000 characters).
nuxeo.vcs.optimizations.acl.maxsize=999999
Any value > 4000 will make SQL Server use NVARCHAR(MAX) instead of NVARCHAR(4000) for its internal data structures.
On PostgreSQL this feature already existed (default to 4096) but was not easily configurable, the same configuration property can be used to increase the value. The specific value requested will be used (there is no notion of MAX).
Note that, the use of a new value will only happen when the optimization tables are created, which can be done on a stopped server by running:
DROP TABLE aclr;
DROP TABLE aclr_user;
-- on SQL Server:
EXEC nx_rebuild_read_acls;
-- on PostgreSQL:
SELECT nx_rebuild_read_acls();
More on JIRA ticket NXP-27200
Rendition
Ability to Disable the Rendition Computations dev admin
Previously, the renditions were automatically and systematically computed/re-computed when adding or updating a file content. It is now possible to configure Nuxeo Server to disable this behavior.
More on JIRA ticket NXP-28743
Bulk Action Framework for Picture.RecomputeViews
Operation dev
Picture.RecomputeViews
operation has been re-implemented to use the Bulk Action Framework.
More on JIRA ticket NXP-26420
Thumbnail Recomputation with Bulk Action Framework dev
(also available in 10.10)
Thumbnail recomputation is now done using the Bulk Action Framework.
More on JIRA ticket NXP-27605
Improved ZIP Preview dev user
The ZIP preview doesn't require anymore to unzip the file.
More on JIRA ticket NXP-29938
Elasticsearch
Elasticsearch 7.9 dev admin
Elasticsearch 7.9 is the recommended version with Nuxeo Platform LTS 2021 (7.7 or 7.8 are also supported).
More on JIRA ticket NXP-29529
Elasticsearch nested
Operator dev
(also available in 10.10)
Nuxeo Server now supports the Elasticsearch "nested" operator.
More on JIRA ticket NXP-25489
Multiple Nuxeo With Embedded Elasticsearch dev admin
(also available in 10.10)
Multiple Nuxeo with embedded Elasticsearch can run on the same server.
More on JIRA ticket NXP-27922
Elasticsearch Reindexing Optimization When a Document Is Checked In dev
(also available in 10.10)
The number of versions reindexed at document check-in has been optimized.
More on JIRA ticket NXP-27663
Bulk Service (Aka "Bulk Action Framework")
Bulk Service Processor Can Be Contributed by Configuration dev
Previously, the Bulk Service Processor (the scroller and status computations) required development to handle the dynamic parts (the action source stream) and to control the initialization.
- The Bulk Service Processor can now be created by using configuration only for:
- Register a processor
- Initialize its streams
- Mark streams as external (defined in another processor)
More on JIRA ticket NXP-28357
Bulk Service Handles Elasticsearch Scroller dev
(also available in 10.10)
Elasticsearch scroller is usable with the Bulk Service.
More on JIRA ticket NXP-28086
Monitoring
Improvements in Error Messages dev admin
We improved some error messages to help analysis and diagnosis.
More on the following JIRA tickets:
javax.mail
Messages in Nuxeo Logs dev
(also available in 10.10)
javax.mail
messages are now redirected to Nuxeo logs.
More on JIRA ticket NXP-28275
nuxeoctl
Now Starts Nuxeo Platform in Strict Mode dev
admin
Previously, it was possible to start a Nuxeo instance with an undeployed component. This can be risky, especially in cluster mode.
By default, nuxeoctl start is now in strict mode which prevents this to happen.
More on JIRA ticket NXP-20418
Datadog and Metrics Improvements dev admin
A lot of improvements have been made to improve metrics scope, visibility and usability:
- Improve Datadog metrics using tagging,
- Reduce the default number of metrics published by Graphite and Datadog, using a contribution (see
common-base/nxserver/config/metrics-config.xml
for the default configuration.), - Report Stream lag and latency from Nuxeo,
- Expose stream processor failures as metrics,
- Refactor MetricsService to support more reporters,
- Enable to publish Datadog metrics in UDP,
It is now possible to easily build Datadog dashboards in the same way as for Grafana/Graphite.
More on the following JIRA tickets:
Publish Datadog Metrics in UDP Instead of HTTP dev
It is now possible to report Datadog metrics to a local agent using UDP.
The following options need to be used:
metrics.datadog.udp=true
metrics.datadog.host
metrics.datadog.port
You don't have to configure the API_KEY.
Usage:
import org.coursera.metrics.datadog.DatadogReporter
import org.coursera.metrics.datadog.DatadogReporter.Expansion._
import org.coursera.metrics.datadog.transport.Transport
import org.coursera.metrics.datadog.transport.HttpTransport
import org.coursera.metrics.datadog.transport.UdpTransport
import scala.concurrent.duration.SECONDS
...
val expansions = EnumSet.of(COUNT, RATE_1_MINUTE, RATE_15_MINUTE, MEDIAN, P95, P99)
val httpTransport = new HttpTransport.Builder().withApiKey(apiKey).build()
val reporter = DatadogReporter.forRegistry(registry)
.withEC2Host()
.withTransport(httpTransport)
.withExpansions(expansions)
.build()
reporter.start(10, SECONDS)
Example of using UDP transport:
...
val udpTransport = new UdpTransport.Builder().build()
val reporter =
...
.withTransport(udpTransport)
...
More on JIRA ticket NXP-28697
Authentication, User Management and Permissions
postAuthenticationProcessChecks
added to SAMLAuthenticationProvider
dev
Post Authentication Process Checks has been added to SAMLAuthenticationProvider
.
More on JIRA ticket NXP-29495
User and Group Events/Categories Added to the Platform Audit Directories admin user
User and group events/categories have been added to the Audit directories.
More on JIRA ticket NXP-29200
Allow ACLs on Versions dev user
A new configuration property allows to set permissions on versions.
The new configuration property org.nuxeo.version.acl.disabled
controls whether ACLs on versions are disabled. The default value in LTS 2021 is false. Setting it to true disables all use of ACLs on versions for permission checks. The value legacy is also possible, to disable for direct access but enable for queries.
<require>org.nuxeo.ecm.core.versioning.config</require>
<extension target="org.nuxeo.runtime.ConfigurationService" point="configuration">
<property name="org.nuxeo.version.acl.disabled">false</property>
</extension>
More on JIRA ticket NXP-28758
Make Version Read Permission Depend on Live Doc ReadVersion dev
A property is exposed to make the Read permission on a version depend on the ReadVersion permission on the live document.
The new configuration property org.nuxeo.version.readversion.disabled
controls whether the ReadVersion permission is disabled. The default value is false. Setting it to true disables special behavior for the ReadVersion permission.
<require>org.nuxeo.ecm.core.versioning.config</require>
<extension target="org.nuxeo.runtime.ConfigurationService" point="configuration">
<property name="org.nuxeo.version.readversion.disabled">false</property>
</extension>
More on JIRA ticket NXP-28370
UserProfile Enricher Can Write All Schemas dev
UserProfile
enricher can now writes all schemas (and not only userprofile
schema).
More on JIRA ticket NXP-29939
Comment Service
Rework Comments Storage/Architecture dev
(also available in 10.10)
- The comments storage has been refactored to improve several aspects:
- Permissions management
- Storage
- Versioning
- Copy
- export/import
- ...
More on JIRA ticket NXP-27984
Add Parent Post Content in 'New Comment' Notification dev user
If a comment is a reply to another comment, the parent comment is now quoted in the comment notification mail.
More on JIRA ticket NXP-28255
Comments Indexed on Linked Document Full-Text Field dev user
Comments are now indexed on linked document full-text field.
More on JIRA ticket NXP-26669
Automatically Send Notifications to the Users Who Participate in a Conversation dev user
(also available in 10.10)
Automatic notifications are sent to users who participate in Comment conversation.
More on JIRA ticket NXP-28254
Download Service
Digest and Last-Modified Negotiation for Download Service dev
(also available in 10.10)
Digest and Last-Modified negotiation are added to the download service to manage the following request/response headers:
- Want-Digest / Digest
- If-Modified-Since / Last-Modified
More on JIRA ticket NXP-28092
Downloadservice.Downloadblob
to Use Builder Pattern dev
(also available in 10.10)
Previously, the API DownloadService.downloadBlob had lots of different overloaded versions with different numbers of arguments.
We now use a builder pattern itself, to pass a download context object with all the required information.
New API: DownloadService.downloadBlob(DownloadContext)
.
A DownloadContext
can be constructed through DownloadContext.builder(request, response)...<setters>...build()
.
The other DownloadService.downloadBlob
methods with lots of arguments are now deprecated.
More on JIRA ticket NXP-28005
Make DocumentModelJsonWriter Expose Schemas dev
(also available in 10.10)
Documents exported through JSON now have an additional schemas field (similar to facets):
[ {"name": "SCHEMA1", "prefix": "PREFIX1"}, {"name": SCHEMA2", "prefix": "PREFIX2"}, ... ],
More on JIRA ticket NXP-27995
Make Download Service Deal With Head Efficiently dev
(also available in 10.10)
The download service responds to a HEAD request with a better efficiency.
More on JIRA ticket NXP-28093
CMIS
Use the Nuxeo Downloadservice Framework for CMIS Downloads dev
(also available in 10.10)
We now use the Nuxeo DownloadService framework for CMIS downloads, instead of the native OpenCMIS library code. This allows us to better deal with buffering, transactions, and take into account potential CDN redirects.
More on JIRA ticket NXP-27337
REST API
Facet API on SimpleDocumentModel
dev
(also available in 10.10)
The facet API has been implemented on SimpleDocumentModel
.
More on JIRA ticket NXP-28597
Offset Support to PaginableObject dev
The PaginableObject.java
now supports the ability to specify an offset instead of a page index when it comes to fetching a page provider result set.
More on JIRA ticket NXP-28418
New Parameter to the Document.Copy
Operation to Reset the Document Lifecycle dev
There is a listener linked to the copy event and which looks at a context variable to reset the lifecycle or not.
The new parameter "reset lifecycle" allows to set or not this context variable.
More on JIRA ticket NXP-27735
Improve ConfigurationService API dev
APIs below were added on ConfigurationService, signature are key or key/defaultValue:
Optional<String> getString(String)
String getString(String, String)
Optional<Integer> getInteger(String)
int getInteger(String, int)
Optional<Long> getLong(String)
long getLong(String, long)
Optional<Duration> getDuration(String)
Duration getDuration(String, Duration)
Optional<Boolean> getBoolean(String)
boolean isBooleanTrue(String)
boolean isBooleanFalse(String)
Fallback on default value occurs when property doesn't exist or is blank. isBooleanTrue
and isBooleanFalse
return true if and only if property value is true and respectively false.
More on JIRA ticket NXP-26181
New API to Refresh AWS Tokens in the Batch Handler dev
The new API BatchHandler.refreshToken(batchId)
can be used to get new credentials. This is particularly interesting for big uploads to prevent hitting token timeout errors.
It is implemented for S3DirectBatchHandler
.
More on JIRA ticket NXP-28869
New REST API Endpoint to Get Server Version Information dev
The endpoint GET /api/v1/capabilities
has been added to Nuxeo in order to retrieve the server capabilities, see below its response format:
{
"entity-type": "capabilities",
"server": {
"distributionName": "server",
"distributionVersion": "2021.1",
"distributionServer": "tomcat",
"hotfixVersion": 1
},
"cluster": {
"enabled": true,
"nodeId": "foobar"
}
}
This endpoint leverages the new CapabilitiesService
which exposes the APIs below:
- void
registerCapabilities(String name, Map<String, Object> map)
:
register a static server capability and expose it under name in the JSON response - void
registerCapabilities(String name, Supplier<Map<String, Object>> supplier)
:
register a dynamic server capability and expose it under name in the JSON response - Capabilities
getCapabilities()
:
compute the server capabilities and return them as an immutable object
Registering capabilities might be done during the Component start step.
By default, two capabilities are registered into the application:
- the server capability registered by the
CapabilitiesService
- the cluster capability registered by the
ClusterService
More on JIRA ticket NXP-29798
AWS Service
Multiple Configurations for AWSConfigurationService dev
(also available in 10.10)
Multiple AWS configurations are now supported.
AWS configuration can now specify an id with:
<extension target="org.nuxeo.runtime.aws.AWSConfigurationService" point="configuration">
<configuration id="myconfig">
<accessKeyId>MY_ACCESS_KEY_ID</accessKeyId>
<secretKey>MY_SECRET_KEY</secretKey>
<region>MY_REGION</region>
</configuration>
</extension>
If the id is not specified, default is used.
To get to this configuration, one can then use:
- new
NuxeoAWSCredentialsProvider(id)
- new
NuxeoAWSRegionProvider(id).getRegion()
Note that if the configuration is not found, the providers will still fall back on the default AWS SDK behavior to look in the OS environment, Java system properties, AWS profile or EC2 container credentials (which don't take into account any configuration id).
More on JIRA ticket NXP-26823
CSV Export Service
Elasticsearch Scroll for CSV Export Bulk Action dev
The CSV Export now uses Elasticsearch scroll. This allows to improve resilience and ensure that an export from the UI (search result from Elasticsearch) matches the export.
More on JIRA ticket NXP-28577
Scroll Service dev
(also available in 10.10)
We added a new service dedicated to retrieve a long list of identifiers representing a result set.
This service allows to globalize the existing scrolling API to get a document list ids or Elasticsearch resultset.
It also allows to have other document scrollers:
- a list of ids (so we don't have to query the repository or elastic)
- a file in transient store containing a list of ids
- Or to scroll on non-documents identifier:
- audit entry ids
- user ids
- dictionary ids
- a stream
More on JIRA ticket NXP-28334
Customization
Allow Global Disabling of Schemas, Like Files dev admin
(also available in 10.10)
We can now disable an existing schema (make it so that it's ignored whenever a doctype references it, or when the list of all schemas is returned). For instance, some use cases require that no attachments are created in the platform. With this feature, this becomes possible by simply disabling the file schema.
To disable a schema, for instance files, use a contribution like:
<require>org.nuxeo.ecm.core.CoreExtensions</require>
<extension target="org.nuxeo.ecm.core.schema.TypeService" point="schema">
<schema name="files" enabled="false" />
</extension>
Of course the <require>
line must reflect the actual component that declares the schema that one wants to disable.
More on JIRA ticket NXP-27962
Allow Global Disabling of Facets, Like Versionable dev admin
(also available in 10.10)
A facet can be globally disabled. For instance, some use cases require that no versions are created in the platform.
To disable a facet, for instance Versionable, use a contribution like:
<require>org.nuxeo.ecm.core.CoreExtensions</require>
<extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype">
<facet name="Versionable" enabled="false" />
</extension>
Of course the <require>
line must reflect the actual component that declares the facet that one wants to disable.
More on JIRA ticket NXP-27873
Allow Map and List in Nuxeo Platform List Template Parameters dev
It is now possible to contribute a complex structure as templateParam
.
More on JIRA ticket NXP-27613
Improve OpenID Provider Descriptor to Handle User Info Request Authentication per Bearer dev
(also available in 10.10)
We improved OpenID provider to be able to choose between authentication through query parameters or Authentication header.
More on JIRA ticket NXP-27446
Packaging / Distribution / Installation
Tomcat 9.0.41 dev admin
The Nuxeo Platform now relies on Tomcat 9.0.41.
More on JIRA ticket NXP-29948
Other Upgrades
Other upgrades are listed in the following JIRA ticket: NXP-28537
Add the Notion of Profile in Nuxeo dev admin
We introduce the notion of profile in Nuxeo. These profiles are meant to be used to configure Nuxeo. Currently, they act as templates with some differences.
Profiles are configured through NUXEO_PROFILES
environment variable, whereas templates are configured through nuxeo.conf
.
As said, profiles are currently Nuxeo templates, and they are deployed after templates defined in nuxeo.conf
.
For example, if we have nuxeo.templates=mongodb,mongodb-audit
in nuxeo.conf
and we define a NUXEO_PROFILES=perf
, we get:
$ NUXEO_PROFILES=perf bash nuxeoctl console
Nuxeo home: /opt/nuxeo-server-tomcat
Nuxeo configuration: /opt/nuxeo-server-tomcat/bin/nuxeo.conf
Nuxeo profiles: perf
Include template: /opt/nuxeo-server-tomcat/templates/common-base
Include template: /opt/nuxeo-server-tomcat/templates/common
Include template: /opt/nuxeo-server-tomcat/templates/default
Include template: /opt/nuxeo-server-tomcat/templates/mongodb
Include template: /opt/nuxeo-server-tomcat/templates/mongodb-audit
Include template: /opt/nuxeo-server-tomcat/templates/perf
We can see that the perf profile is deployed after the template parameter value.
More on JIRA ticket NXP-29190
Allow Concurrent Startup of Nuxeo Instances dev
In cluster mode, the document repository and the directories are initialized non-concurrently in a cluster-wide critical section.
When a cluster node attempts to initialize its repository (or a directory) and another node is already doing the same thing, it will wait for 1 min for the cluster-wide lock to be released and do its own initialization. If this timeout expires, then initialization fails with an exception.
The following two nuxeo.conf
properties can be used to change this timeout:
org.nuxeo.repository.cluster.start.duration=1m
org.nuxeo.directory.cluster.start.duration=1m
In case where there's a startup crash while a lock is held, it may be necessary to manually clean up the key/value store of its locks. The keys corresponding to the locks are visible when using Redis with KEYS nuxeo:cluster:*
for instance nuxeo:cluster:start-repository-default
or nuxeo:cluster:start-directories
.
For a MongoDB key/value store, the keys are stored in the collection kv.cluster
More on JIRA ticket NXP-28661
Allow to Pass Connect URL When Running the Nuxeo Server Docker Image dev
It is now possible to override the Connect URL when starting a Nuxeo Docker image through the environment variable NUXEO_CONNECT_URL
.
For instance, to run a container with another Connect URL than the default one:
docker run -it -p 8080:8080 -e NUXEO_CONNECT_URL=<NUXEO_CONNECT_URL> nuxeo/slim:latest
More on JIRA ticket NXP-29194
Kafka Availability Checking at Nuxeo Startup dev
Nuxeo startup is now checking Kafka availability.
More on JIRA ticket NXP-22844
Elasticsearch Availability Checking at Nuxeo Startup dev
Nuxeo startup is now checking ElasticSearch availability.
More on JIRA ticket NXP-22843
Redis
Redis 6.0.x dev
Redis 6.0.x is the recommended version for Nuxeo Platform LTS 2021.
More on JIRA ticket NXP-29734
Miscellaneous
New Login Page UI user
The login page UI has been redesigned with Inter font and updated styling.
More on JIRA ticket NXP-29860
Remove Post-commit Listeners dev
Post-commit listeners have been converted to asynchronous listeners.
More on JIRA ticket NXP-2691
Allow Event.Fire to Use Properties dev
It is now possible to use properties into asynchronous events.
More on JIRA ticket NXP-26449
Clusterservice to Hold Cluster Node Info dev
A new service has been added to hold info about whether clustering is enabled and the cluster node id. This replaces ad-hoc uses of the framework properties repository.clustering.enabled and repository.clustering.id and multiple different random generations of ids when there is no node id specified. Current direct users of the properties are:
- MigrationServiceImpl
- StreamPubSubProvider
- CacheServiceImpl
More on JIRA ticket NXP-25499
Reduce Response Size of the ACL Enricher dev
(also available in 10.10)
The User object representation is now returned to the client without its groups.
More on JIRA ticket NXP-27947
ecm:isProxy
A Valid Field for Aggregates dev
(also available in 10.10)
The field ecm:isProxy
is now part of the valid fields for Elasticsearch aggregates.
More on JIRA ticket NXP-26656
Improve LogFeature to Be Able to Annotate Test Methods dev
New test annotations are available on classes and methods:
@ConsoleLogLevelThreshold
@LoggerLevel
More on JIRA ticket NXP-25836
Allow Underscore Character in LDAP Queries
The UserManager.searchUsers(pattern)
and UserManager.searchGroups(pattern)
APIs now interpret the pattern as a generic string with arbitrary characters that will be matched exactly (depending on the directory substring match style).
If compatibility with previous versions is needed, to use a pattern where % and _ are interpreted as LIKE escapes, the following must be set:
<extension target="org.nuxeo.runtime.ConfigurationService" point="configuration">
<property name="nuxeo.usermanager.search.escape.compat">true</property>
</extension>
More on JIRA ticket NXP-27320
Add Default Referrer-Policy Header dev
A new Nuxeo property nuxeo.referrer.policy
is available to control the value of the Referrer-Policy HTTP header.
The default is:
nuxeo.referrer.policy=strict-origin-when-cross-origin
The header Referrer-Policy and its possible values are described here.
More on JIRA ticket NXP-29115
Clean up
This release also comes with hundreds of bugs fixed and also code clean up, making Nuxeo Server more solid than ever.
Addons
S3 Direct Upload - Support S3-like Storage dev
We now allow using the accelerate mode of S3, more details on S3 documentation.
S3 direct upload has new nuxeo.conf
parameters to configure a custom S3 endpoint and activate path-style access:
nuxeo.s3storage.transient.endpoint (default empty)
nuxeo.s3storage.transient.pathstyleaccess (default false)
For example:
nuxeo.s3storage.transient.endpoint=https://s3.us-east-1.amazonaws.com
nuxeo.s3storage.transient.pathstyleaccess=true
Note that path-style access is incompatible with accelerate mode (NXP-27657), see S3 documentation.
More on JIRA ticket NXP-28526
S3 Direct Upload - Importing the Same File at the Same Time Fails dev
A universally unique identifier is now used as key identifier for files.
More on JIRA ticket NXP-27162
Web UI
For more information on Web UI latest release:
JSF
Improve JSF Admin NOS Registration Page in Offline Case admin
JSF Admin NOS page displays registration information in offline mode.
More on JIRA ticket NXP-29336
Fix JSF EL Evaluation of a Condition Using a Multi-Valued Property in a Filter Used by a Picture Conversion dev
The function nx:arrayContains
is added to evaluate JSF EL condition on multi-valued properties.
Added new functions in the EL context to work with arrays:
nx:arrayContains: returns true if the given array contains the given element.
${nx:arrayContains(array, 'foo')}
nx:arrayContainsAll: returns true if the given array contains all the given elements.
${nx:arrayContainsAll(array, 'bar', 'foo')}
nx:arrayContainsAny: returns true if the given array contains one of the given elements.
${nx:nx:arrayContainsAny(array, 'bar', 'foo')}
nx:arrayContainsNone: returns true if the given array contains none of the given elements.
${nx:arrayContainsNone(array, 'barfoo', 'foobar')}
For instance, those functions can be used in filters to filter picture conversions:
<extension target="org.nuxeo.ecm.platform.picture.ImagingComponent"
point="pictureConversions">
<pictureConversion id="subjectFilteredConversion" maxSize="200">
<filters>
<filter-id>subjectFilter</filter-id>
</filters>
</pictureConversion>
</extension>
<extension target="org.nuxeo.ecm.platform.actions.ActionService"
point="filters">
<filter id="subjectFilter">
<rule grant="true">
<condition>#{nx:arrayContains(currentDocument.dc.subjects, "art/paint")}</condition>
</rule>
</filter>
</extension>
More on JIRA ticket NXP-28918
Deprecation
Nuxeo JSF UI dev user
The Nuxeo JSF UI addon is deprecated.
Maria DB dev
The usage of Maria DB database is now deprecated.
MySQL dev admin
The usage of MySQL database is now deprecated.
MS SQL Server dev admin
The usage of MS SQL Server database is now deprecated.
Farewell
Nuxeo Wizard dev user
The Nuxeo Wizard has been removed.
More on JIRA ticket NXP-28621
Nuxeo Windows installer (.exe) dev admin
The Nuxeo Windows installer (.exe) has been removed.
Nuxeo Homebrew installer dev admin
The Nuxeo Homebrew installer has been removed.
Nuxeo Static WAR dev admin
The nuxeoctl
pack command used to generate a static WAR has been removed as well as the nuxeo-distribution/nuxeo-war-tests
module testing it.
More on JIRA ticket NXP-28100
Nuxeo SDK Distribution dev admin
The Nuxeo Server Tomcat SDK build has been removed. The Maven profile sdk
does not exist anymore.
More on JIRA ticket NXP-28101
Nuxeo Shell dev admin
The Nuxeo Shell nuxeo-shell
addon has been removed.
More on JIRA ticket NXP-27312
Apache Derby dev
The support of the Apache Derby embedded database has been removed. H2 is now the only option to handle in-memory data sources.
More on JIRA ticket NXP-28673
JAAS dev
JAAS has been removed (the use of LoginContext, security domains, LoginModules, etc.) and replaced per a direct call to NuxeoAuthenticationPlugins
.
New methods:
Framework.loginSystem()
Framework.loginSystem(originatingUser)
Framework.loginUser(username)
NuxeoPrincipal.getCurrent()
NuxeoPrincipal.isCurrentAdministrator()
The above loginSystem
and loginUser
methods now return a NuxeoLoginContext
that is AutoCloseable
and can therefore be used in a try-with-resources.
Deprecated methods:
Framework.login()
->Framework.loginSystem()
Framework.loginAs(originatingUser)
->Framework.loginSystem(originatingUser)
Framework.loginAsUser(username)
->Framework.loginUser(username)
Framework.login(username, password)
->Framework.loginUser(username)
ClientLoginModule.clearThreadLocalLogin()
->LoginComponent.clearPrincipalStack()
(INTERNAL)ClientLoginModule.getThreadLocalLogin()
->LoginComponent
(INTERNAL)ClientLoginModule.getCurrentLogin()
->LoginComponent.getCurrentPrincipal()
ClientLoginModule.getCurrentPrincipal()
->NuxeoPrincipal.getCurrent()
ClientLoginModule.isCurrentAdministrator()
->NuxeoPrincipal.isCurrentAdministrator()
LoginStack
These extension points or part of their contributions are removed:
<loginModulePlugin>
in the element<authenticationPlugin>
of extension pointauthenticators
oforg.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService
- the extension point domains of
org.nuxeo.runtime.LoginComponent
(which included registration ofLoginModule
classes) - the extension point plugin of
org.nuxeo.ecm.platform.login.LoginPluginRegistry
(which included registration ofLoginPlugin
classes)
Behavior change:
NuxeoAuthenticationPlugin.handleRetrieveIdentity
should now contain all the authentication code, and return aUserIdentificationInfo with credentialsChecked = true
(using the 1-arg constructor) if the credentials have already been checked by the auth plugin itself. Otherwise the method may return aUserIdentificationInfo
that includes a username and password, to let the generic filter check the password against the UserManager.
More on JIRA ticket NXP-27942
NXCore Class dev
Usage of NXCore is deprecated and its usage is removed from the platform.
More on JIRA ticket NXP-22532
Post-commit Listeners dev
Post-commit listeners have been converted to asynchronous listeners.
The post-commit event listeners can now be made either asynchronous or synchronous. We strongly recommend to do the same thing with any custom event listener.
Later on, we will deprecate the post-commit event listener execution mechanism relying on PostCommitEventExecutor, see NXP-27986.
For this purpose, a warning is logged when running a post-commit event listener to inform that its execution will soon be deprecated and advising to update the listener contributions to make them asynchronous with <listener async=\"true\"...>
.
The warning can be disabled with the following logger in NUXEO_SERVER/lib/log4j2.xml:
<Logger name="org.nuxeo.ecm.core.event.impl.PostCommitEventExecutor" level="warn">
<RegexFilter regex="Running post commit event listeners.*" onMatch="DENY" onMismatch="NEUTRAL" />
</Logger>
More on JIRA ticket NXP-26911
GWT Modules dev
All GWT related modules have been removed from nuxeo-jsf-ui
repository:
- nuxeo-annot-api
- nuxeo-annot-contrib
- nuxeo-annot-core
- nuxeo-annot-http
- nuxeo-annot-repo
- nuxeo-platform-imaging-tiling
- nuxeo-platform-imaging-tiling-preview
The PictureTilesRestlets
restlet related to the nuxeo-platform-imaging-tiling
has also been removed: the endpoint /nuxeo/restAPI/getTiles/
does not exist anymore.
All GWT artifacts in the Nuxeo root pom dependencyManagement
have also been removed. If you depend on those ones, you must update your project pom to add them.
The related nuxeo.old.jsf.preview
(introduced with NXP-25110) and nuxeo.text.annotations
configuration properties that were used to activate the old preview and the GWT text annotations have been removed: setting them has no impact.
More on JIRA ticket NXP-27447
Nuxeo DAM Dependency admin user
The Nuxeo DAM Package and Nuxeo DAM JSF UI Package have been removed for Nuxeo Server.
All the features (Picture, Video, ...) installed through those packages are now integrated by default in a Nuxeo Server.
You do not need to depend on nuxeo-dam
package anymore on your Nuxeo package, for instance:
<dependencies>
<package>nuxeo-web-ui</package>
<package>nuxeo-dam</package>
</dependencies>
More on JIRA ticket NXP-28626
MarkLogic Connector dev admin
The MarkLogic connector has been removed.
More on JIRA ticket NXP-26571
Nuxeo Connect Report Tools dev admin
The Nuxeo Connect Report Tools nuxeo-connect-tools
has been removed.
More on JIRA ticket NXP-27864
Template Rendering Samples admin user
The Template Rendering Samples has been removed.
More on JIRA ticket NXP-28059
Nuxeo Agenda admin user
The Nuxeo Agenda nuxeo-agenda
addon has been removed.
More on JIRA ticket NXP-27271
Others Packages admin user
The following deprecated and unused packages have been removed:
- nuxeo-activity
- nuxeo-business-days-management
- nuxeo-core-binarymanager-sql
- nuxeo-http-client
- nuxeo-javaagent
- nuxeo-logs-viewer
- nuxeo-rating
- nuxeo-resources-compat
- nuxeo-review-workflows-dashboards
- nuxeo-session-inspector
More on JIRA ticket NXP-27271
Learn more
More information about released changes and fixed bugs is available in our bug tracking tool: