SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
and
      Florian Müller, Software Architect
Agenda


•  A quick CMIS tour
•  Introduction to Apache Chemistry
•  OpenCMIS demos
•  Outlook: CMIS, Apache Chemistry and Alfresco



•  Tech Talk: Alfresco CMIS
  Online webinar, Wednesday, 3 August 2011
Content Management Interoperability Services
    consumer


                   Client



                 read   write

                 Services
               Domain Model
    provider




               Vendor Mapping

                                CMIS lets you read, search, write, update,
                  Content
                                delete, version, control, …
                 Repository     content and metadata!
CMIS Use Cases


                                Content
           Client                             Client
                               Repository



         Content                Content      Content
                                               Content
        Repository             Repository   Repository
                                                 Content
                                              Repository
                                                Repository


  •    Collaborative Content Creation
  •    Portals
  •    Client Application Integration
  •    Mashup
CMIS Base Types

	
  	
  
           Document                      Folder
           •  Content                    •  Container
           •  Renditions                 •  Hierarchy
           •  Version History            •  Filing


                                 Described by
                                Type Definitions

           Relationship                  Policy
           •  Source Object              •  Target Object
           •  Target Object
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
Base Properties

All objects                                      Documents
String!       cmis:name  !                       Boolean!     cmis:isImmutable  !
ID!           cmis:objectId!                     Boolean!     cmis:isLatestVersion!
ID!           cmis:baseTypeId  !                 Boolean!     cmis:isMajorVersion!
ID!           cmis:objectTypeId   !              Boolean!     cmis:isLatestMajorVersion!
String!       cmis:createdBy    !                String!      cmis:versionLabel!
DateTime!     cmis:creationDate!                 ID!          cmis:versionSeriesId !
String!       cmis:lastModifiedBy !              Boolean!     cmis:isVersionSeriesCheckedOut !
DateTime!     cmis:lastModificationDate!         String!      cmis:versionSeriesCheckedOutBy !
String!       cmis:changetoken!                  ID!          cmis:versionSeriesCheckedOutId !
                                                 String!      cmis:checkinComment!
Folders                                          Integer!     cmis:contentStreamLength!
ID!           cmis:parentId!                     String!      cmis:contentStreamMimeType !
String!       cmis:path  !                       String!      cmis:contentStreamFileName   !
ID (multi)!   cmis:allowedChildObjectTypeIds !   ID!          cmis:contentStreamId  !

Relationships                                    Policies
ID!           cmis:sourceId  !                   String!    cmis:policyText   !
ID!           cmis:targetId   !
Content Streams



      Document                 *   Rendition
      •  Mime Type                 •  Kind
      •  Length                    •  Mime Type




              Content Stream
              •  Stream Id

                * Maximum length is repository specific
Access Control



                               ACL
       Object
                               ACE
                               •  Principal
                               •  Permissions
                               •  Direct



       Permissions
       cmis:read
       cmis:write
       cmis:all
       <repository specific>
Document Versioning

                    Document
                                          Repository Vendor May Support
                      V1                  •  Version Specific Folder Filing
                     Minor                •  Query All Versions
                                          •  Create Minor, Major, PWCs
   Version Series




                      V2       checkout
                     Major

                                              PWC

                      V3
                               checkin
                     Major
Policies


 Repository specific Policies



  Retention       Security      …


                                                         Client
                                          ly
                                    app


                Document




                                    * Note: Optional Capability
Change Log


                 Change Events


  Repo            Create   Update   Delete                  Client
          logs                                discover



   Change Event:
   •  Object Id
   •  Change Time
   •  Change Type – created, updated, deleted, security
   •  Properties – for updated events


                                      * Note: Optional Capability
CMIS Query Language

•  SELECT and FROM clauses
   o    Identify which properties from which types to return



•  WHERE clause
   o    Restrict returned rows to those that meet all constraints
   o    Predicates: comparison, in, like, null, any, is null
   o    Function Predicates: contains(), in_folder(), in_tree()
   o    Operators: and, or, not



•  ORDER BY clause
   o    Order results by one or more columns



•  Each Type is projected as a Table
Do You Understand These Queries?

SELECT cmis:name
FROM   cmis:document
WHERE contains('alfresco')



             SELECT     cmis:name, cmis:lastModificationDate
             FROM       cmis:document
             WHERE      cmis:lastModifiedBy = 'admin'
             ORDER BY   cmis:lastModificationDate DESC



    SELECT   cmis:name, cmis:contentStreamLength
    FROM     cmis:document
    WHERE    IN_TREE('<folderObjectId>')
             AND cmis:contentStreamLength > 100000
    ORDER BY cmis:contentStreamLength
CMIS Services

Browse                      Inspect                       Act

Repository                  Object                        Object
-  Get Server Information   - Read Content                - Write Content
-  Get Type Definitions     - Get Properties              - Set Properties
                            - Get ACLs                    - Create Folder / Doc /
                            - Get Allowable Actions       Relation
                                                          - Delete
                                                          -  Move
                                                          -  Set ACLs
Navigation                  Versioning
- Walk Folder / Doc         -  Walk Version History
Hierarchy
- Get Checked-out
                                                          Versioning
                                                          - Check-out / In
                            Relationship                  - Cancel Check-out
                            -  Traverse Relationship(s)   - Delete Version(s)

Discovery
- Issue Query
- Get Change Log            Policy                        Policy
                            -  Get Applied Policies       - Apply / Remove
CMIS Cheat Sheet




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


•  CMIS 1.0 defines two bindings:
  o    AtomPub binding
  o    Web Services binding


•  CMIS 1.1 will add a new binding:
  o    Browser binding (JSON)



•  Don’t bother …
  There are Open Source libraries for that
Apache Chemistry
                          TM




  Open Source implementations of


•  Apache Chemistry is the umbrella project for all CMIS
  related projects within the Apache Software Foundation.

•  Apache Chemistry provides libraries and frameworks for
  Java, Python, PHP and .NET.

•  Website: http://chemistry.apache.org
Main Objective


 Developers should focus on the CMIS domain model!

•  Decreased learning curve: Developers can learn just
  the CMIS domain model and ignore the transport details
  of all the binding implementations.

•  Rapid start. From download to listing the first folder in
  minutes.

•  Be compliant. Chemistry libraries have been tested
  against many, many repositories.
Apache Chemistry


                                Application

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



         ODBC / JDBC                      CMIS Bindings

                                          CMIS Domain
                  SQL
                                            Model

          Relational DB                 Content Repository
Subprojects

•  OpenCMIS (Java, server and client)
   o    very mature
   o    well tested against all major servers


•  cmislib (Python, client)
   o    mature
   o    well tested against most major servers


•  phpclient (PHP, client)
   o    basic specification coverage
   o    used in a few production systems


•  DotCMIS (.NET, client)
   o    an OpenCMIS port (same architecture, similar API)
   o    works against all tested servers but needs more testing
History

May 2009:        Started as an incubator project by
                 Nuxeo and Day (now Adobe)

February 2010:   Metaversant contributed cmislib

February 2010:   Alfresco, OpenText and SAP contributed
                 OpenCMIS

May 2010:        Alfresco contributed phpclient

January 2011:    Alfresco contributed DotCMIS

February 2011:   Graduated to a top level project
OpenCMIS

OpenCMIS consists of a collection of Java libraries,
  frameworks and tools:


•  Client library
•  Server framework
•  Two test repositories (InMemory and FileShare)
•  CMIS Browser (web application, AtomPub only)
•  CMIS Workbench (desktop application for developers)
•  FIT and TCK
Get hold of OpenCMIS

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


•  Last released version is 0.4.0
OpenCMIS Architecture
OpenCMIS Client Library


•  Client API
  o    OO API
                                        You want this API!
  o    Easy to use
  o    Build-in caching


•  Client Binding API
  o    Low-level
  o    Very close to the CMIS specification
  o    More control, less comfort
