Currently experimenting with …

24 09 2009
  • Liferay (now adopted by Sun as Java Web Something or Another)
  • OpenXava
  • jMaki + Spring




People are listening

24 09 2009

Updated my test install of OpenCms to 7.5 the other day. As usual the update went smoothly with no problems to speak of. And I was pleased to see that the demo site had been changed to “The Wonderful World of Flowers.”

Here’s the background: My employer evaluated OpenCms last year but decided against it. A number of reasons were put forth (e.g. workflow, user interface) but I still think the major reason was the negative impression left by the OpenCms demo site … which at the time was a review of German regional sausages.

As I noted (sadly) in an e-mail sent to Alkacon shortly after that disastrous demo, regional cuisine is very important to ethnic/cultural identity. However, Americans tend to associate sausages with … solid waste, among other things. In particular Californians — who see tap water as deadly poison — have a hard time identifying with a product that subconsciously glorifies the consumption of bodily toxins.

I have no way of knowing whether my feedback inspired this change. I do hope it helps Alkacon succeed in the North American market. Not that I have anything against bratwurst, weisswurst, knockwurst, or … OK, maybe I’ll draw the line at blutwurst :)





Cascade Server: Competent and predictable

24 09 2009

I’ve spent the past year or so up to my armpits in Hannon Hill’s Cascade Server. My overall impression is that it’s a competent and (mostly) predictable product. But as content management systems go that’s pretty high praise.

I’ve used the SOAP interface to migrate about 8,000 pieces of content (articles, images, etc.) from Vignette V6 and V7 into Cascade Server. There are a few real “gotchas” that made life difficult. For example, link tracking isn’t activated automatically when creating or editing content through the web services interface, at least in Cascade 5.x. Documentation in 5.x is a bit skimpy. There’s no way to output “structured data” as plain text — HTML yes, XML yes, PDF yes, RTF yes … but not plain text.

But for the most part, Cascade Server works as advertised. It doesn’t claim to solve all your problems, but it is quite good at managing and publishing static Web pages. I look forward to the 6.x upgrade, which introduces a “site” metaphor that will help to bring cross-site links under control.

There is one feature of Cascade Server that deserves special mention — the versioning system. As configured by default, each edit to a page creates a new version. It’s trivial to view / audit / compare / roll back / revert between versions. Most importantly, initiating a workflow will create a new version and bind that version to the workflow instance. Editors, approvers, and publishers will work on that version and that version alone. I think it’s even possible to have multiple versions of an article in multiple workflow instances — for example, one version in publishing workflow and another version being bounced around in editing workflow for a later update. To some people this might sound like a bug — but large organizations have silly needs.

Obviously this versioning capability comes at a cost. Cascade Server is very database-intensive, and can be very CPU-intensive depending on the complexity of your XSL stylesheets. (Yes, Xalan has never been accused of excessive speed, nor efficiency.) Its scalability depends in large part on the scalability of your MySQL installation. Hannon Hill recommends circular replication, something which sounds great in theory but scares the living crap out of me in practice. I’d recommend keeping either a very good DBA or a gold-plated support contract to back up large installations.





Selling Vignette 7.5

15 08 2008

I’ve noticed an interesting change in the way Vignette has been pitching 7.5, in particular the High Performance Delivery (HPD) module.

At Vignette Village 2007, I recall that HPD was pitched as the core of “hyper-personalization” of Web content. The presentations pushed the idea that with enough nodes and arrows and licenses, Vignette could help us deliver custom content to each user while maintaining the same astonishing level of performance we had come to expect. I suspect this was an answer to a problem that most attendees didn’t realize they had.

Even as late as March, Vignette still emphasized the personalization and customization aspects of HPD:

“Our Web Experience Platform is all about customising and personalising the web experience, but many firms are afraid that this might make their sites suffer from slower performances,” he said. “HPD allows customers to offer the richest and freshest experience and helps contain IT costs.”

