Category: Alfresco

Alfresco open source content management

New Tutorial: Getting Started with CMIS

I’ve written a new tutorial on the proposed Content Management Interoperability Services (CMIS) standard called, “Getting Started with CMIS“. The tutorial first takes you through an overview of the specification. Then, I do several examples. The examples start out using curl to make GET, PUT, POST, and DELETE calls against Alfresco to perform CRUD functions on folders, documents, and relationships in the repository. If you’ve been dabbling with CMIS and you’ve struggled to find examples, particularly of POSTs, here you go.

I used Alfresco Community built from head, but yesterday, Alfresco pushed a new Community release that supports CMIS 1.0 Committee Draft 04 so you can download that, use the hosted Alfresco CMIS repository, or spin up an EC2 image (once Luis gets it updated with the new Community release). If you don’t want to use Alfresco you should be able to use any CMIS repository that supports 1.0cd04. I tried some, but not all, of the command-line examples against the Apache Chemistry test server.

Once you’ve felt both the joy and the pain of talking directly to the CMIS AtomPub Binding, I take you through some very short examples using JavaScript and Java. For Java I show Apache Abdera, Apache Chemistry, and the Apache Chemistry TCK.

For the Chemistry TCK stuff, I’m using Alfresco’s CMIS Maven Toolkit which Gabriele Columbro and Richard McKnight put together. That inspired me to do my examples with Maven as well (plus, it’s practical–the Abdera and Chemistry clients have a lot of dependencies, and using Maven meant I didn’t have to chase any of those down).

So take a look at the tutorial, try out the examples with your favorite CMIS 1.0 repo, and let me know what you think. If you like it, pass it along to a friend. As with past tutorials, I’ve released it under Creative Commons Attribution-Share Alike.

[Updated to correct typo with Gabriele’s name. Sorry, Gab!]

Top Five Alfresco Roadmap Takeaways

Now that the last of the Alfresco Fall meetups has concluded in the US, I thought I’d summarize my takeaways. Overall I thought the events were really good. The informative sessions were well-attended. Everyone I talked to was glad they came and left with multiple useful takeaways.

Everyone has their own criteria for usefulness–for these events my personal set of highlights tend to focus on the roadmap. So here are my top five roadmap takeaways from the Washington, D.C., Atlanta, and LA meetups.

1. Repository unification strategy revealed

Now we know what Alfresco plans to do to resolve the “multiple repository” issue. In a nutshell: Alfresco will add functionality to the DM repository until it is on par with the AVM (See “What are the differences…“). What then? The AVM will continue to be supported, but if I were placing bets, I would not count on further AVM development past that point.

This makes a lot of sense to me. We do a lot of “WCM” for people using the Alfresco DM repository, especially when Alfresco is really being leveraged as a core repository. It also makes sense with Alfresco’s focus on CMIS (see next takeaway) because you can’t get to the AVM through CMIS.

2. CMIS, CMIS, CMIS

Clearly, CMIS is an important standard for Alfresco. (In fact, one small worry I have is that Alfresco seems to need CMIS more than any of the other players behind the standard, but I digress). Alfresco wants to be the go-to CMIS repository and believes that CMIS will be the primary way front-ends interact with rich content repositories. They’ve been on top of things by including early (read “unsupported”) implementations of the draft CMIS specification in both the Community and Enterprise releases, but there a number of other CMIS-related items on the roadmap:

  • When the CMIS standard is out of public review, Alfresco will release a “CMIS runtime”. Details are sketchy, but my hunch is that Alfresco might be headed toward a Jackrabbit/Day CRX model where Alfresco’s CMIS runtime would be like a freely-available reference CMIS repository (Alfresco stripped of functionality not required to be CMIS compliant) and the full Alfresco repository would continue as we know it today. All speculation on my part.
  • Today deployments are either FSR (Alfresco-to-file system) or ASR (Alfresco AVM to Alfresco AVM). The latter case is used when you have a front-end that queries Alfresco for its content but you want to move that load off of your primary authoring server. In 3.2, the deployment service has gotten more general, so it’s one deployment system with multiple extensible endpoint options (file system, Alfresco AVM, CouchDB, Drupal, etc.). Alfresco will soon add AVM-to-CMIS deployment. That means you can deploy from AVM to the DM repository. Does it mean you can deploy to any CMIS repository? Not sure. If not, that might be a worthwhile extension.
  • One drawback to using DM for WCM currently is that there is not a good deployment system to move your content out of DM. It’s basically rsync or roll-your-own. On the roadmap is the ability to deploy from DM instead of AVM. This is one of the features the DM needs to get it functionally equivalent to what you get with the AVM. I wouldn’t expect it until 4.0.

3. Shift in focus to developers

Alfresco WCM has always been a decoupled system. When you install Alfresco WCM you don’t get a working web site out-of-the-box. You have to build it first using whatever technology you want, and then let Alfresco manage it. So, unlike most open source CMS’, it’s never been end-user focused in the sense of, “I’m a non-technical person and I want a web site, so I’m going to install Alfresco WCM”. Don’t expect that to change any time soon. Even Web Studio, which may not ever make it to an Enterprise release, is aimed at making Surf developers productive, not your Marketing team.

Alfresco is realizing that many people discard the Alfresco UI and build something custom, whether for document management, web content management, or some other content-centric use case. To make that easier, Alfresco is going to rollout development tools like Eclipse plug-ins, Maven compatibility, and Spring Roo integration (Uzi’s Spring Roo Screencast, Getting Started with Spring Roo ).

Alfresco has also announced that web scripts, web studio, and the Surf framework will be licensed under Apache and there were allusions to “making Surf part of Spring” or “using Surf as a Tiles replacement”. I haven’t seen or heard much from the Spring folks on this and I noticed these topics were softened between DC and LA, but that could have just been based on who was doing the speaking (see “What do you think of Alfresco’s multi-event approach?“).

Essentially what’s going on here is that Alfresco wants all of your future content-centric apps and even web sites to be “CMIS applications”, and Alfresco believes it can provide the best, most productive development platform for writing CMIS apps.

4. Stuff that may never happen but would be cool if it did

This is a grab bag of things that are being considered for the roadmap, but are far enough out to be uncertain. Regardless of if/when, these are sometimes a useful data point for where the product is headed directionally.

  • Native XML support. Right now Alfresco can manage XML files, obviously, but, unlike a native XML database like eXist or MarkLogic, the granularity stops with the file. Presumably, native XML support would allow XML validation, XPath and XQuery expressions running against XML file content, and better XSLT support.
  • Apache Solr. I think the goal here is to get better advanced search capability such as support for faceted search, which is something Solr knows how to do.
  • Repository sharding. This would be the ability to partition the repository along some (arbitrary?) dimension. Sharding is attractive to people who have very, very large repositories and want to distribute the data load across multiple physical repositories, yet retain the ability to treat the federation as one logical repo.

5. Timeline

Talk to Alfresco if you need this to be precise, but here’s the general idea of the timeline through 4.0 based on the slides I saw:

  • 3.2 Enterprise 12/2009
  • CMIS 1.0 Release Spring 2010
  • 3.3 Enterprise 1H 2010
  • 4.0 Enterprise 12/2010 (more likely 2011)

Thanks, Alfresco, and everyone who attended

Lastly, thanks to Nancy Garrity and the rest of the team that put these events together. I enjoyed presenting on Alfresco-Drupal in Atlanta and giving the Alfresco Best Practices talk (Alfresco Content Community login required).

I always enjoy the informal networking that happens at these events. There’s such a diverse group of experience levels, use cases, and businesses–it makes for interesting conversations. And, as usual, thanks to the book and blog readers who approached me. It always makes me happy to hear that something on your project was better for having read something I wrote. It was good meeting you all and I’m looking forward to the next get-together.

What do you think about Alfresco’s multi-city event approach?

Alfresco is getting big enough to warrant a regular get-together. So far, the approach has been to have multiple, smaller events rather than one big one as is done by traditional vendors. Over the past few weeks I’ve been wondering if the multi-event model makes sense. I get the concept: Theoretically it boosts attendance and helps attendees contain costs because people don’t have to travel as far–the conference comes to you.

But there are a few problems with the approach:

  1. you can never pick enough cities in the right places to reduce the travel burden to zero for everyone,
  2. partners and sponsors have to attend multiple events to get full coverage, and
  3. it’s tough to ensure consistent delivery of information across multiple events.

Regarding the first two, I would think anyone contemplating an Alfresco rollout (or already a paying customer) would be able to find budget to travel to a conference, even in times such as these. Integrators also make up a significant portion of the audience, but I think they would also be able to justify the trip based on the valuable lessons learned, new ideas sparked, etc. I would also guess that partners and vendors might be more willing to sponsor the conference if there were a single event rather than multiple smaller events because they get more eyeballs for one spend.

