SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Downloaden Sie, um offline zu lesen
Using content repositories:
Nuxeo Core, JCR 2, CMIS

     Florent Guillaume
     Head of R&D
     Nuxeo




                  www.devoxx.com
Overall presentation goal

  Learn how to use content repositories APIs
   to store and manipulate rich documents




                    www.devoxx.com
Speaker’s qualiïŹcations
 Florent Guillaume is Head of R&D at Nuxeo, a leading
 vendor of Open Source ECM platforms
 Florent Guillaume is a member of international
 normalization technical committees: JSR-283, Oasis CMIS
 Florent Guillaume architected and wrote an ECM system
 (Nuxeo CPS) and is a lead architect on another (Nuxeo EP)
 Florent Guillaume wrote a low-level storage engine for
 Nuxeo Core




  3                        www.devoxx.com
What is a document?
 Store information
  Attached ïŹle (binary stream)
  Metadata
 Retrieve information
  Search
  Security
 Be visible and editable
  Out of scope for a repository

  4                        www.devoxx.com
What is a “rich” document?
 Depends on your deïŹnition of “rich”




  5                       www.devoxx.com
What is a “rich” document?
 Depends on your deïŹnition of “rich”




  5                       www.devoxx.com
What is a “rich” document?
 Depends on your deïŹnition of “rich”
 Associated binary streams
 Multiple attached ïŹles
 Vignettes
 Renditions
 Complex metadata
 Lists of records
 Sub-records (XML-like)

  6                       www.devoxx.com
What storage APIs?
 Filesystem
 Relational database
 JCR (JSR-170, JSR-283)
 Nuxeo Core
 CMIS




  7                       www.devoxx.com
Filesystem
 Decide where to store ïŹles
 Decide how to uniquely identify ïŹles
 Use java.io.FileOutputStream for binaries
 Decide how to serialize metadata
 All by hand
 java.io.ObjectOutputStream, Serializable
 etc.



  8                        www.devoxx.com
Filesystem example
 Read/write
      public void createDocument(Long id, String title) throws IOException {
          File file = new File(ROOT_DIR, id.toString());
          OutputStream out = new FileOutputStream(file);
          try {
              out.write(title.getBytes(quot;UTF-8quot;));
          } finally {
              out.close();
          }
      }

      public MyDocument getDocument(Long id) throws IOException {
          File file = new File(ROOT_DIR, id.toString());
          InputStream in = new FileInputStream(file);
          try {
              byte[] bytes = new byte[100];
              int n = in.read(bytes);
              String title = new String(bytes, quot;UTF-8quot;);
              MyDocument doc = new MyDocument();
              doc.setId(id);
              doc.setTitle(title);
              return doc;
          } finally {
              in.close();
          }
      }
  9                                  www.devoxx.com
Filesystem drawbacks
 Simplistic, no actual model
 Everything has to be done manually
 No search




  10                       www.devoxx.com
Filesystem using JAXB
 Map Java objects to/from XML representations
 DeïŹne a schema (model)
 Marshall/Unmarshall using JAXB APIs




  11                      www.devoxx.com
Relational database
 JDBC
 Hibernate
 ...other ORMs
 JPA




  12             www.devoxx.com
JDBC
DeïŹne a SQL model for your data
 Tables, Columns, Data types
Decide where to store BLOBs
 Column or ïŹlesystem
Emit SQL statements to do all read/write operations




 13                      www.devoxx.com
JDBC example
Class deïŹning the model
          class MyDocument {

              private Long id;

              private String title;

              public Long getId() {
                  return id;
              }
              public void setId(Long id) {
                  this.id = id;
              }

              public String getTitle() {
                  return title;
              }
              public void setTitle(String title) {
                  this.title = title;
              }
          }
 14                            www.devoxx.com
JDBC example
  Establish a connection, Write
public void init() throws ClassNotFoundException {
    Class.forName(quot;com.myvendor.TheDriverClassquot;);
}

public Connection getConnection() throws SQLException {
    return DriverManager.getConnection(quot;jdbc:myvendor:/my/database/infoquot;,
            quot;myLoginquot;, quot;myPasswordquot;);
}

public void createDocument(Long id, String title) throws SQLException {
    PreparedStatement ps = null;
    Connection conn = getConnection();
    try {
        ps = conn.prepareStatement(quot;INSERT INTO MyDocuments (id, title) VALUES (?, ?)quot;);
        ps.setLong(1, id);
        ps.setString(2, title);
        ps.execute();
    } finally {
        if (ps != null)
            ps.close();
        conn.close();
    }
}
    15                                 www.devoxx.com
JDBC example
Read
 public MyDocument getDocument(Long id) throws SQLException {
     PreparedStatement ps = null;
     Connection conn = getConnection();
     try {
         ps = conn.prepareStatement(quot;SELECT title FROM MyDocuments WHERE id = ?quot;);
         ps.setLong(1, id);
         ResultSet rs = ps.executeQuery();
         if (!rs.next()) {
             return null;
         }
         String title = rs.getString(1);
         MyDocument doc = new MyDocument();
         doc.setId(id);
         doc.setTitle(title);
         return doc;
     } finally {
         if (ps != null)
             ps.close();
         conn.close();
     }
 }


 16                                 www.devoxx.com
JDBC drawbacks
Still very much manual
No document abstraction
 Reads from ResultSets have to know proper types




 17                       www.devoxx.com
Hibernate
 Model your documents as classes
 DeïŹne an object-relational mapping in XML
 Use Hibernate to automate read/writes




  18                     www.devoxx.com
Hibernate example
 XML conïŹguration

       <hibernate-mapping>
         <class name=quot;example.MyDocumentquot; table=quot;DOCUMENTSquot;>
           <id name=quot;idquot; column=quot;DOC_IDquot;>
             <generator class=quot;nativequot;/>
           </id>
           <property name=quot;titlequot;/>
         </class>
       </hibernate-mapping>




  19                            www.devoxx.com
Hibernate example
 Read/write
       class DocumentManager {

           public void createDocument(Long id, String title) {
               Session session = HibernateUtil.getSessionFactory().getCurrentSession();
               session.beginTransaction();
               MyDocument doc = new MyDocument();
               doc.setId(id);
               doc.setTitle(title);
               session.save(doc);
               session.getTransaction().commit();
               session.close();
           }

           public MyDocument getDocument(Long id) {
               Session session = HibernateUtil.getSessionFactory().getCurrentSession();
               session.beginTransaction();
               Query query = session.createQuery(quot;FROM MyDocument WHERE id = :idquot;);
               query.setParameter(quot;idquot;, id);
               MyDocument doc = (MyDocument) query.uniqueResult();
               session.getTransaction().commit();
               session.close();
               return doc;
           }
       }

  20                                       www.devoxx.com
Hibernate drawbacks
 Document classes have to be deïŹned by hand
  No standard, just application-deïŹned classes
 Object-relational mapping too ïŹ‚exible
  Too much choice can be a curse
 Binaries are still a problem (no streaming)
  Hibernate’s “binary” is a byte[] → Memory hog
  Blob support inconsistent



  21                        www.devoxx.com
JPA
Model your documents as classes
DeïŹne an object-relational mapping using annotations
Use JPA to automate read/writes




 22                      www.devoxx.com
JPA example
 Class deïŹning the model and the mapping
          @Entity
          class MyDocument {

              private Long id;

              private String title;

              @Id
              public Long getId() {
                  return id;
              }
              public void setId(Long id) {
                  this.id = id;
              }

              public String getTitle() {
                  return title;
              }
              public void setTitle(String title) {
                  this.title = title;
              }
          }                      www.devoxx.com
  23