By launch time Vignette was already singing a different tune.

Vignette created HPD to help enable its customers to significantly increase the overall page complexity and volumes without the corresponding increase in resources required to deliver such pages. … Vignette recognized that most sites its customers built were content-heavy sites. Even sites that customers built to support application delivery drifted toward static content and documents. …

HPD’s innovative solution helps address … ability to control costs … improved site response times … delivery of cached pages during planned or unplanned application server down time.

Hmmm, cost control and response time. Now those are the problems I wanted to see addressed :)

In my limited experience, Vignette core developers and VPS consultants have never been in denial about the shortcomings of the company’s products. I’m glad to see a growing sense of reality make its way into the marketing department.





Workflow options in OpenCms (Updated)

8 08 2008

Currently there are three ways to handle workflow in OpenCms:

1. Don’t: just use the role-based permissions system to handle things. Regular users create or edit content, but lack publishing rights. Projects can be created to encapsulate changes or additions. Reviewers check the contents of projects and publish when ready.

2. BearingPoint Workflow2 module. Simple, but rudimentary. A workflow is defined as a sequence of OpenCms projects. Content is moved back and forth between projects and is published manually from the last project when approved. At least it doesn’t mess with the core classes, as does the …

3. Langhua.cn jBPM module. Amounts to an unmaintainable fork of OpenCms 7.0.3, with numerous changes made to core classes. Kinda-sorta worked with 7.0.4, but I seemed to run into problems with 7.0.5. This is unfortunate because in many ways it’s a very good module.

The core developers have hinted at some sort of workflow in the upcoming 8.0 release (due some time in 2010). Until then we can make do with what we have, or choose the next option:

4. Roll your own workflow module. It’s tempting. I mean, what could possibly go wrong? ;)





OpenCms: For us, by us

7 08 2008

It’s the FUBU content management system.

And by that I mean it was designed for techies, by techies. And for “normal” people, too. This is one system that is user-friendly both on the front end and on the back end. What’s the last time you saw ANY J2EE webapp that comes with an optional command-line interface for disaster recovery?

Let’s look the ways in which OpenCms excels in a crowded and highly competitive niche:

  • Content types are defined using XML schemas
  • Structured content is stored as XML, and rendered using JSP templates and custom taglibs.
  • Most system resources are managed through the “Virtual File System” (VFS), which is a database-backed repository similar in concept to Microsoft’s long-promised WinFS.
  • Powerful module packaging system allows effortless export and import of extensions
  • Multiple databases are supported through the use of properties files (!!!) that contain translations of various queries into different SQL dialects
  • Clusterable and scalable without arcane remote interfaces and protocols
  • Automatic versioning of content, with rollback and diff functions
  • Site navigation is an integral part of the system and not an afterthought
  • Fast, responsive, customizable management interface (“Workplace”)
  • Friendly URLs. Nothing but friendly URLs.

Imagine this: You can create a complex content type as a special .xsd file, which can specify not only the structure of the content but the options for the auto-generated content input form. You then can create one or more templates to display that content using plain old JSP, scriptlets, and taglibs. The content you create is stored in a database-backed repository that looks like a plain old file system (down to our old friend index.html), but with the ability to tag items with nearly unlimited free-form metadata.

Make a boo-boo? Roll back to a previous version with a few mouse clicks. Want to put something live? Flip a bit in the database with a few mouse clicks — no worries about the management and delivery stages getting out of sync, failed publish jobs, checking the status of multiple endpoints, etc. Need to create a new page template? Just use your favorite JSP editor and upload it through the workplace, then change a bit of page metadata. Need to embed a custom application or extension? JSP is your friend.

Is it perfect? Nothing is perfect, no matter what your local friendly Vignette account rep may say. Lack of an OOTB workflow engine is the most glaring omission, though the project management tools go a long way toward making up for it. Oh yeah, and I accidentally blew away the master log4j.properties file while trying to deploy my own custom module code through the workplace, but that was easy enough to fix :)

