cmis virtual training webinar 24 nov09

69
CMIS 1.0 Class CMIS 1.0 Class Getting Started with CMIS Getting Started with CMIS Gabriele Columbro Solution Engineer, EMEA 1

Upload: alfresco-software

Post on 08-May-2015

4.548 views

Category:

Technology


6 download

DESCRIPTION

Alfresco’s CMIS Virtual Training introduces the CMIS specification which is currently in public review stage at OASIS. The session is designed to help developers exploit the most complete and first open source CMIS 1.0 implementation. The session will first provide a broad overview on the CMIS spec domain model, services and bindings, then offer a sample CMIS SQL query webapp built using SpringMVC and the Apache Chemistry Atompub TCK on the client side, while leveraging the Alfresco CMIS 1.0 compliant ReST binding as reference server implement

TRANSCRIPT

Page 1: Cmis Virtual Training  Webinar 24 Nov09

CMIS 1.0 Class CMIS 1.0 Class

Getting Started with CMISGetting Started with CMIS

Gabriele Columbro

Solution Engineer, EMEA

1

Page 2: Cmis Virtual Training  Webinar 24 Nov09

AgendaAgenda

● Why CMIS?

● CMIS Data Model

● CMIS Intro Demo

● CMIS Services● CMIS Services

● CMIS Queries

● CMIS Maven Toolkit

● CMIS Binding and tools

● Q & A

Page 3: Cmis Virtual Training  Webinar 24 Nov09

AgendaAgenda

● Why CMIS?

● CMIS Data Model

● CMIS Intro Demo

● CMIS Services● CMIS Services

● CMIS Queries

● CMIS Maven Toolkit

● CMIS Binding and tools

● Q & A

Page 4: Cmis Virtual Training  Webinar 24 Nov09

The Tower of BabelThe Tower of Babel

Page 5: Cmis Virtual Training  Webinar 24 Nov09

ECM Content BabelECM Content Babel

● Most large organisations have multiple ECM

solutions

● No standard across ECM systems

● Proprietary specific APIs

● Proprietary Query interfaces

● Language dependent Java vs .Net …

● One-off integrations

● No reuse

● Expensive to implement, maintain

Page 6: Cmis Virtual Training  Webinar 24 Nov09

ECM TrendsECM Trends

● Content centric applications are becoming

more common in organizations

● Content Mashups with Internal/External services

● Content as a service

● Platform as a service (cloud)● Platform as a service (cloud)

● Vendors consolidation

● Oracle buys them all!

● Standardization...

Page 7: Cmis Virtual Training  Webinar 24 Nov09

What is CMIS?What is CMIS?

● “The objective of the CMIS standard is to define a common content management web services interface that can be implemented by content repositories and enable interoperability across repositories.”

● A standard defining APIs to support interoperability with ECM systems

● CMIS defines:● Model e.g. Types, Relationships

● Standardised Query Language● Standardised Query Language

● Protocol Bindings e.g. REST, Web Services

● Services e.g. Check out/in, versioning

CMIS is the SQL for Content Management!!!

Page 8: Cmis Virtual Training  Webinar 24 Nov09

Background / HistoryBackground / History

● Founding members

● IBM, Microsoft, EMC

● Contributing members

● Alfresco, Open Text, SAP, Oracle (BEA)

● Timeline

● Spec as been in development for approx 2

years

● Contributing Members invited Aug 07

● Approach

● Standardizing existing ECM

implementations

● Minimizing initial scope

● For broad acceptance

● Successful Vendor Interoperability

Workshop

● All 7 vendors● Contributing Members invited Aug 07

● Draft Spec Submitted to OASIS 10th Sept

2008

● Public draft (1.0cd04) on October 23rd

● All 7 vendors

● CMIS Providers and Clients Tested

● REST and Web Services Protocol Bindings

Ratified Standard 1.0 on early 2010

Time to learn!

Page 9: Cmis Virtual Training  Webinar 24 Nov09

CMIS Use CasesCMIS Use Cases

● In Scope:

● Collaborative Content Creation● Authentication, Checkin/out, Version Control

● Portals● Browsing, properties, indexing, search

● Mashups● URL addressability, properties

● Content as a Service