If these were the only two issues, I’d say it doesn’t matter. You’re either going to travel to the conference or you’re going to get lucky and not have to because the event is in your city. And partners who can afford sponsorships can also afford to send people to multiple cities to get the coverage they want (thanks, Optaros).

The third problem needs fixing. As someone who saw the same agenda delivered three times, I was struck by how different the morning sessions were in each of the three cities:

  • If you missed Washington D.C., you missed John Newton’s unique spin on CMIS, his statement that in Alfresco 4.0 he would “finish off the Explorer client”, and his thoughts on the cloud.
  • If you missed Atlanta, you didn’t get to hear Michael Uzquiano talk about the future of the product he manages, Alfresco WCM, and Alfresco’s plan to converge on the DM repository going forward.
  • If you missed LA, you didn’t see Luis Sala’s Amazon EC2 demo and you didn’t hear Dr. Ian Howells’ take on where the ECM market is heading.

In all three cases the content was similar (Alfresco is growing, CMIS, Records Management, and the cloud are important, the roadmap is exciting), but the delivery and the talking points were very different because the speakers each have their own unique perspective, careabouts, and role within Alfresco. Is that a big deal? Maybe, maybe not. The point is that the three events were decidedly different, and in hindsight, were travel not an issue, you might have picked one over another based on who was speaking on which topic.

I definitely don’t want to take away from the events and the planning and coordination it must have taken to pull them all off. I’m just thinking out loud and wondering about your opinion:

  • Would Alfresco be better off having a single event or should they continue with the multi-city approach?
  • Would your opinion change if you had to pay a significant registration fee to defray the cost of a larger venue? (I have no idea how the costs compare between the two models, I just assume a big room in Vegas is more expensive than three small rooms in assorted Marriotts).
  • What if Alfresco dove-tailed the conference with a broader conference like JavaOne or SpringOne? Aside from the obvious cross-pollination possibilities, does it make it easier for you to justify the expense?

Django + Alfresco was a winning combination for retailer’s intranet

Last week I spent some time with one of our clients talking about what it’s been like to live with their Intranet platform based on Django and Alfresco. The conversation got me really excited about what they’ve been able to do since the original implementation and where they are heading.

The client is a well-known, high-end retailer based in Dallas. About a year ago they engaged Optaros to replatform their intranet from a legacy Java portal product to something more agile. They had seen Alfresco and liked it as a core repository, but needed something for the presentation tier (See “Alfresco User Interface: What are my options?“).

The Optaros team worked with the client to consider many options, including open source Java portal servers. The client felt like they needed something lighter and more flexible than a portal server. They were willing to do a lot of the presentation work themselves in exchange for complete design freedom and yet still be enough of a framework to be highly productive. The winning solution turned out to be Django.

Python? No problem.

I was initially worried that introducing a Python-based framework into a Java shop was going to be a problem but they weren’t married to Java. Our team got them up-to-speed quickly and they never looked back. It also helped that the client’s intranet sites were very communication-centric which matched up well with Django’s newspaper heritage.

Here’s how they use the solution in a nutshell:

  • Content owners use Alfresco Explorer to upload HTML chunks, office documents, and images, set metadata, and submit content for review. This triggers any number of rules that automatically process the changed content (e.g., creating thumbnails, extracting metadata, converting images to a consistent type, creating PDFs from office documents).
  • Content owners and reviewers can use Alfresco’s “custom views” to preview the content chunk in the context of the front-end site.
  • Site designers lay out site pages and create components using the Django template system, CSS, JQuery, and other front-end libraries.
  • Content publishers use the Django administration UI to map areas on the site to categories, folders, and objects in the Alfresco repository–Alfresco has no idea where or how the chunks are being used. This means the repository tier is truly decoupled from the presentation tier, allowing the client to reuse content across multiple areas of the site and across multiple sites within the enterprise.
  • Designers leverage a Django tag library to create dynamic areas of a page (e.g., when the page is rendered, retrieve all of the content chunks in this particular category from the repository). Django calls Alfresco web scripts to get and post data. The web scripts respond with serialized Django XML which Django caches and then deserializes into Django objects that the front-end can work with.

Separate concerns, play to strengths

The thing to notice about the Alfresco piece is how it sticks to core Alfresco capabilities: Metadata, rules, search, basic workflows, transformers/extractors, presentation templates, web scripts, DM repository. This is straight out of the Alfresco best practices playbook and aligns the client well with Alfresco product direction. A nice enhancement would be to refactor the Django-Alfresco integration to use CMIS which is something we are considering for the open source version of the integration (Screencast, Code).

