← Back to Index

8.3 Release Notes

For Developers

A C# Nuxeo Client

8.1A C# Nuxeo Client has been added. A sample application is provided so as to understand how to make use of it. Read the C# client documentation for more information.

New Operations

User Invitation

8.2The operation User.Invite is now available to trigger a user invitation remotely.

Studio JAR Hot-Reload

8.2The operation Service.HotReloadStudioSnapshot is now available to trigger a hot-reload of the Studio JAR.

REST Endpoint Evolutions

New Token Endpoint

8.3An endpoint has been added to be able to fetch and delete via the REST API tokens for the Nuxeo Authentication module.

New Search Endpoint

8.3A new search endpoint has been added to be able to be able to perform searches as well as saving and fetching them. The query endpoint is now deprecated.

New Content-Type Header

8.2Content-Type header now returns the nuxeo-entity type as well:

application/json; nuxeo-entity=documents

Client-Side Localisation

8.3The client is now responsible for sending the locale it is interested in via a dedicated request header.

Fetching Members of Group object

8.2 New endpoints were added for getting members of a group:

This endpoint supports pagination and returns the full objects (full users and groups). And by default when fetching a user or a group, users and groups members are no more marshaled (only ids are returned), you can use fetch.group=memberUsers and/or fetch.group=memberGroups to get the full object.

Directories

Generic Directory and Directory Templating

8.2 Generic Directories have been introduced, along with the possibility to make regular directories be "templates". First, register a template directory ( template="true" ):

<extension target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory" point="directories"> 
<directory name="template-dir" template="true">
<dataSource>java:/nxsqldirectory</dataSource>
<createTablePolicy>always</createTablePolicy>
<querySizeLimit>100</querySizeLimit>
</directory>
</extension>

Then use a generic directory to provide specific customizations over the extended template ( extends="template-dir" ):

<extension target="org.nuxeo.ecm.directory.GenericDirectory" point="directories"> 
<directory name="my-directory" extends="template-dir">
<schema>myschema</schema>
<table>mytable</table>
<idField>id</idField>
<passwordField>password</passwordField>
<passwordHashAlgorithm>SSHA</passwordHashAlgorithm>
<substringMatchType>subany</substringMatchType>
<cacheTimeout>3600</cacheTimeout>
<cacheMaxSize>1000</cacheMaxSize>
</directory>
</extension>

The Generic Directory descriptor only supports a generic subset of the configuration of the directories in general (see org.nuxeo.ecm.directory.BaseDirectoryDescriptor for the exact fields). This new indirection allows to make it easier to change implementation of a directory for a given business requirement.

Cache is Back

8.2 Directories that still have a cacheMaxSize and cacheTimeOut but no newly-defined cacheEntryName are still be using a cache.

Elasticsearch Evolutions

Elasticsearch Crawl API

8.3The ElasticSearchService now exposes the Elasticsearch scroll API allowing to process large amounts of data.

You can use it this way for instance:

ElasticSearchService ess = Framework.getService(ElasticSearchService.class);
String query = "SELECT * FROM Document ORDER BY ecm:path";

// Perform initial search and get first batch of 20 results
EsScrollResult scrollResult = ess.scroll(new NxQueryBuilder(session).nxql(query).limit(20), 10000);
DocumentModelList batchOfDocs = scrollResult.getDocuments();
while (!batchOfDocs.isEmpty()) {
  for (DocumentModel doc : batchOfDocs) {
    // Process document
    // ...
  }
  // Get next batch of results
  scrollResult = ess.scroll(scrollResult);
  batchOfDocs = scrollResult.getDocuments();
}

Note: the keepAlive parameter in milliseconds only needs to be long enough to perform the next scroll query.

ecm.path Field

8.2A new field in Elasticsearch index is available: ecm:path with the following informations:

 "ecm:path.level1": "default-domain", 
"ecm:path.level2": "workspaces",
"ecm:path.level3": "aWorkspace",
"ecm:path.level4": "aFolder",
"ecm:path.level5": "aFile",
etc.
"ecm:path.depth": 5

Mapping for Audit Index

8.2No specific mapping had been contributed for Audit index. This is now done.

NXQL Evolutions

8.3Fetching Documents from Specific Fields

When calling CoreSession.query, doing a SELECT * FROM Document WHERE ... is doing SELECT ecm:uuid FROM Document WHERE ... and returning the documents whose ids are matching. There are additional use cases of returning documents with other ids. Ex:

  1. Direct page provider with SELECT relation:target FROM DefaultRelation WHERE relation:source = ?
  2. Simplifying collection management with a query like SELECT collection:documentIds/* FROM Collection WHERE ecm:uuid = ?

You can now use such a syntax in your NXQL queries.

CMIS Evolutions

Proxies Are Visible through CMIS

8.3Now when the system property org.nuxeo.cmis.proxies=true (default value) then proxies are visible like any other document using CMIS.

CMIS Test Feature Can Be Used from Third-Party Bundle

8.3It is now possible to have third-party modules use the CmisFeatureSessionHttp feature to run their own tests in the context of a preconfigured CMIS test server.

Authentication Prompt

8.2 When configuring authentication chains, a new attribute is available at the authentication chain level, handlePrompt so as to configure if the authentication filter delegates the login prompt to its plug-ins or if it returns systematically a 401 response code.

Configuring TinyMCE Editor via Tag Properties

8.1 Plugins and options have been extracted to control them by tag properties in order to display different options depending on the field.

Understanding The Sequence Of Listeners Calls

8.1 You can now add this in your log4j.xml:

<category name="org.nuxeo.common.logging">
  <priority value="DEBUG"/>
</category> 

Then use the sequence.sh to generate a PNG with a sequence diagram of all threads and listeners.

Note that all events in the chart are in chronological order (not proportional) except for the Initiate link, where the origin points to the thread that has generated a work without telling when (earlier for sure).

HTML Content in Tipsy Tooltip

8.1 Tooltips generated with Tipsy now render HTML content properly.

Sample Project for Benchmarking Nuxeo Platform with Gatling

8.3For people who need to write and launch Gatling scenarios for an addon or any Nuxeo project, a Gatling sample is available in the Nuxeo marketplace sample project. Note that Nuxeo has switched to Gatling as it was better suited to reach the level of performances required for benchmarking the Nuxeo Platform in extremely high stress conditions: multiple thousands of requests per seconds.

Random Generation of Documents with Nuxeo Platform Importer

8.3Using the /randomImporter endpoint, the bulk document importer already offered the possibility to generate random documents so as to fill the repository, typically for benchmark purposes. The number of documents that are generated in the various folders is now random, for more realistic load tests. It follows this rule:

Explorer Addon Evolution

8.3The Explorer plugin has been greatly improved: better search features, cleaner look & feel. We reviewed the browsing pattern, simplifying each view to navigate between Extension Points, Services, Operations, Components and Bundles. We have also extended the XML generation feature to help developers have a working sample. Check it out on explorer.nuxeo.com or by installing the Platform Explorer Nuxeo Package.

JSF Widgets Evolutions

Limit Attribute for SuggestDirectoryEntries

8.2A new attribute limit is available for limiting the number of entries returned by the SuggestDirectoryEntries

No More Selenium Tests

8.3Selenium has been fully replaced by Webdriver for the functional tests of the Nuxeo Platform and is no longer used.

Miscellaneous

8.3The UIDSequencer interface now supports long integer.