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.
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
A simple SURF component for browsing a CMIS compliant Repository...
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.
So, what have folks been doing with Alfresco's Draft CMIS Implementation. My favourites of the day...
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.