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.
4 thoughts on “Apache Cocoon and Customer Service”
I would like to address some of your points in your blog entry.
“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?”
You refer to the tutorial with title ““Your first Cocoon application using *Maven 2*”. I’m not sure why you are surprised that particular tutorial requires Maven 2 to move on. However, if Maven 2 is explicitly mentioned in the title, doesn’t it suggest there may be other ways of working with Cocoon?
“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.”
IntelliJ has native support for Maven, see http://www.jetbrains.com/idea/features/newfeatures.html. Netbeans has at least two plug-ins for importing Maven-based projects.
If you don’t want any IDE, just skip this step as the tutorial suggests.
“Great. I need Maven just to run the application? Come on. Do I really need to get another big package approved?”
Maven plug-in is really not a big package, rather small I would say. Whole tutorial is about getting started and setting up minimal development environment. You don’t need any Maven plug-ins in production but it’s highly recommended to use RCL plug-in in development for futures it has, see http://cocoon.apache.org/2.2/maven-plugins/maven-plugin/1.0/1295_1_1.html
“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?”
You don’t need to bother about Maven’s build lifecycle, its goals etc at the beginning really. Again, we suggest to use Jetty for beginners because it has great integration with Maven. I’m not sure if you spotted that, but apart from downloading and installing Maven you don’t need to download and install anything else. No servlet container manual installation just because it comes as Maven’s plug-in that is downloaded automatically from Maven repository.
At the end of the tutorial you will find link to the tutorial titled “Deploying a Cocoon application” with following annotation:
“Although you have already been able to run this block, you most probably need a Java web application (war file) in order to deploy it to the servlet container (Tomcat, Jetty, etc.) of your choice.”
Isn’t it a something you were looking for?
“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).”
Thanks for a good comment at the end. Apache Cocoon 2.2 DOES NOT REQUIRE Maven 2, see http://cocoon.zones.apache.org/daisy/cdocs/1425.html (will appear on official site shortly).
Thanks very much for the feedback – I appreciate it very much. The sections you refered to (just to point out) were hypothetical commentary from a reader. The details should have been made clearer in the tutorial, I would think.
The biggest problem I had personally is I didn’t want to have to build Apache Cocoon, but just to deploy a WAR or an RPM (I can still remember when Cocoon was available as a WAR!).
Java in general requires a large amount of infrastructure, and a build of Cocoon or other Java programs requires more. It would be nice to just install Cocoon, or to build it with native UNIX tools as installed out of the box. Cocoon is not unique in its requirement for lots of secondary tools not usually installed to get running (what is it about make that everyone in the whole wide world wants to make a new one?!).
The article was meant more as a pointer to the importance of customer service than it was a rant against Cocoon in particular.
I love Apache Cocoon and like using it where I have a need for documentation. It was quite disappointing to find that the HP-UX 11i v3 installation of Cocoon was broken (though I found a fix through Google).
I’m the guy that wrote the article you referred to at the top of your posting. I finally gave up on Cocoon for the shot term simply because I don’t have time to hack my way to the solution that I or must use with the constraints that I have –>
Other home-grown frameworks integration
Very disjointed processes involving cross-functional teams.
Serious lack of “ubiquitous” expertise
I work within large enterprises, and like you so eloquently said, driving for the adoption of a package/framework can take quite a bit of time/development/QE — MONEY. To have the number of dependencies and basically tell the “customer” that Maven is no big deal and a small package shows a lack of experience working within a million-dollar-a-day revenue-sized organization. You can’t do ANYTHING that will affect the cash-register from ringing; I’m amazed at the dorkey things an org will do to minimize risk.
Cocoon seems to be a possible solution for a “ground-up” project run by consultants with extreme control over processes, culture and riak management. For a large enterprise with ongoing revenues, I just don’t see how it will ever get traction because of the dependencies, lack of general knowledge, documentation, etc.
It absolutely has to be Easy-peasy-lemon-squeezy.
I wish the Cocoon guys all the luck in the world, it’s a great framework, probably better than most, but like Betamax, just because it’s better doesn’t mean it’s going to win.
I am hoping you’re still all out there and guess within the process. My first Cocoon-experience was during development of a knowledge-management-platform (-PROTOTYPE ;). After some research I found out, that there are companies out there using Cocoon as base for that kind of project (e.g. see http://www.seitenbau.com/produkte/00198/00284/index.html – GERMAN, but maybe woth a look for prove).
So what came next was to obtain recent books about Cocoon and getting startet. The first version I used was Cocoon 2.1.11 (the official latest one). I quickly came to produce some results including simple user-management and dynamic context-rendering by using the great cocoon pipeline-mechanisms. I was happy about that, but maybe a little to happy.
Like the (actual 2.2) online-documentation I was taught (by the several books authors) to first build a full-blocks-fledged Cocoon web-app and then deploy it within Tomcat. Works fine for the first steps, since i’ve kept in mind that it is possible to ‘refactor’ the architecture later to a more production-dignified one. This thought was and still is my biggest problem with Cocoon and the starting point to conform a bit to Danilo (an his above mentioned discussion within his own blog!).
My goal is to set up an EASY TO USE environment to start (serious) development using cocoon, spring and hibernate. This combination leads me directly to cocoon 2.2, because of using springframework itself instead of the ‘old’ avalon-components. After porting the CHS-showcase from 2.1.6 to 2.1.11 (http://www.cocoondev.org/main/117-cd/43-cd.html) as a first step into direction of my goal, I can now say without any harm, that support in using cocoon could really get better. In my opinion you guys (the cocoon-community) build an excellent framework and the decision to integrate spring was definitley not a bad one. But how do you think peoples adoption of your hard work may look like if even experienced developers/architects have problems to understand the integration and its transparent usage?
Again, I am not here to bother anybody – and how could I? Just want to point out, that digging through mailing-lists, blogs and the like maybe funny for a short time, but really is no replacement for sound documentation. And to say something nice: I’ve enjoyed the 2.2 documentation, because it doesn’t look like the often recognized ‘catch-the-audience-with-buzzwords-crap. But I am still missing THE article wich leads me to come to grasp using cocoon and the mentioned frameworks. The presentations found under cocoons hompage are not very usefull either. I’ve noticed, that there are similar opinions about documentation so I won’t dive deeper.
The main problem with basic usage (after reading all comments/articles/mails/etc. I could get so far) is, that there is nothing said about HOWTO really start developing with cocoon from scratch, integrating a development-environment of choice (of course within the ‘classic’ Java-horizon, in my case there is just vi, mvn and the $JAVA_HOME/bin –utils!). The usage of maven is not the problem for me – I like the archtypes and time they can safe. No, the main problem is, that there is no guide which reveals the potential (that I definitively bet exists) of the two beasts – Spring and Cocoon – in a getting-started-fashion.
Hoping to get switched completely: I want to use your product, but not without beeing able to understand it and estimate the consequences of my decision!
ps: I know that the CHS-showcase is somewhat dated and my thoughts about support do not count for that, especially not infront of the recent efforts from Ugo Cei to fix my problems!!