← Back to Index

Nuxeo Platform 6.0 Release Notes

For Developers

Elasticsearch in the Platform

Elasticsearch engine and wrapping java service is embedded in Nuxeo CAP distribution, with a dedicated tab in the Admincenter for monitoring the activity. An embedded server is started by default. In production, Nuxeo Plaform is connected to an Elasticsearch cluster. Elasticsearch offers an amazing ability to scale the repository queries while being very easy to set up. The graph below compares number of requests served per second with the number of concurrent users increasing on a given same hardware. In blue dabase queries versus in red Elasticsearch queries.

All documents are indexed with Elasticsearch. It is possible to disable the service. Only Search tab leverages Elasticsearch index in the default distribution, but you can activate it on any page provider by modifying a property in nuxeo.conf, ex:
elasticsearch.override.pageproviders=default_search,tree_children
More information on configuring Elasticsearch

MongoDB Backend

A deep refactoring of low layers happened in Nuxeo Platform so as to be able to support a non-transactionnal JSON-based storage engines for the repository, such as MongoDB. This refactoring was made so as to be able to implement other NoSQL backends in the future. MongoDB is a perfect candidate when expectations in concurrent writes and high availability are high. Any application existing on top of Nuxeo Platform can benefit form this new persistence option as it is completely transparant to the Content Management model exposed by tree_children Nuxeo Platform. More information on Mongo DB storage and how to set it up .

REST API

Rest API playground

We built a Playground so as to be able to test the REST API and learn how it works.

Content Enricher

Former Rest Providers have been renamed "Content Enricher" for more clarity. The corresponding necessary contribution was also changed. Furthermore, we added the possibility to use parameters when contributing a new content enricher.


<enricher name="permissions" class="org.nuxeo.ecm.automation.io.services.enricher.UserPermissionsContentEnricher" >
<category>permissions</category>
<parameter name="permissions">Read,Write,Everything</parameter>

</enricher> 

Various content enrichers were added to the platform:

The Content Enricher documentation has been updated accordingly.

Query Endpoint

A Query endpoint has been added. It allows to execute NXQL queries (with ability to control if it hits Elasticsearch or the database) and to fetch page providers. More information on the documentation page .

Endpoint for Types and Schemas

We added a new REST API endpoint for document types and schemas. It can be useful when implementing something like a connector. See NXP-14114 for details.

ParentId Ref

parentRef id has been added to the json response.

Improved File Download with the REST API

We've worked on the Blob property JSON representation. See NXP-13616 for details.

Before:

"file:content": { 
            "name": "Nuxeo_Platform_5.8_administration_documentation.pdf", 
            "mime-type": "application/pdf", 
            "encoding": null, 
            "digest": "4faa1208dbd8dce54db9174dabdec7db", 
            "length": "11485973", 
            "data": "files/80438e3b-48bb-42d1-9e08-9a0f54b8f945?path=%2Fcontent" 
        }, 

Now:

"file:content": { 
            "name": "Meetup Docker.pdf", 
            "mime-type": "application/pdf", 
            "encoding": null, 
            "digest": "f829ff57c289b60be5dd2c57adcf1d51", 
            "length": "5980167", 
            "data": "http://localhost:8080/nuxeo/nxbigfile/default/e596bd67-aaa5-4a43-a84c-bcf4850c4834/file%3Acontent" 
        }, 

New Versioning Header

You can now control whether a minor or major version is created when creating or updating a document via the REST API, using the new "X-Versioning-Option" header, with "MAJOR" or "MINOR" as a value.

iOS SDK

We started to provide a SDK to start building your iOS application connected to the Nuxeo Platform through the REST API. We already have some very cool features like a blob offline cache.

JavaScript SDK

The JavaScript Client SDK is fully part of the Nuxeo Platform. Two implementations are provided. One uses node.js primitives, one is based on JQuery XHR. The client exposes:

Client is packaged using bower for the JQuery implementation, and NPM for the node implementation. Clients are under continuous integration using phantom.js.

Box, Mule, CMIS: great new integration capabilities

CMIS Implementation Evolutions

Box API Implementation

The Nuxeo addon nuxeo-box-api is an implementation of the Box API on top of the Nuxeo Platform repository. It transforms the Nuxeo content repository into a Box compliant storage backend. Use cases of such an approach are:

Don't hesitate to read our CTO Thierry Delprat's interview to get a better idea.

Here are some examples:

Folders:

GET http://localhost:8080/nuxeo/box/2.0/folders/{folder_id}

looks like

GET https://api.box.com/**2.0/folders/{folder id}**

Files:

GET http://localhost:8080/nuxeo/box/2.0/files/{file_id}

looks like

GET https://api.box.com/**2.0/files/{file_id}**

Mule Connector

We wrote a connector for Mule that is based on HTTP (Automation) API.