● Repository agnostic interface for building

● Not In Scope for V1:

● Records Management & Compliance● Retention schedules, classification, legal holds

● Digital Asset Management● Renditions, streaming

● Web Content Management● Templates, staging, preview, deployment . . .

● Subscription/Notification Services● Event triggers● Repository agnostic interface for building

content centric business applications

● Archival Applications● Properties, indexing and search

● Compound Documents● Relationships

● Electronic Legal Discovery

● Versioning, properties, indexing, search

CMIS is not meant to prescribe, define or expose ALL features provided by proprietary ECM systems

Page 10: Cmis Virtual Training  Webinar 24 Nov09

CMIS & Other StandardsCMIS & Other Standards

● Why not using an existing standard?

● WebDAV

● No types and properties

● No Query

● No relationships

● Tied to HTTP

● JCR-170/283

● Java Only

● Not backed by the majors

● Too prescriptive● Tied to HTTP

● Atom Publishing Protocol (APP)

● HTTP and resource specific

● Note: CMIS builds on APP conventions

● Too prescriptive

•Requires changes to core ECM capabilities to support specific features and models

● Not service oriented

•Requires persistent connections

•Unsuited to Mashups

Page 11: Cmis Virtual Training  Webinar 24 Nov09

Alfresco CMIS Strategy

● Strategic investment on Open Standards

● Full CMIS 1.0cd04 support released

http://www.alfresco.com/media/releases/2009/11/cmis_public_review/

● Up and running at

http://cmis.alfresco.comhttp://cmis.alfresco.com

● Get it at http://wiki.alfresco.com/wiki/Download_Community_Edition

● Apache Chemistry

● TCK Contribution

● 2 Committers (Dave Caruana, Chief Architect, and the speaker)

Page 12: Cmis Virtual Training  Webinar 24 Nov09

Alfresco CMIS Implementation

Alfresco AtomPub

TCK Alfresco

HEAD is

CMIS 0.70

compliant

TCK

contributed

to Apache

Chemistry

Page 13: Cmis Virtual Training  Webinar 24 Nov09

From a Client’s PerspectiveFrom a Client’s Perspective

● Access to the repository is via a

URI that acts as an end point

● There will generally be a URI for

SOAP Bindings and a different

URI for REST Bindings

● The specifics around how the CMIS REST Binding

CMIS Web Services

Binding

CMIS REST Client CMIS WS Client

Your Favorite CMIS Compliant Repository

● The specifics around how the

client obtains the URI or what

the URI should look like is

outside of the scope of CMIS

Page 14: Cmis Virtual Training  Webinar 24 Nov09

CMIS InteroperabilityCMIS Interoperability

CMIS Content Application

� � �

www.cmisdev.org

Page 15: Cmis Virtual Training  Webinar 24 Nov09

CMIS InteroperabilityCMIS Interoperability

Page 16: Cmis Virtual Training  Webinar 24 Nov09

Specification Overview

● Part I - Encapsulates ECM experience● Defines Domain Model

● Defines Services i.e. interaction with Model

● Common to ECM repositories

● Part II – Map Part I to Protocol Bindings● SOAP / WSDLSOAP / WSDL

•Leverage years of investment in infrastructure/tools

•Service-oriented

•Content Repository orchestration

● REST

•“Web 2.0” stack

•Resource-oriented

•Content syndication / publishing

Page 17: Cmis Virtual Training  Webinar 24 Nov09

AgendaAgenda

● Why CMIS?

● CMIS Data Model

● CMIS Intro Demo

● CMIS Services● CMIS Services

● CMIS Queries

● CMIS Maven Toolkit

● CMIS Binding and tools

● Q & A

Page 18: Cmis Virtual Training  Webinar 24 Nov09

CMIS Domain Model

Page 19: Cmis Virtual Training  Webinar 24 Nov09

CMIS Model details

Object

-Type Id

-Parent

-Display Name

-Abstract

-Queryable

-Controllable

-Fileable

Property

-Property Id

-Display Name

-Type

-Required

-Default Value

-…

*

ACL

ACE

-Principal

-Permissions

-Direct

-Fileable

Rendition

-Kind

-Mime Type

*FolderDocument

