This is a very interesting article about using Apache Cocoon working, and how it compares to Struts and why. It is, first and foremost, a story of an Apache Cocoon customer and why they are unsatisfied. Don’t read just the article; read the comments too.
The article details several points where the Apache Cocoon community fails their customers:
- Missing and incomplete documentation
- Requirements on other, undesired systems (such as Maven)
- Inflexibility: inability to use IntelliJ instead of Eclipse, for example (or at least, no documentation on how)
I don’t know about some of these, but I can sympathize with the lack of documentation and the inability to use Cocoon in a production environment. Some of the Apache projects, especially Java ones, seem to want to use all the latest and fanciest tools, but forget that others use something different – which makes it impossible to integrate Cocoon into established environments.
This lack of recognition of the corporate customer will only hurt Cocoon in the end. The switch to Apache Maven (instead of using Apache Ant as previously) also seems to have hurt Cocoon more than helping.
Many open source projects lack this customer focus: it is not a buzzword (or should not be), but rather a way of thinking. Many projects are done purely because somebody wanted to – but a serious long-term project outgrows its leader/founder and needs to consider the ramifications to its user base in what it does. A serious project also needs to consider what do the customers want? What do they need?
Programmers often do not understand why not everyone can read their documentation and just “get it.” A good example is the page “Your first Cocoon application using Maven 2“. I’ll annotate certain sections here, with likely responses from a corporate perspective (imagine a system administrator turned manager talking):
Note: First, make sure that you have Maven 2.0.6 or above installed. You can check this by calling mvn –version from command line. If this doesn’t work for you, read the Maven in 5 Minutes tutorial.
I don’t want to use Maven. I shouldn’t need to install a new product just to use Cocoon – and we’ve only just gotten Cocoon approved. Now I need to get another big package tested and approved? Why can’t you use Apache Ant like everybody else?
Note: Cocoon is not tied to Eclipse IDE by any means. This step only describes what can be done to avoid tedious work of setting up project in Eclipse manually.
If you don’t use Eclipse, you can either skip this step or find a similar procedure to load the block in the IDE of your choice.
That’s good to know. So how do I do it with IntelliJ? How do I do it with NetBeans? How do I do it without any IDE at all? I don’t want to have to install yet another big package that has to get approved.
After creating the block you probably want to run it. For this purpose there is a Maven plugin, that generates a minimal web application that loads your block.
Great. I need Maven just to run the application? Come on. Do I really need to get another big package approved?
Note: The mentioned minimal web application is automatically created, when mvn jetty:run is invoked. This happens because the rcl goal of the Cocoon plugin is bound to the Maven build lifecycle which is invoked too, when the jetty:run goal is executed. See the block’s pom.xml for details.
What’s an rcl goal? What’s a Cocoon plugin? What’s a Maven build lifecycle? What’s a jetty:run goal? Now I’m really confused – and you tell me to “read the source” rather than explaining yourself. And it sounds like I need Jetty, too. Great. Tomcat is on our system, and now I’m supposed to use Jetty? Or am I?
Apache Cocoon is a fantastic product – and I’ll keep using it where it fits in. However, I do not expect to use 2.2 any time soon (which appears to be the first to require Apache Maven). The project could use a very strong dose of customer relations. The only reason other projects win is because they work with what people already have and are easy to use – and Apache Cocoon 2.2 neither works with current tools nor is easy to use.