Mule ESB is a lightweight Java-based enterprise service bus (ESB) and integration platform that allows developers to connect applications together quickly and easily, enabling them to exchange data.

Using this connector, you can build Mule Flows that will use services exposed by Nuxeo Platform.

This connector exposes:

We invite you to read the sample and documentation to get a good grasp on the possibilities offered by this module.

Support of Facets and Other Kind of Aggregates on Page Providers and Content Views

Page Provider now integrates aggregates support and content view leveraging such kind of page providers can be configured via Nuxeo Studio easily. That way you can build search interfaces with terms, ranges and histograms filters. Many use cases have been taken into account: support of dates, specific widgets for users, directories, documents. More information about supported aggregates in the platform and how to configure new search screen with aggregates.

JSF2, New User Actions Placeholders, Result Layouts and Other Evolutions of the UI Framework and CAP Web Application

JSF2

Content Application Platform (CAP) and all the plugins have been migrated from JSF 1.2 to JSF 2 and the latest stable release of Richfaces: 4.5. A migration tool has been implemented for helping you migrate your custom code base. That will be necessary when you plan to upgrade your Nuxeo Platform Instance to 6.0. More information can be found on JSF code migration to JSF2 .

Improvement of Content Views Configurability

You can now control the display of the slideshow, the spreadsheet and the edit columns actions at the result layout level. Even better, this area of user actions is now a category of actions. It means that it is easy to contribute new actions there. To evaluate the visibility of such an action, the current content view is made available in the filter context.

Typed Layout

Layouts now have a type, which allows to define properties that can be used to define on a per instance basis if some given features are supported. We currently use it for result layouts, with two types: listingTable and listingThumbnail

Widget Definition Alias

It is possible to define aliases for a widget definition, so as to override former widget definitions with a newer one without having to duplicate that definition. Ex: - document_listing_ajax -> table_listing - search_listing_ajax -> table_listing

Document mode with Fallback on Toggleable layouts widget

Toggleable document layout widget now handles a document mode, since modes for documents are not restricted to "create" or "edit" or "view" and can gather layouts for different rendering use cases (like the drive edit screen), and still need to use "edit" or "view" mode for render. Furthermore, a logic of fallback has been added when the given mode has not been contributed.

Dev Mode: Display of Page Structure

In Development mode, you can display the structure of your page : layouts, widgets, actions, just select the object and display its properties. This makes it a great tool for getting inspiration from the default application for your own project, or for knowing which id should be used for removing or hide conditionnaly a link, a button or any other UI object .

Multi-navigation Category of Actions

The placeholder for adding virtual navigations is now part of Nuxeo CAP. You don’t need to depend of Virtual navigation for adding elements there.

Custom Headers in the Webapp

A custom header has been added: "X-UA-Compatible" with the value "IE=10; IE=11" so as to better control behaviour on Internet Explorer on supported versions. The way this header has been added benefits from a new extension point that allows to contribute additionnal headers.

Select2

Select2 widgets have been improved. There are two noticable new features.

Changes in Features Layout, Migration to Maven 3

The build now relies on Maven 3 (Maven 2 previously). There were some big changes in the way features are distributed. Nuxeo DM is a deprecated assembly. You shoud now start systematically from Nuxeo CAP and add addition packages. Faceted Search has been deprecated and exists as a separated package. Virtual Navigation is in a separated package. Tags support has been integrated to Nuxeo CAP. Open Social is deprecated and exits now in a separate marektplace pacakge. Social Collab addon is also deprecated. DAM package contains all the imaging-* addons, and brings Picture, Video and Sound types.

Content Automation

Parameterised Automation Chains and Other Productivity Improvements on Automation

Users can design automation chains with parameters, saving a great number of chains whose structure is repeated with only a few changes in operations parameters.

The readability of an automation chain is improved with a better visibility of arguments values.

Finally, we provide a text mode for automation chain edition, that will facilitate some refactoring, and also make it easy to transfer to support a chain definition, or to build new documentation samples.

Automation: Execution Flow Operations

The list of operations allowing to launch other chains for loops (loop on blobs, loop on documents, loop on arbitrary lists) has been cleaned up. Idea is to have on all those operations support for transaction management, so as to be able to easily design scalable and robusts automation chains.

YAML Converter for Automation Chains

YAML representation of chains is now visible in the platform. Here is an example for the validateDocument chain:

http://localhost:8080/nuxeo/site/automation/doc?id=validateDocument

- Context.FetchDocument
- Document.SetLifeCycle:
    value: approve
- Document.CheckIn:
    version: minor
    comment: Automatic checkin after validation

New Operations for Collections Management

We have added operations dedicated to collections management. You can use AddToCollection, RemoveFromCollection, CreateACollection and GetAllDocumentsFromCollection. Their name speak for themselves.

