Nuxeo Enterprise Platform - Version 5.1 and 5.2

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 Soulcie, Bogdan Stefanescu, Anahide Tchertchian, Quentin Lamerand, M.-A. Darche, Julien Carsique, Catalin Baican, Stephane Lacoin, Thomas Roger

5.1 / 5.2

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. Prerequisites
3.2. Setting up your Eclipse
3.2.1. Enabling Maven project loading
3.2.2. Enabling Subversion checkout
3.3. Learning from the project sample
3.3.1. Checkout project
3.3.2. Understanding sample code
3.3.3. Declaring book document type
3.3.4. Regulating book states
3.3.5. Displaying book documents
3.3.6. Making book documents indexable and searchable
3.3.7. Enabling drag&drop creation
3.3.8. Listening for events
3.4. Starting a new project
3.5. Using Documentation
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. Exception Handling
6.1. Introduction
6.2. Extension Points
6.2.1. requestdump
6.2.2. listener
6.2.3. errorhandlers
7. Actions, Views, Navigation URLs and JSF tags
7.1. Introduction
7.2. Actions
7.2.1. Concepts
7.2.2. Manage actions
7.3. Views
7.3.1. UI Views
7.3.2. Manage views
7.4. Navigation URLs
7.4.1. Document view codec service
7.4.2. URL policy service
7.4.3. Additional configuration
7.4.4. URL JSF tags
7.5. Nuxeo Document Lists Manager
7.6. Nuxeo File Manager
7.7. Nuxeo JSF tags
8. Layouts
8.1. Introduction
8.1.1. Layouts
8.1.2. Widgets
8.1.3. Widget types
8.1.4. Modes
8.2. Manage layouts
8.2.1. Layout registration
8.2.2. Layout definition
8.2.3. Widget definition
8.2.4. EL expressions in layouts and widgets
8.3. Document layouts
8.4. Layout display
8.5. Standard widget types
8.5.1. text
8.5.2. int
8.5.3. secret
8.5.4. textarea
8.5.5. datetime
8.5.6. template
8.5.7. file
8.5.8. htmltext
8.5.9. selectOneDirectory
8.5.10. selectManyDirectory
8.5.11. list
8.5.12. checkbox
8.6. Custom templates
8.6.1. Custom layout template
8.6.2. Custom widget template
8.6.3. Builtin templates to handle complex properties
8.7. Custom widget types
8.8. Generic layout usage
9. Event Listeners and Scheduling
9.1. Introduction
9.2. Concepts
9.3. Adding an event listener
9.4. Upgrading an event listener
9.5. Adding an event
9.6. From CoreEvents to JMS Messages
9.7. Adding a JMS message listener
9.8. Scheduling
10. User Notification Service
10.1. Introduction
10.2. Notification concept
10.3. Notification channels
10.4. E-mail notifications
11. Indexing & Searching
11.1. Introduction
11.2. Configuration
11.2.1. Concepts
11.2.2. The indexableDocType extension point
11.2.3. The resource extension point
11.2.4. Field configuration
11.2.5. Text fields and analyzers
11.2.6. Boolean attributes
11.2.7. Schema resources and fields without configuration
11.2.8. Schema resources
11.2.9. Automatic fields configuration
11.3. Programmatic Searching
11.3.1. Fields and literals
11.3.2. WHERE statements
11.4. The Compass plugin
11.4.1. Configuring Compass
11.4.2. Global configuration
11.4.3. Mappings for Nuxeo
11.4.4. Text fields behavior
11.5. Building a search UI with QueryModel
12. Look and feel
12.1. Introduction
12.2. Principle
12.3. Mechanism
12.3.1. The Elements
12.3.2. The format
12.3.3. The negotiation
12.3.4. The engine
12.3.5. Resource management
12.3.6. Application
12.4. Customizing the theme
12.4.1. Modifying the current theme using theme-default.xml
12.4.2. Modifying the current theme
12.4.3. Adding a new theme and its pages
13. Authentication, Users & Groups Management
13.1. Introduction
13.2. Users and Groups configuration
13.2.1. Schemas
13.2.2. Directories
13.2.3. UserManager
13.2.4. User Management Interface
13.3. Authentication
13.3.1. Authentication Framework Overview
13.3.2. Pluggable JAAS Login Module
13.3.3. Pluggable Web Authentication Filter
14. Security Policy Service
14.1. Introduction
14.2. Architecture
14.3. Policy contributions
14.3.1. Core policy contribution
14.3.2. Search policy contribution
15. Workflow & jBPM
15.1. Workflow in Nuxeo 5.1
15.1.1. Deploying process definitions
15.2. Workflow from Nuxeo 5.2: the jBPM Service
15.2.1. Introduction
15.2.2. jBPM service configuration
15.2.3. Document management
15.2.4. Default processes
15.2.5. Nuxeo jBPM How-to
16. Document Versioning
16.1. Setting the version of a document
16.2. Modifying automatically the version of a document
16.3. Accessing document from previous version
16.4. The versioning service implementation
17. Audit Service
17.1. Introduction
17.2. Features
17.3. Architecture
17.4. Retrieving entries
17.5. Contributing the audit service
17.5.1. Recording new events types
17.5.2. Recording additional informations
18. Tag Service
18.1. Introduction
18.2. Features
18.3. Architecture
19. Directories and Vocabularies
19.1. Introduction
19.2. Directory with a Relational Database Management System (SQL) server as backend
19.3. Directory with an LDAP server as backend
19.3.1. Server definition
19.3.2. Directory declaration
19.4. Handling references between directory entries
19.4.1. References defined by a many-to-many SQL table
19.4.2. Static reference as a dn-valued LDAP attribute
19.4.3. Dynamic reference as a ldapUrl-valued LDAP attribute
19.4.4. LDAP tree reference
19.4.5. Defining inverse references
19.5. Combining multiple directories into a single virtual directory
19.5.1. Multi-directory sources
19.5.2. Sub-directories
19.6. The Directory API
19.7. Building custom option lists in forms with vocabularies
20. Mimetype detection
20.1. Introduction
20.2. MimetypeRegistry
20.3. Mimetype sniffing
20.4. Invoking the mimetype detection
21. Content Transformation
21.1. Introduction
21.2. Plugins module
21.2.1. Creating a plugin
21.2.2. Declaring a plugin module
21.2.3. Using a transform plugin
21.3. Available transforms
21.3.1. Document conversion
21.3.2. Pdfbox
21.3.3. OLE objects extraction
21.3.4. Office files merger
21.3.5. XSL Transformation
22. Nuxeo Conversion Service
22.1. Conversion Service vs Transformation Service
22.1.1. Motivations for this API changes
22.1.2. What has been improved
22.1.3. About compatibility
22.2. Using Conversion Service
22.2.1. About BlobHolder
22.2.2. built-in converters
22.2.3. Conversion Service API
22.2.4. Configuring converter service
22.2.5. Contributing converters
22.2.6. Converters based on external command line tools
23. Relations
23.1. Introduction
23.2. Concepts
23.3. Configuration
23.3.1. Graph instances
23.3.2. Resource adapters
23.4. Manage relations
23.5. Display relations
23.6. Architecture overview
24. Placeful Configuration
24.1. Introduction
24.2. Using Placeful Configuration
24.3. Contributing a placeful configuration
24.4. Available storage
24.4.1. In memory storage
24.4.2. Directory storage
24.5. Exemple of extension definition
25. Monitoring Nuxeo
25.1. Integrating Nuxeo monitoring in your management system
25.1.1. Inventory (nx:*,management=inventory)
25.1.2. Metric (nx:*,metric=*,management=metric)
25.1.3. Quality (nx:*,usecase=*,management=usecase)
25.2. Integrating management in nuxeo server
25.2.1. nuxeo-runtime-management
25.2.2. nuxeo-platform-management
25.2.3. nuxeo-webengine-management
25.3. Contributing management
25.3.1. Publishing
25.3.2. Providing shortcuts
25.3.3. Reporting quality
III. Core Services
26. Nuxeo Runtime
26.1. Overview
26.1.1. Main Goals
26.1.2. Main Features
26.2. What is OSGi?
26.3. OSGi Support
26.3.1. Supported Features
26.3.2. Unsupported Features
26.3.3. Planned Features
26.4. Component Model
26.4.1. What are components?
26.4.2. Main Features
26.4.3. Planned Features
26.4.4. Adapting Components
26.4.5. Flexible Model
26.4.6. Component Life Cycle
26.4.7. Component Extensibility
26.5. Supported Host Platforms
26.5.1. JBoss Integration
26.5.2. Eclipse Integration
26.6. Using Nuxeo Runtime
26.6.1. Creating Components
26.6.2. Using components
26.6.3. XML Component Descriptors
26.7. Integration tests for Nuxeo Runtime applications
26.7.1. The NXRuntimeTestCase base class
26.7.2. Frequent patterns
26.8. Detailed Architecture
26.9. References
27. Nuxeo Core Documentation
27.1. TODO: BS
27.2. Overview
27.2.1. Main goals
27.2.2. Nuxeo Core Components
27.3. Nuxeo Core Architecture
27.3.1. Model Layer (or Internal API)
27.3.2. Implementation Layer
27.3.3. Facade Layer (or Public API)
27.3.4. Deployment
27.3.5. Client Session
27.4. The Repository Model
27.4.1. Document and Schemas
27.4.2. Document Facets
27.4.3. Document Annotations
27.4.4. Document Access Control
27.4.5. Life Cycle
27.4.6. Query Engine
27.4.7. The Public API
27.4.8. Integration with Applications Servers
27.5. Extension Points
27.5.1. Session Factories
27.5.2. LifeCycle Managers
28. Nuxeo Core Import / Export API
28.1. Export Format
28.1.1. document.xml format
28.1.2. Inlining Blobs
28.2. Document Pipe
28.3. Document Reader
28.4. Document Writer
28.5. Document Transformer
28.6. API Examples
28.6.1. Exporting data from a Nuxeo repository to a Zip archive
28.6.2. Importing data from a Zip archive to a Nuxeo repository
28.6.3. Export a single document as an XML with blobs inlined.
29. Nuxeo Event Service
29.1. Nuxeo event model
29.1.1. Event
29.1.2. EventContext
29.1.3. EventListener
29.1.4. Transactions and Events
29.1.5. EventBundle
29.1.6. PostCommitEventListener
29.2. Using Events
29.2.1. Firing Events
29.2.2. Contributing an EventListener
29.2.3. Contributing a PostCommitEventListener
29.3. JMS and Nuxeo Events
29.3.1. JMS integration
29.3.2. Enabling JMS bridge
29.3.3. From 5.1 event model to 5.2
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
31.4. Nuxeo WebEngine Restlets
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
33.4. Metro web services
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
35.3. Configuring LiveEdit links
35.3.1. Configuration policies
35.3.2. Changing the configuration policy
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
38. Nuxeo Flex Connector
38.1. Overview
38.2. Development environment
38.3. Build and Deploy
38.3.1. Sample Overview
38.4. Dive In
38.4.1. Data Services Configuration
38.4.2. Your First Flex application
38.4.3. Granite DS configuration
V. Administration overview
39. OS requirements, existing and recommended configuration
39.1. Required software
39.2. Recommended configuration
39.2.1. Hardware configuration
39.2.2. Default configuration
39.2.3. For optimal performances
39.3. Known working configurations
39.3.1. OS
39.3.2. JVM
39.3.3. Storage backends
39.3.4. LDAP
40. SMTP Server configuration
41. RDBMS Storage and Database Configuration
41.1. Storages in Nuxeo EP
41.2. Installing the JDBC driver
41.3. Configuring Nuxeo Core Storage
41.3.1. Visible Content Store configuration
41.3.2. JCR backend configuration
41.3.3. Set up your RDBMS
41.3.4. Start Nuxeo EP
41.4. Configuring Storage for other Nuxeo Services
41.4.1. Configuring datasources
41.4.2. Relation service configuration
41.4.3. Tag service configuration
41.4.4. Compass search engine dialect configuration
41.5. Setting up a new repository configuration
41.5.1. Add the new repository configuration
41.5.2. Declare the new repository to the platform
42. LDAP Integration
42.1. For users/groups storage backend
43. OpenOffice.org server installation
43.1. Installation
43.1.1. Start server
43.1.2. Parameters
43.1.3. Installing an extension
43.1.4. Notes
43.2. Running OpenOffice as a Daemon
43.2.1. Nuxeo OOo Daemon
43.2.2. Configuring Nuxeo OOo Daemon
44. Run Nuxeo EP with a specific IP binding
45. Backup, restore and reset
45.1. Backup
45.2. Backup before an upgrade
45.3. Restore
45.4. Reset
46. The Nuxeo Shell
46.1. Overview
46.2. User Manual
46.2.1. Command Options
46.2.2. Commands
46.3. Troubleshooting
46.3.1. Check listened IP
46.3.2. Check connected server
46.3.3. Multi-machine case
46.4. Extending the shell
46.4.1. Registering New Custom Commands
46.4.2. Java Code for the new commands
46.4.3. Building the shell plugin
46.4.4. Deploying the shell plugin
VI. Core developer guide
47. Coding and Design Guidelines
47.1. Introduction
47.2. External Coding Standards
47.3. Some points that need attention
47.3.1. Java code formating
47.3.2. XML code formatting
47.3.3. Design
47.3.4. Unit tests
47.3.5. Security
47.3.6. Naming convention
47.3.7. Information hiding
47.3.8. Use modern Java features
47.3.9. Logging
47.3.10. Documentation: Comments and Javadoc
47.3.11. Deprecation
47.4. Methodology tips
47.4.1. Use the power of your IDE (and its plugins)
47.4.2. Refactor
47.5. Important references
48. Development Tools and Process
48.1. Code Quality with Eclipse Plugins
48.1.1. Using Checkstyle
48.1.2. Using TPTP
48.1.3. Using FindBugs
48.2. Profiling with NetBeans Profiler
48.3. NXPointDoc Documentation tool
48.3.1. Documenting a component
48.3.2. Creating the NxPointDoc site
48.3.3. Browsing NxPointDoc
48.4. Quality Assurance with continuous integration
48.4.1. Rules and means
48.4.2. Quality directives for Nuxeo developers
48.5. Release process
48.5.1. Overview
48.5.2. Continuous integration coverage
48.5.3. Help testing release candidates
49. Packaging Nuxeo EAR
49.1. Introduction
49.2. Basic project structure
49.3. The EAR module
49.3.1. Assembly descriptor
49.3.2. Add some resources
49.4. Improve usability
49.4.1. Thanks to Maven
49.4.2. Thanks to Ant
49.5. Recommended multi-machine packagings
49.5.1. Bi-machine: stateful/stateless
50. Release Management
50.1. Introduction
50.2. Let's release!
50.2.1. Remove all dependencies on SNAPSHOT versions
50.2.2. Checkout the code and clean your repository
50.2.3. Test the release
50.2.4. Perform the release
50.2.5. You're done
VII. Add-ons
51. Add-ons
51.1. Introduction
52. Nuxeo Annotation Service
52.1. Introduction
52.1.1. W3C Annotea
52.1.2. Logical architecture overview
52.1.3. XPointer integration and extension.
52.2. Annotation Service Core
52.2.1. Overview
52.2.2. Implementation
52.2.3. Storage
52.2.4. uriResolver
52.2.5. urlPatternFilter
52.2.6. metadata
52.2.7. permissionManager and permissionMapper
52.2.8. annotabilityManager
52.2.9. UID Generation
52.2.10. Event management
52.3. NXAS Repository Plugin
52.3.1. Overview
52.3.2. Default contribution
52.3.3. Extension Point
52.3.4. documentEventListener
52.3.5. securityManager
52.3.6. jcrLifecycleEventId and graphManagerEventListener
52.4. NXAS Web
52.4.1. Overview
52.4.2. Extension Point
52.4.3. Configuration
52.5. Annotation Service Facade
52.6. Annotation Service HTTP Gateway
52.6.1. Overview
52.7. References
53. Virtual Navigation
53.1. Virtual Navigation
53.1.1. Virtual Navigation presentation
53.1.2. Virtual Navigation configuration
54. Metadata Extraction Service
54.1. Introduction
54.2. Metadata extraction module
54.2.1. Defining a contribution for metadata extraction
54.2.2. Specifying input parameters
54.2.3. Chaining extractions
54.2.4. Creating a plugin for metadata extraction
54.2.5. Using a metadata extraction plugin
55. Unicity Service
55.1. How does it works ?
55.2. What you need:
55.3. Configuration
55.4. Snippets
56. Nuxeo Mail Service
56.1. Presentation
56.2. Basic Use
56.2.1. Configuration
56.3. Advanced Use
57. Imaging
57.1. Introduction
57.2. Imaging API
57.3. Imaging transform
57.4. Imaging web
57.5. Imaging core
58. Nuxeo Preview Addon
58.1. Overview
58.2. Installing the Preview Addon
58.2.1. Deploy the Addon
58.2.2. Configure Transformers
58.3. Extensions and Pluggability
58.3.1. Pluggable Adapters
58.3.2. Pluggable HTML Transformers
58.4. Previews and URLs
59. Nuxeo Tiling service Addon
59.1. Overview
59.2. How tiles are defined and computed
59.3. Installing the picture tiling Addon
59.3.1. Requirements
59.3.2. Deploy the addon
59.3.3. Configuration
59.4. Testing the tiling service
59.4.1. URL and restAPI
59.4.2. simple test client
60. Nuxeo DocumentLink Addon
60.1. Overview
60.2. How does it work
60.3. DocumentLink and Repository
60.4. Using DocumentLink
60.4.1. Using the adapter
60.4.2. Using the DocRepository
61. Nuxeo Search Center
61.1. Overview
61.2. Installing and testing the search center
61.2.1. Building from source
61.2.2. Deploying on a Nuxeo server
61.2.3. Using the Search Center
61.3. How does it work
61.3.1. The GWT client
61.3.2. The JAX-RS server
61.3.3. The SearchCenterService
61.4. How to customize the list of available filters
61.4.1. FilterWidgets
61.4.2. FilterSets
61.5. How to build new GWT filter widgets
61.5.1. Setting up a GWT eclipse development environment
61.5.2. Existing filter widgets
61.5.3. TODO: layout and extension points
VIII. 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.3.3. Generate a new project with the nuxeo-archetype-start archetype
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. Installing mercurial
B.6.1. Linux
B.6.2. Windows
B.6.3. Mac OS
B.6.4. Setting a username
B.6.5. Activating pre-integrated extensions
B.6.6. Using forest
B.7. Chapter Key Point
C. Commercial Support
C.1. About Us
C.2. Contact information
C.2.1. General
C.2.2. Europe
C.2.3. USA