OpenCMIS Client Interfaces
                                                                                            «loads»




                                                                                                        ObjectId




                                                                                                                                                                              0..n
                               RepositoryInfo                      Rendition         AllowableActions                                       ACL                         PropertyData


                                                                 0..n      0..n
                                                                                                                                             0..n                                           «loads»
                                                                                                                                            ACE

                       Repository                         QueryResult                                  CmisObject                                                         Property
                                                                                                                                      target                 0..n
                                                                                                                                   source


                 «loads»                             «loads»                                      FileableCmisObject
                                 «creates»




SessionFactory         «creates»                Session                           Folder               Document                  Policy               Relationship     0..n
                                                                                                                                                                       0..n

                                                                                                                                          0..n
                                     «loads»

                                                                                                          ContentStream

                       ChangeEvents




                              0..n                                             FolderType             DocumentType           PolicyType             RelationshipType

                           ChangeEvent




                                                                                                                    ObjectType                                         PropertyDefinition
                                                                                                                                                               9..n

                                                                                                                   1        0..n
OpenCMIS Main Client Interfaces

 AllowableActions              ObjectId                             ACL


                                                                    0..n
                                                                    ACE


    Rendition                 CmisObject                         Property
                    0..n                                 0..n


                           FileableCmisObject




                Folder         Document         Policy          Relationship




                             ContentStream
Aspects, Aspects, Aspects

•  CMIS 1.0 has no native support for aspects

•  Secondary types (= aspects) will be in CMIS 1.1

•  Alfresco provides read and write access to aspects and
  aspect properties through CMIS extensions

•  Theoretically, every CMIS client can read and write
  aspects but that is rather troublesome
Alfresco OpenCMIS Extension

•  The Alfresco OpenCMIS Extension transparently adds
  aspect support to OpenCMIS

•  Hosted on Apache Extras (Google Code),
  Apache license:
  http://apache-extras.org/p/alfresco-opencmis-extension

•  See the project page for setup instructions.
  It’s really simple.
OpenCMIS Sessions

•  CMIS is stateless!

•  OpenCMIS introduces a session concept to support caching
   o    It’s all about performance
   o    Reduce the number of calls to the repository

•  OpenCMIS caches:
   o    Repository infos
   o    Type definitions
   o    AtomPub links
   o    CMIS objects
Connect to a repository – Variant 1

// set up session parameters
Map<String, String> parameter = new HashMap<String, String>();

parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameter.put(SessionParameter.ATOMPUB_URL,
                                  "http://cmis.alfresco.com/service/cmis");
parameter.put(SessionParameter.REPOSITORY_ID,
                                  "84ccfe80-b325-4d79-ab4d-080a4bdd045b");

parameter.put(SessionParameter.USER, "admin");
parameter.put(SessionParameter.PASSWORD, "admin");



// create the session
SessionFactory factory = SessionFactoryImpl.newInstance();
Session session = factory.createSession(parameter);
Connect to a repository – Variant 2

// set up session parameters
Map<String, String> parameter = new HashMap<String, String>();

parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameter.put(SessionParameter.ATOMPUB_URL,
                                  "http://cmis.alfresco.com/service/cmis");
parameter.put(SessionParameter.REPOSITORY_ID,
                                  "84ccfe80-b325-4d79-ab4d-080a4bdd045b");

parameter.put(SessionParameter.USER, "admin");
parameter.put(SessionParameter.PASSWORD, "admin");



// get the list of repositories and choose the first one
SessionFactory factory = SessionFactoryImpl.newInstance();

List<Repository> repositories = factory.getRepositories(parameter);
Session session = repositories.get(0).createSession();
Using the Session

RepositoryInfo ri = session.getRepositoryInfo();
String id = ri.getId();
String name = ri.getName();



CmisObject object1 = session.getObject("1234567890");!
CmisObject object2 = session.getObjectByPath("/my/path/doc");!



Folder rootFolder = session.getRootFolder();!
String rootFolderId = rootFolder.getId();!
!
for(CmisObject object: rootFolder.getChildren()) {!
    String name = object.getName();!

     if(object instanceof Document) {!
         Document doc = (Document) object;!
         long size = doc.getContentStreamLength();    !
     }!
}!
CMIS Workbench



 Live samples with the CMIS Workbench
 …
Navigation

import   org.apache.chemistry.opencmis.commons.*;
import   org.apache.chemistry.opencmis.commons.data.*;
import   org.apache.chemistry.opencmis.commons.enums.*;
import   org.apache.chemistry.opencmis.client.api.*;

// get root folder
Folder root = session.getRootFolder();
String rootFolderName = root.getName();

println "Root folder: ${rootFolderName}n"

// print root folder children
for(CmisObject object: root.getChildren()) {

    String name = object.getName();
    String typeId = object.getType().getId();
    String path = object.getPaths().get(0);

    println "${name} t${typeId} t(${path})"


    // get parents
    /*
    for(CmisObject parent: object.getParents()) {
        String parentName = parent.getName();
        println " Parent: ${parentName}"
    }
    */
}
Paging

import org.apache.chemistry.opencmis.commons.*;!
import org.apache.chemistry.opencmis.commons.data.*;!
import org.apache.chemistry.opencmis.commons.enums.*;!
import org.apache.chemistry.opencmis.client.api.*;!
!
Folder root = session.getRootFolder();!
!
printList( root.getChildren() )!
!
//printList( root.getChildren().getPage(3) )!
!
//printList( root.getChildren().skipTo(2) )!
!
//printList( root.getChildren().skipTo(2).getPage(3) )!
!
!
!
void printList(ItemIterable<CmisObject> list) {!
    list.each { println "${it.name} t${it.type.id}" }!
    !
    long numItems = list.getTotalNumItems();!
    boolean hasMore = list.getHasMoreItems();!
    !
    println "--------------------------------------"!
    println "Total number: ${numItems}"!
    println "Has more: ${hasMore}" !
    println "--------------------------------------"!
}!
Properties

import   org.apache.chemistry.opencmis.commons.*;
import   org.apache.chemistry.opencmis.commons.data.*;
import   org.apache.chemistry.opencmis.commons.enums.*;
import   org.apache.chemistry.opencmis.client.api.*;

CmisObject object = session.getObjectByPath("/User Homes/florian/Test Folder/MyText");



for(Property<?> property: object.getProperties()) {

    String propId           =   property.getId();
    String displayName      =   property.getDefinition().getDisplayName();
    String queryName        =   property.getDefinition().getQueryName();
    PropertyType datatype   =   property.getType();
    Object value            =   property.getFirstValue();

    println   "${displayName}: ${value}"
    println   " Data type: ${datatype}"
    println   " Id:          ${propId}"
    println   " Query name: ${queryName}"
    println   ""
}
Content

import org.apache.chemistry.opencmis.commons.*;!
import org.apache.chemistry.opencmis.commons.data.*;!
import org.apache.chemistry.opencmis.commons.enums.*;!
import org.apache.chemistry.opencmis.client.api.*;!
!
CmisObject object = session.getObjectByPath("/User Homes/florian/Test Folder/MyText");!
!
if(!(object instanceof Document)) {!
    throw new Exception("Not a document!");!
}!
!
Document doc = (Document) object;!
!
ContentStream content = doc.getContentStream();!
!
if(content == null) {!
    throw new Exception("Document has no content!");!
}!
!
String filename = content.getFileName();!
String mimeType = content.getMimeType();!
long length = content.getLength();!
InputStream stream = content.getStream();!
!
println "File:       ${filename}"!
println "MIME Type: ${mimeType}"!
println "Size:       ${length} bytes"!
println "Has stream: " + (stream != null)!
!
Query

import   org.apache.chemistry.opencmis.commons.*
import   org.apache.chemistry.opencmis.commons.data.*
import   org.apache.chemistry.opencmis.commons.enums.*
import   org.apache.chemistry.opencmis.client.api.*

String cql = "SELECT cmis:objectId, cmis:name, cmis:contentStreamLength FROM cmis:document";

ItemIterable<QueryResult> results = session.query(cql, false);

