Architecture: Designed to be Extended
The two key design principles for the Nuxeo Platform are flexibility and extensibility. They are applied at all levels of the platform.Extension Point System
At the core, the Nuxeo Platform relies on a powerful system (Nuxeo Runtime) that implements the extension point pattern at a large scale to enable a high level of extensibility and customizability. Plug-ins implement services and expose extension points that are in turn used by other plug-ins to contribute customizations. Since everything is a plug-in in the platform, custom plug-ins are first class citizens, just like native plug-ins. This approach enables an unmatched level of extensibility and customizability without forking code or finding workarounds.By Example
The TypeService exposes an extension point that enables other modules to define content types. The ConversionService exposes an extension point to convert file types. Even at the API level, the REST API Service exposes an extension point to define new endpoints and the UI framework exposes a User Action extension point to let other modules define actions.By the Numbers
The most recent version of the Nuxeo Platform is built by over 150 plug-ins exposing more than 250 extension points. Hello, extensibility!
Content Repository (Core)The content repository is the smaller core of the platform. It offers persistence, query, versioning, conversion, access control and all the common library services that you expect in a content repository.
The repository has been designed to handle structured content, not just files and metadata. Documents in the Nuxeo Platform are really content objects, defined by properties, including nested properties (aka XML complex types), some of which can be files. Very complex data structures can be associated to a content object, along with any number of files. These objects are the unit of content to be manipulated in your application. They speak your business language and hold the appropriate level of structured information.
- Rich content model support, including nested properties (complex types and lists of complex types),
- Advanced querying, including on nested properties, using NXQL, CMISQL and Elasticsearch (starting with version 5.9.3),
- Pluggable file storage, with Filesystem, Encrypted FS and Amazon S3 as native plug-ins, including storage-level deduplication (thanks to a content addressing approach),
- Versioning policy service to enforce complex versioning schemes,
- Permission-based (ACL) and rule-based access control, validated for military-grade access control,
- Conversion Service to transform content formats, including video transcoding.
Starting with Nuxeo Platform 5.9.3, the repository features a query engine backed by Elasticsearch, that is fully backward compatible. This enables horizontal scaling of the query capacity by adding new Elasticsearch nodes, data aggregation to get statistics from the content, and a wide range of query capabilities by directly using the Elasticsearch query language. This brings to the platform the best indexer and query engine in the industry.
Starting with Nuxeo Platform 5.9.4, Nuxeo is now offering a new persistence engine for the Nuxeo Platform, MongoDB, the leading NoSQL database. MongoDB is an open source document database that supports the storage and processing of large amounts of content. It can be used in place of, or alongside the existing SQL storage engine used with the Nuxeo Platform. MongoDB offers capabilities such as full-index support, rich querying, Map/Reduce for aggregation and data processing, auto-sharding, replication and high availability, and much more. Essentially, it offers Big Data tools and processes for the content store. It also works well alongside Elasticsearch, leveraging Elasticsearch for advanced queries and MongoDB for scalable content storage.
Business Logic and Content AutomationContent automation provides a modular way to create the business logic of an application.
It is a Nuxeo service that exposes common actions in a Nuxeo application as atomic operations. They can be assembled to create complex business rules and logic, without writing any Java code.
In other words, content automation provides a high level API over Nuxeo services – an API made of operations that can be assembled in complex automation chains, or macro operations. These operations can be exposed through the REST API, and can be triggered by an event or a user action, such as a button or a link, in the user interface.
By default, the platform has 150+ operations, and, as with any service, it is possible to create custom operations and make them available in the platform.More on Content Automation >
Extensive REST APIThe platform features an extensive, document-oriented API to create, query and manage content, and a command-oriented API for complex interactions. Combined, the REST API is a great way to build applications and integrate with the platform.
- JSON as data format for direct use from most languages and platforms,
- Adaptable: Define which level of granularity you need when retrieving data (eg. just ID, title and version vs. full object) for more network efficiency and performance,
- Extensible: Enrich the data with content adapters, facets and even create new commands without breaking the compatibility of existing clients,
- Composable: Call several commands in a single call (using Automation Chains), making them execute in a single transaction so if one fails, everything will be rolled back.
Workflow with Content RoutingThe Nuxeo Platform embeds a powerful workflow engine also called “Content Routing.” Workflow can be used for case management projects, form digitization, complex document validation, signature and publishing processes, and more.
This workflow engine leverages the main modules of the platform: Repository, Automation service, layouts for all user interactions and process implementations.
A workflow is conceptually defined using a graph, which is configured in Nuxeo Studio.The workflow engine provides the means to implement most BPMN concepts: fork, merge, decision, branching point, exclusive, inclusive, looping, human tasks, services tasks, multiple instances, events, data objects, subprocess, join. Note that those standard concepts are not all exposed as is on the graph editor, but can still be implemented leveraging what is provided.
The workflow engine also provides high level features regarding task management such as filterable tasks lists, reminders, task reassignment, task delegation, task reminders.
More on workflow >
The Nuxeo Platform proposes different technologies for the client side of your application. Your choice of technology approach depends on both your project and its context.
You primarily have two strategies for the UI you design for your users:
- Customize the existing web application, which is JSF/SEAM based. You can perform a lot of customization using Nuxeo Studio, and you can extend it by writing your own facelets (XHTML) templates and Seam components. Using this approach, you can keep the standard layout and just add your “business” flavor from Studio, or you can completely redesign the layout, as some Nuxeo Platform users have. More on the Back Office UI Framework.
You can also use the Nuxeo WebEngine, a lightweight web framework provided by the Nuxeo Platform. It enables web developers to easily create a customized web interface on top of the Nuxeo Platform using JAX-RS style, FreeMarker and Java scripting (Groovy or other). Nuxeo WebEngine allows rapid creation of REST applications on top of the Nuxeo Platform.
Thanks to the Nuxeo Runtime and to the bundle system, the Nuxeo Platform deployment can be adapted to your needs:
- Deploy only the bundles you really need,
- Deploy on multiple servers if needed, or
- Deploy on multiple infrastructures: Tomcat, Pojo, unit tests.
There are several deployment models available for the Nuxeo Platform, including:
- Simple Deployment
- Cluster HA: The Nuxeo Platform provides a simple clustering solution, where you can have several Nuxeo Platform nodes connected to the same database server.
- Cloud: The Nuxeo Platform can be hosted on various Clouds and virtualization systems such as Amazon AWS, Azure and Docker.
- Hot Standby (DRP): If you want to provide a Disaster Recovery Plan (DRP), you need to host two separate Nuxeo infrastructures and be sure you can switch from one to the another if a problem arises.
In addition, you can deploy dedicated processing nodes, setup read-only synchronization and utilize multiple repositories.
More on Deployment Options >