CMIS in the “real world”
Or “Why bother writing custom APIs when you have standard ones”?
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)
Once upon a time…




Builders of way too many…
     Towers of Babel !
We have a dream!
Did not take too long to get to…



  Initiated by
             CMIS Technical
   IBM, EMC
              Committee formed at
  & Microsoft
                                                          CMIS V1.0
                                OASIS
                                  Published
                                                1st Public
     2nd 
                                                 Review
      Public
                    CMIS
                                     Review
                  Announced




  Late
           Sept
      Oct
                 Oct
         Jan
      May
  2007
           2008
     2008
                2009
        2010
      2010


                     OASIS approved CMIS as an OASIS Specification on
                                     May 1, 2010.
or the “Constitution” of ECM 

                  Document                                       Folder
      ACL
         •  Content Object
                     •  Property
                                                              Container
                                •  Type Id
                  •  Property Id
                 •  Renditions•  Parent
         *
        •  Hierarchy
                                                          •  Display Name
     ACE
 •  Principal
              •  Version History Name
                            •  Display                            •  Filing
                                                                 •  Type
                                •  Abstract
                  •  Required
•  Permissions
               •  Queryable
               •  Default Value
    •  Direct
              •  Controllable
                       •  …
                                    Described by
                                   Type Definitions
              Relationship
             Document
                 Folder
               Policy
                                                      Relationship
            Policy
             •  Source Object
             •  Versionable
                          •  •  Target Object
                                                         Source Types
              •  Target Object
           •  Allow Content
                          •  Target Types



                                        Custom Type


                   	
  	
  	
  CMIS	
  Type	
  defini.ons	
  
                  CMIS ECM Domain Model
CMIS Cheat Sheet

http://cmis.alfresco.com/cmis-cheatsheet.pdf
Or would you rather go back to stone age?

                                         Application

        Libraries                                  Apache
                                                  Chemistry
         (ORM, connection pools, etc.)




      ODBC / JDBC                                CMIS Bindings

                                                 CMIS Domain
               SQL
                                                    Model
                                                   Content
      Relational DB
                                                  Repository
Nice theory but … Tools anyone?
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)
State of the Nation
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
OpenCMIS details
OpenCMIS details
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/
Other clients
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)
All nice, but what can I build with CMIS?
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/
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)
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/
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)
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 
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
Spring Surf & OpenCMIS
            
CMIS vehicle for Social Content
                                            Enterprise
                                             Content
                  sharing
                                         Management
           collaboration

                liking         Social
                              Content
         recommending
                            Management
           following

             commenting

         Social
         Software


                    Discuss… then Capture

 CMIS enables a neat integration of ECM and Social
Jive Toolkit


                          Jive Toolkit




  Alfresco              Jive Toolkit             Jive
  • Focus on the        • Enables both process   • Focus on the
    processes around      and community            community around
    content                                        content

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 
Content socialization
Architecture
                REST	
  (h6ps)	
  



 Alfresco	
                          Jive	
  




                    LDAP	
  
Alfresco + Drupal = The Dynamic duo
 Powerful Presentation Framework   Loosely
                                   Coupled          Enterprise Repository




 •  Thousands of modules                     •  Multiple ways to update content
 •  Easy to theme                            •  Robust business process engine
 •  Fast, efficient development              •  Extensible content model
    model
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
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
Why not CMIS?




     Liferay + Alfresco DM (contents) . 6 millions pages view / year.
     80.000 bookings per year. 6th biggest turistism portal in the 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
OpenWorkdesk architecture
CMIS usage sheet - Recap

CMIS does                          CMIS does not
  •  Offer MCD for ECM               •  Cover all ECM aspects
   •    Aspects targeted for 1.1       •    E.g. users or workflow
  •  Provide mature tooling          •  Compare performances
  •  Enable separation of               of in process integrations
     content and web tier            •  Suit for
  •  Simplify multi vendor /           •    Large migrations
     technology integration            •    Ultra high performant and
  •  Remove the burden of                   concurrent scenarios
                                     •  Work “one size fits all”
     custom API maintenance
                                       •    Requires developer
                                            knowledge of the APIs
                                       •    Requires performance
                                            tuning
OpenCMIS design & performance tips
Get only what you need…            Tune client…
  •  Only ask for the properties     •  Enable HTTP Keep Alive
     you need!                         •    Speed up burst of requests
  •  Never do perform                •  Read content streams
     “SELECT * FROM …” queries         •    And close them!
  •  Select sensible page sizes      •  Use compression for high
     and depths                         latency / low bandwidth
  •  Operation Context                 •    Enable in Session Parameters

…when you need it!                 …and server!
  •  Tune Sensible caching           •  Alfresco 4.x OpenCMIS
  •  OpenCMIS and DotCMIS               server faster than 3.4
     have first-level caching        •  repository-bm module
     build in. Use it & add your        allow benchmark of
     application caching               •    CMIS Sequential
                                       •    CMIS mixed