//ItemIterable<QueryResult> results = session.query(cql, false).getPage(10);
//ItemIterable<QueryResult> results = session.query(cql, false).skipTo(10).getPage(10);

for(QueryResult hit: results) {
    for(PropertyData<?> property: hit.getProperties()) {

          String queryName = property.getQueryName();
          Object value = property.getFirstValue();

          println "${queryName}: ${value}"
    }

    println "--------------------------------------"
}
Folders

import org.apache.chemistry.opencmis.commons.*;!
import org.apache.chemistry.opencmis.commons.data.*;!
import org.apache.chemistry.opencmis.commons.enums.*;!
import org.apache.chemistry.opencmis.client.api.*;!
!
Folder root = session.getRootFolder();!
!
// create a new folder!
Map<String, Object> properties = new HashMap<String, Object>();!
properties.put("cmis:objectTypeId", "cmis:folder");!
properties.put("cmis:name", "a new folder");!
!
Folder newFolder = root.createFolder(properties);!
!
printProperties(newFolder);!
!
!
// update properties!
Map<String, Object> updateproperties = new HashMap<String, Object>();!
updateproperties.put("cmis:name", "renamed folder");!
!
newFolder.updateProperties(updateproperties);!
!
newFolder.refresh();!
printProperties(newFolder);!
!
!
// delete folder!
newFolder.deleteTree(true, UnfileObject.DELETE, true);!
!
Documents

import   org.apache.chemistry.opencmis.commons.*;
import   org.apache.chemistry.opencmis.commons.data.*;
import   org.apache.chemistry.opencmis.commons.enums.*;
import   org.apache.chemistry.opencmis.commons.impl.dataobjects.*;
import   org.apache.chemistry.opencmis.client.api.*;

Folder root = session.getRootFolder();

// create a new document
String name = "myNewDocument.txt";

Map<String, Object> properties = new HashMap<String, Object>();
properties.put("cmis:objectTypeId", "cmis:document");
properties.put("cmis:name", name);

byte[] content = "Hello World!".getBytes();
InputStream stream = new ByteArrayInputStream(content);
ContentStream contentStream = new ContentStreamImpl(name, content.length, "text/plain", stream);

Document newDoc = root.createDocument(properties, contentStream, VersioningState.MAJOR);


printProperties(newDoc);



// delete document
newDoc.delete(true);



void printProperties(CmisObject object) {
    object.properties.each { println "${it.id}: ${it.firstValue}" }
    println "--------------------------------------"
}
CMIS Outlook

•  The CMIS TC is working on CMIS 1.1

•  CMIS 1.1 adds new features
   o    Type mutability
   o    Browser Binding
   o    Secondary Types
   o    …


•  Release date: 2012???

•  Will it be backwards compatible?
   o    We don’t know yet.
   o    Apache Chemistry will hide binding changes.
Apache Chemistry Outlook



•  Tests and documentation…
  o    Make sure it works with as many CMIS servers and
       clients as possible
  o    Make the usage of Apache Chemistry as simple as possible




•  Apache Chemistry sandboxes
  o    Implementations of CMIS 1.1 features
  o    Feedback for the CMIS TC
Alfresco CMIS Outlook

•  Alfresco 4.x
   o    Switch to the OpenCMIS server framework
   o    Many improvements: speed, memory consumption, compliance
   o    OpenCMIS client libraries are embedded and available in Web Scripts
   o    Have a look: http://cmis.alfresco.com




•  Tech Talk: Alfresco CMIS
  Online webinar, Wednesday, 3 August 2011
   o  Alfresco CMIS mapping
   o  CMIS changes in Alfresco 4.x
   o  CMIS 1.1 browser binding (JSON)
   o  Performance optimization
   o  Whatever you want to talk about…
Questions

Contenu connexe

Tendances

Alfresco Security Best Practices Guide
Alfresco Security Best Practices GuideAlfresco Security Best Practices Guide
Alfresco Security Best Practices GuideToni de la Fuente
 
AWS Direct Connect 및 VPN을 이용한 클라우드 아키텍쳐 설계:: Steve Seymour :: AWS Summit Seou...
AWS Direct Connect 및 VPN을 이용한 클라우드 아키텍쳐 설계:: Steve Seymour :: AWS Summit Seou...AWS Direct Connect 및 VPN을 이용한 클라우드 아키텍쳐 설계:: Steve Seymour :: AWS Summit Seou...
AWS Direct Connect 및 VPN을 이용한 클라우드 아키텍쳐 설계:: Steve Seymour :: AWS Summit Seou...Amazon Web Services Korea
 
Service mesh(istio) monitoring
Service mesh(istio) monitoringService mesh(istio) monitoring
Service mesh(istio) monitoringJeong-Ho Na
 
Oracle Drivers configuration for High Availability, is it a developer's job?
Oracle Drivers configuration for High Availability, is it a developer's job?Oracle Drivers configuration for High Availability, is it a developer's job?
Oracle Drivers configuration for High Availability, is it a developer's job?Ludovico Caldara
 
SAP, 아마존 클라우드에서 어떻게 하면 잘한다고 소문이 날까? AWS 클라우드 환경에서 ISMS-P(정보보호 관리체계) "인싸"가 되는 ...
SAP, 아마존 클라우드에서 어떻게 하면 잘한다고 소문이 날까? AWS 클라우드 환경에서 ISMS-P(정보보호 관리체계) "인싸"가 되는 ...SAP, 아마존 클라우드에서 어떻게 하면 잘한다고 소문이 날까? AWS 클라우드 환경에서 ISMS-P(정보보호 관리체계) "인싸"가 되는 ...
SAP, 아마존 클라우드에서 어떻게 하면 잘한다고 소문이 날까? AWS 클라우드 환경에서 ISMS-P(정보보호 관리체계) "인싸"가 되는 ...Amazon Web Services Korea
 
(SEC323) New: Securing Web Applications with AWS WAF
(SEC323) New: Securing Web Applications with AWS WAF(SEC323) New: Securing Web Applications with AWS WAF
(SEC323) New: Securing Web Applications with AWS WAFAmazon Web Services
 
High-Volume Data Collection and Real Time Analytics Using Redis
High-Volume Data Collection and Real Time Analytics Using RedisHigh-Volume Data Collection and Real Time Analytics Using Redis
High-Volume Data Collection and Real Time Analytics Using Rediscacois
 
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...Amazon Web Services Korea
 
Modern Monitoring [ with Prometheus ]
Modern Monitoring [ with Prometheus ]Modern Monitoring [ with Prometheus ]
Modern Monitoring [ with Prometheus ]Haggai Philip Zagury
 
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018Amazon Web Services Korea
 
AWS Elastic Beanstalk Tutorial | AWS Certification | AWS Tutorial | Edureka
AWS Elastic Beanstalk Tutorial | AWS Certification | AWS Tutorial | EdurekaAWS Elastic Beanstalk Tutorial | AWS Certification | AWS Tutorial | Edureka
AWS Elastic Beanstalk Tutorial | AWS Certification | AWS Tutorial | EdurekaEdureka!
 
Upgrade to IBM z/OS V2.5 technical actions
Upgrade to IBM z/OS V2.5 technical actionsUpgrade to IBM z/OS V2.5 technical actions
Upgrade to IBM z/OS V2.5 technical actionsMarna Walle
 
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...Amazon Web Services Korea
 

Tendances (20)

Alfresco Certificates
Alfresco Certificates Alfresco Certificates
Alfresco Certificates
 
Cisco OpenSOC
Cisco OpenSOCCisco OpenSOC
Cisco OpenSOC
 
Deep Dive on AWS Lambda
Deep Dive on AWS LambdaDeep Dive on AWS Lambda
Deep Dive on AWS Lambda
 
Alfresco tuning part1
Alfresco tuning part1Alfresco tuning part1
Alfresco tuning part1
 
Alfresco Security Best Practices Guide
Alfresco Security Best Practices GuideAlfresco Security Best Practices Guide
Alfresco Security Best Practices Guide
 
