Tuesday, January 8, 2008

Alfresco WCM 2.1.x review (on the eve of the 2.2 release)



Alfresco / Alfresco WCM 2.1.x has been out for some time and it's time for a review. I want to try and provide a balanced perspective. While given that I have an Alfresco blog -- I think the product is great there are areas that need work and I think they are worth sharing and discussing. That said:

Alfresco WCM is novel technology – there isn’t anything like the virtualization server, the AVM (Alfresco Versioning Machine), or the kind of link verification found in WCM out there on the market today.

The virtualization server is a preview server or staging server that allows all users to view the changes they have made in their individual sandboxes in the context of the content that has been pushed to preview. At first this does not appear particularly special in any way but it turns out the be something that really is quite special. Imagine two projects taking place on the same website simultaneously, during which massive CSS changes must be made by each team. Outside of WCM and its virtualization server you must set up two complete instances of the site and go through the trouble of keeping them in synch. The virtualization server however gracefully handles this issue by giving each team its own sandbox to work in. Each sandbox is a layer on top of preview, like a sheet of glass which superimposes the changes made in the sandbox while allowing the modified content of preview to “shine through” (the glass) enabling an in context preview of the changes in the sandbox. We’ll talk more about layers in just a moment. Before we move on it’s important to point out that the virtualization server doesn’t just virtualize standard web pages, it’s capable of virtualizing PHP, ASP and even entire J2EE Web applications and we’re not just talking JSP here – we’re talking servlets, application frameworks (struts, jsf) and inversion of control containers like spring.

The AVM is a content store that acts like the SVN source code repository on steroids. In addition to the SVN tree like capability which enables the user to version the enite site on each submit enabling the ability to time travel through changes/versions of the site, AVM introduces a concept called layers. Each layer is like its own SVN tree but layers can be stacked on top of or superimposed on each other to create complex views to better support collaborative workflows. The basic example can be seen in the Alfresco Web Client where layers are used to create a Staging or Preview area and individual sandboxes for each collaborator for a given web project (website, web project, etc)

The link verification is unlike other link verification in that it goes beyond the traditional static analysis found in most products to include server side includes and other runtime link checking.

That all sounds great – it sure does! Is there anything else? Yep – WCM has support for simple and complex workflows through JBPM integration, several deployment capabilities and a visual / GUI XML document editor (based on the XFORMS standard)

Anything else? Well there is a bit more in the product that just hasn’t been exposed yet and many more features on the way.

Version 2.1.x is the latest stable release and 2.9.x is the latest “Labs” release. If you are looking for more stability go with 2.1.x and if you are looking to try out the latest and greatest features available start up a labs instance. One of the best way to keep up with what is going on with WCM is to keep a watch on this wiki page: http://wiki.alfresco.com/wiki/New_Web_Content_Management_Plan

WCM has come a long way and in my opinion 2.1.x is the first release I feel is ready for prime time consideration. There are enough important features available to make the product a valuable tool. That said we have a ways to go in making the product truly great. Let’s talk about a couple of things that could use some work.

Roadmap: I’m a guy who likes to keep up with where things are going in Alfresco. I read the forums, I read the wiki, I download the source code almost every week just to see what’s shaking … the roadmap on the wiki doesn’t really help me. Road maps are hard – they really are but I am only being honest when I say I wish there was more there: a more distant look in to the future stretching from the certain to the very fuzzy -- with links leading to documentation and “white boarding” on the concepts. Personally I would like the tools I need to think about the software before I hear about it in a release scheduled, and before its been coded and is sitting in the labs tree. I want to be able to point out corner cases and use cases that are relevant to my needs and I want to plan 6 months to a year out based on how Alfresco is posturing. I may want to contribute design ideas and perhaps even code. The roadmap is the single most important community tool in an open source project – I don’t have proof for that – but I feel it in my gut.

Workflow: I can’t speak in depth about the workflow capabilities in WCM, I am simply not qualified to do so but I’ve spent a fair amount of time with working with the workflow engine. In many cases the out of the box workflows served up straight or with a few modifications will work for many of your needs. I tried to do a few things with the JBPM scripting engine like operate on a change set and found I needed to first write some java code. There are times when you need to put a workflow in quickly or patch an existing workflow. The JavaScript capabilities inside the workflow engine should be a godsend here but instead I found it difficult to implement.

Workflow Events: From what I can tell – and I could be wrong here, we’re still missing node level events. What is a node level event? An event is a trigger or set of triggers that are fired on create, update, and delete. Today you can fire a workflow off on a submit action but you cannot do the same when a user inserts a new document, deletes or updates an existing one. I want to kick off workflows based on content hitting the store -- not just when it's been submitted to preview. There are interesting semantics to this issue and it's not a clear cut as it is in the DM side of the house but I'd still like to see a discussion on it.


Web Forms: Web forms are very powerful and my personal thought is that as the product matures they will be one of the star features. Today they have a couple of issues.

  • Web Forms: Web forms are implemented with XFORMS technology – a pending standard. But Web Forms aren’t described using XFORMS technology, they are described based on an XSD. That makes perfect sense – almost. The issue I see is it sidelines a standard for a proprietary approach and while it [the approach] is clever but it’s constraining. In order to make it work you need to follow the rules of the engine so your XML schema is constrained to what the engine will understand.

  • Another point of interest is that the schema/approach model works great for simple models but falls flat on its face for complex forms. Schemas don’t carry enough metadata to render the kind of presentations required by forms of certain orders of complexity.

  • Form generation is slow – even simple forms seem to have visible latency.

Search: Search in 2.1.x is something I’ve heard complaints on but haven’t hit the wall with personally. 2.2.x looks like it is making an attempt to address search capability needs.

Looks like a few issues … sure it’s not perfect but in my opinion, beginning with 2.1.x WCM is a very usable product with capabilities I think will eventually set a new standard in the industry's level of expectation for WCM products.

Sunday, December 9, 2007

Public Service Use: Auditing

I've put out a couple feelers to get an explanation for the full intention of the PublicService annotation. In the mean time, I've been doing a little digging of my own. There are two places that the intentions for this annotation may show up: Explicitly in code and implicitly in policy.

Explicitly the annotation is being used to assist services such as the Audit Service.



The audit component implementation relies on public service identifier interface to find public service methods. The implementation for the Public Service Identifier checks for the annotation to make its identifications.

I'll update this post with more explicit uses as they show up.

Will there be any implied policy in the Alfresco SDLC (software development lifecycle?) I don't know -- we'll see what Alfresco has to say about that; this is a good question for Paul Holmes-Higgin or David Caruana.

Personally I find the notion of a public interface much more interesting if it means I can count on it in some fashion because being marked as public sets parameters on the interface in the software development lifecycle. I am much more interested what this notion of public service could mean in terms of the SDLC.

As a customer dependent on a non standards based (although open) API, I need to know what I can count on, what to expect; I want predictability and stability.

Sunday, December 2, 2007

Public Services

If you are looking for an architectural representation of Alfresco, the best wiki link I know of is here. This documentation does a good job of putting Alfresco in context with the application server, client applications and breaking down the high level components.

Two of the most important pieces of documentation we need to maintain is A: A diagram and a strong description of what the current architecture and B: A well described road map of where we are going and how we plan to get there.

I try to do my best to keep up with how the architecture is evolving. The way I do it is by downloading the HEAD of the SVN source base, looking at the changes as they come down and comparing them to my current understanding. If there is an unknown or a mismatch, I head for documentation.

Recently we have seen a new addition in the source base (many actually) but there are few that caught my eye and one that I want to investigate immediately: an attribute placed on service classes called @publicservice. What a public service is isn't really clear to me yet. I've thrown together a diagram that kind of illustrates how I break out the architectural structure of Alfresco in my mind and how I am imagining public services -- what they really are remains to be seen. I suspect the diagram has some errors in it. Also with respect to the public services I see some services that I would expect to be public but that are not marked public. For example, the Tenant Service -- a new service that allows the repository to host multiple clients simultaneously and independently. This could be A: because I am wrong in what I suspect a public service is or B: because the concept isn't yet being applied by the entire team yet. C: Other :)



From an architectural perspective the notion of a "public service" could be very important to me. I've looked at many open source frameworks and often wondered why there was no distinction between public and internal code. How can you exist without this distinction? How can you possibly plan to refactor your code without putting customers at great risk? From my perspective a public layer gives the community a contract that says "It's safe to develop against this -- the life-cycle, the maturity, deprecation and ultimately removal of this interface is well known and you can plan against it." This creates a safety net for the community and a means or a protected space for refactoring for the engineers and architects of the project. If you the consumer have violated this public contract and tapped something below it -- it's at your own peril.

The documentation for "public service" doesn't yet exist from what I can tell and the java doc is somewhat uninformative in that it says "Specifically indicate that an interface defines a public service." -- a bit like defining a word by using the word. What does it mean to be a public service? I am not sure yet -- but I was thrilled to find it there and it has been fun to speculate on what the Alfresco team is intending for it. I plan to get to the bottom of the following questions:
  • What is the definition of a public service -- can we get it in the java doc?
  • Can it be counted on -- Is there some sort of contract with the community?
  • If so is there a some sort of documented life-cycle?
