First look: Alfresco

I took a first look at Alfresco tonight. Alfresco is an open source content management system created by one of the founders of Documentum. Currently it is pure document management. If you are familiar with Documentum, it is like having the Content Server and Webtop. (It may be tempting to further compare the two. One look at the roadmap shows that may someday be an apples-to-apples comparison, but for now, Alfresco offers only a small subset of Documentum’s offering).

Install was a breeze

I used the Tomcat 5.5.9/Alfresco 1.0 all-in-one bundle. The biggest challenge of the install was remembering what my MySQL root password was. After that it was smooth sailing. I started up the server, hit the URL, and hacked around for a few minutes before starting a quick runthrough of the tutorial.

Tutorial highlights promising features

Alfresco provides a short tutorial on their download page that takes you through the basics of creating “spaces” (their name for folders), routing documents through simple workflows, creating users, and checking content in and out of the repository.

Overall I liked the interface of the web client. It was clean and intuitive. There’s a heavy reliance on icons, though, and while many are intuitive, you’ll find yourself using “tooltips” for a bit before you become familiar with their meaning.

The Documentum WDK heritage shows in the interface but I think the UI is much, much more attractive than Documentum’s Webtop client, even considering the major progress Documentum’s made in the 5.3 sp1 release.

Being able to define content rules that fire when content comes into and out of a folder (“space”) is nice. You can use content rules to do things like move documents to specific spaces, kick off a simple workflow, and transform content from one format to another. The rules are defined through an easy-to-use wizard interface.

I wonder whether non-technical users will be able to grasp the concept of “aspects” or not. Aspects provide a way to add a set of functionality to a piece of content. For example, if you want to track versions on a piece of content you add the “Versionable” aspect to it. You can do this through a content rule or by manually running an action on the content. There are a few other out-of-the-box aspects. You can add additional aspects through customization.

Alfresco’s approach of using simple, declarative workflows makes it easy for non-technical users to set up simple processes on their own but implementing a process of even moderate complexity would be painful. For that you’d probably want to use a “real” workflow engine. The “Enterprise” version hooks into JBoss’ BPEL solution, for example. Hopefully that’s something they’ll quickly move down into the “Open” version.

The Lucene-powered search was fast and efficient. Granted, my repository is tiny. Content was indexed as soon as I added it to the repository–content indexing requests get queued and processed rather than by a batch indexing process. I read in the forum that there was a problem indexing PowerPoint. I didn’t check to see if it was fixed in the release I looked at or not.

Categories can also help users find content. You can define a hierarchical taxonomy using the Category Manager and then tag content with it. When you search, you can then restrict search results to specific categories. And, if you search for a parent category, any content tagged with a descendent category will also be returned. That will come in handy.

Working with the repository

You can get content in and out of the repository via WebDAV, CIFS/SMB (mounting a Windows or Linux share drive), FTP, or the Alfresco web client. All of these worked fine out-of-the-box on my Windows XP machine except for CIFS. To get it working I had to do a minor tweak to the file-servers.xml file per the README which was no big deal (I specified a domain in the CIFS Server section).

Digging deeper

After working through the tutorial I was ready to dig in and get my hands dirty. Maybe create a custom type or two, add some security, make a few calls to the Alfresco API, and then try out a couple of user interface customizations. That’s when I hit the inflection point on the learning curve.

I found some help on custom types in the forums–I’ll circle back and do that when I have more time. Essentially you define your models via XML that conforms to a specific schema, and you register those content types with Alfresco in a config file. Alfresco loads the registered content types when it starts up. Maybe some day there’ll be a UI for this.

Security looks like it may be a bit more involved. The first thing you have to do is understand the Acegi Security System for Spring. Guess I’ll add that to the (bottom of the) list.

From an API standpoint there are a couple of choices: Java or Web Services. With the Java option you can use the Alfresco Services API or the JCR (JSR-170 level 1) API. I’ve downloaded the source and bookmarked the Javadocs. Tomorrow or some time next week I’ll fire up Eclipse and see if I can talk to the repository.