← Back to Index

7.10 Release Notes

For Developers

nuxeo-search-data element

A new element, nuxeo-search-data, has been added for being able to build Search Usages dashboards. This element makes use of the search events that are logged in the Nuxeo Platform Audit trail since Nuxeo Platform 7.4.

nuxeo-repository-data element

A new element, nuxeo-repository-data, lets developers easily build custom Dataviz dashboards that explore the content of the Nuxeo Platform repository, with aggreation and sort per type and properties of the documents stored in it.

Default Content Nuxeo Package

A new Nuxeo Package has been added so that when you start the Nuxeo Platform the first time after having downloaded it, there is some demo content available. You can consider this package as an example of how to bundle some content that can be easily installed on your Nuxeo Platform application.

Complex Properties and Default Values for Drag'n Drop Metadata Screens

Drag'n Drop Collector screens now make use of a document model instead of a map. This makes it possible to handle complex properties as well as default values in the UI that pops out when doing a drag'n drop.

FileSystem Blob Provider

FileSystem blob provider has been added. It makes available as blobs specific files that are stored on a file system available from the server. Typical use case is when your content is handled by external applications that can't easily be updated to use the Nuxeo REST API and for which it is easier to let the files on a standard file system. To use this feature, contribute a provider using:

<extension target="org.nuxeo.ecm.core.blob.BlobManager" point="configuration">
    <blobprovider name="fs">
        <class>org.nuxeo.ecm.core.blob.FilesystemBlobProvider</class>
        <property name="root">/opt/nuxeo/nxsever/blobs</property>
    </blobprovider>
</extension>

The configured root property above is mandatory and restricts under which path legal blobs will be allowed to be created. Then to create a blob pointing to a file under this root one can use:

BlobInfo blobInfo = new BlobInfo();
blobInfo.key = "/opt/nuxeo/nxserver/blobs/foo/bar.pdf";
blobInfo.mimeType = "application/pdf";
BlobManager blobManager = Framework.getService(BlobManager.class);
Blob blob = ((FilesystemBlobProvider) blobManager.getBlobProvider("fs")).createBlob(blobInfo);
                

Internally the blob will then be stored in the database with a key of fs:foo/bar.pdf.

Implementing a New Binary Store Is Easier

All cloud binary managers like S3, Azure, Apache jclouds are now hosted in the same repository. They all inherit from a common code base so as to have only cloud client specific code in their modules. Also, we renamed all nuxeo-core-binarymanager-* to something more realistic like nuxeo-blob-*.

CMIS 1.0 Can Be Used

Nuxeo Platform was already compatible with CMIS 1.1. A new endpoint has been added http://localhost:8080/nuxeo/atom/cmis10. It provides AtomPub CMIS 1.0 compatibility. This can be useful when using some connectors that do not support CMIS 1.1.

CMIS Also Handles File Download Redirect

When some URL download redirect logics are set in the blob manager, this is now taken into account by the CMIS service.

FS Exporter Addon

The addon Nuxeo FS Exporter allows to export content out of Nuxeo Platform with easy extensibility when a custom output format is required. This addon is now part of the set of addons systematically released with Nuxeo Platform.

Remove Administrators Group From Suggestions

A new parameter has been added to the user suggestion widget: hideAdminGroups. It allows to make sure that admin group is not part of the suggested groups.

Batch Manager Uses the Transient Store

Now the Batch Manager relies on the Transient Store to allow several implementations among which the Redis one that is cluster aware.

Transient Store API

The Transient Store allows to store temporary blobs and associated parameters on a Nuxeo instance, outside the repository, thus the "transient" aspect. It is typically used by:

The new Transient Store API allows this simply:

void putBlobs(String key, List blobs);
List getBlobs(String key);
void putParameters(String key, Map parameters);
Map getParameters(String key);

Negative Caching for Directory Entries

Usually a read on a missing entry is rarely, if ever, attempted. But in the particular case of the groupDirectory, it happens a lot due to the fact that internally user ids and group ids are often stored in the same field in Nuxeo (for instance in ACLs). Therefore both the groupDirectory and the userDirectory have to be consulted before finding if a given id refers to a group or a user. With this improvement, to activate the negative caching, use a contribution like:

<require>...</require>
<extension target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory" point="directories">
    <directory name="groupDirectory">
        <negativeCaching>true</negativeCaching>
    </directory>
</extension>
                

This improvement also adds two new metrics on directories:

Renditions Can Be Stored by Default

A new boolean attribute storeByDefault has been added to the Rendition definition. This value is used for determining the default behaviour of the rendition service when a rendition is computed: store it or not. This is particularly useful when renditions are used through CMIS, as the CMIS API for rendition does not allow to specify the behaviour.

Per Rendition Type Last Modification Property Mapping

The property used to determine if a rendition needs to be re-computed is now configurable with a new attribute in the rendition definition: sourceDocumentModificationDatePropertyName. This is interesting in border cases of using renditions for instance when defining a rendition that is an export of the content of a folder. One would better rely on a date that is the last modification date of a given child document than the last modification date of the folder itself.

Prevent from Updating Files for a given Blob Provider

It is now possible to configure the list of blob providers for which the Web UI prevents the user from updating the file. Ways to update a file include:

To disable updates for a given blob provider, add the following property in the blob provider definition:

<property name="preventUserUpdate">true</property>

For instance you could have:

<extension target="org.nuxeo.ecm.core.blob.BlobManager" point="configuration">
    <blobprovider name="googledrive">
        <class>org.nuxeo.ecm.liveconnect.google.drive.GoogleDriveBlobProvider</class>
        <property name="preventUserUpdate">true</property>
    </blobprovider>
</extension>
                

Renditions for Non Versionnable Documents Can Be Stored

Renditions can now be stored even for the ones associated with non-versionable documents, like folders. As an exemple, it is possible to store the zipTreeExport rendition.

New Parameters for Convert Adapter

Adapter for asynchronous conversions @convert now also handles type and format parameters. An API on the ConversionService has also been added to launch a conversion based on mime type (#convertToMimeType()).

Schema Update from Scalar to Array with MongoDB

When using MongoDB storage, it is now possible to change a schema from a scalar value to an array without any trouble.

NXQL Escaping with Automation

Fn.nxqlEscape can now be used in Automation MVEL expressions. Ex:

SELECT * FROM Document WHERE ecm:path STARTSWITH '@{Fn.nxqlEscape(Document.path)}'

Elasticseach Query by Ancestor Id

ecm:ancestorId is now supported by Elasticsearch page providers. As a reminder, ecm:ancestorId allows to find all documents who are rooted to a given document, provided its id.

Abandonned Addons

The following addons are abandonned: