SlideShare a Scribd company logo
1 of 74
Download to read offline
Get your content under
control with CMIS and
Apache Chemistry
Florent Guillaume
fg@nuxeo.com
twitter.com/efge
ApacheCon NA, 2010-11-03
Agenda
• CMIS
• Apache Chemistry
• OpenCMIS Client coding
• OpenCMIS Server coding
2
Who am I?
• Florent Guillaume
– fg@nuxeo.com
• Director of R&D at Nuxeo
– http://nuxeo.com
– http://doc.nuxeo.com
• Nuxeo Architect
• Apache Committer
• Member of JSR 283, OASIS CMIS TC
3
Glossary
• CMIS
– Content Management Interop. Services
• CMS, DMS, DAM, WCM, ECM, RM...
– content, document, asset, record...
• Content Stream
– resource / file from a filesystem
• Document
– self-contained, structured metadata
– high-level operations
4
What is CMIS?
• Domain Model
– services
– objects, types, properties
– lowest greatest common denominator
• Transport Protocols
– HTTP-based
• No Language API
– Apache Chemistry
– (although WSDL is actually a language)
5
Interoperability
• Application / Repository
– Client / Server
• Application ↔ Repository
– e.g. photo management
• Repository ↔ Repository
– e.g. archival, publishing
• Repository federation
– central access to heterogenous systems
6
CMIS Implementations
• Product → Client / Repository
• Repositories
– Alfresco, Nuxeo, Microsoft, IBM, SAP,
eXo, Day, Jahia, KnowledgeTree, ...
• Clients
– Adobe, IBM, Microsoft, eZ Publish,
Plone, Drupal, Joomla, ...
7
SharePoint 2010 Connector
8
SharePoint 2010
9
IBM FileNet P8
10
Nuxeo
11
CMIS Workbench
12
CMIS Spaces
13
CMIS Explorer
14
IBM Firefox Plugin
15
Plone
16
Drupal
17
eZ Publish
18
Joomla
19
CMIS Benefits
• Customer benefits
– interoperability between vendors
– common model
– “desilofication”
– “commoditization”
• Vendor benefits
– repository vendors get more apps
– applications vendors get more repos
20
CMIS Domain Model
• Objects: Folders, Documents
• Properties
– scalars, lists
• string, boolean, decimal, integer, datetime, uri, id, html
– binary content stream
• Types
– inheritance, constraints
– standard properties
• id, name, creation, modification, version, ...
21
Folders and Documents
22
Folder
(root)
Folder
foo
Folder
bar
Folder
blah
Folder
stuff
Folder
gee
Doc
123
Doc
456
Doc
789
Doc
001
Document Properties
• 5ba79978-a87f-4146-9dd4-5197c5ac0962
– cmis:objectId: 5ba79978-a87f-4146-9dd4-5197c5ac0962
– cmis:objectTypeId: invoice
– cmis:name: My Document
– cmis:creationDate: 2010-01-25T10:15:07.155-08:00
– cmis:createdBy: florent
– cmis:lastModificationDate: 2010-01-25T10:20:53.286-08:00
– cmis:lastModifiedBy: florent
– cmis:contentStreamFileName: mydocument.pdf
– cmis:contentStreamMimeType: application/pdf
– cmis:isLatestVersion: true
– cmis:versionLabel: v1.5
– keywords: [example, sample, frobs]
– importance: high
23
Type Definition Properties
• invoice
– cmis:objectId: ID
– cmis:objectTypeId: ID
– cmis:name: String
– cmis:creationDate: DateTime (read-only)
– cmis:createdBy: String (read-only)
– cmis:lastModificationDate: DateTime
– cmis:isLatestVersion: Boolean
– keywords: String (multi-valued, not required)
– importance: String (choices: low, medium, high)
24
Type Definition
• invoice
– id: invoice
– localName: t-invoice
– displayName: Invoice
– baseId: cmis:document
– parentId: record
– fileable: true
– queryable: true
– fulltextIndexed: true
– controllableACL: false
25
CMIS Services
• CRUD
• Queries
• Versioning
• Renditions
• Relationships
• Multi-Filing, ACLs, Change Log,
Policies
• Repositories, Types
26
Retrieve
• By ID
• By Path
– ID ≠ name ≠ path segment ≠ file name
• Parent(s) / Children / Tree
• Properties
• Content Stream
• Allowable Actions
• Renditions
27
Retrieve Examples (I)
• By ID
ObjectId  id  =  session.createObjectId(
        "5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962");
CmisObject  object  =  session.getObject(id);
• By Path
Folder  folder  =  (Folder)  session.getObjectByPath(
        "/corporate/invoices/foo");
• Children
for  (CmisObject  child  :  folder.getChildren())  {
        ...
}
28
Retrieve Examples (II)
• Properties
List<String>  kw  =  doc.getPropertyValue("keywords");
• Content Stream
ContentStream  cs  =  doc.getContentStream();
String  filename  =  cs.getFileName();
InputStream  stream  =  cs.getStream();
29
Query
• Retrieve by content
• SQL-like Language
– Type → Table
– Object → Row
– Property → Column
– Multi-Valued, Fulltext + Score, JOIN
• SELECT only
– no UPDATE, DELETE
30
Query Examples
• Query
ItemIterable<QueryResult>  list  =  session.query(
        "SELECT  cmis:objectId  FROM  ...",  true);
for  (QueryResult  qr  :  list)  {
        qr.getPropertyById("cmis:name");
}
• CMISQL
SELECT  cmis:objectId,  cmis:name,  SCORE()  AS  sc
    FROM  cmis:document
    WHERE  importance  =  'high'
        AND  'frobs'  =  ANY  keywords
        AND  IN_TREE('5ba79978-­‐a87f')
        AND  CONTAINS('barack  OR  obama')
    ORDER  BY  sc  DESC
31
Create, Update, Delete
• Create
– may need content stream
– may check in
• Update
– may verify a change token
– may change ID (auto-versioning)
• Delete
– may delete all versions
32
CRUD Examples
• Create
Map<String,  Serializable>  props  =
        new  HashMap<String,  Serializable>();
props.put(PropertyIds.OBJECT_TYPE_ID,  "Note");
props.put(PropertyIds.NAME,  "mynote");
Document  doc  =  folder.createDocument(props,
        contentStream,  null);
• Update
doc.updateProperties(props);
• Delete
doc.delete();
33
Versioning
• Version Series
• Private Working Copy
• Check In, Check Out
• Get All Versions
• (optional feature)
34
Versioning Examples
• Check Out
ObjectId  pwcId  =  doc.checkOut();
• Check In
ObjectId  verId  =  doc.checkIn(true,  null,  true,  "foo");
• Get All Versions
List<Document>  docs  =  doc.getAllVersions();
35
Versioning Variants
• No versioning (no type versionable)
• Auto-versioning
– create new version on each edit
• PWC not updatable
– explicit check in with new changes
• Version-specific filing
• Versions searchable or not
36
Renditions
• Retrieve Only
• Additional Content Streams
– MIME type, kind, title, size
• Various uses
– thumbnail / icon
– transformations
• PDF, HTML
• Multi-Page
• (optional feature)
37
Renditions Examples
• Get Renditions
for  (Rendition  rendition  :  doc.getRenditions())  {
        String  kind  =  rendition.getKind();
        String  title  =  rendition.getTitle();
        String  mimeType  =  rendition.getMimeType();
        ContentStream  cs  =  rendition.getContentStream();
        ...
}
38
Relationships
• Source, Target
• Unfiled, not versionable
• May be queryable, controllable
• May use referential integrity
• (optional feature)
39
Relationships Examples
• Create Relationship
Map<String,  Serializable>  props  =
        new  HashMap<String,  Serializable>();
props.put(PropertyIds.OBJECT_TYPE_ID,  "Depends");
props.put(PropertyIds.SOURCE_ID,  source.getId());
props.put(PropertyIds.TARGET_ID,  target.getId());
ObjectId  relId  =  session.createRelationship(props);
• Get Relationships
for  (Relationship  rel  :  doc.getRelationships())  {
        ...
}
40
Multi-Filing, Unfiling
• Only for documents, not folders
• Zero, one or more parents
• All parents are equivalent
• Different paths
– (if paths are supported)
41
Folders and Documents
42
Folder
(root)
Folder
foo
Folder
bar
Folder
blah
Folder
stuff
Folder
gee
Doc
123
Doc
456
Doc
789
Doc
001
Multi-Filing, Unfiling
43
Folder
(root)
Folder
foo
Folder
bar
Folder
blah
Folder
stuff
Folder
gee
Doc
123
Doc
456
Doc
789
Doc
333
Doc
001
Multi-Filing Example
• Multi-Filing
doc.addToFolder(folderId,  false);
• Unfiling
doc.removeFromFolder(folderId);
44
ACLs
• Basic Read & Write permissions
• Repository-specific permissions
• Can be inherited along folder hierarchy
• Can be updated
• Mapping to Allowable Actions
– ACL: bob has Read / Write here
– AA: bob canMoveObject here
– canMoveObject (on Object + Source +
Target)
45
Change Log
• List of chronological changes to the
repository
– create, update, delete
– ID of object
– optionally properties, ACLs, policies
• Since a given date (change log token)
• May not be available since “forever”
46
Change Log Examples
• Get Content Changes
ChangeEvents  events  =  session.getContentChanges(
        token,  includeProperties,  1000);
for  (ChangeEvent  ev  :  events.getChangeEvents())  {
        ObjectId  id  =  ev.getObjectId();
        Calendar  time  =  ev.getChangeTime();
        if  (ev.getChangeType()  ==  ChangeType.UPDATED)  {
                props  =  ev.getProperties();
                ...
        }
}
if  (events.getHasMoreItems())  {
        token  =  events.getLatestChangeLogToken();
}
...
47
Policies
• Attach policies to controllable objects
• Repository-specific
• Security policies
• Aspects / Facets / Mixins
• RM: Retention, Legal Hold
48
Repositories
• When connecting, list repositories
• Find out repository capabilities
– implemented services, tree-based
navigation, multi-filing, unfiling, query
capabilities, ...
• Get repository-wide information
– description, vendor, CMIS version, ...
– root folder ID
– latest change log token
49
CMIS Bindings
• AtomPub
– ReST base
– URI templates
• SOAP
– Common Web Services
• Browser Bindings
– JSON-based (work in progress)
• ... more possible
50
AtomPub
51
GET  http://cmisexample.oasis-­‐open.org/rep1/5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962  HTTP/1.0
HTTP/1.1  200  Ok
Content-­‐Type:  application/atom+xml;type=entry
<atom:entry>
        <atom:content  src="..."/>
        <atom:id>urn:uuid:5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962</atom:id>
        <atom:title  type="text">CMIS  Example  Document</atom:title>
        <atom:updated>2010-­‐01-­‐25T10:20:53.286-­‐08:00</atom:updated>
        <atom:link  rel="self"  href="..."/>
        <atom:link  rel="edit"  href="..."/>
        <atom:link  type="application/atom+xml;type=entry"  rel="describedby"  href="..."/>
        <atom:link  type="application/atom+xml;type=feed"  rel="up"  href="..."/>
        <atom:link  type="application/atom+xml;type=feed"  rel="version-­‐history"  href="..."/>
        <cmisra:object>
                <cmis:allowableActions>...</cmis:allowableActions>
                <cmis:properties>
                        ...
                </cmis:properties>
        </cmisra:object>
</atom:entry>
Non-ReST AtomPub
• URI templates
52
http://example.com/rep1/objectbyid/{id}
?filter={filter}
&includeAllowableActions={includeAllowableActions}
&includePolicyIds={includePolicyIds}
&includeRelationships={includeRelationships}
&includeACL={includeACL}
SOAP
53
<S:Envelope>
        <S:Body>
                <cmism:getProperties>
                        <cmism:repositoryId>rep1</cmism:repositoryId>
                        <cmism:objectId>
                                5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962
                        </cmism:objectId>
                </cmism:getProperties>
        </S:Body>
</S:Envelope>
<S:Envelope>
        <S:Body>
                <cmism:getPropertiesResponse>
                        <cmism:properties>
                                ...
                        </cmism:properties>
                </cmism:getPropertiesResponse>
        </S:Body>
</S:Envelope>
XML Payload
54
<cmis:properties>
        <cmis:propertyId  propertyDefinitionId="cmis:objectId">
                <cmis:value>5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962</cmis:value>
        </cmis:propertyId>
        <cmis:propertyId  propertyDefinitionId="cmis:objectTypeId">
                <cmis:value>invoice</cmis:value>
        </cmis:propertyId>
        <cmis:propertyString  propertyDefinitionId="cmis:name">
                <cmis:value>My  Document</cmis:value>
        </cmis:propertyString>
        <cmis:propertyDateTime  propertyDefinitionId="cmis:creationDate">
                <cmis:value>2010-­‐01-­‐25T10:20:53.364-­‐08:00</cmis:value>
        </cmis:propertyDateTime>
        <cmis:propertyString  propertyDefinitionId="cmis:contentStreamFileName">
                <cmis:value>mydocument.pdf</cmis:value>
        </cmis:propertyString>
        <cmis:propertyString  propertyDefinitionId="cmis:contentStreamMimeType">
                <cmis:value>application/pdf</cmis:value>
        </cmis:propertyString>
        <cmis:propertyString  propertyDefinitionId="keywords">
                <cmis:value>example</cmis:value>
                <cmis:value>sample</cmis:value>
                <cmis:value>frobs</cmis:value>
        </cmis:propertyString>
