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:
/group/{groupname}/@members
/group/{groupname}/@groups
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:
- Direct page provider with
SELECT relation:target FROM DefaultRelation WHERE relation:source = ?
- 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:
- 10% folders with a big number of files (~= 5000)
- 10% folders with 1 file
- 80% folders with a random variation of the default number of files, so between 50 and 150
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.