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

Salesforce Field Service Lightning
Salesforce Field Service LightningSalesforce Field Service Lightning
Salesforce Field Service LightningJayant Jindal
 
Sap Business One
Sap Business OneSap Business One
Sap Business OneRavi Jain
 
Wake Up – It’s Time to Upgrade Your S/4HANA System!
Wake Up – It’s Time to Upgrade Your S/4HANA System!Wake Up – It’s Time to Upgrade Your S/4HANA System!
Wake Up – It’s Time to Upgrade Your S/4HANA System!panayaofficial
 
Oracle EPM BI Overview
Oracle EPM BI OverviewOracle EPM BI Overview
Oracle EPM BI Overviewcglylesu
 
SIP Testing with FreeSWITCH
SIP Testing with FreeSWITCHSIP Testing with FreeSWITCH
SIP Testing with FreeSWITCHMoises Silva
 
Take the Next Step to S/4HANA with "RISE with SAP"
Take the Next Step to S/4HANA with "RISE with SAP"Take the Next Step to S/4HANA with "RISE with SAP"
Take the Next Step to S/4HANA with "RISE with SAP"panayaofficial
 
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
 
SAP S4HANA Billing and E-Invoicing for Customer Payments
SAP S4HANA Billing and E-Invoicing for Customer Payments SAP S4HANA Billing and E-Invoicing for Customer Payments
SAP S4HANA Billing and E-Invoicing for Customer Payments Joe Torres
 
rise-with-sap-s4hana-cloud-private-edition-and-sap-erp-pce-english-v2-2021.pdf
rise-with-sap-s4hana-cloud-private-edition-and-sap-erp-pce-english-v2-2021.pdfrise-with-sap-s4hana-cloud-private-edition-and-sap-erp-pce-english-v2-2021.pdf
rise-with-sap-s4hana-cloud-private-edition-and-sap-erp-pce-english-v2-2021.pdfBangLuuVan
 
What’s New in SAP Extended ECM 16 and SAP Archiving and Document Access 16
What’s New in SAP Extended ECM 16 and SAP Archiving and Document Access 16What’s New in SAP Extended ECM 16 and SAP Archiving and Document Access 16
What’s New in SAP Extended ECM 16 and SAP Archiving and Document Access 16Thomas Demmler
 
Alfresco 5.2 REST API
Alfresco 5.2 REST APIAlfresco 5.2 REST API
Alfresco 5.2 REST APIJ V
 
Sap s4 hana sourcing and procurement
Sap s4 hana sourcing and procurementSap s4 hana sourcing and procurement
Sap s4 hana sourcing and procurementLokesh Modem
 
ERP Cloud: Assessing Readiness and Building the Roadmap
ERP Cloud: Assessing Readiness and Building the RoadmapERP Cloud: Assessing Readiness and Building the Roadmap
ERP Cloud: Assessing Readiness and Building the RoadmapCapgemini
 
Presentation of helpdesk
Presentation of helpdeskPresentation of helpdesk
Presentation of helpdeskArchana Negi
 
SAP S/4HANA cloud editions or On Prem? Demystifying the options and cost bene...
SAP S/4HANA cloud editions or On Prem? Demystifying the options and cost bene...SAP S/4HANA cloud editions or On Prem? Demystifying the options and cost bene...
SAP S/4HANA cloud editions or On Prem? Demystifying the options and cost bene...IBM
 
SAP Success Factors Online Training
SAP Success Factors Online TrainingSAP Success Factors Online Training
SAP Success Factors Online TrainingIT LearnMore
 
S/4 HANA conversion functional value proposition
S/4 HANA conversion functional value propositionS/4 HANA conversion functional value proposition
S/4 HANA conversion functional value propositionVignesh Bhatt
 

What's hot (20)

Salesforce Field Service Lightning
Salesforce Field Service LightningSalesforce Field Service Lightning
Salesforce Field Service Lightning
 
Sap Business One
Sap Business OneSap Business One
Sap Business One
 
Wake Up – It’s Time to Upgrade Your S/4HANA System!
Wake Up – It’s Time to Upgrade Your S/4HANA System!Wake Up – It’s Time to Upgrade Your S/4HANA System!
Wake Up – It’s Time to Upgrade Your S/4HANA System!
 
Oracle EPM BI Overview
Oracle EPM BI OverviewOracle EPM BI Overview
Oracle EPM BI Overview
 
SIP Testing with FreeSWITCH
SIP Testing with FreeSWITCHSIP Testing with FreeSWITCH
SIP Testing with FreeSWITCH
 
ITIL Introduction
ITIL IntroductionITIL Introduction
ITIL Introduction
 
Take the Next Step to S/4HANA with "RISE with SAP"
Take the Next Step to S/4HANA with "RISE with SAP"Take the Next Step to S/4HANA with "RISE with SAP"
Take the Next Step to S/4HANA with "RISE with SAP"
 
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
 
SAP S4HANA Billing and E-Invoicing for Customer Payments
SAP S4HANA Billing and E-Invoicing for Customer Payments SAP S4HANA Billing and E-Invoicing for Customer Payments
SAP S4HANA Billing and E-Invoicing for Customer Payments
 
rise-with-sap-s4hana-cloud-private-edition-and-sap-erp-pce-english-v2-2021.pdf
rise-with-sap-s4hana-cloud-private-edition-and-sap-erp-pce-english-v2-2021.pdfrise-with-sap-s4hana-cloud-private-edition-and-sap-erp-pce-english-v2-2021.pdf
rise-with-sap-s4hana-cloud-private-edition-and-sap-erp-pce-english-v2-2021.pdf
 
Rise with SAP
Rise with SAPRise with SAP
Rise with SAP
 
What’s New in SAP Extended ECM 16 and SAP Archiving and Document Access 16
What’s New in SAP Extended ECM 16 and SAP Archiving and Document Access 16What’s New in SAP Extended ECM 16 and SAP Archiving and Document Access 16
What’s New in SAP Extended ECM 16 and SAP Archiving and Document Access 16
 
Alfresco 5.2 REST API
Alfresco 5.2 REST APIAlfresco 5.2 REST API
Alfresco 5.2 REST API
 
Sap s4 hana sourcing and procurement
Sap s4 hana sourcing and procurementSap s4 hana sourcing and procurement
Sap s4 hana sourcing and procurement
 
ERP Cloud: Assessing Readiness and Building the Roadmap
ERP Cloud: Assessing Readiness and Building the RoadmapERP Cloud: Assessing Readiness and Building the Roadmap
ERP Cloud: Assessing Readiness and Building the Roadmap
 
Presentation of helpdesk
Presentation of helpdeskPresentation of helpdesk
Presentation of helpdesk
 
SAP S/4HANA cloud editions or On Prem? Demystifying the options and cost bene...
SAP S/4HANA cloud editions or On Prem? Demystifying the options and cost bene...SAP S/4HANA cloud editions or On Prem? Demystifying the options and cost bene...
SAP S/4HANA cloud editions or On Prem? Demystifying the options and cost bene...
 
SAP Success Factors Online Training
SAP Success Factors Online TrainingSAP Success Factors Online Training
SAP Success Factors Online Training
 
S/4 HANA conversion functional value proposition
S/4 HANA conversion functional value propositionS/4 HANA conversion functional value proposition
S/4 HANA conversion functional value proposition
 
How Salesforce Uses Salesforce for Sales
How Salesforce Uses Salesforce for SalesHow Salesforce Uses Salesforce for Sales
How Salesforce Uses Salesforce for Sales
 

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

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 

Recently uploaded (20)

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 

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