PLAT-1 CMIS in the Real World

35
CMIS in the “real world” Or “Why bother writing custom APIs when you have standard ones”?

description

This session will provide an overlook of the adoption of CMIS after one year from it’s ratification as OASIS standard. By providing several real life deployment success stories and integration scenarios, we’ll offer a close look to the many practical applications of the standard, especially leveraging the Apache Chemistry OpenCMIS implementation. We will conclude presenting highlights of the Alfresco CMIS strategy and discuss more advanced aspects of our CMIS implementation like performance and compliance.

Transcript of PLAT-1 CMIS in the Real World

Page 1: PLAT-1 CMIS in the Real World

CMIS in the “real world”

Or “Why bother writing custom APIs when you have standard ones”?

Page 2: PLAT-1 CMIS in the Real World

Agenda

How did we get here? •  From Babel to Esperanto •  CMIS quick reference card

How & What can I build? •  Apache Chemistry state of the nation •  What can I do with CMIS? •  Application to Repository (a2r) •  Repository to Repository (r2r)

How people use CMIS? •  CMIS & Alfresco •  a2r CMIS product integrations •  CMIS performances

Demo (s)

Page 3: PLAT-1 CMIS in the Real World

Once upon a time…

Builders of way too many…

Towers of Babel !

Page 4: PLAT-1 CMIS in the Real World

We have a dream!

Page 5: PLAT-1 CMIS in the Real World

Did not take too long to get to…

Late 2007

Initiated by IBM, EMC

& Microsoft

CMIS Technical Committee formed at

OASIS

Oct 2009

1st Public Review

Jan 2010

2nd

Public Review

May 2010

Oct 2008

CMIS V1.0 Published

Sept 2008

CMIS Announced

OASIS approved CMIS as an OASIS Specification on May 1, 2010.

Page 6: PLAT-1 CMIS in the Real World

CMIS ECM Domain Model

or the “Constitution” of ECM

Document •  Content •  Renditions

•  Version History

Folder •  Container •  Hierarchy •  Filing

Relationship •  Source Object •  Target Object

Policy •  Target Object

Described by Type Definitions

     CMIS  Type  defini.ons  

*

Custom Type

Object •  Type Id •  Parent

•  Display Name •  Abstract •  Queryable •  Controllable

Document •  Versionable •  Allow Content

Folder Relationship •  Source Types •  Target Types

Policy

Property •  Property Id •  Display Name

•  Type •  Required

•  Default Value •  …

ACL

ACE •  Principal

•  Permissions •  Direct

Page 7: PLAT-1 CMIS in the Real World

CMIS Cheat Sheet

http://cmis.alfresco.com/cmis-cheatsheet.pdf

Page 8: PLAT-1 CMIS in the Real World

Or would you rather go back to stone age?

Application

Libraries (ORM, connection pools, etc.)

ODBC / JDBC

SQL

Relational DB Content

Repository

CMIS Domain Model

Apache Chemistry

CMIS Bindings

Page 9: PLAT-1 CMIS in the Real World

Nice theory but … Tools anyone?

Page 10: PLAT-1 CMIS in the Real World

Open Source implementations of