AWS Direct Connect 및 VPN을 이용한 클라우드 아키텍쳐 설계:: Steve Seymour :: AWS Summit Seou...
AWS Direct Connect 및 VPN을 이용한 클라우드 아키텍쳐 설계:: Steve Seymour :: AWS Summit Seou...AWS Direct Connect 및 VPN을 이용한 클라우드 아키텍쳐 설계:: Steve Seymour :: AWS Summit Seou...
AWS Direct Connect 및 VPN을 이용한 클라우드 아키텍쳐 설계:: Steve Seymour :: AWS Summit Seou...
 
Service mesh(istio) monitoring
Service mesh(istio) monitoringService mesh(istio) monitoring
Service mesh(istio) monitoring
 
Oracle Drivers configuration for High Availability, is it a developer's job?
Oracle Drivers configuration for High Availability, is it a developer's job?Oracle Drivers configuration for High Availability, is it a developer's job?
Oracle Drivers configuration for High Availability, is it a developer's job?
 
SAP, 아마존 클라우드에서 어떻게 하면 잘한다고 소문이 날까? AWS 클라우드 환경에서 ISMS-P(정보보호 관리체계) "인싸"가 되는 ...
SAP, 아마존 클라우드에서 어떻게 하면 잘한다고 소문이 날까? AWS 클라우드 환경에서 ISMS-P(정보보호 관리체계) "인싸"가 되는 ...SAP, 아마존 클라우드에서 어떻게 하면 잘한다고 소문이 날까? AWS 클라우드 환경에서 ISMS-P(정보보호 관리체계) "인싸"가 되는 ...
SAP, 아마존 클라우드에서 어떻게 하면 잘한다고 소문이 날까? AWS 클라우드 환경에서 ISMS-P(정보보호 관리체계) "인싸"가 되는 ...
 
(SEC323) New: Securing Web Applications with AWS WAF
(SEC323) New: Securing Web Applications with AWS WAF(SEC323) New: Securing Web Applications with AWS WAF
(SEC323) New: Securing Web Applications with AWS WAF
 
Hive
HiveHive
Hive
 
High-Volume Data Collection and Real Time Analytics Using Redis
High-Volume Data Collection and Real Time Analytics Using RedisHigh-Volume Data Collection and Real Time Analytics Using Redis
High-Volume Data Collection and Real Time Analytics Using Redis
 
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
 
Modern Monitoring [ with Prometheus ]
Modern Monitoring [ with Prometheus ]Modern Monitoring [ with Prometheus ]
Modern Monitoring [ with Prometheus ]
 
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 
AWS Elastic Beanstalk Tutorial | AWS Certification | AWS Tutorial | Edureka
AWS Elastic Beanstalk Tutorial | AWS Certification | AWS Tutorial | EdurekaAWS Elastic Beanstalk Tutorial | AWS Certification | AWS Tutorial | Edureka
AWS Elastic Beanstalk Tutorial | AWS Certification | AWS Tutorial | Edureka
 
Upgrade to IBM z/OS V2.5 technical actions
Upgrade to IBM z/OS V2.5 technical actionsUpgrade to IBM z/OS V2.5 technical actions
Upgrade to IBM z/OS V2.5 technical actions
 
AWS Data Collection & Storage
AWS Data Collection & StorageAWS Data Collection & Storage
AWS Data Collection & Storage
 
Amazon S3 Masterclass
Amazon S3 MasterclassAmazon S3 Masterclass
Amazon S3 Masterclass
 
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...
 

En vedette

Sizing your alfresco platform
Sizing your alfresco platformSizing your alfresco platform
Sizing your alfresco platformLuis Cabaceira
 
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
 
Activiti v6 UI (Activiti Community Day Paris 2015)
 Activiti v6 UI (Activiti Community Day Paris 2015)  Activiti v6 UI (Activiti Community Day Paris 2015)
Activiti v6 UI (Activiti Community Day Paris 2015) Joram Barrez
 
Launching Activiti v6 (Activiti Community Day Paris 2015)
Launching Activiti v6 (Activiti Community Day Paris 2015) Launching Activiti v6 (Activiti Community Day Paris 2015)
Launching Activiti v6 (Activiti Community Day Paris 2015) Joram Barrez
 
Intro To Alfresco Part 1
Intro To Alfresco Part 1Intro To Alfresco Part 1
Intro To Alfresco Part 1Jeff Potts
 
Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Toni de la Fuente
 
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
 
CMIS and Apache Chemistry (ApacheCon 2010)
CMIS and Apache Chemistry (ApacheCon 2010) CMIS and Apache Chemistry (ApacheCon 2010)
CMIS and Apache Chemistry (ApacheCon 2010) Florent Guillaume
 
Alfresco As SharePoint Alternative - Architecture Overview
Alfresco As SharePoint Alternative - Architecture OverviewAlfresco As SharePoint Alternative - Architecture Overview
Alfresco As SharePoint Alternative - Architecture OverviewAlfresco Software
 
Scale your Alfresco Solutions
Scale your Alfresco Solutions Scale your Alfresco Solutions
Scale your Alfresco Solutions Alfresco Software
 
Intro to Alfresco for Developers
Intro to Alfresco for DevelopersIntro to Alfresco for Developers
Intro to Alfresco for DevelopersJeff Potts
 
Getting Started with CMIS
Getting Started with CMISGetting Started with CMIS
Getting Started with CMISJeff Potts
 
Alfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Inholland studentendossierAlfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Inholland studentendossierAlfresco Software
 
Alfresco in few points - Search Tutorial
Alfresco in few points - Search TutorialAlfresco in few points - Search Tutorial
Alfresco in few points - Search TutorialPASCAL Jean Marie
 
Alfresco 5.2 REST API
Alfresco 5.2 REST APIAlfresco 5.2 REST API
Alfresco 5.2 REST APIJ V
 
Alfresco In An Hour - Document Management, Web Content Management, and Collab...
Alfresco In An Hour - Document Management, Web Content Management, and Collab...Alfresco In An Hour - Document Management, Web Content Management, and Collab...
Alfresco In An Hour - Document Management, Web Content Management, and Collab...Alfresco Software
 
Total Cost Of Ownership For ECM - Compares Documentum, SharePoint, OpenText a...
Total Cost Of Ownership For ECM - Compares Documentum, SharePoint, OpenText a...Total Cost Of Ownership For ECM - Compares Documentum, SharePoint, OpenText a...
Total Cost Of Ownership For ECM - Compares Documentum, SharePoint, OpenText a...Alfresco Software
 

En vedette (20)

Sizing your alfresco platform
Sizing your alfresco platformSizing your alfresco platform
Sizing your alfresco platform
 
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
 
OpenCMIS Part 1
OpenCMIS Part 1OpenCMIS Part 1
OpenCMIS Part 1
 
Activiti v6 UI (Activiti Community Day Paris 2015)
 Activiti v6 UI (Activiti Community Day Paris 2015)  Activiti v6 UI (Activiti Community Day Paris 2015)
Activiti v6 UI (Activiti Community Day Paris 2015)
 
Launching Activiti v6 (Activiti Community Day Paris 2015)
Launching Activiti v6 (Activiti Community Day Paris 2015) Launching Activiti v6 (Activiti Community Day Paris 2015)
Launching Activiti v6 (Activiti Community Day Paris 2015)
 
Intro To Alfresco Part 1
Intro To Alfresco Part 1Intro To Alfresco Part 1
Intro To Alfresco Part 1
 
Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012
 
Activiti bpm
Activiti bpmActiviti bpm
Activiti bpm
 
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 ...
 
CMIS and Apache Chemistry (ApacheCon 2010)
CMIS and Apache Chemistry (ApacheCon 2010) CMIS and Apache Chemistry (ApacheCon 2010)
CMIS and Apache Chemistry (ApacheCon 2010)
 
