← Back to Index

5.7.3 to 5.8 Release Notes

For Developers

Automation

We have added new operations:

Traces.Get - Traces.Get

Retrieve trace associated to a Chain or an Operation.

Traces.ToggleRecording - Traces.ToggleRecording

Toggle Automation call tracing (you can set the 'enableTrace' parameter if you want to explicitly set the traceEnable value.

Remove Permission - Document.RemovePermission

Remove permissions for a given user on the input document(s). Returns the document(s).

Add Permission - Document.AddPermission

Add Permission on the input document(s). Returns the document(s).

Concatenate PDFs - Blob.ConcatenatePDFs

Given a File document holding a PDF on the file:content property and 2 PDFs on the files:files property, the following operation will provide a PDF that is the result of the merge of all the PDFs, with the content of the one in file:content property first.

API

The document oriented REST API has been moved into a separate package to ease maintenance and upgrades.

We released an AngularJS sample application to showcase the API.

We've added pagination support for user and group endpoints.

We've added support for different version of the API:

  /api/v1/id/{docId}...

Using the version segment is mandatory. The version is used mostly for giving guarantees to the API user that the JSON entities won't change when migrating to newer version of Nuxeo.

Redis

Several components in Nuxeo will make use of Redis as an optional feature. To configure Redis, the following extension point can be used:


  <extension target="org.nuxeo.ecm.core.redis.RedisService" point="configuration">
    <redis disabled="false">
      <prefix>nuxeo:work:</prefix>
      <host>localhost</host>
      <port>6379</port>
      <password>secret</password>
      <database>0</database>
      <timeout>2000</timeout>
    </redis>
  </extension>

Redis Service

To use the Redis service, do:

        RedisService redisService = Framework.getLocalService(RedisService.class);

This service currently provides two methods:

    redisService.getJedisPool();
    redisService.getPrefix(); // should be used as prefix for any key

Standard usage pattern is:

    protected Jedis getJedis() {
        return redisService.getJedisPool().getResource();
    }

    protected void closeJedis(Jedis jedis) {
        redisService.getJedisPool().returnResource(jedis);
    }

    protected void myMethod() throws IOException {
        Jedis jedis = getJedis();
        try {
            // ... use jedis here ...
            // ... all keys should be prefixed with redisService.getPrefix()
        } finally {
            closeJedis(jedis);
        }
    } 

Redis WorkManager

We added a Redis based WorkManager. This is helpful for:

PDF Signing

Now you can apply more than one signature to a PDF and configure the position of the signatures following a predefined matrix. Here's a sample contribution:

  <extension target="org.nuxeo.ecm.platform.signature.api.sign.SignatureService"
    point="signature">
    <configuration>
      <reason>This document signed as an example.
      </reason>
      <layout lines="2" columns="5" startLine="2" startColumn="1" textSize="10"/>
    </configuration>
  </extension>

UI/UX

Nuxeo's header has been rewritten using widgets displaying actions. Basically it means you can override each part of the header easily. Like the links, search box etc...

The double click shield has been activated by default.

You can Ajaxify any tab you want using the property nuxeo.jsf.useAjaxTabs. It means that when you click on a tab, only its content will be reloaded instead of the whole page. And the URL is updated automatically so you can have permlink with the selected tab, use the back button to go to a previously selected tab. This option can also be chosen when creating a new tab in Nuxeo Studio.

When you are in dev mode, the JavaScript files are not minified. This is much better when you need to debug JavaScript.

Mockito Integration

We've added Mockito support to our test framework. Here's an example:

@RunWith(FeaturesRunner.class)
@Features(RuntimeFeature.class)
public class CanMockServicesTest {

    @RuntimeService
    @Mock
    AFakeService myService;

    @Before
    public void doBefore() {
        when(myService.getSomething()).thenReturn("Hello !");
    }

    @Test
    public void itShouldBindMocktoAService() throws Exception {
        AFakeService service = Framework.getService(AFakeService.class);
        assertNotNull(service);
        assertEquals("Hello !", service.getSomething());
    }
    ...
}

Localization

Crowdin

Nuxeo has an account on Crowdin. It makes it easier for everyone to help translate Nuxeo in different languages. You can read this blog for more information.

Dutch Translation

Our partner Capgemini Netherlands has contributed the Dutch translation for Nuxeo.