OpenCms 6.0: A Review
By Slava Asipenko and Yuval Zukerman at 2006-09-17 17:38:00 |
OpenCms 6.0 is a mature, open source Web Content Management (WCM) system based on the J2EE platform. We recently acquired hands-on experience installing and customizing OpenCms on a client project. Our take: OpenCms is well suited to supporting small to medium web sites, but comes with a steep learning curve.
If you are looking for WCM solution for a web site or an intranet, OpenCms can provide you with a lot of muscle for free. However, as with all products, OpenCms has its own strengths and weaknesses. To guarantee the success of your project, multiple factors should be considered, from the skills of your development team to your ability to support open source technologies.
OpenCms is normally deployed as a web application on a stack containing the Apache web server, Apache Tomcat as the application server, MySQL as the database and your choice of an operating system. We chose Linux to complete a free and open source solution, yet recent OpenCMS releases are aimed to improve support for application stacks such as IBM's WebSphere and alternate database servers like Oracle.
Let's start with what OpenCms offers out of the box.
OpenCms has a broad range of features you would expect to see in a robust WCM package, including:
- Browser-based contributor workspace
- Built-in asset management, e.g., images, pdf documents, external links, etc.
- DHTML-based WYSIWYG editor
- Versioning of content with simple roll-back capabilities
- Page preview
- Support for structured and unstructured content
- Integrated user management and permission system
- JSP-based templating mechanism
- Java API
- Internationalization support
- Dynamic and static content publishing models
- Module-based packaging of add-on resources
- Built-in search
- Caching engine
But, like many broadly-featured WCM tools, OpenCMS tends to have a steep learning curve, especially if customization is required.
Molecular recently implemented a web site powered by OpenCms for one of our clients. Although the site was not large (150 pages), it was busy and high-profile. The WCM needed to support load-balancing, separate development and staging environments, as well as other advanced functionality, including support for multiple languages, Flash, RSS, ad serving, a community functions for web visitors, and potentially much more in the future.
In the following sections, we summarize what we consider particularly strong features wersus. weaknesses of OpenCms, based on our experience during this project.
We particularly liked one feature of OpenCms: its ability to present web content both dynamically and statically. In dynamic mode, the content is served out directly from the database, optionally cached, and then presented to the end user. In static mode, OpenCms pre-publishes content to the file system and then lets the webserver deliver those static HTML pages directly, in a very efficient manner.
It is even possible to combine two modes on the same website and serve different pages dynamically or statically. For example, administrators can configure the "About Us" folder and all pages underneath to be static, i.e. to be published and served directly from the file system because this content does not change very often. On the other hand, "My Account" folder and all related pages such as Login and Registration can remain dynamic because they vary for each visitor.
In OpenCms, content can exist in the system either in plain HTML format or have a a more rigid structure enforced. The latter approach allows administrators to enforce the layout of content across the entire site or portions thereof, at a much finer-grained level. Using an XML Schema, developers can create structured content types, defining XML document formats. OpenCms can then accept specifications on how to display and manipulate the XML document on the site.
OpenCms' Java API offers virtually unlimited customization, from using the repository as a mere content source to expanding and customizing the entire application for the unique needs of your organization. Our team was able to use the API to develop a custom solution to support publishing content to multiple servers.
Developers use JSP code to include dynamic elements in the content provided by the system, as well as access its repository for navigation, content, user authentication and anything in between. For example, we leveraged built-in web user registration mechanisms to create our own sign-up process by accessing the system through JSP-based forms and Java API objects. The core JSP-based templates were developed to dynamically render navigation elements depending on the context.
Like most major open source CMS packages, OpenCms has a notion of extensibility through optional modules. Adding and removing features to the systems is a matter of choosing a module and a click of a button. Modules provide excellent means of extending OpenCms' features for developers who can package their code and integrate it with the system with minimal hassle. We created a module that processes and embeds external RSS feeds into the system with code that leveraged the OpenCms APIs. The module satisfied the immediate need for a required functionality, but also can be easily reused in other installations.
The system's maturity was evident with the relatively rare occurrence of bugs during development and deployment. We spent very little (if any) time chasing OpenCms bugs. The publishing engine is solid and stable: after proper configuration the system just runs for weeks without any maintenance. The admin interface is surprisingly advanced and problem free on PC, with occasional minor issues on Mac.
The simplicity of installation is a breath of fresh air compared to the experience with the vast majority of other Java web applications. If you know your database location and passwords, you are pretty much ready to install.
OpenCms has a lively discussion on its mailing list, where implementers help each other and the core development group often provides insight and quick bug fixes for issues encountered. Archived discussions had very relevant tips for our project, and we also were able submit a question and have it answered the next day.
Weaknesses and Open Issues
OpenCms has its weaknesses, although we were able to overcome most problems by developing custom solutions, conducting additional user training, or establishing extra processes. Among the issues we encountered were OpenCms' lack of native support for multi-environment configurations, difficulty scaling the system up, weak workflow facilities, a development environment that is far from ideal, and a challenging content deployment process.
Probably the number one problem we faced was the lack of good documentation. Our developers faced a steep initial learning curve when extending the system with new functionality. At the time of our implementation, the only book available on the market was written for version 5.0, which is quite different from current 6.0. (Recently, a new book dedicated to OpenCms 6 was published.) The active user community somewhat helped us to mitigate these problems.
Expect additional challenges if your requirements include web farms or multiple environments with content deployment or replication. OpenCms has no built-in support for multi- environment configuration, e.g., a staging server and a production server. The system is easy to configure and use for content management on a single production server supporting a small site. If staging environment is needed to implement more robust publishing process, expect additional configuration and development efforts.
Scaling a site to offer high availability through web farms (i.e., load balanced servers) requires a custom solution. Basic load balancing requires that more than one server will have the ability to present information on a site, making it transparent to visitors which server instance is used. OpenCms installations require an additional customization to support publishing in such setups. In fact, there are no documented experiences of using OpenCms in such large-scale deployments.
OpenCms does not have strong workflow, only generic task management. This could be an issue for larger organizations with intricate approval processes. However in case of a small to medium CMS with straightforward publishing process and only a few editors (such as our project), this did not present a big problem.
OpenCms does not offer a good environment for JSP template development. Customizing the default look and feel, as well as implementing advanced navigation, requires at least some JSP programming. When writing a JSP template, developers need to use the basic text editor found within OpenCms; unlike conventional IDE tools such as Eclipse, the native OpenCms editor offers no syntax checking or API call assistance. There is also no built-in debugger to assist in troubleshooting of complex problems (a typical workaround is to use log files for tracing). More generally, note that you need a JSP developer to create and modify templates in the first place.
In the default setup OpenCms is installed only on top of Tomcat; this configuration might be acceptable for a small internal web site or a development environment. However, extracting the best performance from the application stack requires Apache web server to handle static content, while the integration of OpenCMS and the Tomcat application server handles dynamic content. Although connecting Apache and Tomcat is a standard procedure in J2EE world, adding OpenCms to the mix requires manual customization of multiple configuration files. This area is not very well documented and usually becomes an underestimated task for someone inexperienced with OpenCms.
Is OpenCms for you?
Our answer depends on several factors. If the information from above did not answer your questions, consider the following list. If you reply "No" to more than one question, you should probably look elsewhere.
Do you need a Web Content Management System?
OpenCms is truly a WCM solution; it is not an document management or "ECM" system. Additionally, as a pure WCM solution, its support for structured workflow is rather weak and focuses on user-driven work assignments.
Are you building a small or medium size web site / intranet?
OpenCms is best at supporting web sites with hundreds or thousands of web pages. In the out-of-the-box configuration, it is not designed to power large web sites with tens of thousands of pages or assets.
Do you have a preference of using products built on Java & J2EE?
OpenCms excels in leveraging the benefits of Java: it provides a Java API for customization and is easy to integrate with other platforms. Web Services, XML and RSS are examples of the technologies which are easy to work with in OpenCms.
If you are considering implementing OpenCms in house, does your staff have the requisite technical skills?
Your engineers should know Java, JSP, and XML. Depending on the requirements, advanced configuration of Apache, Tomcat and MySQL may be desired.
Do you expect to have only one or two servers running OpenCms?
Typical enterprise configurations for content management systems contain several separate environments: development, staging and production. This requires a content deployment process among the environments and possibly load balancing among the production servers. OpenCms can support these requirements only with advanced customization, but not out of the box. See previous question.
Are your content processes more oriented on loose collaboration and communication rather than formal approval workflows?
OpenCms provides only limited functionality around content workflow. It is basically a task/messaging oriented system with no support for assigning a task to a particular piece of content or enforcing a strict approval process.
Our conclusion: OpenCms 6.0 is a nice, free WCM product for its target niche of medium size websites, intranet, and extranet solutions. However, OpenCms has a few pitfalls, most notably a steep learning curve and the need for extra customization within multi-server environments.
[Editor's note. The 7-pp CMS Watch review of OpenCms can be purchased separately.