Alfresco As SharePoint Alternative - Architecture Overview
Alfresco As SharePoint Alternative - Architecture OverviewAlfresco As SharePoint Alternative - Architecture Overview
Alfresco As SharePoint Alternative - Architecture Overview
 
Spring In Alfresco Ecm
Spring In Alfresco EcmSpring In Alfresco Ecm
Spring In Alfresco Ecm
 
Scale your Alfresco Solutions
Scale your Alfresco Solutions Scale your Alfresco Solutions
Scale your Alfresco Solutions
 
Intro to Alfresco for Developers
Intro to Alfresco for DevelopersIntro to Alfresco for Developers
Intro to Alfresco for Developers
 
Getting Started with CMIS
Getting Started with CMISGetting Started with CMIS
Getting Started with CMIS
 
Alfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Inholland studentendossierAlfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Inholland studentendossier
 
Alfresco in few points - Search Tutorial
Alfresco in few points - Search TutorialAlfresco in few points - Search Tutorial
Alfresco in few points - Search Tutorial
 
Alfresco 5.2 REST API
Alfresco 5.2 REST APIAlfresco 5.2 REST API
Alfresco 5.2 REST API
 
Alfresco In An Hour - Document Management, Web Content Management, and Collab...
Alfresco In An Hour - Document Management, Web Content Management, and Collab...Alfresco In An Hour - Document Management, Web Content Management, and Collab...
Alfresco In An Hour - Document Management, Web Content Management, and Collab...
 
Total Cost Of Ownership For ECM - Compares Documentum, SharePoint, OpenText a...
Total Cost Of Ownership For ECM - Compares Documentum, SharePoint, OpenText a...Total Cost Of Ownership For ECM - Compares Documentum, SharePoint, OpenText a...
Total Cost Of Ownership For ECM - Compares Documentum, SharePoint, OpenText a...
 

Similaire à Apache Chemistry: The Alfresco Open Source Implementation of CMIS

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
 
PLAT-3 CMIS — What’s coming next?
PLAT-3 CMIS — What’s coming next?PLAT-3 CMIS — What’s coming next?
PLAT-3 CMIS — What’s coming next?Alfresco Software
 
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-2 CMIS - What’s coming next?
PLAT-2 CMIS - What’s coming next?PLAT-2 CMIS - What’s coming next?
PLAT-2 CMIS - What’s coming next?Alfresco Software
 
PLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsPLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsAlfresco Software
 
OSCON 2012 MongoDB Tutorial
OSCON 2012 MongoDB TutorialOSCON 2012 MongoDB Tutorial
OSCON 2012 MongoDB TutorialSteven Francia
 
Customising civicrm
Customising civicrmCustomising civicrm
Customising civicrmChris Ward
 
Common MongoDB Use Cases Webinar
Common MongoDB Use Cases WebinarCommon MongoDB Use Cases Webinar
Common MongoDB Use Cases WebinarMongoDB
 
Improving HR Document Availability and Process Workflows with Electronic Imaging
Improving HR Document Availability and Process Workflows with Electronic ImagingImproving HR Document Availability and Process Workflows with Electronic Imaging
Improving HR Document Availability and Process Workflows with Electronic ImagingVerbella CMG
 
How companies use NoSQL and Couchbase
How companies use NoSQL and CouchbaseHow companies use NoSQL and Couchbase
How companies use NoSQL and CouchbaseDipti Borkar
 
PLAT-17 Alfresco iOS Mobile Application Details and Design
PLAT-17 Alfresco iOS Mobile Application Details and DesignPLAT-17 Alfresco iOS Mobile Application Details and Design
PLAT-17 Alfresco iOS Mobile Application Details and DesignAlfresco Software
 
Aws Solution Architecture Associate - summary
Aws Solution Architecture Associate - summaryAws Solution Architecture Associate - summary
Aws Solution Architecture Associate - summaryonoffshake
 
Axilent Tool Talk from Breaking Development 2012
Axilent Tool Talk from Breaking Development 2012Axilent Tool Talk from Breaking Development 2012
Axilent Tool Talk from Breaking Development 2012Loren Davie
 
Common MongoDB Use Cases
Common MongoDB Use CasesCommon MongoDB Use Cases
Common MongoDB Use CasesDATAVERSITY
 
Common MongoDB Use Cases
Common MongoDB Use CasesCommon MongoDB Use Cases
Common MongoDB Use CasesDATAVERSITY
 

Similaire à Apache Chemistry: The Alfresco Open Source Implementation of CMIS (20)

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
 
PLAT-3 CMIS — What’s coming next?
PLAT-3 CMIS — What’s coming next?PLAT-3 CMIS — What’s coming next?
PLAT-3 CMIS — What’s coming next?
 
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-2 CMIS - What’s coming next?
PLAT-2 CMIS - What’s coming next?PLAT-2 CMIS - What’s coming next?
PLAT-2 CMIS - What’s coming next?
 
PLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsPLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in Grails
 
OSCON 2012 MongoDB Tutorial
OSCON 2012 MongoDB TutorialOSCON 2012 MongoDB Tutorial
OSCON 2012 MongoDB Tutorial
 
Customising civicrm
Customising civicrmCustomising civicrm
Customising civicrm
 
Common MongoDB Use Cases Webinar
Common MongoDB Use Cases WebinarCommon MongoDB Use Cases Webinar
Common MongoDB Use Cases Webinar
 
98 poe 2
98 poe 298 poe 2
98 poe 2
 
Improving HR Document Availability and Process Workflows with Electronic Imaging
Improving HR Document Availability and Process Workflows with Electronic ImagingImproving HR Document Availability and Process Workflows with Electronic Imaging
Improving HR Document Availability and Process Workflows with Electronic Imaging
 
How companies use NoSQL and Couchbase
How companies use NoSQL and CouchbaseHow companies use NoSQL and Couchbase
How companies use NoSQL and Couchbase
 
MongoDB for Genealogy
MongoDB for GenealogyMongoDB for Genealogy
MongoDB for Genealogy
 
PLAT-17 Alfresco iOS Mobile Application Details and Design
PLAT-17 Alfresco iOS Mobile Application Details and DesignPLAT-17 Alfresco iOS Mobile Application Details and Design
PLAT-17 Alfresco iOS Mobile Application Details and Design
 
Aws Solution Architecture Associate - summary
Aws Solution Architecture Associate - summaryAws Solution Architecture Associate - summary
Aws Solution Architecture Associate - summary
 
Axilent Tool Talk from Breaking Development 2012
Axilent Tool Talk from Breaking Development 2012Axilent Tool Talk from Breaking Development 2012
Axilent Tool Talk from Breaking Development 2012
 
ITB2016 - ContentBox Modular CMS
ITB2016 - ContentBox Modular CMSITB2016 - ContentBox Modular CMS
ITB2016 - ContentBox Modular CMS
 
CMIS Spec Uncovered
CMIS Spec UncoveredCMIS Spec Uncovered
CMIS Spec Uncovered
 
Common MongoDB Use Cases
Common MongoDB Use CasesCommon MongoDB Use Cases
Common MongoDB Use Cases
 
Common MongoDB Use Cases
Common MongoDB Use CasesCommon MongoDB Use Cases
Common MongoDB Use Cases
 
Web designing syllabus
Web designing syllabusWeb designing syllabus
Web designing syllabus
 

Plus de Alfresco Software

Alfresco Day Benelux Hogeschool Inholland Records Management application
Alfresco Day Benelux Hogeschool Inholland Records Management applicationAlfresco Day Benelux Hogeschool Inholland Records Management application
Alfresco Day Benelux Hogeschool Inholland Records Management applicationAlfresco Software
 
Alfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
Alfresco Day BeNelux: Customer Success Showcase - Saxion HogescholenAlfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
Alfresco Day BeNelux: Customer Success Showcase - Saxion HogescholenAlfresco Software
 
Alfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
Alfresco Day BeNelux: Customer Success Showcase - Gemeente AmsterdamAlfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
Alfresco Day BeNelux: Customer Success Showcase - Gemeente AmsterdamAlfresco Software
 