-Versionable

-Allow Content

Relationship

-Source Types

-Target Types

Policy

Custom TypeContent Stream RepositoryRepository

Page 20: Cmis Virtual Training  Webinar 24 Nov09

RepositoryRepository

● CMIS is defined around the interactions between a client application and a

single repository

● A repository is a container of objects and has a set of capabilities that they may support.

● A repository allows clients to discover and navigate repository contents by

● Starting at the root directory and drilling down

● Issuing queries against the repository

● A repository provides ways for clients to manipulate contained objects by● A repository provides ways for clients to manipulate contained objects by

● Offering CRUD functionality for the contained objects

● Offering versioning capabilities for the contained objects

● Allowing relationships between objects

● Allowing application of policies to objects.

● Controlling users access to content.

Page 21: Cmis Virtual Training  Webinar 24 Nov09

● Navigation Capabilities

● Get Descendants

● Get Folder Tree

● Object Capabilities

● Content Stream Update Capabilities● None

● PwcOnly

● Anytime

Change Log

● Versioning Capabilities

● PWC Updateable

● PWC Searchable

● All versions searchable

● Query Capabilities

● Basic Query• None

• Metadata only

• Fulltext only

Repository CapabilitiesRepository Capabilities

● Change Log● None

● Object ID only

● All

● Renditions● None

● Read

● Filing Capabilities

● Multi Filing

● Un-Filing

● Version Specific Filing

• Fulltext only

• Both Separate

• Both Together

● Join Capabilities• None

• Inner Only

• Inner and Outer

● ACL Capabilities• None

• Discover

• Manage

Page 22: Cmis Virtual Training  Webinar 24 Nov09

ObjectsObjects

● Objects represent the entities in a repository and have a specific type

● All object types are sub classes of one of the following 4 base types

● Document Objects

● Folder Objects

● Policy Objects

● Relationship Objects

● An Object will have a set of Properties that is defined by its type● An Object will have a set of Properties that is defined by its type

● Every Object should have an immutable Object ID

● The Object ID is assigned by the repository at its creation

● The Object ID should be permanent (unchanged for the lifespan of the object

and never reused).

● An Object may have a URI allowing clients to access it as web resource

● ObjectID and URI syntax are opaque to CMIS

Page 23: Cmis Virtual Training  Webinar 24 Nov09

Object TypesObject Types

● An object type definition identifies the properties in an object and the

cardinality of those properties

● Objects are strongly typed

● If a property not specified in an object’s object-type definition is supplied by an

application, an exception should be thrown.