JPA example
 Read/write
       @Stateless
       class DocumentManagerBean {

           @PersistenceContext
           EntityManager em;

           public void createDocument(Long id, String title) {
               MyDocument doc = new MyDocument();
               doc.setId(id);
               doc.setTitle(title);
               em.persist(doc);
           }

           public MyDocument getDocument(Long id) {
               return em.find(MyDocument.class, id);
           }

           public List<MyDocument> listDocuments() {
               Query query = em.createQuery(quot;SELECT doc FROM MyDocument docquot;);
               return query.getResultList();
           }
       }

  24                                   www.devoxx.com
JPA drawbacks
 Same as Hibernate
 Although annotations are very convenient




  25                     www.devoxx.com
Beyond mere storage




           www.devoxx.com
Beyond mere storage
 Standard document abstraction
 Security
 Locking
 Versioning
 Full text search
 Types and inheritance
 Folders? ordering?



  27                     www.devoxx.com
JCR
Content Repository API for Javaℱ Technology
JSR-170, released in June 2005
Initiated by Day Software
 Also BEA, Documentum, FileNet, IBM, Oracle, Vignette
 and others
Apache Jackrabbit is the RI




 28                         www.devoxx.com
JCR goals
 Java API
 Fine-grained, hierarchical storage model
 Be the “SQL” of hierarchical storage
 Lots of functionality




  29                       www.devoxx.com
JCR features
 CRUD
  Hierarchy of nodes
  Simple properties, Lists, Binaries
 Queries
 Versioning, Locking, References, ...




  30                        www.devoxx.com
JCR 2
JSR-283
First public review July 2007
Final release expected early 2009
Nuxeo is a contributor to the speciïŹcation




 31                       www.devoxx.com
JCR 2 features
 Fix JSR-170 inconsistencies
 Several compliance levels
 New property types
 Improved features
 Versioning, Access control, Observation
 Retention & Hold
 Shareable nodes
 Java query API

  32                         www.devoxx.com
JCR – nodes and properties

          foo                            bar




                                         Property Type
            Node Type
                                               value



         child     child




 33                     www.devoxx.com
JCR – node hierarchy
                             (root)



                    foo       bar          gee



          Folder            Folder                Folder



                      thing         doc



                   Docu                    Docu
                   ment                    ment



                                      vignette



                                           File


 34                       www.devoxx.com
JCR – properties types
 String                 JCR 2
 Binary                       Decimal
 Date                         WeakReference
 Long                         URI
 Double
 Boolean
 Name
 Path
 Reference
  35         www.devoxx.com
JCR – hierarchy with properties
                                     (root)



                           foo        bar       gee



                 Folder             Folder                 Folder



                                  thing   doc




                          Docu                  Docu
                          ment                  ment


                           title description
                                            date creator vignette


        String            String                Date                String
                                                                                       File
        my doc              ...               2008-12-11            ïŹ‚orent


                                                                                ïŹlename data


                                                                             String           Binary

                                                                             img.png          <binary>



 36                                                www.devoxx.com
JCR – node hierarchy
                                    (root)




                      foo            bar             gee




          Folder                Folder                        Folder




                            thing            doc



                                              Document

                                             title: my doc
                   Document
                                           description: ...
                                           date: 2008-12-11
                                            creator: ïŹ‚orent

                                                   vignette




                                                    File

                                           ïŹlename: img.png
                                            date: <binary>


 37                         www.devoxx.com
JCR – types
 DeïŹne the model

             <my='http://my.example.com/ns'>

             [my:document]
             - my:id (long) mandatory
             - my:title
             - my:description
             - my:creator
             - my:date (date)
             + my:vignette (nt:resource)




 38                       www.devoxx.com
JCR – API
 Establish a connection
  public Repository repository;

  public javax.jcr.Session session;

  public void init() throws IOException {
      repository = new TransientRepository();
  }

  public void open() throws LoginException, RepositoryException {
      Credentials credentials = new SimpleCredentials(quot;usernamequot;,
              quot;passwordquot;.toCharArray());
      session = repository.login(credentials);
  }

  public void close() {
      session.logout();
  }


  39                          www.devoxx.com
JCR – API
 Read/write
       public void createDocument(Long id, String title)
               throws RepositoryException {
           Node root = session.getRootNode();
           Node doc = root.addNode(id.toString());
           doc.setProperty(quot;my:idquot;, id);
           doc.setProperty(quot;my:titlequot;, title);
           session.save();
       }

       public Node getDocument(Long id) throws RepositoryException {
           Node root = session.getRootNode();
           Node doc = root.getNode(id.toString());
           return doc;
       }




  40                              www.devoxx.com
JCR – API
 Query

