Building an Embeddable
                Enterprise Content Management
                Core With the Latest Java
           ...
Goal Of This Talk




     Learn about the design and use of Nuxeo™ 5,
               an embeddable, extensible
      Ente...
Agenda

What is Enterprise Content Management
What do we want to achieve
Core Framework
Core and High-Level Services
UI La...
What is
Enterprise Content Management?
    1990–2000...

     Manufacturing
●



     Supply Chain
●



     HR
●



     ...
What is
Enterprise Content Management?
    2000–20...

     Documents (Records, E-Mail, Media)
●



     Imaging
●



    ...
What is
Enterprise Content Management?

 The technologies used to
        capture
    ●



        create
    ●



       ...
Agenda

What is Enterprise Content Management
What do we want to achieve
Core Framework
Core and High-Level Services
UI La...
What do we want to achieve?

    Create a Framework
●



    Make it Extensible
●



    Make it Multi-Platform
●



    U...
What do we want to achieve?

    Create a Framework
●


        Set of Services
    ●


             Software Bundles
    ...
What do we want to achieve?

    Create a Framework
●



    Make it Extensible
●


        New services
    ●



        ...
What do we want to achieve?

    Create a Framework
●



    Make it Extensible
●



    Make it Multi-Platform
●


      ...
What do we want to achieve?

    Create a Framework
●



    Make it Extensible
●



    Make it Multi-Platform
●



    U...
What do we want to achieve?

    Create a Framework
●



    Make it Extensible
●



    Make it Multi-Platform
●



    U...
Agenda

What is Enterprise Content Management
What do we want to achieve
Core Framework
Core and High-Level Services
UI La...
Core Framework

    Schemas
●



    Document Types
●



    Life Cycle
●



    Repository
●



    Security
●
Core Framework

    Schemas
●


        Structure the documents
    ●



        XML Schemas
    ●



        Complex Type...
Core Framework: Schema DublinCore

 <xs:schema>
   <xs:element   name=quot;titlequot; type=quot;xs:stringquot;/>
   <xs:el...
Core Framework: Schema Baddies

 <xs:schema>
   <xs:complexType name=quot;baddiequot;>
     <xs:sequence>
       <xs:eleme...
Core Framework: XML Equivalent

 <baddies>
   <baddie>
     <surname>Sylar</surname>
     <level>38</level>
     <birth>19...
Core Framework

    Schemas
●



    Document Types
●


        High-level name
    ●



        Aggregate schemas
    ●

...
Core Framework: Document Type

 <doctype name=quot;Notequot; extends=quot;Documentquot;>

   <schema name=quot;dublincoreq...
Core Framework

    Schemas
●



    Document Types
●



    Life Cycle
●


        States
    ●



        Transitions
    ●
Core Framework: Life Cycle States

  <lifecycle name=quot;defaultquot; initial=quot;projectquot;>
    <states>
      <stat...
Core Framework: Life Cycle Transitions

  <lifecycle name=quot;defaultquot; initial=quot;projectquot;>
    ...
    <transi...
Core Framework

    Schemas
●



    Document Types
●



    Life Cycle
●



    Repository
●


        Hierarchical
    ●...
Core Framework: Repository

    Hierarchical
●



        Servers, Domains
    ●



        Tree of documents
    ●



   ...
Core Framework

    Schemas
●



    Document Types
●



    Life Cycle
●



    Repository
●



    Security
●


        ...
Core Framework: Security ACLs

    Basic Access Control Entry (ACE)
●


        DENY Read to Anonymous
    ●



        GR...
Agenda

What is Enterprise Content Management
What do we want to achieve
Core Framework
Core and High-Level Services
UI La...
Core Services

    Event System
●



    Directories
●



    User Manager
●



    Query
●
Core Services

    Event System
●


        Synchronous Listeners
    ●



        Low Level
    ●


             Creation...
Core Services

    Event System
●



    Directories
●


        Tabular Data
    ●



        Users and Groups
    ●



 ...
