Download - OpenCMIS Part 1

Transcript
Page 1: OpenCMIS Part 1

1

OpenCMIS Introduction

Florian MüllerSoftware Architect, Alfresco

twitter: @florian_mueller

Page 2: OpenCMIS Part 1

2

OpenCMIS

• OpenCMIS is a sub-project of

• Apache Chemistry is an umbrella project for CMIS implementations

• Java• Python• PHP

Server and client implementation of the CMIS specification

Page 3: OpenCMIS Part 1

3

OpenCMIS goals

• OpenCMIS hides the bindings and provides binding agnostic APIs and SPIs

• OpenCMIS adds a lot of convenience

Developers should focus on the domain model!

Page 4: OpenCMIS Part 1

4

Current state

• OpenCMIS has contributors from Alfresco, Open Text, SAP and Nuxeo

• OpenCMIS 0.1.0 has been released in September

• The code is pretty mature and stable and has been tested against all major ECM vendors

• The some areas of client API will be refactored and simplified within the next month

OpenCMIS is an active Open Source project

Page 5: OpenCMIS Part 1

5

OpenCMIS Architecture

Server, client, common and test modules

Page 6: OpenCMIS Part 1

6

OpenCMIS Server

• One Servlet per binding that map the requests to an SPI

• Repository vendors have to implement two interfaces

Not our focus today…

… for CMIS connector developers

SOAP AtomPub

CMIS Service Factory

CMIS ServiceCMIS Service

CMIS Service

Page 7: OpenCMIS Part 1

7

OpenCMIS client

• Client API• OO API• Easy to use• Build-in caching

• Client Binding API• Low-level• Very close to the CMIS specification• More control, less comfort

… for CMIS application developers

Page 8: OpenCMIS Part 1

8

Let’s start

• Download it! http://incubator.apache.org/chemistry/opencmis.html

• Use Maven!

• Build the latest and greatest! http://incubator.apache.org/chemistry/opencmis-how-to-build.html

Get hold of the OpenCMIS Jars

<dependency> <groupId>org.apache.chemistry.opencmis</groupId> <artifactId>chemistry-opencmis-client-impl</artifactId> <version>0.1.0-incubating</version></dependency>

Page 9: OpenCMIS Part 1

9

Connect to a repository – Variant 1

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");

SessionFactory factory = SessionFactoryImpl.newInstance();Session session = factory.createSession(parameter);

CMIS is stateless!

OpenCMIS introduces a session concept to support caching.

Page 10: OpenCMIS Part 1

10

Connect to a repository – Variant 2

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");

SessionFactory factory = SessionFactoryImpl.newInstance();List<Repository> repositories = factory.getRepositories(parameter);Session session = repositories.get(0).createSession();

Alfresco only exposes one repository!

This is the simplest way to create a session.

Page 11: OpenCMIS Part 1

11

Walking around

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

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(); }}

Page 12: OpenCMIS Part 1

12

Walking around

ObjectId id = session.createObjectId(“1234567890”):CmisObject object = session.getObject(id);// CmisObject object = session.getObjectByPath(“/my/path/doc”);

String creator = object.getCreatedBy();

Property<?> myProp = object.getProperty(“my:prop”);

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

Page 13: OpenCMIS Part 1

13

Caching

• Repository Info• Retrieved and cached during session creation• Will not be updated during the lifetime of a session

• Type Definitions• Cached whenever a type definition is retrieved –

explicitly or implicitly• Will not be updated during the lifetime of a session

(OpenCMIS can be forced to forget Repository Infos and Type Definitions. That is similar to creating a new session.)

What is cached and when?

Page 14: OpenCMIS Part 1

14

Caching

• CMIS Objects• Object caching is turned on by default• LRU cache with 1000 objects• getObject() might return stale objects

if an old copy is found in the cache

• Refresh objects manually

CmisObject object = session.getObject(id);object.refresh(); object.refreshIfOld(60 * 1000);

What is cached and when?

Page 15: OpenCMIS Part 1

15

Caching

• Turn caching off

session.getDefaultContext().setCacheEnabled(false);

• Turn caching off for one request

OperationContext oc = session.createOperationContext(); oc.setCacheEnabled(false);

CmisObject object = session.getObject(id, oc);

Control the cache!

Page 16: OpenCMIS Part 1

16

CMIS Workbench

A tool for CMIS developers

Page 17: OpenCMIS Part 1

17

Demos

• Children and parents• Paging• Properties• Content• Query• Create, update and delete folders• Create, update and delete documents

Code samples

Page 18: OpenCMIS Part 1

25

CMIS Extensions

• CMIS specifies extension points• Arbitrary data can be attached to CMIS structures• Clients and servers either understand the extension or

ignore them

• Alfresco sends aspect data as CMIS extension• Alfresco will accept aspect data through CMIS extensions

• There will be an Alfresco addition to OpenCMIS that handles aspects

How to get and set of aspect properties?

Page 19: OpenCMIS Part 1

26

Learn Morewiki.alfresco.comforums.alfresco.comtwitter: @AlfrescoECM


Top Related