public List<Node> getDocuments() throws RepositoryException {
    QueryManager queryManager = session.getWorkspace().getQueryManager();
    Query query = queryManager.createQuery(
            quot;//element(*, my:document)quot;, Query.XPATH);
    query = queryManager.createQuery(
            quot;SELECT * from my:documentquot;, Query.SQL);
    List<Node> documents = new LinkedList<Node>();
    NodeIterator it = query.execute().getNodes();
    while (it.hasNext()) {
        documents.add(it.nextNode());
    }
    return documents;
}




   41                          www.devoxx.com
Nuxeo
Founded in 2000
Sustained growth for 8 years
Pioneering Open Source ECM software vendor
International organization, customers, partners,
community
40+ employees
Business oriented Open Source




 42                       www.devoxx.com
Nuxeo ECM
3+ years of work
Focus on the platform
 Document Core
 Nuxeo EP, Nuxeo WebEngine, Nuxeo RCP
Components everywhere (OSGi)
Large feature set
Big deployments



 43                     www.devoxx.com
Nuxeo Core
 High-level document-oriented Java API
 Complex document abstraction
 Independent of actual storage backend
 EJB remoting
 REST bindings (JAX-RS)
 SOAP bindings (JAX-WS)




  44                      www.devoxx.com
Nuxeo Core basics
 CRUD
 Hierarchy of document
 Complex properties
 Binaries
 Security
 Locking
 Versioning
 Publishing, Proxies

  45                     www.devoxx.com
Nuxeo Core
 DeïŹne the model
       <xs:schema xmlns:xs=quot;http://www.w3.org/2001/XMLSchemaquot;
         xmlns:nxs=quot;http://www.nuxeo.org/ecm/schemas/mydocumentquot;
         targetNamespace=quot;http://www.nuxeo.org/ecm/schemas/mydocumentquot;>

         <xs:include schemaLocation=quot;core-types.xsdquot;/>

         <xs:element   name=quot;idquot; type=quot;xs:integerquot;/>
         <xs:element   name=quot;titlequot; type=quot;xs:stringquot;/>
         <xs:element   name=quot;descriptionquot; type=quot;xs:stringquot;/>
         <xs:element   name=quot;creatorquot; type=quot;xs:stringquot;/>
         <xs:element   name=quot;datequot; type=quot;xs:datequot;/>
         <xs:element   name=quot;vignettequot; type=quot;nxs:contentquot;/>
         <xs:element   name=quot;fullnamequot; type=quot;nxs:fullnamequot;/>

         <xs:complexType name=quot;fullnamequot;>
           <xs:sequence>
             <xs:element name=quot;firstnamequot; type=quot;xs:stringquot;/>
             <xs:element name=quot;lastnamequot; type=quot;xs:stringquot;/>
           </xs:sequence>
         </xs:complexType>

       </xs:schema>

  46                                  www.devoxx.com
Nuxeo Core
   DeïŹne the model


<extension target=quot;org.nuxeo.ecm.core.schema.TypeServicequot; point=quot;schemaquot;>
  <schema name=quot;mydocumentquot; src=quot;schemas/mydocument.xsdquot; prefix=quot;mydocquot;/>
</extension>

<extension target=quot;org.nuxeo.ecm.core.schema.TypeServicequot; point=quot;doctypequot;>
  <doctype name=quot;MyDocumentquot; extends=quot;Documentquot;>
    <schema name=quot;commonquot;/>
    <schema name=quot;mydocumentquot;/>
    <facet name=quot;Versionablequot;/>
  </doctype>
</extension>




     47                          www.devoxx.com
Nuxe Core – API
 Read/Write
 @Scope(ScopeType.STATELESS)
 @Name(quot;myDocumentActionsquot;)
 public class DocumentActionsBean {

       @In(create = true)
       protected transient NavigationContext navigationContext;

       @In(create = true)
       protected transient CoreSession documentManager;

       public void createDocument(Long id, String title) throws ClientException {
           DocumentModel current = navigationContext.getCurrentDocument();
           DocumentModel doc = documentManager.createDocumentModel(
                   current.getPathAsString(), null, quot;MyDocumentquot;);
           doc.setProperty(quot;mydocumentquot;, quot;idquot;, id);
           doc.setPropertyValue(quot;mydoc:titlequot;, title);
           doc.setPropertyValue(quot;mydoc:fullname/firstnamequot;, quot;Florentquot;);
           documentManager.createDocument(doc);
           documentManager.save();
       }
 }




  48                                      www.devoxx.com
CMIS
Draft v 0.5 published in September 2008 by EMC, IBM,
Microsoft
 Alfresco, Open Text, Oracle, SAP also on board from the
 start
Oasis TC formed in November 2008
 Adullact, Booz Allen Hamilton, Day, Ektron, Exalead,
 Fidelity, Flatirons, Magnolia, Mitre, Nuxeo, Saperion, Sun,
 Vamosa, Vignette (as of 2008-12-01)
CMIS 1.0 expected mid-2009


 49                       www.devoxx.com
CMIS goals
 Simple document model
 Independent of protocol
 SOAP, REST (AtomPub) bindings
 Not tied to a programming language
 Platform, vendor independent
 Basic set of ECM functions
 “Greatest common denominator”



  50                       www.devoxx.com
CMIS basics
 CRUD
  Hierarchy folders, documents
  Simple properties, lists
  One binary
 Policies
 Versioning
 Relationships
 Queries

  51                         www.devoxx.com
CMIS advanced
Multi-ïŹling
Advanced queries
 Joins
 Full text
... maybe more to come




 52                      www.devoxx.com
CMIS basic properties
 ObjectId                        Name (doc, folder)
 Uri                             version-related props (doc)
 ObjectTypeId                    ParentId (folder)
 CreatedBy                       AllowedChildObjectTypeIds
                                 (folder)
 CreationDate
                                 SourceId (rel)
 LastModiïŹedBy
                                 TargetId (rel)
 LastModiïŹcationDate
                                 PolicyName (policy)
 ChangeToken
                                 PolicyText (policy)
  53                   www.devoxx.com
CMIS objects



      Folder   Document                                   Policy
                                           Relationship




 54                       www.devoxx.com
CMIS folders

                            Folder
                            (root)




          Folder            Folder              Folder
           foo               bar                 gee




                   Folder              Folder
                    stuff               blah




 55                         www.devoxx.com
CMIS documents
                            Folder
                            (root)




          Folder            Folder             Folder
           foo               bar                gee




        Doc        Folder          Folder
        001         stuff           blah




                    Doc                      Doc        Doc
                    123                      456        789




 56                         www.devoxx.com
CMIS relationships
                    Folder
                    (root)




           Folder            Folder
            foo               bar




            Doc              Folder             Folder
            001               stuff              blah
              333




              Doc                         Doc
                             555
              123                         456



 57                      www.devoxx.com
CMIS policies
                                       Folder
                                       (root)




                                                         Policy
                      Folder                        Folder
                       foo                           bar




       Policy                                   Policy
                Doc                   Doc
                001                   123




 58                            www.devoxx.com
CMIS policies uses
 ACLs
 Locks
 Retention & Hold
 Automatic transformations
 Repository hints
 etc.




  59                     www.devoxx.com
CMIS queries




 60            www.devoxx.com
CMIS query example
 Standard SQL-92
 Extensions for multi-valued properties
 Extensions for hierarchical searches
 Extensions for fulltext search

SELECT OBJECT_ID, SCORE() AS SC, DESTINATION, DEPARTURE_DATES
FROM TRAVEL_BROCHURE
WHERE IN_TREE( , ‘ID00093854763’)
  AND CONTAINS( , 'PARADISE ISLAND CRUISE')
  AND '2010-01-01' < ANY DEPARTURE_DATES
  AND CONTINENT <> 'ANTARCTICA'
ORDER BY SC DESC



  61                        www.devoxx.com
CMIS AtomPub bindings
 Additional headers for behavior control
 MIME types

         Service            application/atomsvc+xml


         Feed               application/atom+xml;type=feed


         Entry              application/atom+xml;type=entry


         Query              application/cmisquery+xml


         AllowableActions   application/cmisallowableactions+xml




  62                              www.devoxx.com
CMIS Web Services bindings
 All the WSDL ïŹles are provided
 Check the spec ;-)




  63                      www.devoxx.com
CMIS repository services
 getRepositories
 getRepositoryInfo
 getTypes
 getTypeDeïŹnition




  64                 www.devoxx.com
CMIS navigation services
 getDescendants
 getChildren
 getFolderParent
 getObjectParents
 getCheckedoutDocuments




  65                  www.devoxx.com
CMIS object services
 createDocument
 createFolder
 createRelationship
 createPolicy
 getAllowableActions
 getProperties, updateProperties
 getContentStream, setContentStream,
 deleteContentStream
 moveObject, deleteObject, deleteTree
  66                      www.devoxx.com
CMIS multi-ïŹling services
 addObjectToFolder
 removeObjectFromFolder




  67                      www.devoxx.com
CMIS discovery service
 query




  68         www.devoxx.com
CMIS relationships services
 getRelationships




  69                www.devoxx.com
CMIS policy services
 applyPolicy
 removePolicy
 getAppliedPolicies




  70                  www.devoxx.com
CMIS versioning service
 checkOut
 cancelCheckOut
 checkIn
 getPropertiesOfLatestVersion
 getAllVersions
 deleteAllVersions




  71                      www.devoxx.com
Mapping documents to JCR
 Document → Node
 Schema → Mixin type
 Simple & Array properties → Properties
 Complex type → Sub-node
 Lists of complex types → Ordered sub-nodes




  72                      www.devoxx.com
Jackrabbit tables




 73           www.devoxx.com
Mapping documents to SQL
 Parent-child relationships → Dedicated “hierarchy” table
 Schema → Table
 Simple property → Column
 Array property → “Collection” table
 Complex type → Sub-document
 Lists of complex types → Ordered sub-documents




  74                       www.devoxx.com
Visible SQL storage




 75          www.devoxx.com
Visible SQL storage




 76          www.devoxx.com
Nuxeo Core 2 and CMIS
 Next-generation storage based on CMIS model
 No “impedance mismatch” in models
 Nuxeo extensions if needed
 Leverage the Visible SQL Storage backend
 Distributed and clusterable
 Faster remote access and caching
 True clusters
 Facilitate cloud-based backends

  77                       www.devoxx.com
Summary
Many storage choices
 DeïŹne your model, choose the right API
JCR is very capable
CMIS is coming fast
Nuxeo gives the best of both




 78                      www.devoxx.com
Concluding statement

Look for CMIS soon, and check out Nuxeo now!




                   www.devoxx.com
Q&A
Questions?




             www.devoxx.com
Thank you for your attention!

               http://www.nuxeo.com
                 http://doc.nuxeo.org
         http://jcp.org/en/jsr/detail?id=170
         http://jcp.org/en/jsr/detail?id=283
            http://jackrabbit.apache.org/
  http://www.oasis-open.org/committees/cmis/


                    www.devoxx.com

Weitere Àhnliche Inhalte

Was ist angesagt?

Paintfree Object-Document Mapping for MongoDB by Philipp Krenn
Paintfree Object-Document Mapping for MongoDB by Philipp KrennPaintfree Object-Document Mapping for MongoDB by Philipp Krenn
Paintfree Object-Document Mapping for MongoDB by Philipp KrennJavaDayUA
 