Core Services: Directory

  <directory name=quot;countryquot;>
    <schema>vocabulary</schema>
    <dataSource>java:/nxsql...
Core Services

    Event System
●



    Directories
●



    User Manager
●


        Bridge directories and user authent...
Core Services

    Event System
●



    Directories
●



    User Manager
●



    Query
●


        Multiple Backends
  ...
Core Services: Query

  SELECT * FROM Documents WHERE
    dc:title LIKE 'JavaOne%'

  SELECT * FROM Documents WHERE
    dc...
High-Level Services

    Audit and Logging
●



    Comments
●



    Transformations
●



    Relations
●



    Workflow...
Layered Framework: Functional View



    Web App                 RCP App          Flex App




                          ...
Layered Framework: Workflow



 org.nuxeo.ecm.platform.workflow.api
 org.nuxeo.ecm.platform.workflow.client
 org.nuxeo.ecm...
Layered Framework: Workflow

                                               EJB
                 Seam WF Client



  WF Fa...
Agenda

What is Enterprise Content Management
What do we want to achieve
Core Framework
Core and High-Level Services
UI La...
UI Layers

    Web
●


        JSF, Ajax4jsf, Facelets
    ●



        EJB Action Listeners
    ●



        JBoss Seam
 ...
Nuxeo 5 Screenshot
Eclipse Screenshot
Agenda

What is Enterprise Content Management
What do we want to achieve
Core Framework
Core and High-Level Services
UI La...
NXRuntime: Extension Points



    Nuxeo Core                  Blog Module

  Comment Service              Blog Extensions...
NXRuntime: Extension Points

 <component name=quot;core.TypeServicequot; version=quot;1.0quot;>

   <implementation
      ...
NXRuntime: Extension Points Contributions

 <component name=quot;MyTypesquot; version=quot;1.0quot;>

   <extension target...
Services are Pluggable

    Internal Service Provider Interfaces (SPI)
●



    Repository Backend
●



    Directory Back...
Plug into Different Platforms

    POJO Bundles
●


        OSGi Dependencies
    ●



    Extension Points
●



    Gener...
Plug into OSGi

    OSGi as Basic Format
●


        JAR
    ●



        Meta-Information
    ●



    NXRuntime
●


    ...
Plug into Java EE: Problems

    Modules hard to reuse on other platforms
●



    XML module descriptors don't allow frag...
Plug into Java EE: Deployment

    Deployment
●


        Ordering
    ●



        Dynamic Activation
    ●



        Co...
Agenda

What is Enterprise Content Management
What do we want to achieve
Core Framework
Core and High-Level Services
UI La...
Using the Framework

    Contribute to Extension Points
●


        Schemas, Documents
    ●



        Actions
    ●



 ...
Using the Framework: JSF

<h:outputText value=quot;#{messages['label.edit']}quot; class=”top”/>
<h:form>
  <h:panelGrid co...
Using the Framework: Action Listener

@Stateless
@Name(quot;myActionsquot;)
public class MyActionsBean implements MyAction...
Summary

    Modular Framework
●



    Flexible Backends
●



    Platform Independent
●



    Easy Extensions
●



    ...
For More Information




 http://www.nuxeo.org/
 http://svn.nuxeo.org/


 http://lists.nuxeo.com/mailman/listinfo/ecm
Upcoming SlideShare
Loading in …5
×

Nuxeo JavaOne 2007

6,674 views

Published on

This session describes the architecture and implementation of an embeddable, extensible enterprise content management core for Java EE and simpler platforms. The presentation starts by describing the general architectural concepts used as building blocks:

• A schema and document model, reusing XML schemas and making good use of XML namespaces, where document types are built with several facets
• A repository model, using hierarchy and versioning, with the Content Repository API for Java (JSR 170) being one of the possible back ends
• A query model, based on the Java Persistence query language (JSR 220) and reusing the path-based concepts from Java Content Repositories (JCR)
• A fine-grained security model, compatible with WebDAV concepts and designed to provide flexible security policies
• An event model using synchronous and asynchronous events, allowing bridging through Java Message Service (JMS) or other systems to other event-enabled frameworks
• A directory model, representing access to external data sources using the same concepts as for documents but taking advantage of the specificities of the data back ends