Alfresco Day BeNelux: The success of Alfresco
Alfresco Day BeNelux: The success of AlfrescoAlfresco Day BeNelux: The success of Alfresco
Alfresco Day BeNelux: The success of AlfrescoAlfresco Software
 
Alfresco Day BeNelux: Customer Success Showcase - Credendo Group
Alfresco Day BeNelux: Customer Success Showcase - Credendo GroupAlfresco Day BeNelux: Customer Success Showcase - Credendo Group
Alfresco Day BeNelux: Customer Success Showcase - Credendo GroupAlfresco Software
 
Alfresco Day BeNelux: Digital Transformation - It's All About Flow
Alfresco Day BeNelux: Digital Transformation - It's All About FlowAlfresco Day BeNelux: Digital Transformation - It's All About Flow
Alfresco Day BeNelux: Digital Transformation - It's All About FlowAlfresco Software
 
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...Alfresco Software
 
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...Alfresco Software
 
Alfresco Day Vienna 2016: Alfrescos neue Rest API
Alfresco Day Vienna 2016: Alfrescos neue Rest APIAlfresco Day Vienna 2016: Alfrescos neue Rest API
Alfresco Day Vienna 2016: Alfrescos neue Rest APIAlfresco Software
 
Alfresco Day Vienna 2016: Support Tools für die Admin-Konsole
Alfresco Day Vienna 2016: Support Tools für die Admin-KonsoleAlfresco Day Vienna 2016: Support Tools für die Admin-Konsole
Alfresco Day Vienna 2016: Support Tools für die Admin-KonsoleAlfresco Software
 
Alfresco Day Vienna 2016: Entwickeln mit Alfresco
Alfresco Day Vienna 2016: Entwickeln mit AlfrescoAlfresco Day Vienna 2016: Entwickeln mit Alfresco
Alfresco Day Vienna 2016: Entwickeln mit AlfrescoAlfresco Software
 
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...Alfresco Software
 
Alfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
Alfresco Day Vienna 2016: Partner Lightning Talk: WesternacherAlfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
Alfresco Day Vienna 2016: Partner Lightning Talk: WesternacherAlfresco Software
 
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...Alfresco Software
 
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novum
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novumAlfresco Day Vienna 2016: Partner Lightning Talk - it-novum
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novumAlfresco Software
 
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...Alfresco Software
 
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...Alfresco Software
 
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - SafranAlfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - SafranAlfresco Software
 
Alfresco Day Warsaw 2016: Advancing the Flow of Digital Business
Alfresco Day Warsaw 2016: Advancing the Flow of Digital BusinessAlfresco Day Warsaw 2016: Advancing the Flow of Digital Business
Alfresco Day Warsaw 2016: Advancing the Flow of Digital BusinessAlfresco Software
 
Alfresco Day Warsaw 2016: Podpis elektroniczny - BMS
Alfresco Day Warsaw 2016: Podpis elektroniczny - BMSAlfresco Day Warsaw 2016: Podpis elektroniczny - BMS
Alfresco Day Warsaw 2016: Podpis elektroniczny - BMSAlfresco Software
 

Plus de Alfresco Software (20)

Alfresco Day Benelux Hogeschool Inholland Records Management application
Alfresco Day Benelux Hogeschool Inholland Records Management applicationAlfresco Day Benelux Hogeschool Inholland Records Management application
Alfresco Day Benelux Hogeschool Inholland Records Management application
 
Alfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
Alfresco Day BeNelux: Customer Success Showcase - Saxion HogescholenAlfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
Alfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
 
Alfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
Alfresco Day BeNelux: Customer Success Showcase - Gemeente AmsterdamAlfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
Alfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
 
Alfresco Day BeNelux: The success of Alfresco
Alfresco Day BeNelux: The success of AlfrescoAlfresco Day BeNelux: The success of Alfresco
Alfresco Day BeNelux: The success of Alfresco
 
Alfresco Day BeNelux: Customer Success Showcase - Credendo Group
Alfresco Day BeNelux: Customer Success Showcase - Credendo GroupAlfresco Day BeNelux: Customer Success Showcase - Credendo Group
Alfresco Day BeNelux: Customer Success Showcase - Credendo Group
 
Alfresco Day BeNelux: Digital Transformation - It's All About Flow
Alfresco Day BeNelux: Digital Transformation - It's All About FlowAlfresco Day BeNelux: Digital Transformation - It's All About Flow
Alfresco Day BeNelux: Digital Transformation - It's All About Flow
 
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
 
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
 
Alfresco Day Vienna 2016: Alfrescos neue Rest API
Alfresco Day Vienna 2016: Alfrescos neue Rest APIAlfresco Day Vienna 2016: Alfrescos neue Rest API
Alfresco Day Vienna 2016: Alfrescos neue Rest API
 
Alfresco Day Vienna 2016: Support Tools für die Admin-Konsole
Alfresco Day Vienna 2016: Support Tools für die Admin-KonsoleAlfresco Day Vienna 2016: Support Tools für die Admin-Konsole
Alfresco Day Vienna 2016: Support Tools für die Admin-Konsole
 
Alfresco Day Vienna 2016: Entwickeln mit Alfresco
Alfresco Day Vienna 2016: Entwickeln mit AlfrescoAlfresco Day Vienna 2016: Entwickeln mit Alfresco
Alfresco Day Vienna 2016: Entwickeln mit Alfresco
 
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
 
Alfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
Alfresco Day Vienna 2016: Partner Lightning Talk: WesternacherAlfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
Alfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
 
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
 
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novum
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novumAlfresco Day Vienna 2016: Partner Lightning Talk - it-novum
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novum
 
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
 
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
 
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - SafranAlfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
 
Alfresco Day Warsaw 2016: Advancing the Flow of Digital Business
Alfresco Day Warsaw 2016: Advancing the Flow of Digital BusinessAlfresco Day Warsaw 2016: Advancing the Flow of Digital Business
Alfresco Day Warsaw 2016: Advancing the Flow of Digital Business
 
Alfresco Day Warsaw 2016: Podpis elektroniczny - BMS
Alfresco Day Warsaw 2016: Podpis elektroniczny - BMSAlfresco Day Warsaw 2016: Podpis elektroniczny - BMS
Alfresco Day Warsaw 2016: Podpis elektroniczny - BMS
 

Dernier

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
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"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
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
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
 
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
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
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
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
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
 

Dernier (20)

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
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
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
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"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
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
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
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
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
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
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
 
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
 