Authentication and Other User Management Evolutions

Token Based Authentication Management & OAuth 2.0 Support

Exploding demand of API use makes it necessary to provide easy means for developers to manage authentication of the applications they develop, let it be on JavaScript based app, iOS, Python (with Drive)… The token based authentication service, implemented initially for the requirements of Nuxeo Drive is extracted and generalized, made available to the Nuxeo Platform developers. In the same time, OAuth 2.0 support is added, so as to provide as an option a very secured way of handling the authentication process.

SCIM 1.1 Implementation

A new scim-server plugin provides a RESTFUL implementation of SCIM 1.1 interface, that allows to provision users and groups using a commonly accepted API. This API is used for instance by third party IDMs like Okta.

Okta SSO

A new login-okta plugin allows to use Okta IDP for managing users and authentication.

Duo Web Two Factors authentication plugin

A new duoweb-authentication plugin allows to set up a two factors authentication for Nuxeo using Duo Web online sercices.

Audit Service Based on Elasticsearch

A new implementation of the audit service has been made on top of an elastic search index. This provides greater performances which was necessary when audit has millions of entries, and more power in terms of defining what fields are stored.

Various

New Download Servlet

A new download servlet is available for documents that are not bound to a specific document. This new servlet is used by the Download File operation so as to get this operation working even with big files.

UserWorkspace Improvements

It is now possible to override the behaviour of user workspace creation.

Incremental Update for Integer fields

Some document fields can now be updated at the storage level using atomic increment/decrement operations. This is needed for instance to allow concurrent delta updates of fields without losing information. A typical use case is the quotas. See http://jira.nuxeo.com/browse/NXP-15103 for more details.

Directory Low Level Access Restriction

When contributing a directory declaration, it is now possible to add READ and WRITE restrictions to specific groups.

Java 8 Support

This new release has been tested with Java 8. You can see the list of changes on NXP-13570 .

NXQL Query and Fetch

Using the queryAndFetch method you can now use COUNT, AVG, SUM, MIN and MAX in your NXQL queries. Again, this only work when using queryAndFetch . See NXP-13708 for reference.

Facilitators for Escalation Rules Configuration

Simplify frequent escalation rules use cases by providing some functions usable in the conditional expression:

That way, the following current condition


@{!(NodeVariables["last_reminder"] == empty) &&
 Context["taskDueTime"].compareTo(CurrentDate.calendar) < 0 &&
 Fn.date(NodeVariables["last_reminder"]).days(1).calendar.compareTo(CurrentDate.calendar) < 0}

would be replaced by:

 @{timeSinceDueDateIsOver() > 0 && timeSinceRuleHasBeenFalse(86400000) }

without having to deal with adding a custom node variable etc...

Calendar Facet

We have added a calendar facet that allows to easily set Calendar objects in the repository. They themselves display events in a calendar style, with ability to bind documents to calendars and events. This feature is very useful on Case Management projects, where one wants to review cases on specific events. Thanks to this roadmap item, it is a matter of a few minutes to setup some calendars in your application! The feature is made available in the already existing nuxeo-agenda module.

Giving a Comment When following a Transition

This is something we should have done a long time ago but it's finally here. You can now pass a comment when following a transition. To do this you simply add a comment in the document's context map like this:

        doc = session.createDocument(doc);
        doc.putContextData("comment", "a comment");
        session.followTransition(doc, "approve");

Business Days Management

A plugin implemented at first for a customer project has been generically re-branded as it can be useful in many situations: "Business Days Management" module allows to compute a date given a delay and the list of holidays for the year. The delay will be added to the start date without counting the week ends and those holidays. See the nuxeo-business-day-management GitHub repository , we will come up soon with a post around this topic.

Generic Video Class Converter

Thanks to this new Video converter, you can add new video conversion formats without having to write custom Java classes. A sample contribution of a new video converter would be:

<converter name="convertToMOV" class="org.nuxeo.ecm.platform.video.convert.VideoConversionConverter">
    <sourceMimeType>video/mpeg</sourceMimeType>
    <sourceMimeType>video/webm</sourceMimeType>
    <sourceMimeType>video/quicktime</sourceMimeType>
    <sourceMimeType>video/ogg</sourceMimeType>
    <sourceMimeType>video/x-ms-asf</sourceMimeType>
    <sourceMimeType>video/x-msvideo</sourceMimeType>
    <sourceMimeType>video/flv</sourceMimeType>
    <destinationMimeType>video/mov</destinationMimeType>
    <parameters>
        <parameter name="CommandLineName">ffmpeg-tomov</parameter>
        <parameter name="videoMimeType">video/mov</parameter>
        <parameter name="videoExtension">mov</parameter>
        <parameter name="tmpDirectoryPrefix">convertToMOV</parameter>
    </parameters>
</converter>