Easy data-with-spring-data-jpa
Easy data-with-spring-data-jpaEasy data-with-spring-data-jpa
Easy data-with-spring-data-jpaStaples
 
Java Development with MongoDB
Java Development with MongoDBJava Development with MongoDB
Java Development with MongoDBScott Hernandez
 
[HES2013] Nifty stuff that you can still do with android by Xavier Martin
[HES2013] Nifty stuff that you can still do with android by Xavier Martin[HES2013] Nifty stuff that you can still do with android by Xavier Martin
[HES2013] Nifty stuff that you can still do with android by Xavier MartinHackito Ergo Sum
 
ObjectBox - The new Mobile Database
ObjectBox - The new Mobile DatabaseObjectBox - The new Mobile Database
ObjectBox - The new Mobile Databasegreenrobot
 
Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015Svetlin Nakov
 
Di web tech mail (no subject)
Di web tech mail   (no subject)Di web tech mail   (no subject)
Di web tech mail (no subject)shubhamvcs
 
Cloud computing BI publication 1
Cloud computing BI   publication 1Cloud computing BI   publication 1
Cloud computing BI publication 1Jobe Bacwadi
 
jQuery. Write less. Do More.
jQuery. Write less. Do More.jQuery. Write less. Do More.
jQuery. Write less. Do More.Dennis Loktionov
 
Java 7 & 8 New Features
Java 7 & 8 New FeaturesJava 7 & 8 New Features
Java 7 & 8 New FeaturesLeandro Coutinho
 
NoSQL Endgame Percona Live Online 2020
NoSQL Endgame Percona Live Online 2020NoSQL Endgame Percona Live Online 2020
NoSQL Endgame Percona Live Online 2020Thodoris Bais
 
Hibernate Tutorial
Hibernate TutorialHibernate Tutorial
Hibernate TutorialSyed Shahul
 
12. session 12 java script objects
12. session 12   java script objects12. session 12   java script objects
12. session 12 java script objectsPhĂșc Đỗ
 

Was ist angesagt? (20)

Paintfree Object-Document Mapping for MongoDB by Philipp Krenn
Paintfree Object-Document Mapping for MongoDB by Philipp KrennPaintfree Object-Document Mapping for MongoDB by Philipp Krenn
Paintfree Object-Document Mapping for MongoDB by Philipp Krenn
 
Easy data-with-spring-data-jpa
Easy data-with-spring-data-jpaEasy data-with-spring-data-jpa
Easy data-with-spring-data-jpa
 
Java Development with MongoDB
Java Development with MongoDBJava Development with MongoDB
Java Development with MongoDB
 
RaleighFS v5
RaleighFS v5RaleighFS v5
RaleighFS v5
 
J query
J queryJ query
J query
 
J query1
J query1J query1
J query1
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data Objects
 
[HES2013] Nifty stuff that you can still do with android by Xavier Martin
[HES2013] Nifty stuff that you can still do with android by Xavier Martin[HES2013] Nifty stuff that you can still do with android by Xavier Martin
[HES2013] Nifty stuff that you can still do with android by Xavier Martin
 
ObjectBox - The new Mobile Database
ObjectBox - The new Mobile DatabaseObjectBox - The new Mobile Database
ObjectBox - The new Mobile Database
 
Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015
 
Java Programming - 08 java threading
Java Programming - 08 java threadingJava Programming - 08 java threading
Java Programming - 08 java threading
 
Di web tech mail (no subject)
Di web tech mail   (no subject)Di web tech mail   (no subject)
Di web tech mail (no subject)
 
Cloud computing BI publication 1
Cloud computing BI   publication 1Cloud computing BI   publication 1
Cloud computing BI publication 1
 
jQuery. Write less. Do More.
jQuery. Write less. Do More.jQuery. Write less. Do More.
jQuery. Write less. Do More.
 
Apache Beam de A Ă  Z
 Apache Beam de A Ă  Z Apache Beam de A Ă  Z
Apache Beam de A Ă  Z
 
Hibernate
HibernateHibernate
Hibernate
 
Java 7 & 8 New Features
Java 7 & 8 New FeaturesJava 7 & 8 New Features
Java 7 & 8 New Features
 
NoSQL Endgame Percona Live Online 2020
NoSQL Endgame Percona Live Online 2020NoSQL Endgame Percona Live Online 2020
NoSQL Endgame Percona Live Online 2020
 
Hibernate Tutorial
Hibernate TutorialHibernate Tutorial
Hibernate Tutorial
 
12. session 12 java script objects
12. session 12   java script objects12. session 12   java script objects
12. session 12 java script objects
 

Ähnlich wie Devoxx08 - Nuxeo Core, JCR 2, CMIS

Hibernate
Hibernate Hibernate
Hibernate Sunil OS
 
09.Local Database Files and Storage on WP
09.Local Database Files and Storage on WP09.Local Database Files and Storage on WP
09.Local Database Files and Storage on WPNguyen Tuan
 
Ejb3 Dan Hinojosa
Ejb3 Dan HinojosaEjb3 Dan Hinojosa
Ejb3 Dan HinojosaDan Hinojosa
 
Ian 2014.10.24 weekly report
Ian 2014.10.24 weekly reportIan 2014.10.24 weekly report
Ian 2014.10.24 weekly reportLearningTech
 
Entity Framework Database and Code First
Entity Framework Database and Code FirstEntity Framework Database and Code First
Entity Framework Database and Code FirstJames Johnson
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Oliver Gierke
 
Local data storage for mobile apps
Local data storage for mobile appsLocal data storage for mobile apps
Local data storage for mobile appsIvano Malavolta
 
Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Murat Yener
 
Softshake - Offline applications
Softshake - Offline applicationsSoftshake - Offline applications
Softshake - Offline applicationsjeromevdl
 
Jquery dojo slides
Jquery dojo slidesJquery dojo slides
Jquery dojo slideshelenmga
 
Play 2.0
Play 2.0Play 2.0
Play 2.0elizhender
 
hibernate with JPA
hibernate with JPAhibernate with JPA
hibernate with JPAMohammad Faizan
 
Local storage in Web apps
Local storage in Web appsLocal storage in Web apps
Local storage in Web appsIvano Malavolta
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentationguest11106b
 

Ähnlich wie Devoxx08 - Nuxeo Core, JCR 2, CMIS (20)

Hibernate
Hibernate Hibernate
Hibernate
 
Power tools in Java
Power tools in JavaPower tools in Java
Power tools in Java
 
09.Local Database Files and Storage on WP
09.Local Database Files and Storage on WP09.Local Database Files and Storage on WP
09.Local Database Files and Storage on WP
 
Ejb3 Dan Hinojosa
Ejb3 Dan HinojosaEjb3 Dan Hinojosa
Ejb3 Dan Hinojosa
 
Ian 2014.10.24 weekly report
Ian 2014.10.24 weekly reportIan 2014.10.24 weekly report
Ian 2014.10.24 weekly report
 
La sql
La sqlLa sql
La sql
 
Entity Framework Database and Code First
Entity Framework Database and Code FirstEntity Framework Database and Code First
Entity Framework Database and Code First
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!
 
Local data storage for mobile apps
Local data storage for mobile appsLocal data storage for mobile apps
Local data storage for mobile apps
 
Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15
 
Local Storage
Local StorageLocal Storage
Local Storage
 
Softshake - Offline applications
Softshake - Offline applicationsSoftshake - Offline applications
Softshake - Offline applications
 
Jquery dojo slides
Jquery dojo slidesJquery dojo slides
Jquery dojo slides
 
Dom
Dom Dom
Dom
 
srgoc
srgocsrgoc
srgoc
 
Play 2.0
Play 2.0Play 2.0
Play 2.0
 
