Hello everyone and happy holidays! I have a new Nuxeo Tech Report for you - taken straight from the meetings of the Nuxeo Dev Team.

Nuxeo Studio

Nuxeo Studio 2.9 has been released and we've added some interesting new features.

We now have locking and presence management:

  • project displays connected user names

  • when a user access a feature

    • it is automatically locked if possible

    • if the feature is already locked the lock owner name is displayed as well as a "steal lock"

    • when lock is released the waiting user will receive a notification and a link to reload

  • heartbeat (no more session timeout!)

This has been built using Vert.X.

Widgets are now associated with a "control" that can define:

  • if the widget should have it's own form

  • if widget manages it's label

  • if widget needs an ajax form

Which means:

  • better management of summary widgets

  • New widgets for actions (with support for FancyBox)

  • Widget for tabs

  • Content Routing forms

Nuxeo DAM

We're working on a new DAM Asset Browser View that:

  • is configurable from Nuxeo Studio

  • shares as much code as possible code with Nuxeo Document Management :)

Thumbnail Adapter

The goal is to have an adapter that provides:

  • a default thumb picture
  • a series of named thumbs? Let us know what you think :)

Integration inside Nuxeo CAP includes:

  • create a thumb widget
  • add a Codec URL
  • plug it in the default "big icons" result Layout

    Nuxeo Drive Status

    (because I know you're curious about this!)
    Antoine and Olivier are still working on Nuxeo Drive. The MP package and the client distributions have been completed and we now have a MacBook on the CI chain to build the MacOS package.

    Talend Integration

    An initial integration was started between Nuxeo and Talend. The goal is to have Talend components to read from Nuxeo and write to Nuxeo. See NXP-10615.

In the process we'll work on Content Automation:

  • create additional QueryAndFetch operation NXP-10614
  • improve default marshaling
  • add sample unit tests to manage complex types : you can see the problem here.

    Runtime Evolutions

    We need to make some changes in Nuxeo Runtime :

    • for Nuxeo IDE and bundle blacklisting

    • for Nuxeo deployment with remote Bundle repository

    For now, we just need to prepare the Nuxeo Runtime deployment model to be sure that we will be able to plug the necessary items.

    • backlisting bundles

    • adding bundles from IDE

    • hook to download bundles from a remote server before deployment

    • check servlet hook (the goal being to remove the deployment-fragment processing)

      • resource loader for WAR

      • contributing Servlets, Filters, Listener via extension points

    Big Files and Networking Issues

    The issues with Big files in Nuxeo are of 2 types:

    • using a Thread and TX on the server side during a long upload / download process

    • huge bandwidth usage when several clients download the same asset from a central server

    These problems exist in a CAP / DM, but are more visible in DAM when the typical use case is to manipulate big pictures and videos.

    Upload / Download Optimization

    The typical solution is to use a reverse proxy for buffering upload / download.
    This allows to reduce the request time on the Nuxeo side and to free up resources as quickly as possible.

Nginx seems to have standard modules for this, but this is probably available for Apache2 too.

Deported Download

A common use case reported by customers: several users from the same physical site have to access the assets stored on a central server and their network is slow.

The idea would be to download big file from the central server only the first time and use a "local cache" other times.

There seems to be a common pattern for that called X-SendFile :

  • central server returns a specific header rather than the actual file

  • the reverse proxy intercept this header and use it to do an internal redirect and serve the file from an other location

This pseudo protocol seems to be implemented for Nginx, Lighhtpd and Apache2.

To make it work for Nuxeo, we would need to :

  • tweak download servlet to return only the header
  • have a decentralized BlobStore with a simple download servlet (no security, download by Digest should be enough)
  • have the reverse proxy tag (i.e. add header) the requests to send to Nuxeo server the URL of the local download server

I hope you liked what you just read :) Don't hesitate to comment here or on our brand new community page on G+.