● Subtypes inherit all properties of their parent types (if the property is ● Subtypes inherit all properties of their parent types (if the property is

not applicable it must show up as not set)

● No support for aspects or Mixins but it has been discussed

● Alfresco 1.0cd04 uses special Policy objects to map Alfresco aspects

CMIS does NOT provide a means for an application to define new object types

Page 24: Cmis Virtual Training  Webinar 24 Nov09

More on Object typesMore on Object types

● The Object Type Defines which operations can

be performed on instances of that type

Document Folder Relationship Policy

maybe no no noVersionable maybe no no no

maybe yes no maybe

maybe maybe no no

Controllable-Policy maybe maybe maybe no

Controllable-ACL maybe maybe maybe no

Versionable

Fileable

Queryable

Page 25: Cmis Virtual Training  Webinar 24 Nov09

PropertiesProperties

● Properties are named but not explicitly ordered

● Properties can be single or multi valued

● Properties are strongly typed

● Properties are either set or not set

● There is no concept of a null value for a single value property● There is no concept of a null value for a single value property

● There is no concept of an empty set for a multi valued property

● A repository should return properties in a consistent order

● Multi valued properties are represented as an ordered list of values

● The ordering of those values should be preserved by the repository

● The values in the list must be of the same type

Page 26: Cmis Virtual Training  Webinar 24 Nov09

Document ObjectsDocument Objects

● Documents represent the entities that are managed in a repository

● The object type definition defines whether they must, may or must not have a

Content Stream

● A document may be associated with zero or more renditions

● Each version of a document is a separate object and will have a

separate object IDseparate object ID

● ID is opaque to CMIS

● Documents can be filed in zero, one or more folder objects

● Unfiling

● Multifiling

● Content stream● A content stream is a binary stream with a mimetype

● A content stream exists only as part of a containing document object.

Page 27: Cmis Virtual Training  Webinar 24 Nov09

RenditionsRenditions

● A document object may have one or more renditions

● Renditions are alternate views of the Content Stream such as previews, PDF

renditions and thumbnails

● It is also possible to have a thumbnail rendition object without content streams

(i.e. folders)

● Renditions attributes include

● Stream ID● Stream ID

● MimeType

● Length – optional

● Title – optional

● Kind – optional (CMIS defines the thumbnail kind)

● Height and Width (should be set if kind == cmis:thumbnail)

● RenditionDocumentId – if present, allows the rendition to be queried as if it were a document

Page 28: Cmis Virtual Training  Webinar 24 Nov09

Folder ObjectsFolder Objects

● Folders are not Multi-filable

● Document object can still appear as multifiled

● The multi-filed folder would need to have an alternate identity for

each location in which it was multifiled

● Deletes of a multifiled folder may have side effects

● Folder Objects do not have a content stream and are not ● Folder Objects do not have a content stream and are not

versionable

● Key Folder properties:

● cmis:allowedChildObjectTypeIds

limits regarding types of objects that can be filed in it

● cmis:path

filesystem like starting from CMIS root

Page 29: Cmis Virtual Training  Webinar 24 Nov09

Relationship ObjectsRelationship Objects

● Assigns a non-invasive two way relationship between two

objects (source and target)

● Manipulating the relationships should not effect any changes to either

the source or target objects.

● Not supported by all repositories

Not queryable nor fileable● Not queryable nor fileable

● Relationships are discovered by looking at the objects that they are

related to

● Cannot have a content stream and not versionable

Page 30: Cmis Virtual Training  Webinar 24 Nov09

Policy ObjectsPolicy Objects

● Administrative Policies are Repository Specific and optional

● Not controllable

● Not versionable

● May be fileable

● Has no content Stream

● The description of the policy is included in the base type and is ● The description of the policy is included in the base type and is

opaque to CMIS (CMIS does not model the behavior of Policies)

● N-N object-policy relationship

● A single Policy Object can be applied to multiple “controllable” objects

● A single “controllable” object can have multiple policy objects applied to it

● In Alfresco CMIS a special policy is used for querying on aspects

Page 31: Cmis Virtual Training  Webinar 24 Nov09

Access ControlAccess Control

● Access control is used to specify who can do what with an object in the

repository (additive rather than restrictive)

● An ACL (Access Control List) is a list of zero or more ACEs

● An ACE (Access Control Entry) contains the following

● Principle – (the who) a Group, User or Role

● List of Permissions (one or more)

● Flag indicating whether or not the permission is applied directly or derived.

● Basic CMIS Permissions include (custom permissions allowed):

● cmis:read

● cmis:write

● cmis:all

● A CMIS repository can have one of the following ACL

Capabilities

● None, Discover, Manage

Page 32: Cmis Virtual Training  Webinar 24 Nov09

Allowable Actions and Allowable Actions and

Permission MappingPermission Mapping

● Object instances in a CMIS repo have a set of

allowable actions depending on

● Permissions that a user has on the object

● Lifecycle state of document● Lifecycle state of document

● CMIS repository must provide a mapping

between each allowable action and the

permissions implied by that allowable action

Page 33: Cmis Virtual Training  Webinar 24 Nov09

AgendaAgenda

● Why CMIS?

● CMIS Data Model

● CMIS Intro Demo

● CMIS Services● CMIS Services

● CMIS Queries

● CMIS Maven Toolkit

● CMIS Binding and tools

● Q & A

Page 34: Cmis Virtual Training  Webinar 24 Nov09

CMIS Intro demoCMIS Intro demo

● Quick tour of the Alfresco CMIS 1.0cd04 Repository

http://cmis.alfresco.com

Page 35: Cmis Virtual Training  Webinar 24 Nov09

AgendaAgenda

● Why CMIS?

● CMIS Data Model

● CMIS Intro Demo

● CMIS Services● CMIS Services

● CMIS Queries

● CMIS Maven Demo

● CMIS Binding and tools

● Q & A

Page 36: Cmis Virtual Training  Webinar 24 Nov09

CMIS ServicesCMIS Services

● CMIS services provide methods that allow a client to:

● Browse the repository

● Inspect Object within the repository

● Act upon the objects in the repository

● Methods provided are split up into 9 distinct services

● Repository - Browse

● Navigation - Browse

● Discovery - Browse

● Object - Inspect/Act

● Versioning - Inspect/Act

● Relationship - Inspect

● Multi-filing - Act

● Policy - Inspect/Act

● ACL - Inspect/Act

Page 37: Cmis Virtual Training  Webinar 24 Nov09

Common Service ElementsCommon Service Elements

● Paging of Results

Allows most methods that return a collection of objects to have those

objects returned in pages.

● The paging allows for the specification of the max items to return and the number of

items to skip.

● The results must include an whether or not there are more results and should indicate

the total number of object in the result set.

● The repository may page results even if paging was not specified in the request.● The repository may page results even if paging was not specified in the request.

● Change Tokens

● CMIS provides for the ability to use a Change Log Token for optimistic locking. If the

repository populates this property then it must be provided as an input parameter for all

update operations.

● An update conflict exception will be thrown if the values do not match.

● ACLs

● Any operations that involve ACLs may take an optional macro cmis:user

Page 38: Cmis Virtual Training  Webinar 24 Nov09

More on servicesMore on services

● Multi repository support

● Except for getRepositories repositoryId is always passed as an input

parameter

● Optional property filters can be used to:

● specify the subset of properties that will be returned for each object

● return Object renditions (see CMIS spec)● return Object renditions (see CMIS spec)

● Optional input parameters can be used to return:

● Relationships an object is participating in [none, source, target, both]

● Policies that are applied to the object [Boolean flag]

● Objects ACLs [Boolean flag]

● Object Allowable Actions [Boolean flag]

Page 39: Cmis Virtual Training  Webinar 24 Nov09

Methods Used For Methods Used For

Browsing The RepositoryBrowsing The Repository

● Repository Services

● getRepositories – get a list of repositories that can be accessed from this service

endpoint.

● getRepositoryInfo – get information about the specified repository

● getTypeChildren, getTypeDescendants – various ways to discover the object types in a

repository

● getTypeDefinition – get the definition (list of properties) of the specified type.

● Navigation Services

● getFolderTree, getDescendants, getChildren – retrieve descendant objects (each one has

slightly different nuances).

● getFolderParent, getObjectParents – retrieve parent folder(s).

● getCheckedoutDocs – retrieve list of checked out documents.

● Discovery Services

● query – execute a CMIS query

● getContentChanges – gets a list of changes to the repository uses change log

token

Page 40: Cmis Virtual Training  Webinar 24 Nov09

Methods Used to Inspect Methods Used to Inspect

ObjectsObjects

● Object Services

● getObject, getObjectByPath – retrieve objects

● getProperties, getAllowableActions, getRenditions – get information about objects

● getContentStream– get content streams

● Versioning Services

● getPropertiesOfLatestVersion, getObjectOfLatestVersion – get information about ● getPropertiesOfLatestVersion, getObjectOfLatestVersion – get information about

latest version of object

● getAllVersions – retrieve version history.

● Relationship Services

● getObjectRelationships– get all of the relationships that an object is a part of

● Policy Services

● getAppliedPolicies– get all of the policies applied to an object

● ACL Services

● getACL– get the permissions associated with an object

Page 41: Cmis Virtual Training  Webinar 24 Nov09

Methods Used to Act Upon Methods Used to Act Upon

ObjectsObjects

● Object Services

● createRelationship, createDocument, createDocumentFromSource, createPolicy, createFolder

– create objects

● updateProperties, moveObject – update objects

● deleteObject, deleteTree – remove objects

● getContentStream, deleteContentStream – update content streams

● Versioning Services

● checkOut, checkIn, cancelCheckOut – control locking/unlocking of an object for the purpose

of updating

● deleteAllVersions – remove version history.

● Milti-Filing Services

● addObjectToFolder, removeObjectFromFolder – file and unfile objects.

● Policy Services

● applyPolicy, removePolicy – apply and remove policies to/from an object

● ACL Services

● applyACL– set the permissions associated with an object

Page 42: Cmis Virtual Training  Webinar 24 Nov09

AgendaAgenda

● Why CMIS?

● CMIS Data Model

● CMIS Intro Demo

● CMIS Services● CMIS Services

● CMIS Queries

● CMIS Maven Toolkit

● CMIS Binding and tools

● Q & A

Page 43: Cmis Virtual Training  Webinar 24 Nov09

CMIS Query

Page 44: Cmis Virtual Training  Webinar 24 Nov09

CMIS QueryCMIS Query

● Spec allows client applications to issue SQL queries against the repository

to search / retrieve objects

● The relational view of a repository exposes a virtual table for each

queryable object type in a repository

● A virtual column is specified for each property defined in the object type definition and

any property defined in any ancestor type but not defined in the object type definition

The value for any property defined in an ancestor type but not in the object type must ● The value for any property defined in an ancestor type but not in the object type must

have the SQL NULL value

● An Object types queryName is the name of the associated virtual table

● A Property’s queryName is the name of the virtual column that represents that Property.

So no INSERT or UPDATE statements plz ☺

CMIS Queries can’t be used to update the repository

Page 45: Cmis Virtual Training  Webinar 24 Nov09

Anatomy of a CMIS QueryAnatomy of a CMIS Query

� SELECT ObjectId, SCORE() AS Relevance, Destination, DepartureDates

/* The SELECT is required and specifies which Virtual Columns (or Properties) will be included in the results */

� FROM TravelBrochure/* The FROM Clause is required and Specifies which Virtual Tables (Or Object

Types) the query will run against */Types) the query will run against */

