Your SlideShare is downloading. ×
  • Like
FISL: Content Management Primer
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

FISL: Content Management Primer

  • 1,009 views
Published

An introduction to building content applications using the CMIS API. Presented at FISL13.

An introduction to building content applications using the CMIS API. Presented at FISL13.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,009
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
19
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. A Content Management Primer:What I Wish I KnewRichard EsplinCommunity Technology
  • 2. Patterns for Handling Content inApplicationsRichard EsplinCommunity Technology
  • 3. Why Relational Wont Cut ItRichard EsplinCommunity Technology
  • 4. Solving SharePoint Type ProblemsWith An Open Source StackRichard EsplinCommunity Technology
  • 5. Agenda● Making the case for content management● Best practices: the platform approach● Introducing CMIS● Live examples
  • 6. What is Alfresco? Enterprise content management1 platform across cloud, on-premise, or both API for content applications that can run in the cloud, on-premise, or both Content hub for your enterprise tablets cloud on-premise hybrid cloud sync
  • 7. What is “content”?● Data ● Dont mistake Code for Content● Unstructured Data ● Structured data works well in a relational data store, XML store, or key-value store● Unstructured Binary Data ● Unstructured non-binary data works well in source control● Examples: ● Audio, Video, Images, Office Documents, Engineering Files, Reports
  • 8. What is a “content-centric application”?● Applications that access binary files● Files are often generated collaboratively● Often must deal with large numbers of files● May include a mix of structured and unstructured content● May also include business processes
  • 9. A few examples● Web site with catalogs, white papers, and videos● Expense report review and approval● Contract negotiation, creation, and review● Research study authoring● Sales / Marketing collateral creation and communication● Course guide authoring and publishing● Images and media in games● Media curation, transformation, and delivery● Legal compliance and corporate records management
  • 10. Or the business is saying . . .● Ive got a ton of files,● Ive got people that produce and consume them,● Ive got systems that use them,● I want to make it easier! Doug Waldron (cc attribution share-alike) http://www.flickr.com/photos/dougww/922328173/
  • 11. Lets build it ourselves! Pasukaru76 (cc attribution) http://www.flickr.com/photos/pasukaru76/4277763808/
  • 12. DIY approach seems simple . . .● “This is simple stuff.”● Grab a web-application toolkit● Favorite front-end / presentation framework● Store a bunch of files● Relational Database ● Data Model / Metadata ● Comments / Ratings ● Tagging / Categorization
  • 13. File storage options● On disk● Amazon S3 or an internal CAS filer● Source code control repository● XML database● NoSQL document store
  • 14. Relational may not cut it● Good at text and numbers. Not so good at binary.● Good at static table definitions. Not so good at dynamic aspects.● Size limits.● Random seek (streaming).● Search: Some relational databases can index into blobs, but not all.
  • 15. Once files are figured out . . .● Ensure security Execute a workflow Lots●● Transform the content between types of● Schedule a job● Provide shared drive access custom Versioning code!●● Replication● API Access● Integrate with authoring tools
  • 16. The optimistic scenario gobucks2 (cc attribution non-commercial share-alike) http://www.flickr.com/photos/69331170@N00/2854583096
  • 17. The pessimistic scenario http://commons.wikimedia.org/wiki/File:Professor_Lucifer_Butts.gif
  • 18. Evaluating DIY reasonableness● Number and size of documents● Number and concurrency of users● Number and nature of integration points● Business process volatility and complexity● Time and cost of ● Integrating all of these services / sub-systems ● Maintaining all of that code . . . forever● Access to off-the-shelf alternatives
  • 19. Introducing the content repository● Content = a file + metadata● File system ● Content binaries ● Search indexes● Database ● Relations (associations) ● Metadata● Repository ● Abstraction layer
  • 20. Components of content-centric systems● User Interface ● Transformation /● Persistence / Data Model Rendition / Thumbnails / Metadata ● Tagging / Categorization● Business Process / ● Authoring tool integration Workflow ● Remote API● Library Services ● Transfer / Publication (Upload / Download, Versioning, Check-in / ● Comments Check-out) ● Ratings● Security ● Activity Streams /● Search Notification
  • 21. Packaged systems
  • 22. Open source content management● Alfresco● Nuxeo● Knowledge Tree● Magnolia● Apache Jackrabbit● Plone ● (cmis4plone)
  • 23. Best Practice: The Platform Approach
  • 24. Platform approach● The common problems have been solved● Content Platform = Repository + Services ● Find a platform that meets your needs ● Extend the platform with your own business logic ● Customize the UI that the platform provides ● Or write your own front-end using whatever language or framework makes sense● Meets your current needs while providing a roadmap for the future
  • 25. Evaluating content platforms● Agility ● Open Source ● Applicable to a broad set ● Troubleshooting of solutions vs a vertical ● Bug tracking specific solution ● Community ● Scale up, scale down ● Standards compliance● Developer ergonomics ● Easier integration ● Fast and friendly developer model ● Lower migration costs ● Developer familiarity
  • 26. General architectureWeb Applications Knowledge Portals Web Services App CRM Business Server Process Engine Portal ServerVirtual File System High Availability
  • 27. Corporate Systems Desktop WebDAV CMIS CIFS CMIS SharePoint JSR-168 Protocol ConnectorsSocial Media Channels Mobile CMIS WebDAV Open Web APIs Open Web CMIS-based Web Services APIs Alfresco Sync Public Alfresco Cloud CMIS
  • 28. and
  • 29. What is CMIS?● Content Management Interoperability Services● Language-independent, vendor-neutral API for content management● Least-common-denominator (some vendors have extensions) ● CRUD functions for nodes ● Check-in / check-out ● Associations ● Permissions (Access Control Lists) ● Policies ● Queries ● Repository Traversal
  • 30. What is CMIS?● OASIS standard ● 30+ ECM vendors agreed to implement● Two parts ● Interoperability through standard SOAP and AtomPub bindings – JSON bindings coming soon ● SQL-based query language for rich content repositories● Vendor specific extensions may be useful
  • 31. Use cases Content Client Client Repository Content Content Content Content Repository Repository Repository Content Repository Repository● Collaborative content creation ● Workflow & BPM● Portals ● Archival● Client application Integration ● Documents generation● Mashups ● Digital Asset Management (DAM)● Embedded content store ● Web Content Mangaement (WCM)
  • 32. The beauty of CMIS Presentation Tier REST SOAP ? Content Services Tier Enterprise Apps Tier ?
  • 33. Meet CMIS Consumer Client read write Services Domain Model Provider Content Vendor Management Mapping Interoperability Services Content Repository CMIS lets you read, search, write, update, delete, version, control, … content and metadata!
  • 34. Types Document Folder ● Content ● Container ● Renditions ● Hierarchy ● Version History ● Filing Described by Type Definitions Relationship ACL ● Source Object ● Target Object ● Target Object Policy ● Target Object
  • 35. Type Definitions Object Property ● Type Id ● Property Id ● Parent * ● Display Name ● Display Name ● Type ● Queryable ● Required ● Controllable ● Default Value ● … Document Folder Relationship Policy ● Versionable ● Source Types ● Allow Content ● Target Types Custom Type
  • 36. Apache Chemistry● Open Source implementations of CMIS● Umbrella project for all CMIS related projects within the ASF ● OpenCMIS (Java, client and server) ● cmislib (Python, client) ● phpclient (PHP, client) ● DotCMIS (.NET, client)● De-facto reference for CMIS and used by CMIS technical committee to test 1.1 features
  • 37. Examples
  • 38. My setup● Debian Mint Wheezy● OpenJDK 1.6.0_24● Python 2.7.2● Alfresco Community Edition 4.0.d● Open CMIS Workbench 0.7.0
  • 39. CMIS Workbench● Download ● http://chemistry.apache.org/java/developing/tools /dev-tools-workbench.html● Connect to Alfresco ● http://localhost:8080/alfresco/cmisatom● Good tool for figuring out what CMIS can do● Check out the Groovy Console!
  • 40. Python● In the shell: ● Continued:virtualenv . props = {}./bin/easy_install cmislib props["cmis:objectTypeId"]="cmis:document"./bin/python doc = folder.createDocumentFromString( testdoc.txt, props, contentString="Thisfrom cmislib.model import CmisClient is a test showing how to create a textclient = CmisClient( document", contentType=text/plain)"http://192.168.56.1:8080/alfresco/cmisato doc.isCheckedOut()m", "admin", "admin") props = {}repo = client.defaultRepository props[cmis:name] = "test-updated.txt"repo.id doc = doc.updateProperties(props)repo.name doc.namefor (k,v) in doc.delete()repo.getCapabilities().iteritems(): len(folder.getChildren()) print "%s: %s" %(k,v) result = repo.query("select * from cmis:folder where cmis:name like %alf%")for (k,v) in len(result)repo.getRepositoryInfo().iteritems(): for i in result: print "%s: %s" %(k,v) print i.nameroot = repo.getRootFolder() result = repo.query("select * fromroot.name cmis:document where contains(name)")folder = root.createFolder(cmis-demo) for i in result:folder.id print i.namefolder.namefor (k,v) infolder.properties.iteritems(): print "%s: %s" %(k,v)
  • 41. PHP and Drupal● Drupal CMIS Views ● http://drupal.org/project/cmis_views● Built on Drupal CMIS ● http://drupal.org/project/cmis ● Configure a repository in settings.php ● Enable cmis_sync ● Bundles an early release of phplib● Currently read-only● Good for exposing unstructured data alongside a structured web page
  • 42. Where to learn more● cmis.alfresco.com includes a public CMIS server and links to CMIS resources (check out the cheet sheet)● Read the CMIS specification● Apache Chemistry site has clients, lightweight server, documentation● “Getting Started with CMIS” tutorial shows how to use "cURL to hit AtomPub bindings directly"● Slideshare has some CMIS related presentations from Alfresco DevCon here and here
  • 43. Questions?
  • 44. Attribution and Licensing● Copyright 2012, Alfresco Software● Some images used in this presentation are licensed under the Creative Commons by- attribution non-commercial share-alike license.● Original work in this presentation is licensed under the Creative Commons by-attribution license.● Thanks to Jeff Potts for allowing me to base my presentation on his.