•  Apache Chemistry (http://chemistry.apache.org) is the umbrella project for all CMIS related projects within the Apache Software Foundation.

•  Apache Chemistry provides libraries and frameworks for •  Java (Client and Server) •  Python (Client) •  PHP (Client) •  .NET (Client)

Page 11: PLAT-1 CMIS in the Real World

Java OpenCMIS (current version: 0.5.0) •  Mature •  High spec coverage and major testing •  Client API / Server SPI

•  Goodies •  In memory & fileshare test servers •  Swing Workbench •  OSGi bundles

•  OpenCMIS is available •  as source code:

https://svn.apache.org/repos/asf/chemistry/opencmis/trunk/

•  as release package with all dependencies: http://chemistry.apache.org/java/download.html

•  via Maven: http://chemistry.apache.org/java/developing/dev-use-with-maven.html

State of the Nation

Page 12: PLAT-1 CMIS in the Real World

OpenCMIS details

Page 13: PLAT-1 CMIS in the Real World

What does OpenCMIS give me? •  Object oriented Client API •  Ease of use and focus on domain model •  Concept of session (CMIS is stateless)

•  Performance focus •  Caching •  Repository infos •  Type definitions •  AtomPub links •  CMIS objects

•  Compression •  CMIS XML compresses very well

•  Docs & Samples •  http://chemistry.apache.org/java/developing/index.html •  http://svn.apache.org/repos/asf/chemistry/opencmis/trunk/

chemistry-opencmis-samples/

OpenCMIS details

Page 14: PLAT-1 CMIS in the Real World

Python cmislib (current version: 0.4.1) •  Mature, tested against major servers •  Available as egg, zip, tar.gz

PHP lib(current version: unreleased) •  Basic coverage of the spec •  Used in a few productions site & for the Drupal integration

DotCMIS (current version: 0.3) •  Quite mature, good coverage of the spec •  Single DLL •  Requires more testing

Browser binding (experimental on CMIS 1.1 branch)

Other clients

Page 15: PLAT-1 CMIS in the Real World

All nice, but what can I build with CMIS?

Page 16: PLAT-1 CMIS in the Real World

CMIS use cases

Application to repository (A2R) •  ”App uses a content repository to handle content services” •  Neat separation of frontend and content tiers •  Examples: •  Portal (e.g.Liferay) or Intranet (e.g. Drupal, Sharepoint) •  Custom webapp or desktop application (e.g Office apps)

Repository to repository (R2R) •  “This is where content repositories talk directly to each other” •  CMIS is flourishing, easy inter vendor communication •  Examples: •  Legacy Content Migration •  Content Publishing or Archival

Federated repositories •  Mix of the 2 above: application talks to multi repositories

http://wordofpie.com/2009/08/17/three-fundamental-cmis-use-cases/

Page 17: PLAT-1 CMIS in the Real World

CMIS & Alfresco

(Open)CMIS is key to Alfresco strategy •  CMIS client/server enhancements •  Alfresco OpenCMIS Extension •  OpenCMIS Server as of Alfresco 4.0 •  Spring Surf OpenCMIS Client integration

•  Products •  Web Quick Start •  Alfresco iPhone / iPad Mobile App

•  Internal processes •  Team (http://team.alfresco.com) & soon Partner

(http://partners.alfresco.com) based on Drupal Alfresco CMIS integration

CMIS allows seamless integrations with Alfresco •  Social integration (Jive, Liferay, Drupal) •  OpenCMIS clients / product integration (OpenWorkdesk)

Page 18: PLAT-1 CMIS in the Real World

Alfesco OpenCMIS Extension

CMIS Extension for discovering / managing aspects

•  Aspects are an essential tool to model metadata in Alfresco. The CMIS specification does not define aspects or something similar, but it defines several extension points.

•  CMIS extensions are XML fragments placed in different parts of a CMIS object. (CMIS/Atom extensions are not fun to work directly with…)

•  “Alfresco OpenCMIS Extension” seamlessly merges aspect properties with object properties and provides interfaces to get, add and remove aspects.

•  It does that by replacing OpenCMIS' internal object factory with an object factory that is aspect aware.

http://code.google.com/a/apache-extras.org/p/alfresco-opencmis-extension/

Page 19: PLAT-1 CMIS in the Real World

Alfesco OpenCMIS Server

Starting from Alfresco 4.0: •  Alfresco CMIS based on the OpenCMIS server framework •  Why has it been re-implemented? •  OpenCMIS is used by several CMIS repositories. •  One code base for the AtomPub and the Web Services binding

(and the Browser Binding). •  Better CMIS specification compliance. •  Better performance, less memory consumption,

handling of big documents.

What changes? •  Old URLs still valid but deprecated •  Generic clients should not notice differences •  Alfresco Extension keeps on working! •  JSON Browser binding prototype (disabled by default)

Page 20: PLAT-1 CMIS in the Real World

Alfesco iOS Mobile App

iPhone / iPad app for Alfresco 3.4 + (or Team)

•  Heavily CMIS based (+ some custom Webscripts)

•  Initial Implementation of an Objective-C CMIS client

•  Code will be open sourced during DevCon

Features •  Read, open & save documents •  Search documents •  Upload and tag photos / video •  Look for Marc

Page 21: PLAT-1 CMIS in the Real World

Spring Surf (Webscripts) and OpenCMIS

Starting from Alfresco 4.0: •  OpenCMIS client libs available in webscripts •  Use cases •  Repository •  Light Migrations / Synchronization •  Publishing

•  Web Tier •  CMIS Enabled Frontend •  Federated application frontend

How to use it? •  New JavaScript top level object: cmis •  Three connection types: •  Current Alfresco server (uses OpenCMIS local binding if possible) •  Preconfigured connection •  Web script configured connection

Page 22: PLAT-1 CMIS in the Real World

Spring Surf & OpenCMIS

Page 23: PLAT-1 CMIS in the Real World

CMIS vehicle for Social Content

CMIS enables a neat integration of ECM and Social

Social Software

Enterprise

Content

Management collaboration

sharing

following

recommending

commenting

liking Social Content

Management

Discuss… then Capture

Page 24: PLAT-1 CMIS in the Real World

Jive Toolkit

Jive + Alfresco use cases •  Load a document into Alfresco via Jive •  Link to an existing Alfresco document via Jive •  Socialize a document to Jive via Alfresco

Will be available with Jive 5.0. Ask Peter Monks

Jive • Focus on the

community around content

Alfresco • Focus on the

processes around content

Jive Toolkit

Jive Toolkit • Enables both process

and community

Page 25: PLAT-1 CMIS in the Real World

Content socialization

Page 26: PLAT-1 CMIS in the Real World

Architecture

Alfresco   Jive  

LDAP  

REST  (h6ps)  

Page 27: PLAT-1 CMIS in the Real World

Alfresco + Drupal = The Dynamic duo Powerful Presentation Framework

Enterprise Repository Loosely

Coupled

•  Thousands of modules •  Easy to theme •  Fast, efficient development

model

•  Multiple ways to update content •  Robust business process engine •  Extensible content model

Page 28: PLAT-1 CMIS in the Real World

Best of both worlds

Mature integration •  Based on the Chemistry PHP CMIS module •  GA in the Drupal community (http://drupal.org/project/cmis) •  AppNovations Canopy: commercial solution at

http://www.appnovation.com/solution/canopy-drupalalfresco-integrated-solution

•  Used in production sites and Eat your own food: •  team.alfresco.com •  (soon) partners.alfresco.com

Use cases •  Create and persist web content in Alfresco via CMIS Sync •  Attach binary files, created in Alfresco, to Drupal content •  Browse / search CMIS repository from Drupal •  Review and approval publishing workflow in Alfresco

Page 29: PLAT-1 CMIS in the Real World

And Liferay?

Many levels of integration •  UI Integration DocLib portlet

http://wiki.alfresco.com/wiki/Doclib_Portlet

•  DocLib Content only CmisHook in LR 6.0 http://www.liferay.com/web/jonas.yuan/blog/-/blogs/integrating-alfresco-through-cmis-in-liferay

•  DocLib Content + Metadata Multiple CMIS repos in LR 6.1 http://www.liferay.com/web/alexander.chow/blog/-/blogs/7670631

Common integration pattern for Alfresco customers •  Typical Frontend intranet / extranet solution •  Common pitfalls •  No CMIS, totally custom Webscript interface (so 90’s) •  Lack of tuning performance •  No inter tier caching

Page 30: PLAT-1 CMIS in the Real World

Why not CMIS?

Liferay + Alfresco DM (contents) . 6 millions pages view / year. 80.000 bookings per year. 6th biggest turistism portal in the world.

Page 31: PLAT-1 CMIS in the Real World

WeWebU OpenWorkdesk

Content centric business applications suite •  Advanced eFile management •  Advanced BPM capabilities •  Role dependent views on information •  Configuration vs. coding

OpenWorkdesk & Alfresco •  CMIS Adapter •  Web services binding •  Tested w/ Alfresco 3.x and 4.x •  X-Scenario 2 CMIS-Systems

•  Support of OpenLDAP •  Support of Alfresco Aspects via CMIS extension •  Activity •  Support planned for Q1/2010

Page 32: PLAT-1 CMIS in the Real World

OpenWorkdesk architecture

Page 33: PLAT-1 CMIS in the Real World

CMIS usage sheet - Recap

CMIS does •  Offer MCD for ECM •  Aspects targeted for 1.1

•  Provide mature tooling •  Enable separation of

content and web tier •  Simplify multi vendor /

technology integration •  Remove the burden of

custom API maintenance

CMIS does not •  Cover all ECM aspects •  E.g. users or workflow

•  Compare performances of in process integrations

•  Suit for •  Large migrations •  Ultra high performant and

concurrent scenarios •  Work “one size fits all” •  Requires developer

knowledge of the APIs •  Requires performance

tuning

Page 34: PLAT-1 CMIS in the Real World

OpenCMIS design & performance tips

Get only what you need… •  Only ask for the properties

you need! •  Never do perform

“SELECT * FROM …” queries •  Select sensible page sizes

and depths •  Operation Context

…when you need it! •  Tune Sensible caching •  OpenCMIS and DotCMIS

have first-level caching build in. Use it & add your application caching

Tune client… •  Enable HTTP Keep Alive •  Speed up burst of requests

•  Read content streams •  And close them!

•  Use compression for high latency / low bandwidth •  Enable in Session Parameters

…and server! •  Alfresco 4.x OpenCMIS

server faster than 3.4 •  repository-bm module

allow benchmark of •  CMIS Sequential •  CMIS mixed

Page 35: PLAT-1 CMIS in the Real World

Thanks!

Questions?!?