� WHERE CONTAINS(‘CARIBBEAN CENTRAL AMERICA CRUISE TOUR’) AND ‘2010-1-1’ < ANY DepartureDates

/* The WHERE clause is optional and specifies which constraints the rows returned must satisfy */

� ORDER BY Relevance DESC/* The ORDER BY clause is optional and specifies the order in which the rows must

be returned

Page 46: Cmis Virtual Training  Webinar 24 Nov09

SELECT, FROM and JOIN SELECT, FROM and JOIN

ClausesClauses

● A SELECT Clause must contain one of the following

● A comma separated list of one or more column names (the repository must

include all specified columns in its results)

● A “*” token (the repository must include columns for all single valued

properties and should return all multi-valued properties

● The FROM clause must only include queryNames of queryable ● The FROM clause must only include queryNames of queryable

Object Types

● CMIS Repositories must indicate their level of support using the

capability-join attribute

● Allowed levels of support are [none, inneronly, innerandouter]

Page 47: Cmis Virtual Training  Webinar 24 Nov09

WHERE Clause WHERE Clause

ComparisonsComparisons

● String Values

[NOT] IN, =, <>, [NOT] LIKE

● Numeric Values (Decimal, Integer and DateTime)

[NOT] IN, =, <>, <, >, >=, <=

● Booleans● Booleans

=

● ID

[NOT] IN, =, <>

● URI

[NOT] IN, =, <>, [NOT] LIKE

Page 48: Cmis Virtual Training  Webinar 24 Nov09

WHERE Clause Predicate WHERE Clause Predicate

and Predicate Functionsand Predicate Functions

● ANY predicate

● WHERE “RED” = ANY COLOR

● WHERE ANY COLOR IN (“RED”,”WHITE”,”BLUE”)

● CONTAINS([Qualifier],<full text search>) Function

Result of full text search (returns boolean).

● Can only be anded with other predicates in the WHERE clause.

● Can only occur once in the query. Can only occur once in the query.

● If more than one virtual table is included in the query, the qualifier must specify the

table whose content is being searched.

● SCORE()

Returns the relevance value of the search (0-1).

● Can only be used in conjunction with CONTAINS.

● Can only occur in the SELECT Clause

● Can be aliased in the SELECT Clause

● If not aliased a default alias of SEARCH_SCORE can be used

● Aliased name can be used in ORDER BY clause

Page 49: Cmis Virtual Training  Webinar 24 Nov09

Predicate FunctionsPredicate Functions

● IN_FOLDER([qualifier],<folderID>)

Checks to see if the target object is in the specified folder

● If more than one virtual table is included in the query, the

qualifier must specify the table whose content is being

searched.searched.

● IN_TREE([qualifier],<folderID>)

Checks to see if the target object is in the specified folder

or one of its sub folders

● If more than one virtual table is included in the query, the

qualifier must specify the table whose content is being

searched.

Page 50: Cmis Virtual Training  Webinar 24 Nov09

Example QueriesExample Queries

● SELECT * FROM cmis:document

● SELECT cmis:Name FROM cmis:folder

● SELECT cmis:Name FROM cmis:document WHERE

IN_TREE(‘rootNodeId’)

● SELECT cmis:ObjectId, cmis:ObjectTypeId, cmis:Name

FROM cmis:folderFROM cmis:folder

● Nothing special...It’s just the good old SQL!

Page 51: Cmis Virtual Training  Webinar 24 Nov09

AgendaAgenda

● Why CMIS?

● CMIS Data Model

● CMIS Intro Demo

● CMIS Services● CMIS Services

● CMIS Queries

● CMIS Maven Toolkit

● CMIS Binding and tools

● Q & A

Page 52: Cmis Virtual Training  Webinar 24 Nov09

CMIS Query DemoCMIS Query Demo

� CMIS Maven toolkit

� Available as ready to

install Maven archetype

� Based on CMIS 1.0cd04

� Working against� Working against

http://cmis.alfresco.com

� More details at:

http://wiki.alfresco.com/wiki/CMIS_Maven_Toolkit

52

Page 53: Cmis Virtual Training  Webinar 24 Nov09

CMIS Query demoCMIS Query demo

cmis.alfresco.com

Alfresco CMIS instance

Remote

80

53

cmis-query-webapp

HTTP / AtomPub Local

8081

Browser

HTTP

Page 54: Cmis Virtual Training  Webinar 24 Nov09

AgendaAgenda

● Why CMIS?

● CMIS Data Model

● CMIS Intro Demo

● CMIS Services● CMIS Services

● CMIS Queries

● CMIS Maven Toolkit

● CMIS Binding and tools

● Q & A

Page 55: Cmis Virtual Training  Webinar 24 Nov09

CMIS BindingsCMIS Bindings

● CMIS Provides for REST and SOAP bindings

● Binding specifics:

● Each Binding has a URL entry point

● Authentication

● Service access and interaction● Service access and interaction

● Alfresco also provides a CMIS home page for human

consumption

● CMIS HomePage: http://localhost:8080/alfresco/service/cmis

● REST: http://localhost:8080/alfresco/service/api/repository

● SOAP: http://localhost:8080/alfresco/cmis

Page 56: Cmis Virtual Training  Webinar 24 Nov09

CMIS Binding Comparison

CMIS REST API CMIS Web Services

CMIS REST Client CMIS WS Client

Common

Binding specific

logic

Alfresco Repository

Web Scripts

Apache Abdera

CMIS

Extension

Apache CXF

CMIS to Repository

Model and Services

Mapping

Common

mapping layer

Page 57: Cmis Virtual Training  Webinar 24 Nov09

CMIS SOAP Binding

● WSDL definition…

● XML schema for CMIS Domain Model

● XML schema for Service messages

● Direct exposure of CMIS (Part I) Services

● Generate client API for almost all languages

● WS-Security & Username Token Profile (MUST)● WS-Security & Username Token Profile (MUST)

● WS-I Basic Profile & Basic Security Profile

● MTOM* content transfers

*SOAP Message Transmission Optimization Mechanism

Page 58: Cmis Virtual Training  Webinar 24 Nov09

SOAP Binding WSDLSOAP Binding WSDL

http://cmis.alfresco.com/cmis

Page 59: Cmis Virtual Training  Webinar 24 Nov09

CMIS REST Binding

● ATOM Publishing Protocol

● ATOM syndication format for web feeds (GET)

● Create & update web resources (POST, PUT, DELETE)

● Extension mechanism supported

● CMIS APP extension

● XML Schema for CMIS Domain Model

● New Web Resources / Method mappings● New Web Resources / Method mappings

● Errors are mapped to HTTP Error codes and body of the response

should contain descriptive information

● Service URL is the starting point (as WSDL for WS)

● Single point of contact for starting a stateless conversation

● As per APP, together with a set of objects, it also returns a set of URLs usable by

the client for the next interaction

Page 60: Cmis Virtual Training  Webinar 24 Nov09

Atom Publishing Protocol to

CMIS

Service

Document AtomPub CMIS

Atom

Feed

Atom

Entry

Additional

Atom Feeds

Page 61: Cmis Virtual Training  Webinar 24 Nov09

AtomPub AtomPub

ServiceDocumentServiceDocument

http://cmis.alfresco.com/service/cmis

Page 62: Cmis Virtual Training  Webinar 24 Nov09

Alfresco CMIS bindings

CMIS REST API CMIS Web Services

CMIS REST Client CMIS WS Client

Alfresco Repository

Web Scripts

Apache Abdera

CMIS

Extension

Apache CXF

Page 63: Cmis Virtual Training  Webinar 24 Nov09

CMIS Client ToolingCMIS Client Tooling

● WebServices:

● Generate a client from the WSDL and you’re set!

● AtomPub:

● Apache Chemistry

● Maven AtomPub TCK contributed by Alfresco● Maven AtomPub TCK contributed by Alfresco

● Client APIs still WIP

● CMIS FileshareBrowser (Integrated in Alfresco)

● CMIS Explorer (http://code.google.com/p/cmis-explorer/)

● Flex CMIS Client (http://code.google.com/p/flex-cmis-client/)

● CMIS Maven Toolkit (http://wiki.alfresco.com/wiki/CMIS_Maven_Toolkit)

Page 64: Cmis Virtual Training  Webinar 24 Nov09

CMIS typicalCMIS typical

Use CasesUse Cases

● R2R

● Repository to Repository

● A2R

● Application to Repository

CEVA● CEVA

● Content Enabled Vertical Applications

● Federated Repositories

● Commoditized access to the CLOUD!

Page 65: Cmis Virtual Training  Webinar 24 Nov09

CMIS based integrationsCMIS based integrations

http://www.alfresco.com/products/platform/try/http://www.alfresco.com/products/platform/try/

http://drupal.org/node/144266

http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Alfresco+integration

http://blogs.atlassian.com/developer/2009/06/integrate_confluence_alfresco.html

Page 66: Cmis Virtual Training  Webinar 24 Nov09

Now it’s your turn!

Page 67: Cmis Virtual Training  Webinar 24 Nov09

Next Steps

● Alfresco wiki page on CMIS

● http://wiki.alfresco.com/wiki/CMIS

● Take part in the CMIS Survey

● http://www.surveymonkey.com/s.aspx?sm=qAB9Bir2SCZS2AVhBVMQ8Q_3d_3d

● Download specification

● http://docs.oasis-open.org/cmis/CMIS/v1.0/cd04/cmis-spec-v1.0.html● http://docs.oasis-open.org/cmis/CMIS/v1.0/cd04/cmis-spec-v1.0.html

● Try out CMIS 1.0cd04 Implementation on Alfresco Labs 3.2r2

● http://wiki.alfresco.com/wiki/Download_Community_Edition

● ECM Architect practical CMIS 1.0 Tutorial

● http://ecmarchitect.com/archives/2009/11/23/1094

● CMIS Sample Maven Toolkit

● http://wiki.alfresco.com/wiki/CMIS_Maven_Toolkit

Page 68: Cmis Virtual Training  Webinar 24 Nov09

Any doubt?Any doubt?

Questions...

...and answers ☺

Questions...

68

Page 69: Cmis Virtual Training  Webinar 24 Nov09

Thanks!

● OASIS CMIS standard

● http://www.oasis-open.org/committees/cmis/

● CMIS Quick Reference Card blog posts

● http://oldschooltechie.com/blog/2009/11/23/introduction-cmis

● Apache Chemistry

http://incubator.apache.org/chemistry/● http://incubator.apache.org/chemistry/

● CMIS on Wikipedia

● http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services

● Discuss, propose, contribute!

● http://www.cmisdev.org

● http://www.alfresco.com/about/cmis/