Apache Chemistry: The Alfresco Open Source Implementation of CMIS

  • 1. and Florian Müller, Software Architect
  • 2. Agenda •  A quick CMIS tour •  Introduction to Apache Chemistry •  OpenCMIS demos •  Outlook: CMIS, Apache Chemistry and Alfresco •  Tech Talk: Alfresco CMIS Online webinar, Wednesday, 3 August 2011
  • 3. Content Management Interoperability Services consumer Client read write Services Domain Model provider Vendor Mapping CMIS lets you read, search, write, update, Content delete, version, control, … Repository content and metadata!
  • 4. CMIS Use Cases Content Client Client Repository Content Content Content Content Repository Repository Repository Content Repository Repository •  Collaborative Content Creation •  Portals •  Client Application Integration •  Mashup
  • 5. CMIS Base Types     Document Folder •  Content •  Container •  Renditions •  Hierarchy •  Version History •  Filing Described by Type Definitions Relationship Policy •  Source Object •  Target Object •  Target Object
  • 6. 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
  • 7. Base Properties All objects Documents String! cmis:name  ! Boolean! cmis:isImmutable  ! ID! cmis:objectId! Boolean! cmis:isLatestVersion! ID! cmis:baseTypeId  ! Boolean! cmis:isMajorVersion! ID! cmis:objectTypeId   ! Boolean! cmis:isLatestMajorVersion! String! cmis:createdBy    ! String! cmis:versionLabel! DateTime! cmis:creationDate! ID! cmis:versionSeriesId ! String! cmis:lastModifiedBy ! Boolean! cmis:isVersionSeriesCheckedOut ! DateTime! cmis:lastModificationDate! String! cmis:versionSeriesCheckedOutBy ! String! cmis:changetoken! ID! cmis:versionSeriesCheckedOutId ! String! cmis:checkinComment! Folders Integer! cmis:contentStreamLength! ID! cmis:parentId! String! cmis:contentStreamMimeType ! String! cmis:path  ! String! cmis:contentStreamFileName   ! ID (multi)! cmis:allowedChildObjectTypeIds ! ID! cmis:contentStreamId  ! Relationships Policies ID! cmis:sourceId  ! String! cmis:policyText   ! ID! cmis:targetId   !
  • 8. Content Streams Document * Rendition •  Mime Type •  Kind •  Length •  Mime Type Content Stream •  Stream Id * Maximum length is repository specific
  • 9. Access Control ACL Object ACE •  Principal •  Permissions •  Direct Permissions cmis:read cmis:write cmis:all <repository specific>
  • 10. Document Versioning Document Repository Vendor May Support V1 •  Version Specific Folder Filing Minor •  Query All Versions •  Create Minor, Major, PWCs Version Series V2 checkout Major PWC V3 checkin Major
  • 11. Policies Repository specific Policies Retention Security … Client ly app Document * Note: Optional Capability
  • 12. Change Log Change Events Repo Create Update Delete Client logs discover Change Event: •  Object Id •  Change Time •  Change Type – created, updated, deleted, security •  Properties – for updated events * Note: Optional Capability
  • 13. CMIS Query Language •  SELECT and FROM clauses o  Identify which properties from which types to return •  WHERE clause o  Restrict returned rows to those that meet all constraints o  Predicates: comparison, in, like, null, any, is null o  Function Predicates: contains(), in_folder(), in_tree() o  Operators: and, or, not •  ORDER BY clause o  Order results by one or more columns •  Each Type is projected as a Table
  • 14. Do You Understand These Queries? SELECT cmis:name FROM cmis:document WHERE contains('alfresco') SELECT cmis:name, cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModifiedBy = 'admin' ORDER BY cmis:lastModificationDate DESC SELECT cmis:name, cmis:contentStreamLength FROM cmis:document WHERE IN_TREE('<folderObjectId>') AND cmis:contentStreamLength > 100000 ORDER BY cmis:contentStreamLength
  • 15. CMIS Services Browse Inspect Act Repository Object Object -  Get Server Information - Read Content - Write Content -  Get Type Definitions - Get Properties - Set Properties - Get ACLs - Create Folder / Doc / - Get Allowable Actions Relation - Delete -  Move -  Set ACLs Navigation Versioning - Walk Folder / Doc -  Walk Version History Hierarchy - Get Checked-out Versioning - Check-out / In Relationship - Cancel Check-out -  Traverse Relationship(s) - Delete Version(s) Discovery - Issue Query - Get Change Log Policy Policy -  Get Applied Policies - Apply / Remove
  • 17. CMIS Bindings •  CMIS 1.0 defines two bindings: o  AtomPub binding o  Web Services binding •  CMIS 1.1 will add a new binding: o  Browser binding (JSON) •  Don’t bother … There are Open Source libraries for that
  • 18. Apache Chemistry TM Open Source implementations of •  Apache Chemistry is the umbrella project for all CMIS related projects within the Apache Software Foundation. •  Apache Chemistry provides libraries and frameworks for Java, Python, PHP and .NET. •  Website: http://chemistry.apache.org
  • 19. Main Objective Developers should focus on the CMIS domain model! •  Decreased learning curve: Developers can learn just the CMIS domain model and ignore the transport details of all the binding implementations. •  Rapid start. From download to listing the first folder in minutes. •  Be compliant. Chemistry libraries have been tested against many, many repositories.
  • 20. Apache Chemistry Application Libraries Apache Chemistry (ORM, connection pools, etc.) ODBC / JDBC CMIS Bindings CMIS Domain SQL Model Relational DB Content Repository
  • 21. Subprojects •  OpenCMIS (Java, server and client) o  very mature o  well tested against all major servers •  cmislib (Python, client) o  mature o  well tested against most major servers •  phpclient (PHP, client) o  basic specification coverage o  used in a few production systems •  DotCMIS (.NET, client) o  an OpenCMIS port (same architecture, similar API) o  works against all tested servers but needs more testing
  • 22. History May 2009: Started as an incubator project by Nuxeo and Day (now Adobe) February 2010: Metaversant contributed cmislib February 2010: Alfresco, OpenText and SAP contributed OpenCMIS May 2010: Alfresco contributed phpclient January 2011: Alfresco contributed DotCMIS February 2011: Graduated to a top level project
  • 23. OpenCMIS OpenCMIS consists of a collection of Java libraries, frameworks and tools: •  Client library •  Server framework •  Two test repositories (InMemory and FileShare) •  CMIS Browser (web application, AtomPub only) •  CMIS Workbench (desktop application for developers) •  FIT and TCK
  • 24. Get hold of OpenCMIS 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 •  Last released version is 0.4.0
  • 26. OpenCMIS Client Library •  Client API o  OO API You want this API! o  Easy to use o  Build-in caching •  Client Binding API o  Low-level o  Very close to the CMIS specification o  More control, less comfort
  • 27. OpenCMIS Client Interfaces «loads» ObjectId 0..n RepositoryInfo Rendition AllowableActions ACL PropertyData 0..n 0..n 0..n «loads» ACE Repository QueryResult CmisObject Property target 0..n source «loads» «loads» FileableCmisObject «creates» SessionFactory «creates» Session Folder Document Policy Relationship 0..n 0..n 0..n «loads» ContentStream ChangeEvents 0..n FolderType DocumentType PolicyType RelationshipType ChangeEvent ObjectType PropertyDefinition 9..n 1 0..n
  • 28. OpenCMIS Main Client Interfaces AllowableActions ObjectId ACL 0..n ACE Rendition CmisObject Property 0..n 0..n FileableCmisObject Folder Document Policy Relationship ContentStream
  • 29. Aspects, Aspects, Aspects •  CMIS 1.0 has no native support for aspects •  Secondary types (= aspects) will be in CMIS 1.1 •  Alfresco provides read and write access to aspects and aspect properties through CMIS extensions •  Theoretically, every CMIS client can read and write aspects but that is rather troublesome
  • 30. Alfresco OpenCMIS Extension •  The Alfresco OpenCMIS Extension transparently adds aspect support to OpenCMIS •  Hosted on Apache Extras (Google Code), Apache license: http://apache-extras.org/p/alfresco-opencmis-extension •  See the project page for setup instructions. It’s really simple.
  • 31. OpenCMIS Sessions •  CMIS is stateless! •  OpenCMIS introduces a session concept to support caching o  It’s all about performance o  Reduce the number of calls to the repository •  OpenCMIS caches: o  Repository infos o  Type definitions o  AtomPub links o  CMIS objects
  • 32. Connect to a repository – Variant 1 // set up session parameters Map<String, String> parameter = new HashMap<String, String>(); parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); parameter.put(SessionParameter.ATOMPUB_URL, "http://cmis.alfresco.com/service/cmis"); parameter.put(SessionParameter.REPOSITORY_ID, "84ccfe80-b325-4d79-ab4d-080a4bdd045b"); parameter.put(SessionParameter.USER, "admin"); parameter.put(SessionParameter.PASSWORD, "admin"); // create the session SessionFactory factory = SessionFactoryImpl.newInstance(); Session session = factory.createSession(parameter);
  • 33. Connect to a repository – Variant 2 // set up session parameters Map<String, String> parameter = new HashMap<String, String>(); parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); parameter.put(SessionParameter.ATOMPUB_URL, "http://cmis.alfresco.com/service/cmis"); parameter.put(SessionParameter.REPOSITORY_ID, "84ccfe80-b325-4d79-ab4d-080a4bdd045b"); parameter.put(SessionParameter.USER, "admin"); parameter.put(SessionParameter.PASSWORD, "admin"); // get the list of repositories and choose the first one SessionFactory factory = SessionFactoryImpl.newInstance(); List<Repository> repositories = factory.getRepositories(parameter); Session session = repositories.get(0).createSession();
  • 34. Using the Session RepositoryInfo ri = session.getRepositoryInfo(); String id = ri.getId(); String name = ri.getName(); CmisObject object1 = session.getObject("1234567890");! CmisObject object2 = session.getObjectByPath("/my/path/doc");! Folder rootFolder = session.getRootFolder();! String rootFolderId = rootFolder.getId();! ! for(CmisObject object: rootFolder.getChildren()) {! String name = object.getName();! if(object instanceof Document) {! Document doc = (Document) object;! long size = doc.getContentStreamLength(); ! }! }!
  • 35. CMIS Workbench Live samples with the CMIS Workbench …
  • 36. Navigation import org.apache.chemistry.opencmis.commons.*; import org.apache.chemistry.opencmis.commons.data.*; import org.apache.chemistry.opencmis.commons.enums.*; import org.apache.chemistry.opencmis.client.api.*; // get root folder Folder root = session.getRootFolder(); String rootFolderName = root.getName(); println "Root folder: ${rootFolderName}n" // print root folder children for(CmisObject object: root.getChildren()) { String name = object.getName(); String typeId = object.getType().getId(); String path = object.getPaths().get(0); println "${name} t${typeId} t(${path})" // get parents /* for(CmisObject parent: object.getParents()) { String parentName = parent.getName(); println " Parent: ${parentName}" } */ }
  • 37. Paging import org.apache.chemistry.opencmis.commons.*;! import org.apache.chemistry.opencmis.commons.data.*;! import org.apache.chemistry.opencmis.commons.enums.*;! import org.apache.chemistry.opencmis.client.api.*;! ! Folder root = session.getRootFolder();! ! printList( root.getChildren() )! ! //printList( root.getChildren().getPage(3) )! ! //printList( root.getChildren().skipTo(2) )! ! //printList( root.getChildren().skipTo(2).getPage(3) )! ! ! ! void printList(ItemIterable<CmisObject> list) {! list.each { println "${it.name} t${it.type.id}" }! ! long numItems = list.getTotalNumItems();! boolean hasMore = list.getHasMoreItems();! ! println "--------------------------------------"! println "Total number: ${numItems}"! println "Has more: ${hasMore}" ! println "--------------------------------------"! }!
  • 38. Properties import org.apache.chemistry.opencmis.commons.*; import org.apache.chemistry.opencmis.commons.data.*; import org.apache.chemistry.opencmis.commons.enums.*; import org.apache.chemistry.opencmis.client.api.*; CmisObject object = session.getObjectByPath("/User Homes/florian/Test Folder/MyText"); for(Property<?> property: object.getProperties()) { String propId = property.getId(); String displayName = property.getDefinition().getDisplayName(); String queryName = property.getDefinition().getQueryName(); PropertyType datatype = property.getType(); Object value = property.getFirstValue(); println "${displayName}: ${value}" println " Data type: ${datatype}" println " Id: ${propId}" println " Query name: ${queryName}" println "" }
  • 39. Content import org.apache.chemistry.opencmis.commons.*;! import org.apache.chemistry.opencmis.commons.data.*;! import org.apache.chemistry.opencmis.commons.enums.*;! import org.apache.chemistry.opencmis.client.api.*;! ! CmisObject object = session.getObjectByPath("/User Homes/florian/Test Folder/MyText");! ! if(!(object instanceof Document)) {! throw new Exception("Not a document!");! }! ! Document doc = (Document) object;! ! ContentStream content = doc.getContentStream();! ! if(content == null) {! throw new Exception("Document has no content!");! }! ! String filename = content.getFileName();! String mimeType = content.getMimeType();! long length = content.getLength();! InputStream stream = content.getStream();! ! println "File: ${filename}"! println "MIME Type: ${mimeType}"! println "Size: ${length} bytes"! println "Has stream: " + (stream != null)! !
  • 40. Query import org.apache.chemistry.opencmis.commons.* import org.apache.chemistry.opencmis.commons.data.* import org.apache.chemistry.opencmis.commons.enums.* import org.apache.chemistry.opencmis.client.api.* String cql = "SELECT cmis:objectId, cmis:name, cmis:contentStreamLength FROM cmis:document"; ItemIterable<QueryResult> results = session.query(cql, false); //ItemIterable<QueryResult> results = session.query(cql, false).getPage(10); //ItemIterable<QueryResult> results = session.query(cql, false).skipTo(10).getPage(10); for(QueryResult hit: results) { for(PropertyData<?> property: hit.getProperties()) { String queryName = property.getQueryName(); Object value = property.getFirstValue(); println "${queryName}: ${value}" } println "--------------------------------------" }
  • 41. Folders import org.apache.chemistry.opencmis.commons.*;! import org.apache.chemistry.opencmis.commons.data.*;! import org.apache.chemistry.opencmis.commons.enums.*;! import org.apache.chemistry.opencmis.client.api.*;! ! Folder root = session.getRootFolder();! ! // create a new folder! Map<String, Object> properties = new HashMap<String, Object>();! properties.put("cmis:objectTypeId", "cmis:folder");! properties.put("cmis:name", "a new folder");! ! Folder newFolder = root.createFolder(properties);! ! printProperties(newFolder);! ! ! // update properties! Map<String, Object> updateproperties = new HashMap<String, Object>();! updateproperties.put("cmis:name", "renamed folder");! ! newFolder.updateProperties(updateproperties);! ! newFolder.refresh();! printProperties(newFolder);! ! ! // delete folder! newFolder.deleteTree(true, UnfileObject.DELETE, true);! !
  • 42. Documents import org.apache.chemistry.opencmis.commons.*; import org.apache.chemistry.opencmis.commons.data.*; import org.apache.chemistry.opencmis.commons.enums.*; import org.apache.chemistry.opencmis.commons.impl.dataobjects.*; import org.apache.chemistry.opencmis.client.api.*; Folder root = session.getRootFolder(); // create a new document String name = "myNewDocument.txt"; Map<String, Object> properties = new HashMap<String, Object>(); properties.put("cmis:objectTypeId", "cmis:document"); properties.put("cmis:name", name); byte[] content = "Hello World!".getBytes(); InputStream stream = new ByteArrayInputStream(content); ContentStream contentStream = new ContentStreamImpl(name, content.length, "text/plain", stream); Document newDoc = root.createDocument(properties, contentStream, VersioningState.MAJOR); printProperties(newDoc); // delete document newDoc.delete(true); void printProperties(CmisObject object) { object.properties.each { println "${it.id}: ${it.firstValue}" } println "--------------------------------------" }
  • 43. CMIS Outlook •  The CMIS TC is working on CMIS 1.1 •  CMIS 1.1 adds new features o  Type mutability o  Browser Binding o  Secondary Types o  … •  Release date: 2012??? •  Will it be backwards compatible? o  We don’t know yet. o  Apache Chemistry will hide binding changes.
  • 44. Apache Chemistry Outlook •  Tests and documentation… o  Make sure it works with as many CMIS servers and clients as possible o  Make the usage of Apache Chemistry as simple as possible •  Apache Chemistry sandboxes o  Implementations of CMIS 1.1 features o  Feedback for the CMIS TC
  • 45. Alfresco CMIS Outlook •  Alfresco 4.x o  Switch to the OpenCMIS server framework o  Many improvements: speed, memory consumption, compliance o  OpenCMIS client libraries are embedded and available in Web Scripts o  Have a look: http://cmis.alfresco.com •  Tech Talk: Alfresco CMIS Online webinar, Wednesday, 3 August 2011 o  Alfresco CMIS mapping o  CMIS changes in Alfresco 4.x o  CMIS 1.1 browser binding (JSON) o  Performance optimization o  Whatever you want to talk about…