Thanks!

Questions?!?

PLAT-1 CMIS in the Real World

  • 1.
    CMIS in the“real world” Or “Why bother writing custom APIs when you have standard ones”?
  • 2.
    Agenda How did weget 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)
  • 3.
    Once upon atime… Builders of way too many… Towers of Babel !
  • 4.
    We have adream!
  • 5.
    Did not taketoo long to get to… Initiated by CMIS Technical IBM, EMC Committee formed at & Microsoft CMIS V1.0 OASIS Published 1st Public 2nd Review Public CMIS Review Announced Late Sept Oct Oct Jan May 2007 2008 2008 2009 2010 2010 OASIS approved CMIS as an OASIS Specification on May 1, 2010.
  • 6.
    or the “Constitution”of ECM  Document Folder ACL •  Content Object •  Property Container •  Type Id •  Property Id •  Renditions•  Parent * •  Hierarchy •  Display Name ACE •  Principal •  Version History Name •  Display •  Filing •  Type •  Abstract •  Required •  Permissions •  Queryable •  Default Value •  Direct •  Controllable •  … Described by Type Definitions Relationship Document Folder Policy Relationship Policy •  Source Object •  Versionable •  •  Target Object Source Types •  Target Object •  Allow Content •  Target Types Custom Type      CMIS  Type  defini.ons   CMIS ECM Domain Model
  • 7.
  • 8.
    Or would yourather go back to stone age? Application Libraries Apache Chemistry (ORM, connection pools, etc.) ODBC / JDBC CMIS Bindings CMIS Domain SQL Model Content Relational DB Repository
  • 9.
    Nice theory but… Tools anyone?
  • 10.
    Open Source implementationsof •  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)
  • 11.
    State of theNation 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
  • 12.
  • 13.
    OpenCMIS details What doesOpenCMIS 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/
  • 14.
    Other clients 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)
  • 15.
    All nice, butwhat can I build with CMIS?
  • 16.
    CMIS use cases Applicationto 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/
  • 17.
    CMIS & Alfresco (Open)CMISis 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)
  • 18.
    Alfesco OpenCMIS Extension CMISExtension 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/
  • 19.
    Alfesco OpenCMIS Server Startingfrom 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)
  • 20.
    Alfesco iOS MobileApp 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 
  • 21.
    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
  • 22.
    Spring Surf &OpenCMIS 
  • 23.
    CMIS vehicle forSocial Content Enterprise Content sharing Management collaboration liking Social Content recommending Management following commenting Social Software Discuss… then Capture CMIS enables a neat integration of ECM and Social
  • 24.
    Jive Toolkit Jive Toolkit Alfresco Jive Toolkit Jive • Focus on the • Enables both process • Focus on the processes around and community community around content content 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 
  • 25.
  • 26.
    Architecture REST  (h6ps)   Alfresco   Jive   LDAP  
  • 27.
    Alfresco + Drupal= The Dynamic duo Powerful Presentation Framework Loosely Coupled Enterprise Repository •  Thousands of modules •  Multiple ways to update content •  Easy to theme •  Robust business process engine •  Fast, efficient development •  Extensible content model model
  • 28.
    Best of bothworlds 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
  • 29.
    And Liferay? Many levelsof 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
  • 30.
    Why not CMIS? Liferay + Alfresco DM (contents) . 6 millions pages view / year. 80.000 bookings per year. 6th biggest turistism portal in the world.
  • 31.
    WeWebU OpenWorkdesk Content centricbusiness 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
  • 32.
  • 33.
    CMIS usage sheet- Recap CMIS does CMIS does not •  Offer MCD for ECM •  Cover all ECM aspects •  Aspects targeted for 1.1 •  E.g. users or workflow •  Provide mature tooling •  Compare performances •  Enable separation of of in process integrations content and web tier •  Suit for •  Simplify multi vendor / •  Large migrations technology integration •  Ultra high performant and •  Remove the burden of concurrent scenarios •  Work “one size fits all” custom API maintenance •  Requires developer knowledge of the APIs •  Requires performance tuning
  • 34.
    OpenCMIS design &performance tips Get only what you need… Tune client… •  Only ask for the properties •  Enable HTTP Keep Alive you need! •  Speed up burst of requests •  Never do perform •  Read content streams “SELECT * FROM …” queries •  And close them! •  Select sensible page sizes •  Use compression for high and depths latency / low bandwidth •  Operation Context •  Enable in Session Parameters …when you need it! …and server! •  Tune Sensible caching •  Alfresco 4.x OpenCMIS •  OpenCMIS and DotCMIS server faster than 3.4 have first-level caching •  repository-bm module build in. Use it & add your allow benchmark of application caching •  CMIS Sequential •  CMIS mixed
  • 35.