But if you can live with the few deficiencies, you’ll find much to like about OpenCms, either as a content contributor or as a developer. What’s not to like about familiar technology in a robust, simple platform?





The kitchen dotSINK revisited

19 07 2008

I was very pleasantly surprised to get a response to the last post from Will Ezell, chief technology officer of dotCMS, who writes:

In dotCMS, content does not live on the web tree, though that is not to say that it cannot be organized hierarchically. You can build custom taxonomies in dotCMS and apply them to specific content structures. Access to these taxonomies can be permission based. Meaning, you can have news content and apply a custom “department” taxonomy/category to it. You can then search/pull news based on that taxonomy and permission specific users to only have access to “their” categories, e.g. “biology news”. When building templates, you can specify to pull a list of news of a certain category.

Custom taxonomies can be applied across content types – events, news, staff, and used to relate and pull collections of content together.

I’m biased, but I’d say take another look. dotCMS is broad, but as you say, it is ready to go.

Forgive me for using Vignette as a point of reference, but it’s what our end users are used to. I’d prefer a more explicit hierarchical organization in the content repository, sort of like the file system metaphor that V7 uses for projects and subprojects. But I’d love to find a way to make dotCMS work for us.

Time permitting I’ll definitely give dotCMS another look-see.





Everything but the kitchen dotSINK

18 07 2008

Task-based workflow. Events calendar. CRM module. E-mail newsletter. Templating. Document management. Class enrollment system. Integration with Liferay portal. Commercial support. Hosting options. Easy content reuse. Excellent documentation. Amazon Elastic Compute Cloud support. Is there anything that dotCMS doesn’t have?

Sad to say, the answer seems to be “categorization and organization in the content repository.”

Once again I found much to like about dotCMS. Of all the contenders it was the closest to being ready to use OOTB, with a rich feature set as the foundation for future customization and extension. But with 10,000+ pieces of content to import and wrangle, that one minor shortcoming knocked it out of the running.





Review: OpenCMS 7 Development, by Dan Liliedahl

16 07 2008

Summary: Information indispensable, but could be easier to use

Liliedahl’s comprehensive overview walks the reader through the process of creating a blog, comment engine, and RSS feed module with the OpenCMS API. While these may not be typical applications, the teaching projects touch on every major aspect of OpenCMS: content type definition, content input forms, programmatic manipulation of content, user management, and the administration console.

Unfortunately much digging is needed to find the gems this book contains. Layout, formatting, and indexing all need improvement. Too often key pieces of information are buried in large blocks of body text, devoid of visual cues. I hope future editions will consider the likely audience: busy, perhaps frazzled devs and admins with dubious attention spans even under the best of conditions.

At $44.99 the book is just a bit pricey, but much of the information in the book can be found nowhere else. Don’t let the indifferent online documentation and outdated wiki discourage you from trying OpenCMS. The information in Liliedahl’s book will help you unlock the true potential of this mature, powerful product.





Magnolia: First impressions

27 06 2008

Magnolia seems to be a popular choice in the Java EE web content management sector. There’s a lot to like about it, including:

  • Intuitive, friendly, visually appealing interface
  • Good OOTB workflow
  • Intuitive, friendly, visually appealing interface
  • Uses Java Content Repository standard
  • Available commercial support and training
  • Intuitive, friendly, visually appealing interface
  • Document management
  • Auto-versioning
  • Did I mention the interface?

Unfortunately my particular requirements include structured/nested content types, content reuse, and other features that lie outside Magnolia’s envelope. It was a sad day indeed when I clicked “Log out” and said goodbye to the familiar lime-green toolbars for the last time.

But if your requirements fit the “simple is beautiful” philosophy behind Magnolia, I suggest very strongly that you try it out. You’ll probably have a working site long before we’re finished with our requirements document.