Suitable abstraction layers are put in place to provide the required level of flexibility. One of the main architectural tasks is to find commonalities in all the systems used (or whose use is planned in the future) so framework users need to learn and use a minimal number of concepts. The result is a set of concepts that are fundamental to enterprise document management and are usable through direct Java technology-based APIs, Java EE APIs, or SOA. The presentation shows, for each of the main components, which challenges have been met and overcome when building a framework in which all components are designed to be improved and replaced by different implementations without sacrificing backward compatibility with existing ones.

The described implementation, Nuxeo Core, can be embedded in a basic Java technology-based framework based on OSGi (such as Eclipse) or in one based on Java EE, according to the needs of the application using it. This means that the core has to function without relying on Java EE services but also has to take advantage of them when they are available (providing clustering, messaging, caching, remoting, and advanced deployment).

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,674
On SlideShare
0
From Embeds
0
Number of Embeds
49
Actions
Shares
0
Downloads
219
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Nuxeo JavaOne 2007

  1. 1. Building an Embeddable Enterprise Content Management Core With the Latest Java Technologies Florent Guillaume JavaOne 2007 (TS-4532)
  2. 2. Goal Of This Talk Learn about the design and use of Nuxeo™ 5, an embeddable, extensible Enterprise Content Management framework for Java™ EE and other platforms
  3. 3. Agenda What is Enterprise Content Management What do we want to achieve Core Framework Core and High-Level Services UI Layers Extensible and Pluggable Using the Framework
  4. 4. What is Enterprise Content Management? 1990–2000... Manufacturing ● Supply Chain ● HR ● Accounting ● Unification ERP Activity Management ● Shipping ●
  5. 5. What is Enterprise Content Management? 2000–20... Documents (Records, E-Mail, Media) ● Imaging ● Search Engine ● Archiving ● Unification ECM Collaboration ● Web Publishing ● Access Control ● Compliance ●
  6. 6. What is Enterprise Content Management? The technologies used to capture ● create ● manage ● store ● preserve ● reuse ● deliver ● content within the enterprise
  7. 7. Agenda What is Enterprise Content Management What do we want to achieve Core Framework Core and High-Level Services UI Layers Extensible and Pluggable Using the Framework
  8. 8. What do we want to achieve? Create a Framework ● Make it Extensible ● Make it Multi-Platform ● Use the Latest Technologies ● Open Source ●
  9. 9. What do we want to achieve? Create a Framework ● Set of Services ● Software Bundles ● Set of APIs ● Open to other systems ● Configuration ● XML rather than code ●
  10. 10. What do we want to achieve? Create a Framework ● Make it Extensible ● New services ● New backends to existing services ●
  11. 11. What do we want to achieve? Create a Framework ● Make it Extensible ● Make it Multi-Platform ● POJOs ● Java EE ● Clusterable, distributable ● Eclipse ● Rich Client Platform (RCP) ● Mix of those ● RCP client, Java EE server ●
  12. 12. What do we want to achieve? Create a Framework ● Make it Extensible ● Make it Multi-Platform ● Use the Latest Technologies ● Java 5, Java EE 5 ● OSGi ● JCR (JSR-170, JSR-283), W3C XML Schemas ● JSF, Facelets ● BPEL, WfMC ● SOAP, WSDL ●
  13. 13. What do we want to achieve? Create a Framework ● Make it Extensible ● Make it Multi-Platform ● Use the Latest Technologies ● Open Source ● LGPL, EPL ● http://www.nuxeo.org ●
  14. 14. Agenda What is Enterprise Content Management What do we want to achieve Core Framework Core and High-Level Services UI Layers Extensible and Pluggable Using the Framework
  15. 15. Core Framework Schemas ● Document Types ● Life Cycle ● Repository ● Security ●
  16. 16. Core Framework Schemas ● Structure the documents ● XML Schemas ● Complex Types ● Attached Files ●
  17. 17. Core Framework: Schema DublinCore <xs:schema> <xs:element name=quot;titlequot; type=quot;xs:stringquot;/> <xs:element name=quot;descriptionquot; type=quot;xs:stringquot;/> <xs:element name=quot;rightsquot; type=quot;xs:stringquot;/> <xs:element name=quot;createdquot; type=quot;xs:datequot;/> <xs:element name=quot;modifiedquot; type=quot;xs:datequot;/> <xs:element name=quot;issuedquot; type=quot;xs:datequot;/> <xs:element name=quot;formatquot; type=quot;xs:stringquot;/> <xs:element name=quot;languagequot; type=quot;xs:stringquot;/> ... </xs:schema>
  18. 18. Core Framework: Schema Baddies <xs:schema> <xs:complexType name=quot;baddiequot;> <xs:sequence> <xs:element name=quot;surnamequot; type=quot;xs:stringquot;/> <xs:element name=quot;levelquot; type=quot;xs:positiveIntegerquot;/> <xs:element name=quot;birthquot; type=quot;xs:datequot;/> </xs:sequence> </xs:complexType> <xs:complexType name=quot;baddiesquot;> <xs:sequence> <xs:element name=quot;baddiequot; type=quot;baddiequot; minOccurs=quot;0quot; maxOccurs=quot;unboundedquot;/> </xs:sequence> </xs:complexType> <xs:element name=quot;baddiesquot; type=quot;baddiesquot;/> </xs:schema>
  19. 19. Core Framework: XML Equivalent <baddies> <baddie> <surname>Sylar</surname> <level>38</level> <birth>1962-06-11</birth> </baddie> </baddies>
  20. 20. Core Framework Schemas ● Document Types ● High-level name ● Aggregate schemas ● Facets ●
  21. 21. Core Framework: Document Type <doctype name=quot;Notequot; extends=quot;Documentquot;> <schema name=quot;dublincorequot;/> <schema name=quot;notequot;/> <facet name=quot;Commentablequot;/> <facet name=quot;Versionablequot;/> <facet name=quot;Publishablequot;/> </doctype>
  22. 22. Core Framework Schemas ● Document Types ● Life Cycle ● States ● Transitions ●
  23. 23. Core Framework: Life Cycle States <lifecycle name=quot;defaultquot; initial=quot;projectquot;> <states> <state name=quot;projectquot;> <transitions> <transition>approve</transition> </transitions> </state> <state name=quot;approvedquot;> <transitions> <transition>obsolete</transition> </transitions> </state> <state name=quot;obsoletequot;/> </states> ...
  24. 24. Core Framework: Life Cycle Transitions <lifecycle name=quot;defaultquot; initial=quot;projectquot;> ... <transitions> <transition name=quot;approvequot; destination=quot;approvedquot;> <description>Approve the document</description> </transition> <transition name=quot;obsoletequot; destination=quot;obsoletequot;> <description>Obsolete the document</description> </transition> </transitions> </lifecycle>
  25. 25. Core Framework Schemas ● Document Types ● Life Cycle ● Repository ● Hierarchical ● Versioning ● Backend ● API ●
  26. 26. Core Framework: Repository Hierarchical ● Servers, Domains ● Tree of documents ● Versioning ● Save, View, Restore ● Policy ● Backend ● JCR, SQL ● API ● Nuxeo 5, JCR 2 (JSR-283) ●
  27. 27. Core Framework Schemas ● Document Types ● Life Cycle ● Repository ● Security ● Users, Groups ● Permissions ● ACLs ●
  28. 28. Core Framework: Security ACLs Basic Access Control Entry (ACE) ● DENY Read to Anonymous ● GRANT Write to group:Developers ● Ordered List ● Manipulated by different services ● User assignment ● Workflow ● Record management locks ● Placeful and Inherited ●
  29. 29. Agenda What is Enterprise Content Management What do we want to achieve Core Framework Core and High-Level Services UI Layers Extensible and Pluggable Using the Framework
  30. 30. Core Services Event System ● Directories ● User Manager ● Query ●
  31. 31. Core Services Event System ● Synchronous Listeners ● Low Level ● Creation, Modification, Deletion ● Move, Copy ● Security Changes ● Bridged to JMS ● Asynchronous Handlers ● Non-Core components can participate ●
  32. 32. Core Services Event System ● Directories ● Tabular Data ● Users and Groups ● Vocabularies ● Entries are placeless documents ●
  33. 33. Core Services: Directory <directory name=quot;countryquot;> <schema>vocabulary</schema> <dataSource>java:/nxsqldirectory</dataSource> <table>country</table> <idField>id</idField> <sqlScript>country.sql</sqlScript> </directory> <xs:schema> <xs:element name=quot;idquot; type=quot;xs:stringquot;/> <xs:element name=quot;labelquot; type=quot;xs:stringquot;/> <xs:element name=quot;obsoletequot; type=quot;xs:booleanquot;/> </xs:schema>
  34. 34. Core Services Event System ● Directories ● User Manager ● Bridge directories and user authentication ● Interfaces with the application server ● Global defaults ●
  35. 35. Core Services Event System ● Directories ● User Manager ● Query ● Multiple Backends ● Intelligent Dispatcher ● Query Language: NXQL ●
  36. 36. Core Services: Query SELECT * FROM Documents WHERE dc:title LIKE 'JavaOne%' SELECT * FROM Documents WHERE dc:modified >= TIMESTAMP '2007-01-01T00:00:00' SELECT * FROM Documents WHERE ecm:path STARTSWITH '/customers/proposals'
  37. 37. High-Level Services Audit and Logging ● Comments ● Transformations ● Relations ● Workflow ● Action Manager ● Mime Types ● Scheduler ●
  38. 38. Layered Framework: Functional View Web App RCP App Flex App Nuxeo Runtime High Level Services Transform Audit Relation Indexing ... OOo JDBC Jena Compass Nuxeo Core Services Storage Schemas Versions Security ... Jackrabbit
  39. 39. Layered Framework: Workflow org.nuxeo.ecm.platform.workflow.api org.nuxeo.ecm.platform.workflow.client org.nuxeo.ecm.platform.workflow.core org.nuxeo.ecm.platform.workflow.document org.nuxeo.ecm.platform.workflow.document-api org.nuxeo.ecm.platform.workflow.document-facade org.nuxeo.ecm.platform.workflow.facade org.nuxeo.ecm.platform.workflow.jbpm
  40. 40. Layered Framework: Workflow EJB Seam WF Client WF Facade Doc Facade Workflow API WF Doc API Nuxeo Core API WF Core Doc Core Nuxeo Core jBPM
  41. 41. Agenda What is Enterprise Content Management What do we want to achieve Core Framework Core and High-Level Services UI Layers Extensible and Pluggable Using the Framework
  42. 42. UI Layers Web ● JSF, Ajax4jsf, Facelets ● EJB Action Listeners ● JBoss Seam ● Theming Engine: NXThemes ● Eclipse RCP ●
  43. 43. Nuxeo 5 Screenshot
  44. 44. Eclipse Screenshot
  45. 45. Agenda What is Enterprise Content Management What do we want to achieve Core Framework Core and High-Level Services UI Layers Extensible and Pluggable Using the Framework
  46. 46. NXRuntime: Extension Points Nuxeo Core Blog Module Comment Service Blog Extensions Type Service Storage Module Storage Service Jackrabbit Storage
  47. 47. NXRuntime: Extension Points <component name=quot;core.TypeServicequot; version=quot;1.0quot;> <implementation class=quot;org.nuxeo.ecm.core.schema.TypeServicequot;/> <extension-point name=quot;schemaquot;> <object class=quot;org.nuxeo.ecm.core.schema.SchemaBinding- Descriptorquot;/> </extension-point> <extension-point name=quot;doctypequot;> <object class=quot;org.nuxeo.ecm.core.schema.DocumentType- Descriptorquot;/> </extension-point> </component>
  48. 48. NXRuntime: Extension Points Contributions <component name=quot;MyTypesquot; version=quot;1.0quot;> <extension target=quot;core.TypeServicequot; point=quot;schemaquot;> <schema name=quot;commonquot; src=quot;common.xsdquot;/> <schema name=quot;dublincorequot; src=quot;dublincore.xsdquot; prefix=quot;dcquot;/> </extension> <extension target=quot;core.TypeServicequot; point=quot;doctypequot;> <doctype name=quot;Notequot; extends=quot;Documentquot;> <schema name=quot;commonquot;/> ... </doctype> </extension> </component>
  49. 49. Services are Pluggable Internal Service Provider Interfaces (SPI) ● Repository Backend ● Directory Backend ● Workflow Service ● Indexing Service ● Relation Service ● Transformation Service ●
  50. 50. Plug into Different Platforms POJO Bundles ● OSGi Dependencies ● Extension Points ● Generic Lookup Service ● Java EE Deployment ● JBoss ● GlassFish ● ... ●
  51. 51. Plug into OSGi OSGi as Basic Format ● JAR ● Meta-Information ● NXRuntime ● Extension points ● Definition ● Contributions ● Specialized Deployment ●
  52. 52. Plug into Java EE: Problems Modules hard to reuse on other platforms ● XML module descriptors don't allow fragmentation ● Hardcoded package names in code or XML ● Cannot add functionality without redeploying the entire ● application No extension model (plugins) ●
  53. 53. Plug into Java EE: Deployment Deployment ● Ordering ● Dynamic Activation ● Contributed XML descriptors ● EAR: application.xml, jboss-app.xml ● WAR: web.xml, faces-config.xml, pages.xml ● Other: persistence.xml, datasources ● L10n properties files ● Services as MBeans ● Lookup Service ●
  54. 54. Agenda What is Enterprise Content Management What do we want to achieve Core Framework Core and High-Level Services UI Layers Extensible and Pluggable Using the Framework
  55. 55. Using the Framework Contribute to Extension Points ● Schemas, Documents ● Actions ● Event Listeners ● Directories ● XHTML UI ● JSF ● EJB Action Listeners ● Seam ● Deployment Rules ●
  56. 56. Using the Framework: JSF <h:outputText value=quot;#{messages['label.edit']}quot; class=”top”/> <h:form> <h:panelGrid columns=quot;3quot; styleClass=quot;dataInputquot; columnClasses=quot;labelColumn,fieldColumnquot;> <h:outputText value=quot;#{messages['label.title']}quot;/> <h:inputText value=quot;#{currentDocument.dublincore.title}quot; class=quot;dataInputTextquot; id=quot;titlequot; required=quot;truequot;> <f:validateLength minimum=quot;5quot;/> </h:inputText> <h:message styleClass=quot;errorMessagequot; for=quot;titlequot;/> <h:outputText value=quot;quot;/> <h:commandButton value=quot;#{messages['label.save']}quot; styleClass=quot;buttonquot; type=quot;submitquot; action=quot;#{documentActions.updateCurrentDocument}quot;/> </h:form>
  57. 57. Using the Framework: Action Listener @Stateless @Name(quot;myActionsquot;) public class MyActionsBean implements MyActions { @In(required = true) protected Document currentDocument; public String doSubmit() throws ClientException { String title = currentDocument.getProperty(quot;dc:titlequot;); title += quot; (Captured)quot;; currentDocument.setProperty(quot;dc:titlequot;, title); currentDocument.save(); return null; } }
  58. 58. Summary Modular Framework ● Flexible Backends ● Platform Independent ● Easy Extensions ● Open Source ● We Welcome Your Ideas and Contributions! ●
  59. 59. For More Information http://www.nuxeo.org/ http://svn.nuxeo.org/ http://lists.nuxeo.com/mailman/listinfo/ecm

×