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:
Document Oriented REST API
We have a new document oriented API for CRUD operation.
Create
Read
Update
Delete
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
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:
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:
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:
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:
- Pre processing: transactional first step
- Long running: long running processing that should not require transactional resources
- Post processing: transactional final step
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.