hibernate with JPA
hibernate with JPAhibernate with JPA
hibernate with JPA
 
Local storage in Web apps
Local storage in Web appsLocal storage in Web apps
Local storage in Web apps
 
Metaworks3
Metaworks3Metaworks3
Metaworks3
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
 

Mehr von Nuxeo

Own the Digital Shelf Strategies Food and Beverage Companies
Own the Digital Shelf Strategies Food and Beverage CompaniesOwn the Digital Shelf Strategies Food and Beverage Companies
Own the Digital Shelf Strategies Food and Beverage CompaniesNuxeo
 
How DAM Librarians Can Get Ready for the Uncertain Future
How DAM Librarians Can Get Ready for the Uncertain FutureHow DAM Librarians Can Get Ready for the Uncertain Future
How DAM Librarians Can Get Ready for the Uncertain FutureNuxeo
 
How Insurers Fueled Transformation During a Pandemic
How Insurers Fueled Transformation During a PandemicHow Insurers Fueled Transformation During a Pandemic
How Insurers Fueled Transformation During a PandemicNuxeo
 
Manage your Content at Scale with MongoDB and Nuxeo
Manage your Content at Scale with MongoDB and NuxeoManage your Content at Scale with MongoDB and Nuxeo
Manage your Content at Scale with MongoDB and NuxeoNuxeo
 
Accelerate the Digital Supply Chain From Idea to Support
Accelerate the Digital Supply Chain From Idea to SupportAccelerate the Digital Supply Chain From Idea to Support
Accelerate the Digital Supply Chain From Idea to SupportNuxeo
 
Where are you in the DAM Continuum
Where are you in the DAM ContinuumWhere are you in the DAM Continuum
Where are you in the DAM ContinuumNuxeo
 
Customer Experience in 2021
Customer Experience in 2021Customer Experience in 2021
Customer Experience in 2021Nuxeo
 
L’IA personnalisĂ©e, clĂ© d’une gestion de l’information innovante
L’IA personnalisĂ©e, clĂ© d’une gestion de l’information innovanteL’IA personnalisĂ©e, clĂ© d’une gestion de l’information innovante
L’IA personnalisĂ©e, clĂ© d’une gestion de l’information innovanteNuxeo
 
GĂ©rer ses contenus avec MongoDB et Nuxeo
GĂ©rer ses contenus avec MongoDB et NuxeoGĂ©rer ses contenus avec MongoDB et Nuxeo
GĂ©rer ses contenus avec MongoDB et NuxeoNuxeo
 
Le DAM en 2021 : Tendances, points clés et critÚres d'évaluation
Le DAM en 2021 : Tendances, points clés et critÚres d'évaluationLe DAM en 2021 : Tendances, points clés et critÚres d'évaluation
Le DAM en 2021 : Tendances, points clés et critÚres d'évaluationNuxeo
 
Enabling Digital Transformation Amidst a Global Pandemic | Low-Code, Cloud, A...
Enabling Digital Transformation Amidst a Global Pandemic | Low-Code, Cloud, A...Enabling Digital Transformation Amidst a Global Pandemic | Low-Code, Cloud, A...
Enabling Digital Transformation Amidst a Global Pandemic | Low-Code, Cloud, A...Nuxeo
 
Elevate your Customer's Experience and Stay Ahead of the Competition
Elevate your Customer's Experience and Stay Ahead of the CompetitionElevate your Customer's Experience and Stay Ahead of the Competition
Elevate your Customer's Experience and Stay Ahead of the CompetitionNuxeo
 
Driving Brand Loyalty Through Superior Customer Experience
Driving Brand Loyalty Through Superior Customer Experience Driving Brand Loyalty Through Superior Customer Experience
Driving Brand Loyalty Through Superior Customer Experience Nuxeo
 
Drive Enterprise Speed and Scale with A Cloud-Native DAM
Drive Enterprise Speed and Scale with A Cloud-Native DAMDrive Enterprise Speed and Scale with A Cloud-Native DAM
Drive Enterprise Speed and Scale with A Cloud-Native DAMNuxeo
 
The Big Picture: the Role of Video, Photography, and Content in Enhancing the...
The Big Picture: the Role of Video, Photography, and Content in Enhancing the...The Big Picture: the Role of Video, Photography, and Content in Enhancing the...
The Big Picture: the Role of Video, Photography, and Content in Enhancing the...Nuxeo
 
How Creatives Are Getting Creative in 2020 and Beyond
How Creatives Are Getting Creative in 2020 and BeyondHow Creatives Are Getting Creative in 2020 and Beyond
How Creatives Are Getting Creative in 2020 and BeyondNuxeo
 
Digitalisation : AmĂ©liorez la collaboration et l’expĂ©rience client grĂące au DAM
Digitalisation : AmĂ©liorez la collaboration et l’expĂ©rience client grĂące au DAMDigitalisation : AmĂ©liorez la collaboration et l’expĂ©rience client grĂące au DAM
Digitalisation : AmĂ©liorez la collaboration et l’expĂ©rience client grĂące au DAMNuxeo
 
Reimagine Your Claims Process with Future-Proof Technologies
Reimagine Your Claims Process with Future-Proof TechnologiesReimagine Your Claims Process with Future-Proof Technologies
Reimagine Your Claims Process with Future-Proof TechnologiesNuxeo
 
Comment le Centre Hospitalier Laborit dématérialise ses processus administratifs
Comment le Centre Hospitalier Laborit dématérialise ses processus administratifsComment le Centre Hospitalier Laborit dématérialise ses processus administratifs
Comment le Centre Hospitalier Laborit dématérialise ses processus administratifsNuxeo
 
Accelerating the Packaging Design Process with Artificial Intelligence
Accelerating the Packaging Design Process with Artificial IntelligenceAccelerating the Packaging Design Process with Artificial Intelligence
Accelerating the Packaging Design Process with Artificial IntelligenceNuxeo
 

Mehr von Nuxeo (20)

Own the Digital Shelf Strategies Food and Beverage Companies
Own the Digital Shelf Strategies Food and Beverage CompaniesOwn the Digital Shelf Strategies Food and Beverage Companies
Own the Digital Shelf Strategies Food and Beverage Companies
 
How DAM Librarians Can Get Ready for the Uncertain Future
How DAM Librarians Can Get Ready for the Uncertain FutureHow DAM Librarians Can Get Ready for the Uncertain Future
How DAM Librarians Can Get Ready for the Uncertain Future
 
How Insurers Fueled Transformation During a Pandemic
How Insurers Fueled Transformation During a PandemicHow Insurers Fueled Transformation During a Pandemic
How Insurers Fueled Transformation During a Pandemic
 
Manage your Content at Scale with MongoDB and Nuxeo
Manage your Content at Scale with MongoDB and NuxeoManage your Content at Scale with MongoDB and Nuxeo
Manage your Content at Scale with MongoDB and Nuxeo
 
Accelerate the Digital Supply Chain From Idea to Support
Accelerate the Digital Supply Chain From Idea to SupportAccelerate the Digital Supply Chain From Idea to Support
Accelerate the Digital Supply Chain From Idea to Support
 
Where are you in the DAM Continuum
Where are you in the DAM ContinuumWhere are you in the DAM Continuum
Where are you in the DAM Continuum
 
Customer Experience in 2021
Customer Experience in 2021Customer Experience in 2021
Customer Experience in 2021
 
L’IA personnalisĂ©e, clĂ© d’une gestion de l’information innovante
L’IA personnalisĂ©e, clĂ© d’une gestion de l’information innovanteL’IA personnalisĂ©e, clĂ© d’une gestion de l’information innovante
L’IA personnalisĂ©e, clĂ© d’une gestion de l’information innovante
 
GĂ©rer ses contenus avec MongoDB et Nuxeo
GĂ©rer ses contenus avec MongoDB et NuxeoGĂ©rer ses contenus avec MongoDB et Nuxeo
GĂ©rer ses contenus avec MongoDB et Nuxeo
 
