Monthly Archives: February 2009

Update on Alfresco’s Draft CMIS Implementation

Alfresco’s Draft CMIS Implementation has been publicly available for 4 months. In that time, things have moved on (e.g. the first OASIS CMIS TC face-2-face was held recently), so I thought I’d give an update on where we are with our implementation and what’s happening next.

Before that, I want to thank everyone who has taken the time to download the Alfresco Draft CMIS Implementation, try it out, give us feedback, create examples, provide training, built integrations or just spread the word. This allows us to improve our implementation and also provide further feedback to the CMIS TC, which in turn, helps everyone.

Alfresco Repository as a CMIS Provider

We provide CMIS Web Service and AtomPub bindings on top of the Alfresco Repository. Approximately 80% of the current CMIS specification is covered so you can perform CRUD operations, navigate, query, checkout/in etc. There are still TODOs in the implementation, but we’ll get to those.

Here’s a high level view of the implementation…

Both bindings utilize a CMIS Abstraction API which encapsulates the mapping between CMIS and Alfresco concepts, in particular, the mapping between the CMIS data model and Alfresco’s. Apache CXF has been introduced to support the CMIS Web Service binding, while Alfresco’s own Web Scripts framework is used to implement the CMIS AtomPub binding. We’ve integrated Apache Abdera into the Web Scripts framework to allow native support of AtomPub. CMIS extends AtomPub, and Apache Abdera provides a neat extension capability, so we’ve also built an Abdera CMIS extension for parsing and building CMIS AtomPub documents.

The CMIS query language is implemented on top of the Alfresco query engine (which itself is based on Apache Lucene and Hibernate).

Content that’s managed in Alfresco Explorer and Share can be accessed and modified via the Alfresco Repository CMIS APIs.

CMIS Tests

One of the difficulties of implementing any specification is to ensure you comply with it. Tests obviously help, so we’ve built several CMIS test harnesses to assist:

  • JUnit tests for the CMIS AtomPub binding
  • JUnit tests for the CMIS Web Services binding
  • NUnit tests for the CMIS Web Services binding

The aim is to provide implementation independent tests, so although we use them to test Alfresco’s CMIS  implementation they can also be used to any other implementation. We’ve tried to make it as easy as possible to launch the CMIS AtomPub test harness; every Alfresco CMIS Repository exposes it at http://<host>:<port>/alfresco/service/api/cmis.html…

Enter the Repository CMIS Service Document location and hit ‘Test’.

Alfresco SURF Experiments

One advantage of hooking AtomPub support (and the CMIS extension) into Web Scripts is that the same APIs can be used in SURF UI Components. This allows a SURF component to construct CMIS requests and parse CMIS responses from any CMIS compliant provider using Javascript and Freemarker. In our HEAD branch of the Alfresco SVN repository you’ll find some very simple CMIS Share Dashlets for query and browsing of any CMIS compliant provider.

A simple SURF component for browsing a CMIS compliant Repository…

Community Resources

We continue to update the Alfresco CMIS WIKI which is now taking shape as a ‘go to’ place for all resources related to CMIS.  For example, you’ll find a list of known CMIS provider implementations in development.  There’s also the CMIS Forum for asking questions.

Community Activity

So, what have folks been doing with Alfresco’s Draft CMIS Implementation. My favourites of the day…

1. Joomla Integration…

2. Drupal Integration…

3. Flex Client

4. JavaFX Client

What’s Next?

1. Continue to contribute to the OASIC CMIS TC. There’s now an agressive proposed timeline, so we expect rapid updates to the specification in the short term.

2. Update to the Draft CMIS Implementation in our Labs 3E release which will fix issues raised by early adopters, complete the remaining TODOs and of course, adjust to the latest CMIS specification at the time. Code changes are being made to our HEAD branch in SVN, so if you can’t wait till 3E, you can get work in progress at any time. Some of the short term enhancements include:

  • Deeper CMIS SQL support (sorting, paging, full text language, some joins)
  • Access to custom sub-types and properties across AtomPub and Web Services bindings
  • Allowable Actions support
  • Apache Adbera extension to cover all aspects of CMIS
  • Further coverage in Test Harnesses

3. Expect to see new CMIS client samples ranging from Java code, .NET code, SURF UI Components and potentially Flex too.

4. Development of proprietary extensions for accessing all of Alfresco’s model including Aspects.

5. We hope to host Alfresco’s Draft CMIS Implementation for people to try out without downloading and to execute our CMIS Test Harnesses against other providers.

6. Assist AIIM’s validation of CMIS.

As you can see, there’s a lot going on. Hopefully I’ve given you a picture of where we are and where we’re going. You can keep up-to-date via this blog, twitter, and svn.

Have fun.

UPDATE 2/12/09: Flex Client link updated and screen shot added

UPDATE 2/13/09: Steve Reiner is also building a CMIS Flex Client based on his excellent FlexSpaces