Agile intranet, happy team

Since the initial rollout, the client has been able to make changes and roll out new sites quickly and easily thanks to the productivity inherent in the Django framework and the clean separation between the front-end app and the repository. Unexpected benefits the client mentioned were how fast they can add new features to the administrative UI (a core admin UI gets built for you automatically by Django) and the ease with which the development team can stand up a new environment.

The language the client team used to describe their work since the rollout summed it up best. They were using words like “beautiful” and “a real pleasure to work with”. When was the last time you heard those sentiments expressed about a WCM implementation?

Alfresco Share microblogging component released as open source

Back in February (I know, it’s been simmering on the back burner for too long), I did a couple of screencasts on Optaros Labs showing a demo of Alfresco Share (part 1, part 2). In part 2 of that screencast I showed two custom components: Status and Bookmark. Alfresco made Bookmark obsolete by releasing their own shared bookmarks module for Share, and that’s a Good Thing. I kind of expected them to release a microblog component as well, but they haven’t yet. Well, I finally got around to making ours available, so until a similar feature makes it into the product, feel free to use it in your own projects.

The component is simple: A “My Current Activity” dashlet lets you and your team give a quick blurb about what you’re working on. Another dashlet aggregates all of the status entries from your teammates. A global dashlet aggregates the entries from all Share sites. All status changes automatically show up in Alfresco’s Activity Feed as well.

My Current Activity Dashlet
My Current Activity Dashlet

Unlike Twitter, the status component lets you mark an entry as “done”. When you do that, your current status gets reset and the old entry moves to the archive. So it’s a little more task-oriented than more general purpose, free-form microblogging tools.

Deployment is pretty easy. An AMP gets deployed to your Alfresco WAR, and a ZIP gets unzipped into your Alfresco Share web application. That’s it. No configuration necessary. All of the data lives in the same structure as the other tools in your Share site.

I’ve put the code out on Google Code under a BSD license. There’s a pre-built AMP and a ZIP for download or you can checkout and build from source. There’s one Eclipse project for the repository tier and one for the Surf tier. I’ve tested this on Alfresco 3.2 Community. I’ll test it out on the Enterprise releases when I get a chance. There were some changes in the Activity Feed that I had to deal with and I’m not sure how far back those go so I may have to have version-specific releases.

Have a look and give me your feedback. If you want to dig in and make enhancements, bring ’em on.

Screencast: Basic Alfresco-Kaltura integration

Bryan Spaulding, Media Practice Lead at Optaros, and I have been thinking about lightweight digital asset management and Alfresco. Alfresco can manage any kind of asset, including rich media. It has some built-in functionality for doing image transformations and you can easily integrate with open source solutions like ffmpeg to work with video. But many of our clients need something more, especially when it comes to video.

That’s where Kaltura comes in. Kaltura is a fully hosted video solution that provides full analytics, flexible and customizable players and playlists, and robust back-end CDN and hosting services. You can also download the open source Kaltura Community Edition and run it yourself if you want.

There are a variety of ways Alfresco and Kaltura could work together. We decided to start with a basic integration focused on the Alfresco DM repository. The idea is to use that as a foundation, expanding in the future based on community and client feedback to include deeper functionality for the DM repository or broader integration with other Alfresco products like Alfresco Share and Alfresco WCM.

In this short screencast, I demo the basic CRUD functions the integration provides. You will probably want to hit the “full screen” icon on the Kaltura player to see the detail.

The integration is available as open source. You can download the integration from Kaltura’s community site and use it on your projects, or better yet, expand on it and contribute back the code. The readme that is included with the source includes installation and configuration instructions.

Screencast: Drupal Open Atrium with Alfresco CMIS

UPDATE: Screencast now lives here:

I recorded a quick screencast of a simple integration we did to show Open Atrium leveraging Alfresco as a formal document repository via CMIS. This leverages the CMIS Alfresco module we developed and released on Drupal.org.

As I point out in the screencast, there’s not much to the integration from a technical standpoint. Open Atrium is Drupal and the CMIS module already has a CMIS repository browser. So, all we had to do was expose the module as a “feature”, which is something Open Atrium uses to bundle modules together that create a given chunk of functionality.