Le DAM en 2021 : Tendances, points clés et critÚres d'évaluation
Le DAM en 2021 : Tendances, points clés et critÚres d'évaluationLe DAM en 2021 : Tendances, points clés et critÚres d'évaluation
Le DAM en 2021 : Tendances, points clés et critÚres d'évaluation
 
Enabling Digital Transformation Amidst a Global Pandemic | Low-Code, Cloud, A...
Enabling Digital Transformation Amidst a Global Pandemic | Low-Code, Cloud, A...Enabling Digital Transformation Amidst a Global Pandemic | Low-Code, Cloud, A...
Enabling Digital Transformation Amidst a Global Pandemic | Low-Code, Cloud, A...
 
Elevate your Customer's Experience and Stay Ahead of the Competition
Elevate your Customer's Experience and Stay Ahead of the CompetitionElevate your Customer's Experience and Stay Ahead of the Competition
Elevate your Customer's Experience and Stay Ahead of the Competition
 
Driving Brand Loyalty Through Superior Customer Experience
Driving Brand Loyalty Through Superior Customer Experience Driving Brand Loyalty Through Superior Customer Experience
Driving Brand Loyalty Through Superior Customer Experience
 
Drive Enterprise Speed and Scale with A Cloud-Native DAM
Drive Enterprise Speed and Scale with A Cloud-Native DAMDrive Enterprise Speed and Scale with A Cloud-Native DAM
Drive Enterprise Speed and Scale with A Cloud-Native DAM
 
The Big Picture: the Role of Video, Photography, and Content in Enhancing the...
The Big Picture: the Role of Video, Photography, and Content in Enhancing the...The Big Picture: the Role of Video, Photography, and Content in Enhancing the...
The Big Picture: the Role of Video, Photography, and Content in Enhancing the...
 
How Creatives Are Getting Creative in 2020 and Beyond
How Creatives Are Getting Creative in 2020 and BeyondHow Creatives Are Getting Creative in 2020 and Beyond
How Creatives Are Getting Creative in 2020 and Beyond
 
Digitalisation : AmĂ©liorez la collaboration et l’expĂ©rience client grĂące au DAM
Digitalisation : AmĂ©liorez la collaboration et l’expĂ©rience client grĂące au DAMDigitalisation : AmĂ©liorez la collaboration et l’expĂ©rience client grĂące au DAM
Digitalisation : AmĂ©liorez la collaboration et l’expĂ©rience client grĂące au DAM
 
Reimagine Your Claims Process with Future-Proof Technologies
Reimagine Your Claims Process with Future-Proof TechnologiesReimagine Your Claims Process with Future-Proof Technologies
Reimagine Your Claims Process with Future-Proof Technologies
 
Comment le Centre Hospitalier Laborit dématérialise ses processus administratifs
Comment le Centre Hospitalier Laborit dématérialise ses processus administratifsComment le Centre Hospitalier Laborit dématérialise ses processus administratifs
Comment le Centre Hospitalier Laborit dématérialise ses processus administratifs
 
Accelerating the Packaging Design Process with Artificial Intelligence
Accelerating the Packaging Design Process with Artificial IntelligenceAccelerating the Packaging Design Process with Artificial Intelligence
Accelerating the Packaging Design Process with Artificial Intelligence
 

KĂŒrzlich hochgeladen

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 

