← Back to Index

Nuxeo 5.7.2 Tag Release Notes

For Developers

Content Automation

We made a lot of progress on the Content Automation API.

It's possible to contribute a chain into another chain -> Composite Automation Chain

It's possible to add parameters to a chain

Chains contributed are displayed into the Automation documentation with operations listing, parameters and input/output.

An Automation Client Test Suite in Java (or Java Test Compatibility Kit -> TCK) is provided for helping people understanding how Automation is working remotely. You can read our documentation for the details.

Managing business objects (Plain Old Java Object client side for mapping Nuxeo Document Model Adapter server side) is now available.

The goal is to manipulate business object and avoid direct DocumentModel manipulation on client side:

pull : BusinessObject (POJO) <----JSON---- DocumentModelAdapter <---- DocumentModel

push : BusinessObject (POJO) -----JSON---> DocumentModelAdapter ----> DocumentModel

Document Oriented REST API

We have a new document oriented API for CRUD operation.

Create

POST /nuxeo/site/api/id/{idOfTheDoc}
{
    "entity-type": "document",
    "name":"newName",
    "type": "File",
    "properties": {
        "common:icon": "/icons/domain.gif",
        "common:icon-expanded": null,
        "common:size": null
    }
}

Read

GET /nuxeo/site/api/path/{pathOfTheDoc}
GET /nuxeo/site/api/id/{idOfTheDoc}

Update

PUT /nuxeo/site/api/id/{idOfTheDoc}
{
    "entity-type": "document",
    "repository": "default",
    "uid": "37b1502b-26ff-430f-9f20-4bd0d803191e",
    "properties": {
        "common:icon": "/icons/domain.gif",
        "common:icon-expanded": null,
        "common:size": null
    }
}

Delete

DELETE /nuxeo/site/api/id/{idOfTheDoc}

Domain model object and Automation

You can use Business objects with Automation. They are also binded on the REST API and you just have to use the same semantics than for document resources.

Updating a business object

PUT  /nuxeo/site/api/path/{pathOfTheDoc}/@bo/BusinessBeanAdapter
{
    "entity-typee: "BusinessBeanAdapter"
    "value": {
        id: "37b1502b-26ff-430f-9f20-4bd0d803191e",
        "type": "Domain",
        "title":"Default domain"
        "description:"My new description"
     }
}

Richfaces

Nuxeo uses a custom version of Richfaces based on 3.3.1 GA, This custom version of Richfaces is now available on GitHub with all Nuxeo's patches.

CMIS

We've upgraded OpenCMIS to 0.9.0 . This gives us the new CMIS 1.1 browser bindings but we haven't finished implementing all the new features yet.

Content Views

On Nuxeo side, filter can be shown unfolded by default, and some content view templates have been redefined to ease the customization.

On Studio side, the "filter unfolded" option is presented for 5.7.2, and events as well as the page provider class and properties can now be configured also.

CORS support

If you do cross-domain requests from any JavaScript client to access WebEngine resources or Automation APIs, there's a chance that your browser forbids it. CORS allows you to communicate with Nuxeo from another domain using XMLHttpRequests.

We've added a new extension point based on Vladimir Dzhuvinov's universal CORS filter, which allows you to configure on which URL cross-origin headers are needed.

Scan Importer

The scan importer has been improved. You can choose if you want to create the import document container each time you launch an import. You can also choose to update an existing document instead of creating a new one.

New Operation

Get a Directory Projection

Category: Services

Operation Id: Directory.Projection

Executes a query using given filter and return only the column *columnName*. The result is assigned to the context variable *variableName*. The filters are specified as key=value pairs separated by a new line. The key used for a filter is the column name of the directory. To specify multi-line values you can use a \\ character followed by a new line.

Example:

firstName=John
lastName=doe

By default, the search filters use exact match. You can do a fulltext search on some specific columns using the fulltextFields. it's specified as comma separated columnName, for instance:

Example:

firstName,lastName

Run For Each in new TX

Category: Execution Flow

Operation Id: Context.RunOperationOnListInNewTx

Run an operation in a new Transaction for each element from the list defined by the 'list' paramter. The 'list' parameter is pointing to context variable that represent the list which will be iterated. The 'item' parameter represent the name of the context varible which will point to the current element in the list at each iteration. You can use the 'isolate' parameter to specify whether or not the evalution context is the same as the parent context or a copy of it. If the isolate is 'true' then a copy of the current contetx is used and so that modifications in this context will not affect the parent context. Any input is accepted. The input is returned back as output when operation terminate.

Login Page

The login page can now be configured via an extension point, making it easier to upgrade when the login page is customized, and benefit from new features, like OpenID authentication provided by Nelson Silva.

Here is a sample configuration for the login page:

<extension target="org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService" point="loginScreen">
  <loginScreenConfig>
    <bodyBackgroundStyle>url("${org.nuxeo.ecm.contextPath}/img/my_login_background_img.png") 100px 100px no-repeat black</bodyBackgroundStyle>
    <headerStyle></headerStyle>
    <footerStyle>display: none;</footerStyle>
    <loginBoxBackgroundStyle>url("${org.nuxeo.ecm.contextPath}/img/my_background_img.png") 0 0 no-repeat green</loginBoxBackgroundStyle>
    <loginBoxWidth>100px</loginBoxWidth>
    <logoUrl>${org.nuxeo.ecm.contextPath}/img/my_logo.png</logoUrl>
    <logoAlt>My logo Alt</logoAlt>
    <logoWidth>100px</logoWidth>
    <logoHeight>100px</logoHeight>
    <newsIframeUrl>https://www.nuxeo.com/embedded/dm-login</newsIframeUrl>
  </loginScreenConfig>
</extension>

Long Running Listener

You can now extend a new abstract class called AbstractLongRunningListener. Its purpose is to help building an Asynchronous listeners that will handle a long running process.

By default, PostCommitEventListener is executed in a Worker that will take care of starting/comitting the transaction.

If the listener requires a long processing, this will create long transactions which should be avoided. To avoid this behavior, this base class split the processing in 3 steps:

To manage sharing between the 3 steps, a simple Map is provided.

Move To Tomcat 7

Tomcat has been upgraded to version 7.0.42. The main improvement is the upgrade to the Servlet 3.0 API. Take a look at the details.