Readers familiar with Alfresco Share will instantly recognize the Open Atrium concepts. Instead of “sites” Atrium uses “groups”. Instead of “pages” or “tools”, Atrium uses “features”. The overall purpose, self-provisioned team-based collaboration, is the same and many of the tools/features are the same (blog, calendar, member directory). I’m not advocating using one over the other–as usual, what works best for you depends on a lot of factors. I just thought Atrium provided a nice way to show yet another example of Drupal and Alfresco together (post).

Book review: Alfresco 3 Content Management Implementation

Packt recently sent me a copy of Munwar Shariff’s updated book, Alfresco 3 Content Management Implementation. The book is a comprehensive guide to Alfresco from an end-user or power user perspective.

How comprehensive? This edition offers 239 new pages (including the index) over the original. That’s a lot of net new content. The first seven chapters are roughly the same as the first edition, covering fundamentals, installation, security, basic library services, rules, and the content model. The Collaboration and Syndication coverage has morphed into a chapter on Share & SharePoint which is very timely as there is a lot of activity around that area of the product right now.

The organization of the book feels improved over the first edition. It now follows a very logical progression through the entire platform. There are still places where the information feels superfluous (the discussion of ActiveDirectory versus Novell eDirectory, for example) or aimed at a different audience (Chapter 9’s coverage of integration with other systems) but overall I think Shariff and his team have done a great job of covering an expansive platform and its many use cases.

If you are evaluating Alfresco, just getting started with the platform, or you are looking for the missing manual for end-users and power users, you should take a look.

Disclosure: Packt provided me a copy of this book free of charge. Also, Munwar and his team of authors work for Cignex, a services firm that, from time-to-time, competes for business against my company, Optaros.

Alfresco Best Practices Masters Class shaping up for Fall Meet-ups

Peter Monks (Alfresco), Russ Danner (Rivet Logic), and I have been working on compiling course content for the “Alfresco Best Practices” Masters Class that will be given at the Alfresco Community Meet-Ups around the world this Fall. I’m a bit worried, though. If you’ll forgive the somewhat graphic mixed metaphor, the three of us have done this huge brain dump and now we’re stirring it together in the hopes that we can firehose the audience and have some of it stick. There’s just a lot of stuff to cover in very little time. (I’m sure between now and then we’ll get it to be less of a hose down. And, whatever we don’t get to in the session will be made available online for your reference).

Our plan for the talk is to cover the material in the same conceptual order that your implementation will go through. We’ll start by understanding the most common business use cases for Alfresco. Then we’ll talk about the pieces of Alfresco that you have to work with, and sort of line those up against the common use cases. From there, we’ll dive in to best practices for each of the pieces, roughly in order that you’d touch them (start with content modeling, move to writing code, then deployment, then keeping everything running). We’re going to share best practices on extensions, UI customizations, WCM, Surf, backup/restore procedures, and on and on.

Hopefully, regardless of where you are in your implementation, you’ll be able to come away with at least a handful of tips, tricks, or things to avoid that will make your project more successful.

Russ will deliver the material in Washington, D.C. and I’m taking Atlanta and L.A. I’ll also be in D.C. to steal ideas from Russ’ delivery that I can pass off as my own. Toni de la Fuente will be giving the talk in Madrid (and translating the deck into Spanish). I’m not sure who’s delivering the material at the other European events.

In any case, I’m looking forward to it. If you’ll be attending any of the North American meet-ups, be sure to say hi.

Drupal + Alfresco webinar slides available

People want intranets that are fun and easy to use, full of compelling content relevant to their job, and enabled with social and community features to help them discover connections with other teams, projects, and colleagues. IT wants something that’s lightweight and flexible enough to respond to the needs of the business that won’t cost a fortune.

That’s why Drupal + Alfresco is a great combination for things like intranets like the one Optaros built for Activision and why we had a record-breaking turnout for the Drupal + Alfresco webinar Chris Fuller and I did today. Thanks to everyone who came and asked good questions. I’ve posted the slides. Alfresco recorded the webinar so they’ll make it available soon, I’m sure. When that happens, I’ll update the post with a link. Until then, enjoy the slides.

[UPDATE: Fixed the slideshare link (thanks, David!) and added the links to the webinar recording below]

1. Streaming recording link:
https://alfresco.webex.com/alfresco/lsr.php?AT=pb&SP=TC&rID=42774837&act=pb&rKey=b44130d69cc9ec5f

2. Download recording link:
https://alfresco.webex.com/alfresco/ldr.php?AT=dw&SP=TC&rID=42774837&act=pf&rKey=c50049ac82e1220a