I wanted to respond to Jun's post
(
https://openacs.org/bboard/q-and-a-fetch-msg.tcl?msg_id=0005pP&topic_id=11)
listing some thoughts on redhat CCM, but thought it more appropriate
to start another thread to not clutter the nsjava discussion.
Thank you Jun - your thoughts on your experiences with CCM are
excellent. I would like to share a few of my own experiences working
with CCM over the past year. I too have built sites of various
complexities using many different flavors of ACS (1.x classic to
openACS 4.5).
Most recently, I worked with a group of 4 other developers putting
together the website for www.futuredex.com. Underneath, the site is
fairly complex in terms of data capture, administrative UI, and search
functionality. We store literally 1000's of unique pieces of data
related to our core object types and the relationships between them.
We built a pretty advanced search engine which is capable of
efficiently searching through the data using many different criteria
simultaneously.
Throughout the development process, we've constantly compared our
experiences to what we would expect had we used a product like
openACS. As Jun points out, each has its advantages. Some thoughts:
* The user interface for search and the underlying logic to generate
the correct, efficient queries is complex. With CCM, we are able to
provide a framework for interacting with the search engine, providing
for relatively easy reuse and extension of the forms and queries we
use. This allows us to provide basic search, advanced search, browsing
along many different dimensions, customized UI, and unique attributes
for administrative interface using the exact same core code. Could we
build the the same type of functionality in openACS? Absolutely. Would
it be easier, faster to implement, or more robust? I'm not sure. CCM
and an object oriented language like Java certainly were good tools
for what we needed to do.
* The CCM has a complex dispatching system that lets each individual
package dispatch in its own unique way. This flexibility proved to be
completely unnecessary for us, and the code itself was very hard to
debug. When I built a subsite-based online alumni database using ACS
3.x, the request processor provided an elegant solution that worked
exactly as expected and was relatively straight-forward to debug.
* Once you understand how the CCM persistence system works, it
really has a few wonderful advantages. One example is that data model
changes are very easy to make using CCM -- changing a column name is
often as simple as updating one line of code. The other major
advantage of CCM is that it lets you override all aspects of itself -
if you don't like the way an object is retrieved from the database,
you can provide your own custom query to do it the way you like. One
disadvantage of the persistence system is a loss of some efficiency -
for most cases, you will retrieve a bit more information than you
absolutely need for your page. You can always override this, but
chances are it won't matter enough to do so.
* Some of the greater abstraction provided by CCM can really kill
you if you're not careful. For example, it's easy to write code which
hits the database once per row for a hundred rows. In the ACS world,
when the database api was first introduced, we had a similar problem -
all of a sudden it became very easy to nest db queries. With CCM,
there are more ways to do this which are not obvious at first, but
once you know what to look at for and *how* to tune your pages, the
problem can be handled.
* The current community surrounding CCM, simply put, sucks. Unless
I'm looking in the wrong places, I can't find any place remotely
similar to the openACS community. Redhat told me they were planning on
opening up their development process once the dust settles, but it's
been a few months and nothing is happening. I submitted a simple patch
to redhat to see how well user contributions would be accepted, and it
has been ignored as far as I can tell.
* The learning curve on CCM is much longer compared to openACS. Part
of this is due to the greater level of abstractions, and part of it is
due to the greater number of large problems the CCM tries to address
(db abstraction thru a persistence layer, presentation through
xml/xslt, reusuable web UI thru bebop).
* The amount of interest in Java itself is great - the JDK's from
Sun are rich in functionality as is the open-source world (open
symphony is a good example).