</cmis:properties>
CMIS Miscellanea
• Stateless
• Transaction-less
• Authentication left to repository
– HTTP Basic Auth, WS-Security +
Username Token
55
History of CMIS (I)
• Founding members (from iECM) work
on a new standard
– 2006
– EMC, IBM, Microsoft
• Contributing members invited for
review
– Aug 2007
– Alfresco, Open Text, Oracle, SAP
56
History of CMIS (II)
• Draft spec submitted to OASIS
– September 2008
• OASIS committee formed
– November 2008
• First public draft released
– October 2009
• CMIS 1.0 standard approved
– May 2010
57
History of CMIS (III)
• OASIS TC members
– Adobe, Adullact, Alfresco, ASG Software
Solutions, Booz Allen Hamilton, Citytech,
Content Technologies, Day, dotCMS, Ektron,
EMC, Entropysoft, Exalead, FatWire, Fidelity
Investments, Flatirons Solutions, fme, Genus
Technologies, Greenbytes, Harris Corp, IBM,
Magnolia, Microsoft, Nuxeo, Open Text,
Oracle, Pearson, Quark, SAP, Saperion,
Structured Software Systems, Sun, Vamosa,
Vignette, WeWebU
58
Future of CMIS
• CMIS 1.1
– late 2011
– errata, clarifications
– additional bindings
– type mutability?
• CMIS 2.0
– late 2012?
– bigger features or non-backward compat
• Transactions, Hierarchical/complex properties, Mixin types, WebDAV binding, Batch, Multiple content
streams, Internationalization, More explicit exceptions, Better exposure of renditions, RepositoryInfo
Property types support, AtomPub expressibility and clean-up, Type management, Records Management,
Pessimistic locking, Workflow, Content Tagging, Content Recommendations, Commenting, Social
– 59
Other Standards
• ODMA
– desktop-oriented
• WebDAV, DeltaV
– filesystem-oriented
• RSS, AtomPub
– limited domain model
• JCR (JSR-170, JSR-283)
– Java-specific
60
Apache Chemistry
• Incubating project
– started in 2009
– http://incubator.apache.org/chemistry/
• Implement whole CMIS spec
• Client-side
– Java (OpenCMIS)
– Python, PHP, JavaScript
• Server-side
– Java (OpenCMIS)
61
Chemistry / OpenCMIS History
• Original Chemistry project
– Day, Nuxeo in 2009
• OpenCMIS started privately
– Alfresco, Open Text, SAP
– Proposed to Apache in December 2009
• Chemistry and OpenCMIS merge
– 3 days of meetings in April 2010
• OpenCMIS 0.1.0 released Sept. 2010
62
OpenCMIS Facts
• 90k lines of Java
– OSGi bundles
– 5 JARs needed for a client
– Built with Maven
• Covers all aspects of the spec
• Extensible
• Lots of tests
• Contributors
– Alfresco, Day, Nuxeo, Open Text, SAP...
63
OpenCMIS Components
• Client API
• Client implementation
– CMIS Workbench
• Server SPI
• Server implementations
– filesystem
– in-memory
• Transport protocol bindings
– AtomPub, SOAP, JSON
64
CMIS Workbench
65
CMIS Workbench
66
CMIS Workbench Console
67
Clients using OpenCMIS
• Spring Surf CMIS Application Browser
• Confluence CMIS Plugin
• CMIS Explorer
• CMIS connectivity for SAP
Applications (upcoming)
• Struts2CmisExplorer
• CMIS Workbench
• Alfresco Web Quick Start
68
Servers using OpenCMIS
• Open Text Enterprise Library CMIS
Connector
• OpenWGA CMIS Connectivity Plugin
• Alfresco CMIS Preview
• Nuxeo CMIS Connector
69
OpenCMIS – Client coding
70
• See above :)
OpenCMIS – Server coding
• Define model mapping
– types, property types
– ids, path segments, names
– files, filenames
– versioning, locking, content log
• Implement the SPI
– CmisService
• Bindings are taken care of for you!
71
OpenCMIS – Server coding
72
SPI
73
Questions?
• http://www.oasis-open.org/
committees/cmis/
• http://docs.oasis-open.org/cmis/
CMIS/v1.0/cs01/cmis-spec-v1.0.html
• http://incubator.apache.org/chemistry/
• http://doc.nuxeo.com/
74

More Related Content

What's hot

Bw writing routines in update rules
Bw writing routines in update rulesBw writing routines in update rules
Bw writing routines in update rulesknreddyy
 
SAP Cloud Platform Product Overview
SAP Cloud Platform Product OverviewSAP Cloud Platform Product Overview
SAP Cloud Platform Product OverviewSAP Cloud Platform
 
Modern real-time streaming architectures
Modern real-time streaming architecturesModern real-time streaming architectures
Modern real-time streaming architecturesArun Kejariwal
 
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®confluent
 
OneStream - What's Possible?
OneStream - What's Possible?OneStream - What's Possible?
OneStream - What's Possible?finitsolutions
 
Getting Started with Groovy for the Non-Technical Superstars
Getting Started with Groovy for the Non-Technical SuperstarsGetting Started with Groovy for the Non-Technical Superstars
Getting Started with Groovy for the Non-Technical SuperstarsKyle Goodfriend
 
IBM Maximo Product Roadmap 2016
IBM Maximo Product Roadmap 2016IBM Maximo Product Roadmap 2016
IBM Maximo Product Roadmap 2016Helen Fisher
 
“Migration to Suite of HANA”
“Migration to Suite of HANA”“Migration to Suite of HANA”
“Migration to Suite of HANA”Wise Men
 
Data Lake Overview
Data Lake OverviewData Lake Overview
Data Lake OverviewJames Serra
 
AWS reInvent 2023 re:Cap services Slide deck
AWS reInvent 2023 re:Cap services Slide deckAWS reInvent 2023 re:Cap services Slide deck
AWS reInvent 2023 re:Cap services Slide deckSammy Cheung
 
Scaling a Core Banking Engine Using Apache Kafka | Peter Dudbridge, Thought M...
Scaling a Core Banking Engine Using Apache Kafka | Peter Dudbridge, Thought M...Scaling a Core Banking Engine Using Apache Kafka | Peter Dudbridge, Thought M...
Scaling a Core Banking Engine Using Apache Kafka | Peter Dudbridge, Thought M...HostedbyConfluent
 
Exclusive SAP Basis Training Book | www.sapdocs.info
Exclusive SAP Basis Training Book | www.sapdocs.infoExclusive SAP Basis Training Book | www.sapdocs.info
Exclusive SAP Basis Training Book | www.sapdocs.infosapdocs. info
 
AWS 101 - An Introduction to the Amazon Cloud
AWS 101  - An Introduction to the Amazon CloudAWS 101  - An Introduction to the Amazon Cloud
AWS 101 - An Introduction to the Amazon CloudCloudHesive
 
Confluent Partner Tech Talk with SVA
Confluent Partner Tech Talk with SVAConfluent Partner Tech Talk with SVA
Confluent Partner Tech Talk with SVAconfluent
 
Integration Microservices
Integration MicroservicesIntegration Microservices
Integration MicroservicesKasun Indrasiri
 
Microservice architecture design principles
Microservice architecture design principlesMicroservice architecture design principles
Microservice architecture design principlesSanjoy Kumar Roy
 
SAP HANA SPS09 - Backup and Recovery
SAP HANA SPS09 - Backup and RecoverySAP HANA SPS09 - Backup and Recovery
SAP HANA SPS09 - Backup and RecoverySAP Technology
 
The Importance of DataOps in a Multi-Cloud World
The Importance of DataOps in a Multi-Cloud WorldThe Importance of DataOps in a Multi-Cloud World
The Importance of DataOps in a Multi-Cloud WorldDATAVERSITY
 
DAT202_Getting started with Amazon Aurora
DAT202_Getting started with Amazon AuroraDAT202_Getting started with Amazon Aurora
DAT202_Getting started with Amazon AuroraAmazon Web Services
 

What's hot (20)

Bw writing routines in update rules
Bw writing routines in update rulesBw writing routines in update rules
Bw writing routines in update rules
 
SAP Cloud Platform Product Overview
SAP Cloud Platform Product OverviewSAP Cloud Platform Product Overview
SAP Cloud Platform Product Overview
 
Modern real-time streaming architectures
Modern real-time streaming architecturesModern real-time streaming architectures
Modern real-time streaming architectures
 
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
Best Practices for Streaming IoT Data with MQTT and Apache Kafka®
 
OneStream - What's Possible?
OneStream - What's Possible?OneStream - What's Possible?
OneStream - What's Possible?
 
Getting Started with Groovy for the Non-Technical Superstars
Getting Started with Groovy for the Non-Technical SuperstarsGetting Started with Groovy for the Non-Technical Superstars
Getting Started with Groovy for the Non-Technical Superstars
 
IBM Maximo Product Roadmap 2016
IBM Maximo Product Roadmap 2016IBM Maximo Product Roadmap 2016
IBM Maximo Product Roadmap 2016
 
“Migration to Suite of HANA”
“Migration to Suite of HANA”“Migration to Suite of HANA”
“Migration to Suite of HANA”
 
AWS Real-Time Event Processing
AWS Real-Time Event ProcessingAWS Real-Time Event Processing
AWS Real-Time Event Processing
 
Data Lake Overview
Data Lake OverviewData Lake Overview
Data Lake Overview
 
AWS reInvent 2023 re:Cap services Slide deck
AWS reInvent 2023 re:Cap services Slide deckAWS reInvent 2023 re:Cap services Slide deck
AWS reInvent 2023 re:Cap services Slide deck
 
Scaling a Core Banking Engine Using Apache Kafka | Peter Dudbridge, Thought M...
Scaling a Core Banking Engine Using Apache Kafka | Peter Dudbridge, Thought M...Scaling a Core Banking Engine Using Apache Kafka | Peter Dudbridge, Thought M...
Scaling a Core Banking Engine Using Apache Kafka | Peter Dudbridge, Thought M...
 
Exclusive SAP Basis Training Book | www.sapdocs.info
Exclusive SAP Basis Training Book | www.sapdocs.infoExclusive SAP Basis Training Book | www.sapdocs.info
Exclusive SAP Basis Training Book | www.sapdocs.info
 
AWS 101 - An Introduction to the Amazon Cloud
AWS 101  - An Introduction to the Amazon CloudAWS 101  - An Introduction to the Amazon Cloud
AWS 101 - An Introduction to the Amazon Cloud
 
Confluent Partner Tech Talk with SVA
Confluent Partner Tech Talk with SVAConfluent Partner Tech Talk with SVA
Confluent Partner Tech Talk with SVA
 
Integration Microservices
Integration MicroservicesIntegration Microservices
Integration Microservices
 
Microservice architecture design principles
Microservice architecture design principlesMicroservice architecture design principles
Microservice architecture design principles
 
SAP HANA SPS09 - Backup and Recovery
SAP HANA SPS09 - Backup and RecoverySAP HANA SPS09 - Backup and Recovery
SAP HANA SPS09 - Backup and Recovery
 
The Importance of DataOps in a Multi-Cloud World
The Importance of DataOps in a Multi-Cloud WorldThe Importance of DataOps in a Multi-Cloud World
The Importance of DataOps in a Multi-Cloud World
 
DAT202_Getting started with Amazon Aurora
DAT202_Getting started with Amazon AuroraDAT202_Getting started with Amazon Aurora
DAT202_Getting started with Amazon Aurora
 

Viewers also liked

Nuxeo World Session: CMIS - What's Next?
Nuxeo World Session: CMIS - What's Next?Nuxeo World Session: CMIS - What's Next?
Nuxeo World Session: CMIS - What's Next?Nuxeo
 
PLAT-1 CMIS in the Real World
PLAT-1 CMIS in the Real WorldPLAT-1 CMIS in the Real World
PLAT-1 CMIS in the Real WorldAlfresco Software
 
The ECM world from the point of view of Alfresco - Linux Day 2013 - Rome
The ECM world from the point of view of Alfresco - Linux Day 2013 - RomeThe ECM world from the point of view of Alfresco - Linux Day 2013 - Rome
The ECM world from the point of view of Alfresco - Linux Day 2013 - RomePiergiorgio Lucidi
 
0910 cagliari- spring surf and cmis - the dynamic duo
0910 cagliari- spring surf and cmis - the dynamic duo0910 cagliari- spring surf and cmis - the dynamic duo
0910 cagliari- spring surf and cmis - the dynamic duoSymphony Software Foundation
 
The Point Of The Content Interoperability Services (CMIS) Standard
The Point Of The Content Interoperability Services (CMIS) StandardThe Point Of The Content Interoperability Services (CMIS) Standard
The Point Of The Content Interoperability Services (CMIS) StandardLaurence Hart
 
How to Leverage the Most Modern Print Management Features in CA Spool™ 12.0
How to Leverage the Most Modern Print Management Features in CA Spool™ 12.0How to Leverage the Most Modern Print Management Features in CA Spool™ 12.0
How to Leverage the Most Modern Print Management Features in CA Spool™ 12.0CA Technologies
 
Alfresco: What every developer should know
Alfresco: What every developer should knowAlfresco: What every developer should know
Alfresco: What every developer should knowJeff Potts
 
Digital dark age - Are we doing enough to preserve our website heritage?
Digital dark age - Are we doing enough to preserve our website heritage?Digital dark age - Are we doing enough to preserve our website heritage?
Digital dark age - Are we doing enough to preserve our website heritage?Olivier Dobberkau
 
Case Study: SunTrust’s Next Gen QA and Release Services Transformation Journey
Case Study: SunTrust’s Next Gen QA and Release Services Transformation JourneyCase Study: SunTrust’s Next Gen QA and Release Services Transformation Journey
Case Study: SunTrust’s Next Gen QA and Release Services Transformation JourneyCA Technologies
 
Apache Chemistry: The Alfresco Open Source Implementation of CMIS
Apache Chemistry: The Alfresco Open Source Implementation of CMISApache Chemistry: The Alfresco Open Source Implementation of CMIS
Apache Chemistry: The Alfresco Open Source Implementation of CMISAlfresco Software
 
Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Toni de la Fuente
 
Building Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco APIBuilding Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco APIJeff Potts
 
The Alfresco ECM 1 Billion Document Benchmark on AWS and Aurora - Benchmark ...
The Alfresco ECM 1 Billion Document Benchmark on AWS and Aurora  - Benchmark ...The Alfresco ECM 1 Billion Document Benchmark on AWS and Aurora  - Benchmark ...
The Alfresco ECM 1 Billion Document Benchmark on AWS and Aurora - Benchmark ...Symphony Software Foundation
 
EclipseCon Eu 2015 - Breathe life into your Designer!
EclipseCon Eu 2015 - Breathe life into your Designer!EclipseCon Eu 2015 - Breathe life into your Designer!
EclipseCon Eu 2015 - Breathe life into your Designer!melbats
 
Alfresco As SharePoint Alternative - Architecture Overview
Alfresco As SharePoint Alternative - Architecture OverviewAlfresco As SharePoint Alternative - Architecture Overview
Alfresco As SharePoint Alternative - Architecture OverviewAlfresco Software
 
Developer’s intro to the alfresco platform
Developer’s intro to the alfresco platformDeveloper’s intro to the alfresco platform
Developer’s intro to the alfresco platformAlfresco Software
 

Viewers also liked (20)

CMIS REST HTTP
CMIS REST HTTPCMIS REST HTTP
CMIS REST HTTP
 
Nuxeo World Session: CMIS - What's Next?
Nuxeo World Session: CMIS - What's Next?Nuxeo World Session: CMIS - What's Next?
Nuxeo World Session: CMIS - What's Next?
 
PLAT-1 CMIS in the Real World
PLAT-1 CMIS in the Real WorldPLAT-1 CMIS in the Real World
PLAT-1 CMIS in the Real World
 
The ECM world from the point of view of Alfresco - Linux Day 2013 - Rome
The ECM world from the point of view of Alfresco - Linux Day 2013 - RomeThe ECM world from the point of view of Alfresco - Linux Day 2013 - Rome
The ECM world from the point of view of Alfresco - Linux Day 2013 - Rome
 
CMIS Introduction
CMIS IntroductionCMIS Introduction
CMIS Introduction
 
0910 cagliari- spring surf and cmis - the dynamic duo
0910 cagliari- spring surf and cmis - the dynamic duo0910 cagliari- spring surf and cmis - the dynamic duo
0910 cagliari- spring surf and cmis - the dynamic duo
 
The Point Of The Content Interoperability Services (CMIS) Standard
The Point Of The Content Interoperability Services (CMIS) StandardThe Point Of The Content Interoperability Services (CMIS) Standard
The Point Of The Content Interoperability Services (CMIS) Standard
 
TYPO3 and CMIS
TYPO3 and CMISTYPO3 and CMIS
TYPO3 and CMIS
 
How to Leverage the Most Modern Print Management Features in CA Spool™ 12.0
How to Leverage the Most Modern Print Management Features in CA Spool™ 12.0How to Leverage the Most Modern Print Management Features in CA Spool™ 12.0
How to Leverage the Most Modern Print Management Features in CA Spool™ 12.0
 
Alfresco: What every developer should know
Alfresco: What every developer should knowAlfresco: What every developer should know
Alfresco: What every developer should know
 
Digital dark age - Are we doing enough to preserve our website heritage?
Digital dark age - Are we doing enough to preserve our website heritage?Digital dark age - Are we doing enough to preserve our website heritage?
Digital dark age - Are we doing enough to preserve our website heritage?
 
Case Study: SunTrust’s Next Gen QA and Release Services Transformation Journey
Case Study: SunTrust’s Next Gen QA and Release Services Transformation JourneyCase Study: SunTrust’s Next Gen QA and Release Services Transformation Journey
Case Study: SunTrust’s Next Gen QA and Release Services Transformation Journey
 
Apache Chemistry: The Alfresco Open Source Implementation of CMIS
Apache Chemistry: The Alfresco Open Source Implementation of CMISApache Chemistry: The Alfresco Open Source Implementation of CMIS
Apache Chemistry: The Alfresco Open Source Implementation of CMIS
 
Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012
 
Building Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco APIBuilding Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco API
 
The Alfresco ECM 1 Billion Document Benchmark on AWS and Aurora - Benchmark ...
The Alfresco ECM 1 Billion Document Benchmark on AWS and Aurora  - Benchmark ...The Alfresco ECM 1 Billion Document Benchmark on AWS and Aurora  - Benchmark ...
The Alfresco ECM 1 Billion Document Benchmark on AWS and Aurora - Benchmark ...
 
EclipseCon Eu 2015 - Breathe life into your Designer!
EclipseCon Eu 2015 - Breathe life into your Designer!EclipseCon Eu 2015 - Breathe life into your Designer!
EclipseCon Eu 2015 - Breathe life into your Designer!
 
Alfresco As SharePoint Alternative - Architecture Overview
Alfresco As SharePoint Alternative - Architecture OverviewAlfresco As SharePoint Alternative - Architecture Overview
Alfresco As SharePoint Alternative - Architecture Overview
 
Developer’s intro to the alfresco platform
Developer’s intro to the alfresco platformDeveloper’s intro to the alfresco platform
Developer’s intro to the alfresco platform
 
Spring In Alfresco Ecm
Spring In Alfresco EcmSpring In Alfresco Ecm
Spring In Alfresco Ecm
 

Similar to Get content under control with CMIS and Apache Chemistry

Connecting Content Management Apps with CMIS
Connecting Content Management Apps with CMISConnecting Content Management Apps with CMIS
Connecting Content Management Apps with CMISJeff Potts
 
Connecting Content Management Applications with CMIS
Connecting Content Management Applications with CMISConnecting Content Management Applications with CMIS
Connecting Content Management Applications with CMISNuxeo
 
Django introduction @ UGent
Django introduction @ UGentDjango introduction @ UGent
Django introduction @ UGentkevinvw
 
Leveraging the Globus Platform (GlobusWorld Tour - Columbia University)
Leveraging the Globus Platform (GlobusWorld Tour - Columbia University)Leveraging the Globus Platform (GlobusWorld Tour - Columbia University)
Leveraging the Globus Platform (GlobusWorld Tour - Columbia University)Globus
 
Webinar: Building Your First Application with MongoDB
Webinar: Building Your First Application with MongoDBWebinar: Building Your First Application with MongoDB
Webinar: Building Your First Application with MongoDBMongoDB
 
From SQL to MongoDB
From SQL to MongoDBFrom SQL to MongoDB
From SQL to MongoDBNuxeo
 
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...Peter Keane
 
AWS Česko-Slovenský Webinár 03: Vývoj v AWS
AWS Česko-Slovenský Webinár 03: Vývoj v AWSAWS Česko-Slovenský Webinár 03: Vývoj v AWS
AWS Česko-Slovenský Webinár 03: Vývoj v AWSVladimir Simek
 
Leveraging the Globus Platform (GlobusWorld Tour - UCSD)
Leveraging the Globus Platform (GlobusWorld Tour - UCSD)Leveraging the Globus Platform (GlobusWorld Tour - UCSD)
Leveraging the Globus Platform (GlobusWorld Tour - UCSD)Globus
 
Full stack visibility with elastic, KubeCon 2017
Full stack visibility with elastic, KubeCon 2017Full stack visibility with elastic, KubeCon 2017
Full stack visibility with elastic, KubeCon 2017Carlos Pérez-Aradros
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoFu Cheng
 
Datomic – A Modern Database - StampedeCon 2014
Datomic – A Modern Database - StampedeCon 2014Datomic – A Modern Database - StampedeCon 2014
Datomic – A Modern Database - StampedeCon 2014StampedeCon
 
Context Information Management in IoT enabled smart systems - the basics
Context Information Management in IoT enabled smart systems - the basicsContext Information Management in IoT enabled smart systems - the basics
Context Information Management in IoT enabled smart systems - the basicsFernando Lopez Aguilar
 
API Testing. Streamline your testing process.
API Testing. Streamline your testing process.API Testing. Streamline your testing process.
API Testing. Streamline your testing process.Andrey Oleynik
 
General Method of HTTP Messages Authentication Based on Hash Functions in Web...
General Method of HTTP Messages Authentication Based on Hash Functions in Web...General Method of HTTP Messages Authentication Based on Hash Functions in Web...
General Method of HTTP Messages Authentication Based on Hash Functions in Web...Denis Kolegov
 

Similar to Get content under control with CMIS and Apache Chemistry (20)

Connecting Content Management Apps with CMIS
Connecting Content Management Apps with CMISConnecting Content Management Apps with CMIS
Connecting Content Management Apps with CMIS
 
Connecting Content Management Applications with CMIS
Connecting Content Management Applications with CMISConnecting Content Management Applications with CMIS
Connecting Content Management Applications with CMIS
 
Introduction to Monsoon PHP framework
Introduction to Monsoon PHP frameworkIntroduction to Monsoon PHP framework
Introduction to Monsoon PHP framework
 
Django introduction @ UGent
Django introduction @ UGentDjango introduction @ UGent
Django introduction @ UGent
 
Leveraging the Globus Platform (GlobusWorld Tour - Columbia University)
Leveraging the Globus Platform (GlobusWorld Tour - Columbia University)Leveraging the Globus Platform (GlobusWorld Tour - Columbia University)
Leveraging the Globus Platform (GlobusWorld Tour - Columbia University)
 
Webinar: Building Your First Application with MongoDB
Webinar: Building Your First Application with MongoDBWebinar: Building Your First Application with MongoDB
Webinar: Building Your First Application with MongoDB
 
04 standard class library c#
04 standard class library c#04 standard class library c#
04 standard class library c#
 
Document db
Document dbDocument db
Document db
 
Elasticsearch Introduction at BigData meetup
Elasticsearch Introduction at BigData meetupElasticsearch Introduction at BigData meetup
Elasticsearch Introduction at BigData meetup
 
From SQL to MongoDB
From SQL to MongoDBFrom SQL to MongoDB
From SQL to MongoDB
 
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
 
Azure DocumentDB
Azure DocumentDBAzure DocumentDB
Azure DocumentDB
 
AWS Česko-Slovenský Webinár 03: Vývoj v AWS
AWS Česko-Slovenský Webinár 03: Vývoj v AWSAWS Česko-Slovenský Webinár 03: Vývoj v AWS
AWS Česko-Slovenský Webinár 03: Vývoj v AWS
 
Leveraging the Globus Platform (GlobusWorld Tour - UCSD)
Leveraging the Globus Platform (GlobusWorld Tour - UCSD)Leveraging the Globus Platform (GlobusWorld Tour - UCSD)
Leveraging the Globus Platform (GlobusWorld Tour - UCSD)
 
Full stack visibility with elastic, KubeCon 2017
Full stack visibility with elastic, KubeCon 2017Full stack visibility with elastic, KubeCon 2017
Full stack visibility with elastic, KubeCon 2017
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
 
Datomic – A Modern Database - StampedeCon 2014
Datomic – A Modern Database - StampedeCon 2014Datomic – A Modern Database - StampedeCon 2014
Datomic – A Modern Database - StampedeCon 2014
 
Context Information Management in IoT enabled smart systems - the basics
Context Information Management in IoT enabled smart systems - the basicsContext Information Management in IoT enabled smart systems - the basics
Context Information Management in IoT enabled smart systems - the basics
 
API Testing. Streamline your testing process.
API Testing. Streamline your testing process.API Testing. Streamline your testing process.
API Testing. Streamline your testing process.
 
General Method of HTTP Messages Authentication Based on Hash Functions in Web...
General Method of HTTP Messages Authentication Based on Hash Functions in Web...General Method of HTTP Messages Authentication Based on Hash Functions in Web...
General Method of HTTP Messages Authentication Based on Hash Functions in Web...
 

Recently uploaded

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
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
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 

Recently uploaded (20)

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
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
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 