I'll be back with answers once I get them! If you have the answers post them in the wiki and link it here!

Exciting stuff.

Saturday, December 1, 2007

Freedom of the Press and Enterprise Content Management are IMPORTANT

Freedom of the Press matters dearly to humanity
Affordable Enterprise grade content management matters dearly to Freedom of the Press.

I think Alfresco, having gone completely to GPL last year has the opportunity to play a huge role in making the world a better place to live in by enabling the Freedom and ability to publish.

Related:

Sasa Vucinic invests in free press

and

Peter Gabriel fights injustice with video

Friday, November 30, 2007

Tired old vision of ECM?

Seth Gottlieb of Enter Content Here posted this blog on Alfresco, its new Facebook integration capability and what that demonstrates about Alfresco and it’s vision for ECM. Alfresco is integrating deeply with Facebook for social networking capabilities which from my perspective is consistent with their strategy of “oem”ing capabilities from the open source and open standards community that solve contextual problems and are best developed by engineers who are focused directly on that problem, for example, JBPM business process engine, MediaWiki engine integration, javascript engine integration etc

Seth remarks:

“Alfresco's strategy is to integrate with best of breed applications. You look at their website and they use MediaWiki for their wiki, WordPress for blogs, and Baynote for search. All the open standards and APIs give you great tools to do these integrations. I used to think of this as Alfresco talking the ECM talk but not walking the walk. Now I get that they see the old ECM vision as being as outdated as I do.”

Alfresco's implementation is based on more than a dozen complementary open source products. One of the attractive aspects of Alfresco as a company in my view has always been its discipline when it comes to focusing on core capabilities rather than getting bogged down creating proprietary implementations of contextual capabilities. The key to this strategy is making it happen in such a way that the architecture is consistent and the platform feels and acts like a single product. That is to say the functionality and APIs feel natural and related rather than bolted on. Following this strategy enables Alfresco to focus its innovation and engineering mindshare and energy on what is core to Alfresco: repository and ECM vision.

Early on this month at the first Alfresco community summit(s) (held in NYC and Paris, presentations here) we got our first taste of what Alfresco is focusing on as "core" both in terms of repository and in terms of its vision for enterprise grade content management.

On the repository front Alfresco is looking to continue improve on its enterprise capabilities:

  • Scalable, fast, clusterable
  • Federated view of repositories
  • Web caching and clustering
  • Multi-tenant hosting
  • High availability
  • Linear performance regardless of size
  • Implementation of enterprise standards and infrastructure (BPM etc)

  • Plug-in architecture

Also worth mentioning is the intention to consolidate the repository technologies that currently exist in the product. Alfresco DM (Document Management) and WCM (Web Content Management) are built on two different repository approaches. The plan is to define the superset of these two functionalities then harmonize and eventually homogenize the platform.

Alfresco brings a fresh perspective on the vision for Enterprise Content Management. Many ECM providers are focused on are focused only on the traditional ECM feature set: Collaboration, PBM, Portal, BI, Search. However, as Seth pointed out, Alfresco feels the future of ECM is in Enterprise Social Computing enabled by an open stack, open standards, enterprise grade high performance, and integration both inside and outside the firewall. What is Enterprise Social Computing and how is that different? The technology isn't all that different but mindset is entirely different. Where the technology does differ, it is in the fact that it is often "open", either the code is available or it is based on standards. The product's technical feature set is different in that in addition to the traditional ECM feature set, it includes capabilities for extending beyond it's own application space and beyond the firewall. However, the real change is in the frame of mind. It's a new focus on distribution, community, and collaboration over control. The power of transparency is evident in both the code and and this new vision of what ECM; what means, how we are supposed to interact with our content and with each other.

Wednesday, November 21, 2007

Welcome!

Welcome Alfresca readers! I've been participating in the Alfresco community since 2005 and blogging about it on my personal blog on and off since then. The size of the Alfresco community has really exploded in to something huge. Early this month we held two large user groups (one in NYC and the other in Paris), it was evident to me that it was time to start a blog dedicated to discussing Alfresco, the software and the community. I hope you will come back often, read and contribute!

As my first post, and because this is thanksgiving, I want to say thank you to the Alfresco team for putting together such an outstanding product with such a bright future! I also want to give a special thank you to all the engineers and community members who spend an incredible amount of time and energy in the forums helping the community... great job guys!

All, Welcome, have a wonderful holiday and stay tuned for upcoming posts!
-R