Nuxeo Enterprise Platform - Version 5.1

The Reference guide

Julien Anguenot, Eric Barroca, Benoit Delbosc, Thierry Delprat, Damien Dupraz, Laurent Doguin, Alain Escaffre, Stefane Fermigier, Laurent Godard, Olivier Grisel, Florent Guillaume, Solen Guitter, Jean-Marc Orliaguet, Narcis Paslaru, Georges Racinet, Thibault Soulcié, Bogdan Stefanescu, Anahide Tchertchian, Quentin Lamerand, M.-A. Darche, Julien Carsique

5.1

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2; with Invariant Section “Commercial Support”, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at the URL: http://www.gnu.org/copyleft/fdl.html


Table of Contents

I. Introduction
1. Preface
1.1. What this Book Covers
1.2. What this book doesn't cover
1.3. Target Audience
1.4. About Nuxeo
1.5. About Open Source
2. Introduction
2.1. Enterprise Content Management
2.1.1. Why ECM?
2.2. The Nuxeo ECM platform
2.3. Introduction FAQ
2.3.1. What are Nuxeo EP 5, Nuxeo EP and Nuxeo RCP?
2.4. Intended audience
2.5. What this book covers
3. Getting Started
3.1. Introduction
3.2. Prerequisites
3.3. Starting a new project
3.3.1. About Maven
3.3.2. Generate a new project with the nuxeo-archetype-start archetype
3.3.3. Ant settings
3.3.4. "Eclipsize" your project
3.3.5. Running your custom project
3.3.6. Refresh xhtml pages without restarting jboss
3.3.7. Learning from the nuxeo sample project
3.4. Using Documentation
3.5. Advanced tools and tips
3.5.1. Useful plugins when developing on top of Nuxeo with Eclipse
3.5.2. Remote debugging in Eclipse
3.5.3. Browsing a JCR repository
3.6. Other IDEs: IntelliJ IDEA and NetBeans
3.6.1. IDEA
3.6.2. NetBeans
4. General Overview
4.1. Introduction
4.1.1. Architecture Goals
4.1.2. Main concepts and design
4.2. Nuxeo Runtime: the Nuxeo EP component model
4.2.1. The motivations for the runtime layer
4.2.2. Extensible component model
4.2.3. Flexible deployment system
4.2.4. Extension points and Nuxeo 5
4.3. Nuxeo EP layered architecture
4.3.1. Layers in Nuxeo EP
4.3.2. API and Packaging impacts
4.3.3. Illustration of the layered architecture
4.4. Core Layer overview
4.4.1. Features of Nuxeo Core
4.4.2. Nuxeo Core main modules
4.4.3. Schemas and document types
4.4.4. Life cycle associated to documents
4.4.5. Security model
4.4.6. Core events system
4.4.7. Query system
4.4.8. Versioning system
4.4.9. Repository and SPI Model
4.4.10. DocumentModel
4.4.11. Proxies
4.4.12. Core API
4.5. Service Layer overview
4.5.1. Role of services in Nuxeo EP architecture
4.5.2. Services implementation patterns
4.5.3. Platform API
4.5.4. Adapters
4.5.5. Some examples of Nuxeo EP services
4.6. Web presentation layer overview
4.6.1. Technology choices
4.6.2. Componentized web application
5. Schemas and Documents
5.1. Introduction
5.1.1. Concepts
5.2. Schemas
5.3. Core Document Types
5.4. ECM Document Types
5.4.1. Label and Icon
5.4.2. Default view
5.4.3. Layout
5.4.4. Containment rules
5.4.5. Summary
II. Platform Services
6. Actions, Views and JSF tags
6.1. Introduction
6.2. Actions
6.2.1. Concepts
6.2.2. Manage actions
6.3. Views
6.3.1. UI Views
6.3.2. Manage views
6.4. Nuxeo JSF tags
7. Layouts
7.1. Introduction
7.1.1. Layouts
7.1.2. Widgets
7.1.3. Widget types
7.1.4. Modes
7.2. Manage layouts
7.2.1. Layout registration
7.2.2. Layout definition
7.2.3. Widget definition
7.2.4. EL expressions in layouts and widgets
7.3. Document layouts
7.4. Layout display
7.5. Standard widget types
7.5.1. text
7.5.2. int
7.5.3. secret
7.5.4. textarea
7.5.5. datetime
7.5.6. template
7.5.7. file
7.5.8. htmltext
7.5.9. selectOneDirectory
7.5.10. selectManyDirectory
7.5.11. list
7.5.12. checkbox
7.6. Custom templates
7.6.1. Custom layout template
7.6.2. Custom widget template
7.6.3. Builtin templates to handle complex properties
7.7. Custom widget types
7.8. Generic layout usage
8. Event Listeners and Scheduling
8.1. Introduction
8.2. Concepts
8.3. Adding an event listener
8.4. Upgrading an event listener
8.5. Adding an event
8.6. From CoreEvents to JMS Messages
8.7. Adding a JMS message listener
8.8. Scheduling
9. User Notification Service
9.1. Introduction
9.2. Notification concept
9.3. Notification channels
9.4. E-mail notifications
10. Indexing & Searching
10.1. Introduction
10.2. Configuration
10.2.1. Concepts
10.2.2. The indexableDocType extension point
10.2.3. The resource extension point
10.2.4. Field configuration
10.2.5. Text fields and analyzers
10.2.6. Boolean attributes
10.2.7. Schema resources and fields without configuration
10.2.8. Schema resources
10.2.9. Automatic fields configuration
10.3. Programmatic Searching
10.3.1. Fields and literals
10.3.2. WHERE statements
10.4. The Compass plugin
10.4.1. Configuring Compass
10.4.2. Global configuration
10.4.3. Mappings for Nuxeo
10.4.4. Text fields behavior
10.5. Building a search UI with QueryModel
11. Look and feel
11.1. Introduction
11.2. Principle
11.3. Mechanism
11.3.1. The Elements
11.3.2. The format
11.3.3. The negotiation
11.3.4. The engine
11.3.5. Resource management
11.3.6. Application
11.4. Customizing the theme
11.4.1. Modifying the current theme using theme-default.xml
11.4.2. Modifying the current theme
11.4.3. Adding a new theme and its pages
12. Authentication, Users & Groups Management
12.1. Introduction
12.2. Users and Groups configuration
12.2.1. Schemas
12.2.2. Directories
12.2.3. UserManager
12.2.4. User Management Interface
12.3. Authentication
12.3.1. Authentication Framework Overview
12.3.2. Pluggable JAAS Login Module
12.3.3. Pluggable Web Authentication Filter
13. Security Policy Service
13.1. Introduction
13.2. Architecture
13.3. Policy contributions
13.3.1. Core policy contribution
13.3.2. Search policy contribution
14. Workflow & BPM
14.1. Introduction
14.2. Architecture
14.2.1. Big picture
14.2.2. Nuxeo Core Workflow
14.2.3. Nuxeo Workflow Document API and services
14.3. Deploying process definitions
14.3.1. Using extension points
14.3.2. Using the workflow POJO service
14.3.3. Using EJB remoting
14.4. Nuxeo Core document integration
14.4.1. Security policy
14.4.2. Application level rules and filters
14.5. Document Versioning
14.5.1. Setting the version of a document
14.5.2. Modifying automatically the version of a document
14.5.3. Accessing document from previous version
14.5.4. The versioning service implementation
14.6. jBPM integration
14.6.1. Process definition deployment
14.6.2. Business handlers and Nuxeo Core integration
14.7. Nuxeo Workflow Web Client
14.8. Auditing workflow related events
14.9. Notification on workflow related events
14.10. Example of a document review process
15. Logging and Audit Service
15.1. Introduction
15.2. Features
15.3. The nuxeo-platform-audit-web-access addon
15.4. Architecture
15.5. Extending the audit service
15.5.1. Register new events to log
15.5.2. Customize audit entries schema
16. Directories and Vocabularies
16.1. Introduction
16.2. Directory with a Relational Database Management System (SQL) server as backend
16.3. Directory with an LDAP server as backend
16.4. Handling references between directory entries
16.4.1. References defined by a many-to-many SQL table
16.4.2. Static reference as a dn-valued LDAP attribute
16.4.3. Dynamic reference as a ldapUrl-valued LDAP attribute
16.4.4. Defining inverse references
16.5. Combining multiple directories into a single virtual directory
16.5.1. Multi-directory sources
16.5.2. Sub-directories
16.6. The Directory API
16.7. Building custom option lists in forms with vocabularies
17. Mimetype detection
17.1. Introduction
17.2. MimetypeRegistry
17.3. Mimetype sniffing
17.4. Invoking the mimetype detection
18. Content Transformation
18.1. Introduction
18.2. Plugins module
18.2.1. Creating a plugin
18.2.2. Declaring a plugin module
18.2.3. Using a transform plugin
18.3. Available transforms
18.3.1. Document conversion
18.3.2. Pdfbox
18.3.3. OLE objects extraction
18.3.4. Office files merger
18.3.5. XSL Transformation
19. Relations
19.1. Introduction
19.2. Concepts
19.3. Configuration
19.3.1. Graph instances
19.3.2. Resource adapters
19.4. Manage relations
19.5. Display relations
19.6. Architecture overview
20. Placeful Configuration
20.1. Introduction
20.2. Using Placeful Configuration
20.3. Contributing a placeful configuration
20.4. Available storage
20.4.1. In memory storage
20.4.2. Directory storage
20.5. Exemple of extension definition
21. Virtual Navigation
21.1. Virtual Navigation
21.1.1. Virtual Navigation presentation
21.1.2. Virtual Navigation configuration
22. Metadata Extraction Service
22.1. Introduction
22.2. Metadata extraction module
22.2.1. Defining a contribution for metadata extraction
22.2.2. Specifying input parameters
22.2.3. Chaining extractions
22.2.4. Creating a plugin for metadata extraction
22.2.5. Using a metadata extraction plugin
23. Unicity Service
23.1. How does it works ?
23.2. What you need:
23.3. Configuration
23.4. Snippets
24. Nuxeo Mail Service
24.1. Presentation
24.2. Basic Use
24.2.1. Configuration
24.3. Advanced Use
25. Imaging
25.1. Introduction
25.2. Imaging API
25.3. Imaging transform
25.4. Imaging web
25.5. Imaging core
26. Nuxeo Preview Addon
26.1. Overview
26.2. Installing the Preview Addon
26.2.1. Deploy the Addon
26.2.2. Configure Transformers
26.3. Extensions and Pluggability
26.3.1. Pluggable Adapters
26.3.2. Pluggable HTML Transformers
26.4. Previews and URLs
III. Core Services
27. Nuxeo Runtime
27.1. Overview
27.1.1. Main Goals
27.1.2. Main Features
27.2. What is OSGi?
27.3. OSGi Support
27.3.1. Supported Features
27.3.2. Unsupported Features
27.3.3. Planned Features
27.4. Component Model
27.4.1. What are components?
27.4.2. Main Features
27.4.3. Planned Features
27.4.4. Adaptable Components
27.4.5. Flexible Model
27.4.6. Component Life Cycle
27.4.7. Component Extensibility
27.5. Supported Host Platforms
27.5.1. JBoss Integration
27.5.2. Eclipse Integration
27.6. Using Nuxeo Runtime
27.6.1. Creating Components
27.6.2. Using components
27.6.3. XML Component Descriptors
27.7. Integration tests for Nuxeo Runtime applications
27.7.1. The NXRuntimeTestCase base class
27.7.2. Frequent patterns
27.8. Detailed Architecture
27.9. References
28. Nuxeo Core Documentation
28.1. TODO: BS
28.2. Overview
28.2.1. Main goals
28.2.2. Nuxeo Core Components
28.3. Nuxeo Core Architecture
28.3.1. Model Layer (or Internal API)
28.3.2. Implementation Layer
28.3.3. Facade Layer (or Public API)
28.3.4. Deployment
28.3.5. Client Session
28.4. The Repository Model
28.4.1. Document and Schemas
28.4.2. Document Facets
28.4.3. Document Annotations
28.4.4. Document Access Control
28.4.5. Life Cycle
28.4.6. Query Engine
28.4.7. The Public API
28.4.8. Integration with Applications Servers
28.5. Extension Points
28.5.1. Session Factories
28.5.2. LifeCycle Managers
29. Nuxeo Core Import / Export API
29.1. Export Format
29.1.1. document.xml format
29.1.2. Inlining Blobs
29.2. Document Pipe
29.3. Document Reader
29.4. Document Writer
29.5. Document Transformer
29.6. API Examples
29.6.1. Exporting data from a Nuxeo repository to a Zip archive
29.6.2. Importing data from a Zip archive to a Nuxeo repository
29.6.3. Export a single document as an XML with blobs inlined.
30. Experimental Topics
30.1. Introduction
30.2. Runtime Support for Scripting Languages
30.2.1. Introduction
30.2.2. Supported languages
30.2.3. Running a Script
IV. SOA, Web Services and various integration solutions
31. The Nuxeo Restlet API
31.1. Restlet Integration
31.1.1. Restlet types in Nuxeo 5
31.1.2. Restlet URL and parameters mapping
31.1.3. Contributing a new restlet
31.2. Nuxeo default restlets
31.2.1. Browse restlet
31.2.2. Export restlet
31.2.3. Lock restlet
31.2.4. Plugin upload restlet
31.3. Nuxeo RestPack
31.3.1. Installing the RestPack
31.3.2. Restlets included in the RestPack
32. Nuxeo HTTP client
32.1. HTTP Client Library
32.2. HTTP client authentication
33. Web services
33.1. Audit web service
33.2. Remoting web service
33.3. Indexing gateway service
34. Nuxeo JSR 168 Integration
34.1. Overview
34.2. Testing Nuxeo Portlets
34.2.1. Prerequisites
34.2.2. Generate a sample project with nuxeo-archetype-portlet archetype
34.2.3. Test the newly created portlet
34.3. Developping Nuxeo Portlets
34.3.1. NuxeoPortlet class
34.3.2. Project from nuxeo-archetype-portlet archetype
34.3.3. portlet.xml
34.3.4. Restlets
34.4. Available portlets
34.4.1. Nuxeo Search Portlet
35. Desktop integration tools
35.1. Drag and drop browser extensions
35.1.1. Server side import service: the FileManagerService
35.1.2. Microsoft Internet Explorer plugin
35.1.3. Mozilla Firefox plugin
35.2. Online document editing with LiveEdit
35.2.1. Functional overview
35.2.2. Functional use cases
35.2.3. Architectural overview
35.2.4. The Web Service component
35.2.5. More on editor launch
35.2.6. More on pre- and post-editing actions
36. Nuxeo WebDAV interface
36.1. WebDAV clients
36.1.1. Path vs displayName
36.1.2. Filesystem resource vs Nuxeo DocumentModel artifact
36.1.3. MS Web Folder client
36.2. Fooling WebDAV clients
36.2.1. Available hacks
36.2.2. Configuring Nuxeo WebDAV connector for each client.
36.3. Nuxeo EP WebDAV implementation
36.3.1. Nuxeo EP WebDAV-specific features
36.3.2. Known limitations
36.4. Using the Nuxeo WebDAV connector
36.4.1. Installing the WebDAV connector
36.4.2. Connecting a client to Nuxeo WebDAV connector
37. Reporting: Eclipse BIRT Driver
37.1. Overview
37.2. How to use it
37.3. Tomcat integration HOWTO
V. Administration
38. Administration
38.1. SMTP Server configuration
38.2. RDBMS Storage and Database Configuration
38.2.1. Storages in Nuxeo EP
38.2.2. Install the JDBC driver
38.2.3. Configure Nuxeo Core storage
38.2.4. Configure Storage for other Nuxeo Services
38.2.5. Setting up a new repository configuration
38.3. LDAP Integration
38.3.1. For users/groups storage backend
38.4. OpenOffice.org server installation
38.5. Run Nuxeo EP with a specific IP binding
38.6. Virtual Hosting
38.6.1. Motivations for virtual hosting
38.6.2. Virtual hosting configuration for Apache 2.x
38.7. The Nuxeo Shell
38.7.1. Overview
38.7.2. User Manual
38.7.3. Extending the shell
VI. Core developer guide
39. Coding and Design Guidelines
39.1. Introduction
39.2. External Coding Standards
39.3. Some points that need attention
39.3.1. Java code formating
39.3.2. XML code formatting
39.3.3. Design
39.3.4. Unit tests
39.3.5. Security
39.3.6. Naming convention
39.3.7. Information hiding
39.3.8. Use modern Java features
39.3.9. Logging
39.3.10. Documentation: Comments and Javadoc
39.3.11. Deprecation
39.4. Methodology tips
39.4.1. Use the power of your IDE (and its plugins)
39.4.2. Refactor
39.5. Important references
40. Development Tools and Process
40.1. Code Quality with Eclipse Plugins
40.1.1. Using Checkstyle
40.1.2. Using TPTP
40.1.3. Using FindBugs
40.2. Profiling with NetBeans Profiler
40.3. NXPointDoc Documentation tool
40.3.1. Documenting a component
40.3.2. Creating the NxPointDoc site
40.3.3. Browsing NxPointDoc
41. Release Management
41.1. Introduction
41.2. Let's release!
41.2.1. Remove all dependencies on SNAPSHOT versions
41.2.2. Checkout the code and clean your repository
41.2.3. Test the release
41.2.4. Perform the release
41.2.5. You're done
VII. Annexes
A. FAQs
A.1. Deployment and Operations
B. Detailed Development Software Installation Instructions
B.1. Installing Java 5
B.1.1. Using the Sun Java Development Kit (Windows and linux)
B.1.2. Using a package management systems (Linux)
B.1.3. Manual installation (Linux)
B.1.4. Setting up JAVA_HOME (Windows, Linux, Mac OS)
B.2. Installing Ant
B.3. Installing Maven
B.3.1. What is Maven?
B.3.2. Installing Maven
B.4. Installing JBoss AS
B.4.1. JBoss AS listening ports customization
B.4.2. Affected JBoss services
B.5. Installing a Subversion client
B.5.1. Generic subversion clients with linux
B.5.2. Windows
B.6. Chapter Key Point
C. Commercial Support
C.1. About Us
C.2. Contact information
C.2.1. General
C.2.2. France
C.2.3. UK