Get content under control with CMIS and Apache Chemistry

  • 1. Get your content under control with CMIS and Apache Chemistry Florent Guillaume fg@nuxeo.com twitter.com/efge ApacheCon NA, 2010-11-03
  • 2. Agenda • CMIS • Apache Chemistry • OpenCMIS Client coding • OpenCMIS Server coding 2
  • 3. Who am I? • Florent Guillaume – fg@nuxeo.com • Director of R&D at Nuxeo – http://nuxeo.com – http://doc.nuxeo.com • Nuxeo Architect • Apache Committer • Member of JSR 283, OASIS CMIS TC 3
  • 4. Glossary • CMIS – Content Management Interop. Services • CMS, DMS, DAM, WCM, ECM, RM... – content, document, asset, record... • Content Stream – resource / file from a filesystem • Document – self-contained, structured metadata – high-level operations 4
  • 5. What is CMIS? • Domain Model – services – objects, types, properties – lowest greatest common denominator • Transport Protocols – HTTP-based • No Language API – Apache Chemistry – (although WSDL is actually a language) 5
  • 6. Interoperability • Application / Repository – Client / Server • Application ↔ Repository – e.g. photo management • Repository ↔ Repository – e.g. archival, publishing • Repository federation – central access to heterogenous systems 6
  • 7. CMIS Implementations • Product → Client / Repository • Repositories – Alfresco, Nuxeo, Microsoft, IBM, SAP, eXo, Day, Jahia, KnowledgeTree, ... • Clients – Adobe, IBM, Microsoft, eZ Publish, Plone, Drupal, Joomla, ... 7
  • 20. CMIS Benefits • Customer benefits – interoperability between vendors – common model – “desilofication” – “commoditization” • Vendor benefits – repository vendors get more apps – applications vendors get more repos 20
  • 21. CMIS Domain Model • Objects: Folders, Documents • Properties – scalars, lists • string, boolean, decimal, integer, datetime, uri, id, html – binary content stream • Types – inheritance, constraints – standard properties • id, name, creation, modification, version, ... 21
  • 23. Document Properties • 5ba79978-a87f-4146-9dd4-5197c5ac0962 – cmis:objectId: 5ba79978-a87f-4146-9dd4-5197c5ac0962 – cmis:objectTypeId: invoice – cmis:name: My Document – cmis:creationDate: 2010-01-25T10:15:07.155-08:00 – cmis:createdBy: florent – cmis:lastModificationDate: 2010-01-25T10:20:53.286-08:00 – cmis:lastModifiedBy: florent – cmis:contentStreamFileName: mydocument.pdf – cmis:contentStreamMimeType: application/pdf – cmis:isLatestVersion: true – cmis:versionLabel: v1.5 – keywords: [example, sample, frobs] – importance: high 23
  • 24. Type Definition Properties • invoice – cmis:objectId: ID – cmis:objectTypeId: ID – cmis:name: String – cmis:creationDate: DateTime (read-only) – cmis:createdBy: String (read-only) – cmis:lastModificationDate: DateTime – cmis:isLatestVersion: Boolean – keywords: String (multi-valued, not required) – importance: String (choices: low, medium, high) 24
  • 25. Type Definition • invoice – id: invoice – localName: t-invoice – displayName: Invoice – baseId: cmis:document – parentId: record – fileable: true – queryable: true – fulltextIndexed: true – controllableACL: false 25
  • 26. CMIS Services • CRUD • Queries • Versioning • Renditions • Relationships • Multi-Filing, ACLs, Change Log, Policies • Repositories, Types 26
  • 27. Retrieve • By ID • By Path – ID ≠ name ≠ path segment ≠ file name • Parent(s) / Children / Tree • Properties • Content Stream • Allowable Actions • Renditions 27
  • 28. Retrieve Examples (I) • By ID ObjectId  id  =  session.createObjectId(        "5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962"); CmisObject  object  =  session.getObject(id); • By Path Folder  folder  =  (Folder)  session.getObjectByPath(        "/corporate/invoices/foo"); • Children for  (CmisObject  child  :  folder.getChildren())  {        ... } 28
  • 29. Retrieve Examples (II) • Properties List<String>  kw  =  doc.getPropertyValue("keywords"); • Content Stream ContentStream  cs  =  doc.getContentStream(); String  filename  =  cs.getFileName(); InputStream  stream  =  cs.getStream(); 29
  • 30. Query • Retrieve by content • SQL-like Language – Type → Table – Object → Row – Property → Column – Multi-Valued, Fulltext + Score, JOIN • SELECT only – no UPDATE, DELETE 30
  • 31. Query Examples • Query ItemIterable<QueryResult>  list  =  session.query(        "SELECT  cmis:objectId  FROM  ...",  true); for  (QueryResult  qr  :  list)  {        qr.getPropertyById("cmis:name"); } • CMISQL SELECT  cmis:objectId,  cmis:name,  SCORE()  AS  sc    FROM  cmis:document    WHERE  importance  =  'high'        AND  'frobs'  =  ANY  keywords        AND  IN_TREE('5ba79978-­‐a87f')        AND  CONTAINS('barack  OR  obama')    ORDER  BY  sc  DESC 31
  • 32. Create, Update, Delete • Create – may need content stream – may check in • Update – may verify a change token – may change ID (auto-versioning) • Delete – may delete all versions 32
  • 33. CRUD Examples • Create Map<String,  Serializable>  props  =        new  HashMap<String,  Serializable>(); props.put(PropertyIds.OBJECT_TYPE_ID,  "Note"); props.put(PropertyIds.NAME,  "mynote"); Document  doc  =  folder.createDocument(props,        contentStream,  null); • Update doc.updateProperties(props); • Delete doc.delete(); 33
  • 34. Versioning • Version Series • Private Working Copy • Check In, Check Out • Get All Versions • (optional feature) 34
  • 35. Versioning Examples • Check Out ObjectId  pwcId  =  doc.checkOut(); • Check In ObjectId  verId  =  doc.checkIn(true,  null,  true,  "foo"); • Get All Versions List<Document>  docs  =  doc.getAllVersions(); 35
  • 36. Versioning Variants • No versioning (no type versionable) • Auto-versioning – create new version on each edit • PWC not updatable – explicit check in with new changes • Version-specific filing • Versions searchable or not 36
  • 37. Renditions • Retrieve Only • Additional Content Streams – MIME type, kind, title, size • Various uses – thumbnail / icon – transformations • PDF, HTML • Multi-Page • (optional feature) 37
  • 38. Renditions Examples • Get Renditions for  (Rendition  rendition  :  doc.getRenditions())  {        String  kind  =  rendition.getKind();        String  title  =  rendition.getTitle();        String  mimeType  =  rendition.getMimeType();        ContentStream  cs  =  rendition.getContentStream();        ... } 38
  • 39. Relationships • Source, Target • Unfiled, not versionable • May be queryable, controllable • May use referential integrity • (optional feature) 39
  • 40. Relationships Examples • Create Relationship Map<String,  Serializable>  props  =        new  HashMap<String,  Serializable>(); props.put(PropertyIds.OBJECT_TYPE_ID,  "Depends"); props.put(PropertyIds.SOURCE_ID,  source.getId()); props.put(PropertyIds.TARGET_ID,  target.getId()); ObjectId  relId  =  session.createRelationship(props); • Get Relationships for  (Relationship  rel  :  doc.getRelationships())  {        ... } 40
  • 41. Multi-Filing, Unfiling • Only for documents, not folders • Zero, one or more parents • All parents are equivalent • Different paths – (if paths are supported) 41
  • 44. Multi-Filing Example • Multi-Filing doc.addToFolder(folderId,  false); • Unfiling doc.removeFromFolder(folderId); 44
  • 45. ACLs • Basic Read & Write permissions • Repository-specific permissions • Can be inherited along folder hierarchy • Can be updated • Mapping to Allowable Actions – ACL: bob has Read / Write here – AA: bob canMoveObject here – canMoveObject (on Object + Source + Target) 45
  • 46. Change Log • List of chronological changes to the repository – create, update, delete – ID of object – optionally properties, ACLs, policies • Since a given date (change log token) • May not be available since “forever” 46
  • 47. Change Log Examples • Get Content Changes ChangeEvents  events  =  session.getContentChanges(        token,  includeProperties,  1000); for  (ChangeEvent  ev  :  events.getChangeEvents())  {        ObjectId  id  =  ev.getObjectId();        Calendar  time  =  ev.getChangeTime();        if  (ev.getChangeType()  ==  ChangeType.UPDATED)  {                props  =  ev.getProperties();                ...        } } if  (events.getHasMoreItems())  {        token  =  events.getLatestChangeLogToken(); } ... 47
  • 48. Policies • Attach policies to controllable objects • Repository-specific • Security policies • Aspects / Facets / Mixins • RM: Retention, Legal Hold 48
  • 49. Repositories • When connecting, list repositories • Find out repository capabilities – implemented services, tree-based navigation, multi-filing, unfiling, query capabilities, ... • Get repository-wide information – description, vendor, CMIS version, ... – root folder ID – latest change log token 49
  • 50. CMIS Bindings • AtomPub – ReST base – URI templates • SOAP – Common Web Services • Browser Bindings – JSON-based (work in progress) • ... more possible 50
  • 51. AtomPub 51 GET  http://cmisexample.oasis-­‐open.org/rep1/5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962  HTTP/1.0 HTTP/1.1  200  Ok Content-­‐Type:  application/atom+xml;type=entry <atom:entry>        <atom:content  src="..."/>        <atom:id>urn:uuid:5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962</atom:id>        <atom:title  type="text">CMIS  Example  Document</atom:title>        <atom:updated>2010-­‐01-­‐25T10:20:53.286-­‐08:00</atom:updated>        <atom:link  rel="self"  href="..."/>        <atom:link  rel="edit"  href="..."/>        <atom:link  type="application/atom+xml;type=entry"  rel="describedby"  href="..."/>        <atom:link  type="application/atom+xml;type=feed"  rel="up"  href="..."/>        <atom:link  type="application/atom+xml;type=feed"  rel="version-­‐history"  href="..."/>        <cmisra:object>                <cmis:allowableActions>...</cmis:allowableActions>                <cmis:properties>                        ...                </cmis:properties>        </cmisra:object> </atom:entry>
  • 52. Non-ReST AtomPub • URI templates 52 http://example.com/rep1/objectbyid/{id} ?filter={filter} &includeAllowableActions={includeAllowableActions} &includePolicyIds={includePolicyIds} &includeRelationships={includeRelationships} &includeACL={includeACL}
  • 53. SOAP 53 <S:Envelope>        <S:Body>                <cmism:getProperties>                        <cmism:repositoryId>rep1</cmism:repositoryId>                        <cmism:objectId>                                5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962                        </cmism:objectId>                </cmism:getProperties>        </S:Body> </S:Envelope> <S:Envelope>        <S:Body>                <cmism:getPropertiesResponse>                        <cmism:properties>                                ...                        </cmism:properties>                </cmism:getPropertiesResponse>        </S:Body> </S:Envelope>
  • 54. XML Payload 54 <cmis:properties>        <cmis:propertyId  propertyDefinitionId="cmis:objectId">                <cmis:value>5ba79978-­‐a87f-­‐4146-­‐9dd4-­‐5197c5ac0962</cmis:value>        </cmis:propertyId>        <cmis:propertyId  propertyDefinitionId="cmis:objectTypeId">                <cmis:value>invoice</cmis:value>        </cmis:propertyId>        <cmis:propertyString  propertyDefinitionId="cmis:name">                <cmis:value>My  Document</cmis:value>        </cmis:propertyString>        <cmis:propertyDateTime  propertyDefinitionId="cmis:creationDate">                <cmis:value>2010-­‐01-­‐25T10:20:53.364-­‐08:00</cmis:value>        </cmis:propertyDateTime>        <cmis:propertyString  propertyDefinitionId="cmis:contentStreamFileName">                <cmis:value>mydocument.pdf</cmis:value>        </cmis:propertyString>        <cmis:propertyString  propertyDefinitionId="cmis:contentStreamMimeType">                <cmis:value>application/pdf</cmis:value>        </cmis:propertyString>        <cmis:propertyString  propertyDefinitionId="keywords">                <cmis:value>example</cmis:value>                <cmis:value>sample</cmis:value>                <cmis:value>frobs</cmis:value>        </cmis:propertyString> </cmis:properties>
  • 55. CMIS Miscellanea • Stateless • Transaction-less • Authentication left to repository – HTTP Basic Auth, WS-Security + Username Token 55
  • 56. History of CMIS (I) • Founding members (from iECM) work on a new standard – 2006 – EMC, IBM, Microsoft • Contributing members invited for review – Aug 2007 – Alfresco, Open Text, Oracle, SAP 56
  • 57. History of CMIS (II) • Draft spec submitted to OASIS – September 2008 • OASIS committee formed – November 2008 • First public draft released – October 2009 • CMIS 1.0 standard approved – May 2010 57
  • 58. History of CMIS (III) • OASIS TC members – Adobe, Adullact, Alfresco, ASG Software Solutions, Booz Allen Hamilton, Citytech, Content Technologies, Day, dotCMS, Ektron, EMC, Entropysoft, Exalead, FatWire, Fidelity Investments, Flatirons Solutions, fme, Genus Technologies, Greenbytes, Harris Corp, IBM, Magnolia, Microsoft, Nuxeo, Open Text, Oracle, Pearson, Quark, SAP, Saperion, Structured Software Systems, Sun, Vamosa, Vignette, WeWebU 58
  • 59. Future of CMIS • CMIS 1.1 – late 2011 – errata, clarifications – additional bindings – type mutability? • CMIS 2.0 – late 2012? – bigger features or non-backward compat • Transactions, Hierarchical/complex properties, Mixin types, WebDAV binding, Batch, Multiple content streams, Internationalization, More explicit exceptions, Better exposure of renditions, RepositoryInfo Property types support, AtomPub expressibility and clean-up, Type management, Records Management, Pessimistic locking, Workflow, Content Tagging, Content Recommendations, Commenting, Social – 59
  • 60. Other Standards • ODMA – desktop-oriented • WebDAV, DeltaV – filesystem-oriented • RSS, AtomPub – limited domain model • JCR (JSR-170, JSR-283) – Java-specific 60
  • 61. Apache Chemistry • Incubating project – started in 2009 – http://incubator.apache.org/chemistry/ • Implement whole CMIS spec • Client-side – Java (OpenCMIS) – Python, PHP, JavaScript • Server-side – Java (OpenCMIS) 61
  • 62. Chemistry / OpenCMIS History • Original Chemistry project – Day, Nuxeo in 2009 • OpenCMIS started privately – Alfresco, Open Text, SAP – Proposed to Apache in December 2009 • Chemistry and OpenCMIS merge – 3 days of meetings in April 2010 • OpenCMIS 0.1.0 released Sept. 2010 62
  • 63. OpenCMIS Facts • 90k lines of Java – OSGi bundles – 5 JARs needed for a client – Built with Maven • Covers all aspects of the spec • Extensible • Lots of tests • Contributors – Alfresco, Day, Nuxeo, Open Text, SAP... 63
  • 64. OpenCMIS Components • Client API • Client implementation – CMIS Workbench • Server SPI • Server implementations – filesystem – in-memory • Transport protocol bindings – AtomPub, SOAP, JSON 64
  • 68. Clients using OpenCMIS • Spring Surf CMIS Application Browser • Confluence CMIS Plugin • CMIS Explorer • CMIS connectivity for SAP Applications (upcoming) • Struts2CmisExplorer • CMIS Workbench • Alfresco Web Quick Start 68
  • 69. Servers using OpenCMIS • Open Text Enterprise Library CMIS Connector • OpenWGA CMIS Connectivity Plugin • Alfresco CMIS Preview • Nuxeo CMIS Connector 69
  • 70. OpenCMIS – Client coding 70 • See above :)
  • 71. OpenCMIS – Server coding • Define model mapping – types, property types – ids, path segments, names – files, filenames – versioning, locking, content log • Implement the SPI – CmisService • Bindings are taken care of for you! 71
  • 72. OpenCMIS – Server coding 72