KĂŒrzlich hochgeladen (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

Devoxx08 - Nuxeo Core, JCR 2, CMIS

  • 1. Using content repositories: Nuxeo Core, JCR 2, CMIS Florent Guillaume Head of R&D Nuxeo www.devoxx.com
  • 2. Overall presentation goal Learn how to use content repositories APIs to store and manipulate rich documents www.devoxx.com
  • 3. Speaker’s qualiïŹcations Florent Guillaume is Head of R&D at Nuxeo, a leading vendor of Open Source ECM platforms Florent Guillaume is a member of international normalization technical committees: JSR-283, Oasis CMIS Florent Guillaume architected and wrote an ECM system (Nuxeo CPS) and is a lead architect on another (Nuxeo EP) Florent Guillaume wrote a low-level storage engine for Nuxeo Core 3 www.devoxx.com
  • 4. What is a document? Store information Attached ïŹle (binary stream) Metadata Retrieve information Search Security Be visible and editable Out of scope for a repository 4 www.devoxx.com
  • 5. What is a “rich” document? Depends on your deïŹnition of “rich” 5 www.devoxx.com
  • 6. What is a “rich” document? Depends on your deïŹnition of “rich” 5 www.devoxx.com
  • 7. What is a “rich” document? Depends on your deïŹnition of “rich” Associated binary streams Multiple attached ïŹles Vignettes Renditions Complex metadata Lists of records Sub-records (XML-like) 6 www.devoxx.com
  • 8. What storage APIs? Filesystem Relational database JCR (JSR-170, JSR-283) Nuxeo Core CMIS 7 www.devoxx.com
  • 9. Filesystem Decide where to store ïŹles Decide how to uniquely identify ïŹles Use java.io.FileOutputStream for binaries Decide how to serialize metadata All by hand java.io.ObjectOutputStream, Serializable etc. 8 www.devoxx.com
  • 10. Filesystem example Read/write public void createDocument(Long id, String title) throws IOException { File file = new File(ROOT_DIR, id.toString()); OutputStream out = new FileOutputStream(file); try { out.write(title.getBytes(quot;UTF-8quot;)); } finally { out.close(); } } public MyDocument getDocument(Long id) throws IOException { File file = new File(ROOT_DIR, id.toString()); InputStream in = new FileInputStream(file); try { byte[] bytes = new byte[100]; int n = in.read(bytes); String title = new String(bytes, quot;UTF-8quot;); MyDocument doc = new MyDocument(); doc.setId(id); doc.setTitle(title); return doc; } finally { in.close(); } } 9 www.devoxx.com
  • 11. Filesystem drawbacks Simplistic, no actual model Everything has to be done manually No search 10 www.devoxx.com
  • 12. Filesystem using JAXB Map Java objects to/from XML representations DeïŹne a schema (model) Marshall/Unmarshall using JAXB APIs 11 www.devoxx.com
  • 13. Relational database JDBC Hibernate ...other ORMs JPA 12 www.devoxx.com
  • 14. JDBC DeïŹne a SQL model for your data Tables, Columns, Data types Decide where to store BLOBs Column or ïŹlesystem Emit SQL statements to do all read/write operations 13 www.devoxx.com
  • 15. JDBC example Class deïŹning the model class MyDocument { private Long id; private String title; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } 14 www.devoxx.com
  • 16. JDBC example Establish a connection, Write public void init() throws ClassNotFoundException { Class.forName(quot;com.myvendor.TheDriverClassquot;); } public Connection getConnection() throws SQLException { return DriverManager.getConnection(quot;jdbc:myvendor:/my/database/infoquot;, quot;myLoginquot;, quot;myPasswordquot;); } public void createDocument(Long id, String title) throws SQLException { PreparedStatement ps = null; Connection conn = getConnection(); try { ps = conn.prepareStatement(quot;INSERT INTO MyDocuments (id, title) VALUES (?, ?)quot;); ps.setLong(1, id); ps.setString(2, title); ps.execute(); } finally { if (ps != null) ps.close(); conn.close(); } } 15 www.devoxx.com
  • 17. JDBC example Read public MyDocument getDocument(Long id) throws SQLException { PreparedStatement ps = null; Connection conn = getConnection(); try { ps = conn.prepareStatement(quot;SELECT title FROM MyDocuments WHERE id = ?quot;); ps.setLong(1, id); ResultSet rs = ps.executeQuery(); if (!rs.next()) { return null; } String title = rs.getString(1); MyDocument doc = new MyDocument(); doc.setId(id); doc.setTitle(title); return doc; } finally { if (ps != null) ps.close(); conn.close(); } } 16 www.devoxx.com
  • 18. JDBC drawbacks Still very much manual No document abstraction Reads from ResultSets have to know proper types 17 www.devoxx.com
  • 19. Hibernate Model your documents as classes DeïŹne an object-relational mapping in XML Use Hibernate to automate read/writes 18 www.devoxx.com
  • 20. Hibernate example XML conïŹguration <hibernate-mapping> <class name=quot;example.MyDocumentquot; table=quot;DOCUMENTSquot;> <id name=quot;idquot; column=quot;DOC_IDquot;> <generator class=quot;nativequot;/> </id> <property name=quot;titlequot;/> </class> </hibernate-mapping> 19 www.devoxx.com
  • 21. Hibernate example Read/write class DocumentManager { public void createDocument(Long id, String title) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); MyDocument doc = new MyDocument(); doc.setId(id); doc.setTitle(title); session.save(doc); session.getTransaction().commit(); session.close(); } public MyDocument getDocument(Long id) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Query query = session.createQuery(quot;FROM MyDocument WHERE id = :idquot;); query.setParameter(quot;idquot;, id); MyDocument doc = (MyDocument) query.uniqueResult(); session.getTransaction().commit(); session.close(); return doc; } } 20 www.devoxx.com
  • 22. Hibernate drawbacks Document classes have to be deïŹned by hand No standard, just application-deïŹned classes Object-relational mapping too ïŹ‚exible Too much choice can be a curse Binaries are still a problem (no streaming) Hibernate’s “binary” is a byte[] → Memory hog Blob support inconsistent 21 www.devoxx.com
  • 23. JPA Model your documents as classes DeïŹne an object-relational mapping using annotations Use JPA to automate read/writes 22 www.devoxx.com
  • 24. JPA example Class deïŹning the model and the mapping @Entity class MyDocument { private Long id; private String title; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } www.devoxx.com 23
  • 25. JPA example Read/write @Stateless class DocumentManagerBean { @PersistenceContext EntityManager em; public void createDocument(Long id, String title) { MyDocument doc = new MyDocument(); doc.setId(id); doc.setTitle(title); em.persist(doc); } public MyDocument getDocument(Long id) { return em.find(MyDocument.class, id); } public List<MyDocument> listDocuments() { Query query = em.createQuery(quot;SELECT doc FROM MyDocument docquot;); return query.getResultList(); } } 24 www.devoxx.com
  • 26. JPA drawbacks Same as Hibernate Although annotations are very convenient 25 www.devoxx.com
  • 27. Beyond mere storage www.devoxx.com
  • 28. Beyond mere storage Standard document abstraction Security Locking Versioning Full text search Types and inheritance Folders? ordering? 27 www.devoxx.com
  • 29. JCR Content Repository API for Javaℱ Technology JSR-170, released in June 2005 Initiated by Day Software Also BEA, Documentum, FileNet, IBM, Oracle, Vignette and others Apache Jackrabbit is the RI 28 www.devoxx.com
  • 30. JCR goals Java API Fine-grained, hierarchical storage model Be the “SQL” of hierarchical storage Lots of functionality 29 www.devoxx.com
  • 31. JCR features CRUD Hierarchy of nodes Simple properties, Lists, Binaries Queries Versioning, Locking, References, ... 30 www.devoxx.com
  • 32. JCR 2 JSR-283 First public review July 2007 Final release expected early 2009 Nuxeo is a contributor to the speciïŹcation 31 www.devoxx.com
  • 33. JCR 2 features Fix JSR-170 inconsistencies Several compliance levels New property types Improved features Versioning, Access control, Observation Retention & Hold Shareable nodes Java query API 32 www.devoxx.com
  • 34. JCR – nodes and properties foo bar Property Type Node Type value child child 33 www.devoxx.com
  • 35. JCR – node hierarchy (root) foo bar gee Folder Folder Folder thing doc Docu Docu ment ment vignette File 34 www.devoxx.com
  • 36. JCR – properties types String JCR 2 Binary Decimal Date WeakReference Long URI Double Boolean Name Path Reference 35 www.devoxx.com
  • 37. JCR – hierarchy with properties (root) foo bar gee Folder Folder Folder thing doc Docu Docu ment ment title description date creator vignette String String Date String File my doc ... 2008-12-11 ïŹ‚orent ïŹlename data String Binary img.png <binary> 36 www.devoxx.com
  • 38. JCR – node hierarchy (root) foo bar gee Folder Folder Folder thing doc Document title: my doc Document description: ... date: 2008-12-11 creator: ïŹ‚orent vignette File ïŹlename: img.png date: <binary> 37 www.devoxx.com
  • 39. JCR – types DeïŹne the model <my='http://my.example.com/ns'> [my:document] - my:id (long) mandatory - my:title - my:description - my:creator - my:date (date) + my:vignette (nt:resource) 38 www.devoxx.com
  • 40. JCR – API Establish a connection public Repository repository; public javax.jcr.Session session; public void init() throws IOException { repository = new TransientRepository(); } public void open() throws LoginException, RepositoryException { Credentials credentials = new SimpleCredentials(quot;usernamequot;, quot;passwordquot;.toCharArray()); session = repository.login(credentials); } public void close() { session.logout(); } 39 www.devoxx.com
  • 41. JCR – API Read/write public void createDocument(Long id, String title) throws RepositoryException { Node root = session.getRootNode(); Node doc = root.addNode(id.toString()); doc.setProperty(quot;my:idquot;, id); doc.setProperty(quot;my:titlequot;, title); session.save(); } public Node getDocument(Long id) throws RepositoryException { Node root = session.getRootNode(); Node doc = root.getNode(id.toString()); return doc; } 40 www.devoxx.com
  • 42. JCR – API Query public List<Node> getDocuments() throws RepositoryException { QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery( quot;//element(*, my:document)quot;, Query.XPATH); query = queryManager.createQuery( quot;SELECT * from my:documentquot;, Query.SQL); List<Node> documents = new LinkedList<Node>(); NodeIterator it = query.execute().getNodes(); while (it.hasNext()) { documents.add(it.nextNode()); } return documents; } 41 www.devoxx.com
  • 43. Nuxeo Founded in 2000 Sustained growth for 8 years Pioneering Open Source ECM software vendor International organization, customers, partners, community 40+ employees Business oriented Open Source 42 www.devoxx.com
  • 44. Nuxeo ECM 3+ years of work Focus on the platform Document Core Nuxeo EP, Nuxeo WebEngine, Nuxeo RCP Components everywhere (OSGi) Large feature set Big deployments 43 www.devoxx.com
  • 45. Nuxeo Core High-level document-oriented Java API Complex document abstraction Independent of actual storage backend EJB remoting REST bindings (JAX-RS) SOAP bindings (JAX-WS) 44 www.devoxx.com
  • 46. Nuxeo Core basics CRUD Hierarchy of document Complex properties Binaries Security Locking Versioning Publishing, Proxies 45 www.devoxx.com
  • 47. Nuxeo Core DeïŹne the model <xs:schema xmlns:xs=quot;http://www.w3.org/2001/XMLSchemaquot; xmlns:nxs=quot;http://www.nuxeo.org/ecm/schemas/mydocumentquot; targetNamespace=quot;http://www.nuxeo.org/ecm/schemas/mydocumentquot;> <xs:include schemaLocation=quot;core-types.xsdquot;/> <xs:element name=quot;idquot; type=quot;xs:integerquot;/> <xs:element name=quot;titlequot; type=quot;xs:stringquot;/> <xs:element name=quot;descriptionquot; type=quot;xs:stringquot;/> <xs:element name=quot;creatorquot; type=quot;xs:stringquot;/> <xs:element name=quot;datequot; type=quot;xs:datequot;/> <xs:element name=quot;vignettequot; type=quot;nxs:contentquot;/> <xs:element name=quot;fullnamequot; type=quot;nxs:fullnamequot;/> <xs:complexType name=quot;fullnamequot;> <xs:sequence> <xs:element name=quot;firstnamequot; type=quot;xs:stringquot;/> <xs:element name=quot;lastnamequot; type=quot;xs:stringquot;/> </xs:sequence> </xs:complexType> </xs:schema> 46 www.devoxx.com
  • 48. Nuxeo Core DeïŹne the model <extension target=quot;org.nuxeo.ecm.core.schema.TypeServicequot; point=quot;schemaquot;> <schema name=quot;mydocumentquot; src=quot;schemas/mydocument.xsdquot; prefix=quot;mydocquot;/> </extension> <extension target=quot;org.nuxeo.ecm.core.schema.TypeServicequot; point=quot;doctypequot;> <doctype name=quot;MyDocumentquot; extends=quot;Documentquot;> <schema name=quot;commonquot;/> <schema name=quot;mydocumentquot;/> <facet name=quot;Versionablequot;/> </doctype> </extension> 47 www.devoxx.com
  • 49. Nuxe Core – API Read/Write @Scope(ScopeType.STATELESS) @Name(quot;myDocumentActionsquot;) public class DocumentActionsBean { @In(create = true) protected transient NavigationContext navigationContext; @In(create = true) protected transient CoreSession documentManager; public void createDocument(Long id, String title) throws ClientException { DocumentModel current = navigationContext.getCurrentDocument(); DocumentModel doc = documentManager.createDocumentModel( current.getPathAsString(), null, quot;MyDocumentquot;); doc.setProperty(quot;mydocumentquot;, quot;idquot;, id); doc.setPropertyValue(quot;mydoc:titlequot;, title); doc.setPropertyValue(quot;mydoc:fullname/firstnamequot;, quot;Florentquot;); documentManager.createDocument(doc); documentManager.save(); } } 48 www.devoxx.com
  • 50. CMIS Draft v 0.5 published in September 2008 by EMC, IBM, Microsoft Alfresco, Open Text, Oracle, SAP also on board from the start Oasis TC formed in November 2008 Adullact, Booz Allen Hamilton, Day, Ektron, Exalead, Fidelity, Flatirons, Magnolia, Mitre, Nuxeo, Saperion, Sun, Vamosa, Vignette (as of 2008-12-01) CMIS 1.0 expected mid-2009 49 www.devoxx.com
  • 51. CMIS goals Simple document model Independent of protocol SOAP, REST (AtomPub) bindings Not tied to a programming language Platform, vendor independent Basic set of ECM functions “Greatest common denominator” 50 www.devoxx.com
  • 52. CMIS basics CRUD Hierarchy folders, documents Simple properties, lists One binary Policies Versioning Relationships Queries 51 www.devoxx.com
  • 53. CMIS advanced Multi-ïŹling Advanced queries Joins Full text ... maybe more to come 52 www.devoxx.com
  • 54. CMIS basic properties ObjectId Name (doc, folder) Uri version-related props (doc) ObjectTypeId ParentId (folder) CreatedBy AllowedChildObjectTypeIds (folder) CreationDate SourceId (rel) LastModiïŹedBy TargetId (rel) LastModiïŹcationDate PolicyName (policy) ChangeToken PolicyText (policy) 53 www.devoxx.com
  • 55. CMIS objects Folder Document Policy Relationship 54 www.devoxx.com
  • 56. CMIS folders Folder (root) Folder Folder Folder foo bar gee Folder Folder stuff blah 55 www.devoxx.com
  • 57. CMIS documents Folder (root) Folder Folder Folder foo bar gee Doc Folder Folder 001 stuff blah Doc Doc Doc 123 456 789 56 www.devoxx.com
  • 58. CMIS relationships Folder (root) Folder Folder foo bar Doc Folder Folder 001 stuff blah 333 Doc Doc 555 123 456 57 www.devoxx.com
  • 59. CMIS policies Folder (root) Policy Folder Folder foo bar Policy Policy Doc Doc 001 123 58 www.devoxx.com
  • 60. CMIS policies uses ACLs Locks Retention & Hold Automatic transformations Repository hints etc. 59 www.devoxx.com
  • 61. CMIS queries 60 www.devoxx.com
  • 62. CMIS query example Standard SQL-92 Extensions for multi-valued properties Extensions for hierarchical searches Extensions for fulltext search SELECT OBJECT_ID, SCORE() AS SC, DESTINATION, DEPARTURE_DATES FROM TRAVEL_BROCHURE WHERE IN_TREE( , ‘ID00093854763’) AND CONTAINS( , 'PARADISE ISLAND CRUISE') AND '2010-01-01' < ANY DEPARTURE_DATES AND CONTINENT <> 'ANTARCTICA' ORDER BY SC DESC 61 www.devoxx.com
  • 63. CMIS AtomPub bindings Additional headers for behavior control MIME types Service application/atomsvc+xml Feed application/atom+xml;type=feed Entry application/atom+xml;type=entry Query application/cmisquery+xml AllowableActions application/cmisallowableactions+xml 62 www.devoxx.com
  • 64. CMIS Web Services bindings All the WSDL ïŹles are provided Check the spec ;-) 63 www.devoxx.com
  • 65. CMIS repository services getRepositories getRepositoryInfo getTypes getTypeDeïŹnition 64 www.devoxx.com
  • 66. CMIS navigation services getDescendants getChildren getFolderParent getObjectParents getCheckedoutDocuments 65 www.devoxx.com
  • 67. CMIS object services createDocument createFolder createRelationship createPolicy getAllowableActions getProperties, updateProperties getContentStream, setContentStream, deleteContentStream moveObject, deleteObject, deleteTree 66 www.devoxx.com
  • 68. CMIS multi-ïŹling services addObjectToFolder removeObjectFromFolder 67 www.devoxx.com
  • 69. CMIS discovery service query 68 www.devoxx.com
  • 70. CMIS relationships services getRelationships 69 www.devoxx.com
  • 71. CMIS policy services applyPolicy removePolicy getAppliedPolicies 70 www.devoxx.com
  • 72. CMIS versioning service checkOut cancelCheckOut checkIn getPropertiesOfLatestVersion getAllVersions deleteAllVersions 71 www.devoxx.com
  • 73. Mapping documents to JCR Document → Node Schema → Mixin type Simple & Array properties → Properties Complex type → Sub-node Lists of complex types → Ordered sub-nodes 72 www.devoxx.com
  • 74. Jackrabbit tables 73 www.devoxx.com
  • 75. Mapping documents to SQL Parent-child relationships → Dedicated “hierarchy” table Schema → Table Simple property → Column Array property → “Collection” table Complex type → Sub-document Lists of complex types → Ordered sub-documents 74 www.devoxx.com
  • 76. Visible SQL storage 75 www.devoxx.com
  • 77. Visible SQL storage 76 www.devoxx.com
  • 78. Nuxeo Core 2 and CMIS Next-generation storage based on CMIS model No “impedance mismatch” in models Nuxeo extensions if needed Leverage the Visible SQL Storage backend Distributed and clusterable Faster remote access and caching True clusters Facilitate cloud-based backends 77 www.devoxx.com
  • 79. Summary Many storage choices DeïŹne your model, choose the right API JCR is very capable CMIS is coming fast Nuxeo gives the best of both 78 www.devoxx.com
  • 80. Concluding statement Look for CMIS soon, and check out Nuxeo now! www.devoxx.com
  • 81. Q&A Questions? www.devoxx.com
  • 82. Thank you for your attention! http://www.nuxeo.com http://doc.nuxeo.org http://jcp.org/en/jsr/detail?id=170 http://jcp.org/en/jsr/detail?id=283 http://jackrabbit.apache.org/ http://www.oasis-open.org/committees/cmis/ www.devoxx.com