Alfresco CMIS Implementation – Now and Next
While we’re closing the last few tasks for our imminent Alfresco Labs 3.2 release, I thought I’d give another status update on our Draft CMIS Implementation.
Alfresco Labs 3.2 will include our next official CMIS drop. Those of you following SVN HEAD already know we’ve been busy and thanks must go to you for continuing to build great integrations with our CMIS repository and reporting issues, which have now been resolved.
In summary, we offer all mandatory CMIS v0.61 capabilities and most of the optional pieces too. Not just surface capability, but deep compliance of CRUD, type system, versioning, relationships, allowable actions and query for both Web Services and AtomPub bindings all mapped to Alfresco’s underlying Java content services. CMIS bells and whistles such as paging, property filters, include allowable actions and relationships flags are also included. Not only is it complete, it’s solid too, as experienced by an ActiveVOS engineer, who simply commented “Alfresco CMIS Service just works”. We started implementing CMIS back in early 2008. During that time it’s been heavily tested by ourselves and by the wider Alfresco community. On the subject of testing, our CMIS client test harness, which may be used against any CMIS provider, is still growing, and currently contains over 100 tests covering all aspects of the spec including schema validation. The test harness is something I’d like to contribute to Apache Chemistry now I have commit rights.
One feature I’d like to elaborate on is Query. The 3.2 release offers for the first time full CMIS SQL query language capabilities (with the exception of optional Joins) as well as a new Alfresco FTS language which may be embedded in the SQL contains() clause. We provide these new query languages in all Alfresco search APIs, not just via the CMIS bindings. The Alfresco FTS language may be used stand-alone too. We’re excited about this as developers now have simple query languages in their toolbox – think SQL with added multi-valued properties, FTS and hierarchical support. These languages are implementation independent (no Lucene leakage in sight) so it also allows us to evolve the repository query engine in future releases without affecting query clients. More on that later. As an added bonus we’ve also implemented some Alfresco specific query language extensions. Our favorite being the ability to query Alfresco Aspects via CMIS SQL as if they’re were tables, and joining them to Types if required.
In some ways, we’re done implementing the Alfresco CMIS Repository. Of course, the CMIS specification is not yet complete and each week the CMIS TC is busy resolving spec issues. In fact, the spec will soon grow to include namespaces, change log, ACLs and Renditions (note, the CMIS TC is very close to freezing the scope of the spec). As updated spec revisions are released, we’ll keep our CMIS repository in sync, but as of now, we’re complete for v0.61.
Everything shown in the video is catered for in the CMIS specification. When we CMIS enable the document library, teams will be able to collaborate in Alfresco Share sites against content stored in Alfresco, EMC, IBM, MS, Open Text… if we do the job properly, you’ll be able to embed the same document library in your own applications and easily customise it now we’ve dumped the impenetrable JSF for scripting and template languages in SURF. This is definitely something to look forward to.
Back to the present, Alfresco Labs 3.2 is fast approaching. You can keep up-to-date via SVN HEAD and read more details about our implementation and CMIS in general at wiki.alfresco.com/wiki/CMIS.