Technologies in Nuxeo EP
100% Java Based
Nuxeo EP is 100% built on top of Java: as long as a JVM (Java Virtual Machine) is available in your target environment, you should be able to run Nuxeo EP.
Nuxeo EP requires at least Java 5 (we use Generics and Annotation) and is validated against Sun JDK version 5 and 6.
POJO and JEE
The Nuxeo platform is designed so that you can run services and components in various environments:
- on bare Java,
- in a servlet container,
- in a JEE container (EAR including EJB3 bindings).
Nuxeo components and services will leverage the Java EE infrastructure if available: JTA transaction management, JAAS security, EJB3 resource pooling...
OSGi inspired component model
Nuxeo components and services are packaged like an OSGi Bundle.
Each software part of Nuxeo EP is packaged in a jar that declares:
- its dependencies,
- the components provided,
- the services provided.
Nuxeo extends the OSGi model to include needed features like service binding and extension points.
Leverage existing open source frameworks
Nuxeo integrates many existing open source frameworks. When something that works exists in open source we prefer to integrate it rather than rewrite it.
We integrate the following open source frameworks:
- JBPM: the main process engine,
- Drools: for rules management,
- Seam: used for the Web Component model in the JSF UI toolkit,
- Shindig: used as the infrastructure provider for OpenSocial,
- Jena RDF: the RDF provider.
This one is deprecated
- JackRabbit: since Nuxeo has introduced VCS.
Main design goals
The main design goals of the Nuxeo EP architecture are to provide:
- powerful and clean solutions to configure and extend the platform,
- agility to deploy and integrate it in a complex environment.
These 2 points are the main reasons for the Bundles/Components/Service model we use.
The next paragraph will present how we achieve these goals.
10,000 foot view
From a 10,000 foot view, the Nuxeo platform can be separated in 4 layers:
Nuxeo Runtime provides the component, service and deployment model used to make the platform run.
Nuxeo Runtime is based on the OSGi component model but adds some features like:
- a service lookup and binding system,
- an extension point system,
- a deployment system.
Nuxeo components and services run on top of Nuxeo Runtime. As a consequence, Nuxeo EP can run in any environment that is supported by Nuxeo Runtime.
This basically means that Nuxeo Runtime is also an abstraction layer that helps Nuxeo EP run in different environments.
The Nuxeo Core layer contains all the services and components required to manage document storage.
Nuxeo Core can be used independently as an embeddable Document Repository.
Nuxeo Services contains content management services and components:
- audit service,
- comment service,
All these services and components have some common points:
- they almost all use Nuxeo Core (because they provide services bound to Documents),
- they are designed as generic and as configurable as possible,
- they don't depend on any UI layer.
If you don't want to use the UIs provided by Nuxeo, but simply do service calls from your application, you will use the Nuxeo services layer directly.
The gadget below lists the services deployed in the DM distribution :
Nuxeo client technologies
On top of the service layer, Nuxeo EP provides:
- several client technology frameworks (Web 2.0, RichClient, RIA ...),
- reusable building blocks.
For example, when using JSF/Seam web technology, Nuxeo EP provides ready to use screens and buttons for most of the features and services of the platform.
This allows you to easily assemble a Web Application without having to rebuild everything from scratch or deconstruct a pre-built monolithic application.
Easy customization and integration
One of the main goals of Nuxeo EP is to provide an easy and clean way to customize the platform for your application needs.
For that, Nuxeo Runtime provides an Extension Point system that can be used to:
- configure services and components (XML configuration),
- extend existing services and components (Java code or scripting).
The extension point model is used everywhere inside Nuxeo EP. This means there is only one model for all components and services.
You use the same model to configure storage layers as to configure buttons in the Web UI.
In the current version of Nuxeo EP, there are about 200 extension points available.
- you can really do a lot with simple configuration;
- you can do customization that can be upgraded (extension points are maintained with the platform).
To leverage the Extension Points capabilities, you can either:
- write XML configuration,
- use Nuxeo Studio to generate the XML for you.
In terms of customization, the most common tasks include:
- define custom schemas and Document types (supported by Nuxeo Studio),
- define custom forms (supported by Nuxeo Studio),
- define custom life-cycles (supported by Nuxeo Studio),
- enforce business policies:
- use content automation (supported by Nuxeo Studio),
- write custom listener scripts,
- customize Web UI:
- make your own branding (supported by Nuxeo Studio),
- add buttons, tabs, links, views (supported by Nuxeo Studio),
- build your own theme via the ThemeManager,
- add workflows.
If you need to extend Nuxeo EP or integrate it with existing applications, our platform also provides a lot of advantages:
- Nuxeo EP provides several APIs to access services (Java, RMI, SOAP, JAX-RS, ...),
- Nuxeo EP is based on standards (OSGi, JTA, JCA, JAAS, EJB3, JAX-RS, JAX-WS ...),
- You can use extension points to inject your code into the platform.
The last point is probably the most important.
Thanks to the extension point system and easy-to-use tools around - Nuxeo Studio and Nuxeo IDE - you can write you business code - without large technical knowledge - and inject it cleanly in the right component of Nuxeo EP:
- no need to hack to make it run,
- your custom code will be based on maintained extension points and interfaces and will be able to be easily upgraded.