OpenCms 7 Development - Liliedahl Dan - E-Book

OpenCms 7 Development E-Book

Liliedahl Dan

0,0
23,27 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.

Mehr erfahren.
Beschreibung

In Detail

OpenCms is a professional-level open-source Website Content Management System, based on Java and XML. Many companies or organizations have requirements that go beyond what is available in the standard OpenCms application. Thankfully, OpenCms can be used by Java developers to create sophisticated add-ons and customizations that extend the power of OpenCms in virtually unlimited directions.

Targeting version 7 of OpenCms, this book is for Java developers interested in extending and further customizing OpenCms through its Java API.

Starting by showing how to set up a development environment for OpenCms work, the book moves you through various tasks of increasing complexity. Some of the common tasks covered are building OpenCms, XML asset type development, templating, module development, user and role setup, and search integration. In addition to these common tasks some more advanced topics are covered such as self-registering users, RSS support, developing custom widgets and extending the administrative interface. All the topics include examples and are presented while building a sample blog site.

The skills you develop will make you an OpenCms developer to be reckoned with!

Targeting version 7 of OpenCms, this book is for Java developers interested in extending and further customizing OpenCms through its Java API.

Approach

This book is a clear, practical tutorial to OpenCms development. It will take you through the development of an example site, illustrating the key concepts of OpenCms development with examples at every stage.

Who this book is for

The book is for Java developers with a basic knowledge of the operations of OpenCms. No previous experience of developing OpenCms is expected.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 320

Veröffentlichungsjahr: 2008

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Table of Contents

OpenCms 7 Development
Credits
About the Author
About the Reviewer
Preface
What This Book Covers
What You Need for This Book
Conventions
Reader Feedback
Customer Support
Downloading the Example Code for the Book
Errata
Questions
1. Overview
The Site Design
Required Developer Skills
Basic Site Development
Sites Requiring Custom Content Types
Sites Requiring Custom Features
Bespoke Site Development
OpenCms Application Overview
The OpenCms Directory Structure
The Real File System Layout
The Virtual File System Layout
OpenCms Architecture
Extensibility through Modules
The OpenCms Web Request Process
OpenCms Web Application Packaging
Building a Complete Site with OpenCms
Summary
2. Developing in OpenCms
Developing Basic Site Content
Setting Up an Environment for Creating JSP Code
Editing Files Using File Synchronization
Using WebDAV for Editing
Debugging JSP Code in OpenCms
Setting Up an Eclipse Environment to Build OpenCms
Tools Needed to Build OpenCms in Eclipse
Step 1: Checkout the Project Source from CVS
Step 2: Setting the Classpath for Compilation
Step 3: Using Ant to Build a Distribution Package
Building OpenCms outside of Eclipse Using Ant
Debugging OpenCms in Eclipse
Setting Up an Eclipse Environment without Building OpenCms
Summary
3. Our First Module
Understanding OpenCms Modules
Common Module Types
Module Events
Exporting and Importing Modules
Creating a Module
Structured Content Types
Creating a BlogEntry Content Type
Required Code for Creating XSD Schema Files
Registering the Content Type
Additional Schema Features
Field Mappings
Field Validations
Default Field Values
Localization
Content Relationships
Content Previewing
Creating Content Using a Model
User Interface Widgets
DateTimeWidget
BooleanWidget
ColorPickerWidget
DownloadGalleryWidget
HtmlGalleryWidget
ImageGalleryWidget
LinkGalleryWidget
TableGalleryWidget
VfsFileWidget
HtmlWidget
ComboWidget
SelectorWidget
MultiSelectWidget
StringWidget
StringWidgetPlaintext
TextareaWidget
TextareaWidgetPlaintext
DisplayWidget
GroupWidget
UserWidget
Additional Widgets
RadioSelectWidget
PasswordWidget
PrincipalWidget
OrgUnitWidget
Nested Content Definitions
Editing Configuration Files with Validating Editors
Organizing the Content
Summary
4. Developing Templates
Review of the Page Layout
Templates in OpenCms
Creating the Templates
The Homepage Template
The Blog Content Loop
The Sidebar and Footer
Common Code Elements
Header Code
Search Form
Advertisements
Blog Archives
RSS Client and RSS Feeds
Footer Section
The Supporting Java Bean Class
The Blog Template
The Content and Template Loading Process
Expressions in JSP Templates
Using the Tag Library from JSP
Combining Expressions with JSTL
Accelerating Template Development Using WebDAV
Install the Eclipse WebDAV Plug-in
Create a Site Within Eclipse for the Server
Import Content into the Project
Summary
5. Adding Site Search
A Quick Overview of Lucene
Search Indexes
Search Queries
Configuring OpenCms Search
Field Configurations
Creating a Field Configuration
Creating an Index Source
Additional Search Settings
Introducing Luke – a Visual Index Tool
Writing the Search Code
A Simple Search Example
Subclassing the CmsSearch Bean
The Search.jsp Template
Summary
6. Adding User Registration and Comment Support
Understanding OpenCms Security
User, Groups, Roles, and Permissions
Organizational Units
Setting up Security for Our Site
Organization Unit and Group Setup
Adding the Users
Resource Permissions
User Login and Registration Code
Adding Comment Support
Adding the Comments to the XML Content
Publishing the Comments
Summary
7. Providing Site Customization Features
What is RSS?
Creating the Module
The RSS Client Code
Displaying the RSS Feed in the Template
Adding User Preferences to Accounts
Updating the Java Code
Updating the JSP Templates
Hooking up the Account Management Page
Summary
8. Extending OpenCms: Developing a Custom Widget
Designing a Custom Widget
Designing the Widget
The Widget Code
Custom Source Interface and Implementations
Using OpenCms Message Strings for Localization
Registering the Widget with OpenCms
Summary
9. Extending OpenCms: Adding RSS Feed Support
RSS Feed Design
The RSS Feed Content Type
Creating a Supporting Widget
The RSS Feed Template and Java Classes
Content Wrapper Java Classes
Wrapping It Up
Summary
10. Extending OpenCms: Adding an Administration Point
Administrative Points
The Administration View
Hooking the Administration Point Up to the Module
The RSS Administration Module
Leveraging the OpenCms Dialog Classes
Declaring the Dialog
Defining Dialog Columns
Returning the Column Data
Adding Column Actions
Custom Rendering
The Feed Manager Class
Supporting the Feed Operations
The New Channel Action
Declaring the Dialog
Declaring the Widgets
Persisting Data Across Pages
Handling the Dialog Actions
Summary
Index

OpenCms 7 Development

Dan Liliedahl

OpenCms 7 Development

Copyright © 2008 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, Packt Publishing, nor its dealers or distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.

First published: April 2008

Production Reference: 1160408

Published by Packt Publishing Ltd.

32 Lincoln Road

Olton

Birmingham, B27 6PA, UK.

ISBN 978-1-847191-05-2

www.packtpub.com

Cover Image by Karl Moore (<[email protected]>)

Credits

Author

Dan Liliedahl

Reviewer

Olli Aro

Senior Acquisition Editor

Douglas Paterson

Development Editor

Nikhil Bangera

Technical Editor

Himanshu Panchal

Editorial Team Leader

Mithil Kulkarni

Project Manager

Abhijeet Deobhakta

Indexer

Rekha Nair

Proofreader

Angie Butcher

Production Coordinator

Shantanu Zagade

Cover Work

Shantanu Zagade

About the Author

Dan Liliedahl is the founder and CTO of eFoundry Corporation, a premier consulting company with expertise in selecting, specifying, and delivering Open Source and commercial content management portal and collaboration systems. Since starting eFoundry in 1998, he has architected and developed Web solutions for Fortune 500 companies such as JPMorganChase, Disney, Sirius Satellite Radio, and AMTRAK. Prior to starting eFoundry, Dan was a principal consultant and architect with FutureTense, a start up commercial CMS product vendor, and Open Market, whose products continue to have a strong market presence under a new company name. In addition to his full-time work, Dan frequently donates his marketplace and technical expertise to selected non‑profit organizations. He holds a degree in Electrical Engineering and Computer Science from the University of New Hampshire and has over 20 years of industry experience. In his spare time, he enjoys alpine skiing, ice hockey and coaching his kids' soccer.

I would like to thank the people at Packt who have helped me along the way with this book, especially Douglas Paterson, Senior Acquisition Editor for his initial guidance and ongoing support. Thanks also to Abhijeet Deobhakta for his patience and for putting up with many delays and missed deadlines. Many thanks to Olli Arro and Himanshu Panchal for their time, comments, and helpful suggestions. It is great people like these who have made this book enjoyable to write and seem to go by quickly.

I also would like to thank Alexander Kandzior and his OpenCms team. Beside building an outstanding product, they have always been available for questions and help, despite their busy schedules. I know their schedules are busy because they came out with four versions of the software before this book was completed! Alex's focus, diligence, obsession with quality, and professionalism has made OpenCms and his company great.

Special thanks to my wife for her support and encouragement and for keeping me going on those days I didn't want to. And of course, to my three children for making me laugh and for tolerating the times I couldn't spend with them.

About the Reviewer

Olli Aro hails from Finnish Lapland, but is based now in the north of England. Olli Aro has over 10 years experience in the area of innovation and development of software and web-based applications. In his current role as head of technology and product development for Clicks and Links Ltd, Olli has been responsible for the company's portfolio of Open Source-based solutions. He has been involved in the OpenCms project since 2001 (version 4), contributing various open source modules and bug fixes to the project. Olli was also involved in reviewing the previous version of the OpenCms book. Prior to Clicks and Links, Olli worked for organizations such as Nokia, eMobile Ltd, and CCC Systems Oy. In his spare time, he works on his own social networking site, Breakaway Republix.

Preface

OpenCms can be used by Java developers to create sophisticated add-ons and customizations that extend the power of OpenCms in virtually unlimited directions. Starting by showing how to set up a development environment for OpenCms work, this book moves you through various tasks of increasing complexity. Some of the common tasks covered are building OpenCms, XML asset type development, templating, module development, user and role setup, and search integration. In addition to these common tasks some more advanced topics are covered such as self-registering users, RSS support, developing custom widgets, and extending the administrative interface. All the topics include examples and are presented while building a sample blog site.

This book is a clear, practical tutorial to OpenCms development. It will take you through the development of an example site, illustrating the key concepts of OpenCms development with examples at every stage.

What This Book Covers

Chapter 1 starts out by describing a sample site that will be created to demonstrate OpenCms development concepts. It also provides a description of the developer skills required for OpenCms development, followed by a basic overview of OpenCms architecture. We also provide a basic description of OpenCms configuration files and their file locations.

Chapter 2 sets the stage for coding by providing details on how to set up various OpenCms development environments. The chapter includes a step-by-step procedure for using Eclipse to check out and build OpenCms from the CVS repository. The chapter describes how to build OpenCms using Ant and also how to debug OpenCms itself.

Chapter 3 begins with an explanation of OpenCms modules, including a guide for creating a new module. The module is used to define a new content type, which is another concept covered in the chapter. Included in the content type discussion is a complete, step-by-step guide for designing and creating a new content type used to contain blog entries. All aspects of content type schema files are covered, including schema design, widget usage, field selectors, field validations, nested definitions, and registration. At the end of the chapter, the content type may be used to create new blog entries.

Chapter 4 continues developing the sample site by covering JSP template coding. A set of templates is created to display the blog content, including a complete run through of how they are put together. The example illustrates the use of custom template coding beyond the standard OpenCms tag library by sub-classing Java template classes. Included in the chapter is an overview of the resource and template loading mechanism. Also relating to templates is a description of using expressions and JSTL within template code. Lastly in the chapter is a guide to using WebDAV for template editing in Eclipse.

Chapter 5 covers the usage of Lucene within OpenCms, beginning with an overview of basic Lucene concepts. This is followed by an in-depth guide to creating a search index in OpenCms. The guide provides an example of building a new search index for the blog site example and describes a developer tool, which may be used to performtest queries against the index. The chapter includes a walkthrough of implementing a search form in OpenCms for simple cases and for more advanced situations.

Chapter 6 continues the build out of the sample site by adding support for users and commenting. It starts with an explanation of OpenCms security, including a discussion on Roles, Groups, Users, and Organizational Units. It then proceeds with the set up of the group and role structure for the sample, and shows how they are used within the code.

Chapter 7 shows how easy it is to support user customizations of site pages. It then show an example of this by adding RSS feed support to the sample site, allowing users to specify a custom feed. Included in the chapter is a discussion of integrating third-party libraries into OpenCms.

Chapter 8 describes the custom widget interface, and then shows how to design and create a widget. The widget provides a pluggable data interface that is used to obtain a list of selection values for a select list. The chapter then illustrates how to read XML content fields by creating a list source that gets its values from any content field. Finally, the chapter shows how to localize message strings and how to register and use the custom widget.

Chapter 9 shows how RSS feeds can be generated from OpenCms content. It also shows how wrapper classes can be used around structured content items to make them easier to work with, and then walks through creation of an RSS feed generation module using these concepts.

Chapter 10 discusses how administration points are created in OpenCms, and also how to use OpenCms dialog classes. The chapter also discusses how widgets can be used programmatically. An example administration point is created that ties together topics from previous chapters, showing how to use widgets, dialogs, and multiple screens.

What You Need for This Book

Tools needed and used for this book:

MySQL database serverApache Tomcat web serverOpenCms 7.0.2 version (New files might have been added in newer version of OpenCms and some files, like jar files, might not be in the book-specified location).Sun Java JDK 1.5Eclipse WTP 1.5.4 Apache Ant 1.70Sysdeo Eclipse Tomcat Launcher plug-inOracle JDBC Driver

Conventions

In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles and an explanation of their meaning.

There are three styles for code. Code words in text are shown as follows: "We can include other contexts through the use of the include directive."

A block of code will be set as follows:

<jsp:useBean id="search" scope="request" class="org.opencms.search.CmsSearch"> <jsp:setProperty name="search" property="*"/> <% search.init(cms.getCmsObject()); %> </jsp:useBean>

When we wish to draw your attention to a particular part of a code block, the relevant lines or items will be made bold:

<mappings> <mapping suffix=".jsp" /> <mapping suffix=".html" /> (add this line) <mapping suffix=".htm" /> (add this line) </mappings>

Any command-line input and output is written as follows:

>ant –propertyfile opencms.properties [target]

New terms and important words are introduced in a bold-type font. Words that you see on the screen, in menus or dialog boxes for example, appear in our text like this: "clicking the Next button moves you to the next screen".

Note

Important notes appear in a box like this.

Tip

Tips and tricks appear like this.

Reader Feedback

Feedback from our readers is always welcome. Let us know what you think about this book, what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.

To send us general feedback, simply drop an email to <[email protected]>, making sure to mention the book title in the subject of your message.

If there is a book that you need and would like to see us publish, please send us a note in the SUGGEST A TITLE form on www.packtpub.com or email <[email protected]>.

If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors.

Customer Support

Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.

Downloading the Example Code for the Book

Visit http://www.packtpub.com/files/code/1052_Code.zip to directly download the example code.

The downloadable files contain instructions on how to use them.

Errata

Although we have taken every care to ensure the accuracy of our contents, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in text or code—we would be grateful if you would report this to us. By doing this you can save other readers from frustration, and help to improve subsequent versions of this book. If you find any errata, report them by visiting http://www.packtpub.com/support, selecting your book, clicking on the Submit Errata link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata are added to the list of existing errata. The existing errata can be viewed by selecting your title from http://www.packtpub.com/support.

Questions

You can contact us at <[email protected]> if you are having a problem with some aspect of the book, and we will do our best to address it.

Chapter 1. Overview

This book is a guide for developers interested in building websites using the OpenCms content management system. The book is intended for developers who are familiar with Java, JSP, and building web applications based on the Java J2EE framework.

In this book, we will develop a website designed for a blog writer. In the course of building our site, we will go over these topics:

The site designOverview of OpenCmsSetting up an OpenCms development environmentCreating structured content typesCreating templatesUtilizing searchExtending OpenCmsAllowing online users to contribute site content

We will go over all the steps involved in building a blog website using OpenCms. We will start by describing the features and requirements of our website and will then provide an overview of OpenCms. Next, we will discuss how to create a development environment. We then will go over the steps involved in creating structured content types, to hold our site content. After that, we will cover creation of templates and Java code, to display the content. The site also supports search and user comments;, so we will cover the Lucene search engine as well to show how to provide login support. As the site additionally supports RSS clients and feeds, we will discuss how to add new features to OpenCms.

Before we get into the development details, we will first discuss some of the skills required to develop sites with OpenCms. This will provide us with a basis for understanding the environment and tools, which we will need to do our development work.

The Site Design

Before the development of any site can begin, there should be an understanding of the site's feature requirements. The feature requirements will often be driven by the actual layout and design of the site. We will design and build a blog website named 'Deep Thoughts'. The design of the site homepage layout looks like this:

The blog site is designed to support the following features:

Blogs are listed in descending order of date, with the most recent blog appearing at the top.Each blog entry is listed in teaser style, with a link to the full blog appearing at the end.Blog entries support a list of topics attached to them.Archives of previous blogs appear on the righthand side, in descending order.Past blog archives can be browsed.The site supports contents search with paginated results.Ads may be placed on the righthand side.Users may self register for the site.Registered users may add comments and create a customized RSS feed on their homepage.Blogs may be viewed in various RSS formats.

In addition to the features seen in the mockup, we will also support:

Direct editing of content in preview mode.User submitted comments.

There are two additional mockups for the site. The first one shows a detailed view of a blog. This view is shown when a user clicks on a blog from the homepage:

The last mockup shows what the search result screen looks like. Search results are shown in decreasing order of relevance to the search term. The pagination controls at the bottom of the page allow for the results to be scrolled, if necessary:

Required Developer Skills

The level of technology and coding skills required to do site development will vary depending upon the requirements and features of the site. Designing and architecting a site that properly utilizes and leverages OpenCms is an exercise in itself, which we will not discuss in this book. However, we will discuss the development tasks that are involved, once the architecture has been designed. In general, we can think of four different developer levels and skills.

Basic Site Development

OpenCms may be used to manage content right after installation. One way of using it is to import static files into the Virtual File System (VFS) and utilize the publishing and version control features to manage them. In this scenario, files from an existing non-content managed website may easily be content managed. Files in the VFS may be created, edited, and previewed in the offline staging area, before they are published to the online file system. When published, versions can be taken to allow for roll back, if necessary.

Files in the VFS may also be exported to the Real File System (RFS) and served statically or by a web server. In this way, the website can operate in exactly the same way it did, prior to being placed into OpenCms, except for the fact that it is now version controlled. The following illustration shows how OpenCms can be used in this fashion:

Utilizing OpenCms this way is straightforward, needs little, if any development effort, and probably doesn't require use of this book! However, it is worth mentioning here that there are a number of sites that can take advantage of this.

For this developer audience, the skill levels will include the following:

Operational understanding of the use of OpenCmsOperational knowledge of Application, Web, and Database serversHTML coding capabilities

OpenCms also provides a sample site called TemplateOne, packaged as a module. This module contains structured content types and templates. Although somewhat complex and confusing, content types and templates provided with TemplateOne may be used to construct sites without requiring development work. The documentation for these templates may be downloaded from the OpenCms website and installed into OpenCms.

Sites Requiring Custom Content Types

After looking at the TemplateOne samples, we may soon realize that it does not quite address our site requirements. Perhaps, the template layouts are not what we desire or the structured content types do not contain the fields necessary to hold our data. In this case, we will want to develop our own JSP code and extend or create our own custom content types. This level of development will require some understanding of Java, JSPs and XML.

This type of development involves working within the framework provided by OpenCms, to define the templates, content types, and JSPs, and also perhaps java classes that we need. Developing, at this level, does not require us to utilize a development environment such as Eclipse or Netbeans. But we will probably want to use a nice editor for our JSP and XML code.

Before undertaking this task, we will want to understand the feature and content requirements of our site in detail. This will allow us to properly design the templates and custom content types, which our site will need. This is a design exercise which will not be touched upon in this book. However, we will discuss the specific tasks required in implementing templates and the custom content types once they have been designed.

For this type of development, the developer requires first level skills plus:

Understanding of OpenCms modulesBasic Java and JSP coding skillsUnderstanding of OpenCms configurationUnderstanding of OpenCms content types

Sites Requiring Custom Features

There are different types of projects that require integration of features which are not provided with OpenCms. For example, we may need a feature that automatically imports data from a back office application into a structured content type. Or perhaps we need to create a content type that we can easily use to define RSS feeds from articles in our site. For these types of projects, we will want to code in Java, using a development environment. We will also probably want to build OpenCms for ourselves, so that we can step through the source and gain a better understanding of how our own code will need to work. We will discuss how to do these, in the later chapters of this book.

Developing custom features in OpenCms will require the second level skills, plus:

Advanced Java coding skillsUnderstanding of OpenCms Java interfaces

Bespoke Site Development

The last type of development level is custom development, where OpenCms is used as a base framework or platform, and a custom site interface is built on top of it. This type of development might be suitable where the Workplace Explorer is too general, and a more task-specific user interface is required.

Developing, at this level, requires the third level skills, plus:

Knowledge of OpenCms architecture andFamiliarity with OpenCms code

This type of development is not covered in this book.

OpenCms Application Overview

Before undertaking development, it will be helpful to understand the basic design of OpenCms. OpenCms is structured as a typical J2EE web application conforming to a 3-tier web application architecture:

A web server on the front-end tier services incoming requests. The requests are passed through to an application server in the middle tier, where the OpenCms application runs. The OpenCms application utilizes the database on the third tier to read and store its content.

For production, using an array of web servers will typically distribute load to the application server tier. A common choice is to use the Apache web server, utilizing the mod_jk plug-in to distribute load. For development purposes, using a web server is optional, and instead the application server container may be accessed directly. OpenCms supports a wide variety of application servers, including commercial servers such as IBM Websphere and BEA WebLogic. It also supports open source servers such as Tomcat and JBoss. A popular choice among developers is the Apache Tomcat server. We will be using the Apache server for our development environment.

On the back end, OpenCms supports a variety of databases, including Oracle, Postgreas, and the popular open source database, MySQL. The OpenCms installation setup procedure provides a wizard interface guiding the user through the creation of the database schema. Optionally, it allows for manual creation of the database schema through provided scripts.

This wide variety of choices makes it easy to install and run OpenCms in many mixed environments. It also allows for easy integration with other technologies, such as portals, CRM systems, and document management systems. Next, let's take a look at the file structure of an installed environment.

The OpenCms Directory Structure

OpenCms must be installed into the application server as an exploded Web Application Resource (WAR) file, due to the way OpenCms JSP files are handled. We will discuss more of this, in the later chapters. After extracting the WAR file and completing the setup process, the file directory structure should look something like this:

The Real File System Layout

The web application directory structure should be familiar to anyone who has looked at or developed a web application.

OPENCMS_WEBAPP_NAME/

WEB-INFMETA-INFexportsetupresources

These directories are explained in detail here:

WEB-INF: This path contains the web.xml deployment descriptor, and other files used by the application. There are a number of sub-directories located here:
classes: This should also be a familiar directory. It contains all class files and property files used by the application that are not packaged into JAR files.config: This directory contains configuration files. Some settings in these files are exposed through the Workplace Administrator and may be changed there. There are many other settings which must be managed manually. However, we will cover some of the settings in the later chapters but many of them are for advanced customizations and are not covered in this book. Here is a summary of the configuration files:

opencms.properties

This file contains the configuration information for connecting to the database. The setup program will automatically populate this file, based on the input selections.

opencms.xml

This is a master configuration file containing the names of classes usedto configure a system area. Each class implements theI_CmsXmlConfiguration interface and is called upon, at startup, to parse its configuration and initialize its area. This file will rarely need alterations.

opencms-system.xml

This file contains core system settings such as locales, cache and site definitions. Most of thesettings must be changed manually.

opencms-vfs.xml

This file contains settings related to the virtual file system. This file needs to be edited when adding a new resource type, and this is covered in a later chapter.

opencms-workplace.xml

This file contains settings related to the Workplace Explorer interface. This file also needs to be edited when adding a new resource type.

opencms-search.xml

This file contains settings related to searching and search indexes. Most of the settings in this file can be managed though the Workplace Administrator.

opencms-importexport.xml

This file controls the behavior of importing and exporting files from the VFS.

opencms-modules.xml

This file contains a registry of modules and is managed by the Module Manager within the Workplace Administrator. Settings in this file should not be modified manually.

imageCache: This directory contains a cache of images that have been served from the VFS. All content including images is saved in the database. As images may take a long time to read and retrieve, they are cached here upon first retrieval. index: This directory is where search indexes are built and maintained.jsp: This directory contains JSP files that originate in the VFS. In order to run a JSP file from the VFS, it must first be exported to the disk and made accessible to the web application. This is the default location for these files. As JSPs must be written to the file system, the application must be deployed as an exploded WAR file.packages: This directory contains files that have been exported by OpenCms with the intention of importing to another system. Exported files may include VFS database extraction files as well as exported modules.setupdata: This directory contains a script file used by the installer. It may be deleted after the setup process is complete. Note also that this script may be altered, before a setup is run to customize an installation.
META-INF: This is a standard web application directory.export: This directory contains files and resources that have been exported from the VFS to the real file system. If a file in the VFS has been marked for export, then it will be exported to this location. The actual time it gets exported is dependent upon the export configuration. URLs within the VFS that reference this file will be updated accordingly.setup: This directory contains the setup application. After OpenCms has been successfully installed, this directory may be removed.resources: This directory contains resources, such as images, that are used frequently by the application. OpenCms will export frequently accessed items from the VFS into this directory. Items should not be placed here manually, but should rather be managed within a module. This is covered in more detail, in later chapters.

The Virtual File System Layout

Now let's look at the layout of the files in the virtual file system, where the bulk of the application structure exists. To view the entire virtual file system, we must be logged in as Admin and have the root site (/) selected. Underneath the root, there are two main branches:

sites: Each directory located underneath this branch represents a site in OpenCms, and is the mechanism used to segregate site content. The title property of each folder appears in the 'Site' pull-down of the Workplace Explorer. Adding a site entry is a two-part manual process. First a new folder must be created in the VFS. Then a site entry must be added to the opencms-system.xml configuration file. Each added site entry must have a unique domain name or IP address. When a request is made originating from the assigned domain or IP address, OpenCms will set the site context so that a request for a file appears to be relative to the site root. For example, if the site http://www.mysite.com is mapped to /sites/mysite/ then a request for index.html coming from that domain will appear to be located at /.system:This directory contains files that comprise the bulk of the OpenCms Workplace Explorer application. There are a number of sub-folders under this directory, which are used by the application. Here is a summary of the folders:
categories: This folder is used to define categories that may be applied to a resource. The hierarchy of folder items in this location determines the available categories that may be applied. New categories may be added by creating folders in this location.galleries: This folder is used as a shared repository for content galleries. Galleries created here can be made available to all sites.handler: This folder contains templates used as the handlers for 404 and 500 site error messages.login: This contains the default OpenCms login page template.lost-found: This folder is used to place resources that have conflicts during import or export operations.modules: This folder contains sub-folders with modules and corresponding module resources.orgunits: This folder contains folders used to maintain Organizational Unit structures.shared: This folder contains resources that may be shared.workplace: This folder contains resources that are used by the Workplace Explorer interface.

The level of development required will determine if any resources within these locations need modifications.

OpenCms Architecture

OpenCms has a modular architecture centered on a VFS. The file system is considered virtual as it resides inside a database and not on a hard disk. The VFS is similar to a real file system that supports folders, file types, and permissions. Access permission masks on the files and folders, and controls access that users and groups have to the files. The OpenCms VFS also provides a feature very similar to symbolic links in a Unix file system. A link is a directory entry that contains meta-information which is kept separate from the file contents.

The core also provides support for basic features such as publishing, access control, and revisions. Layered above this are application level features such as configuration, the user interface, and module support. Module support is a key feature of OpenCms, providing the ability to extend and modify it. Module support is layered on top of OpenCms. A logical view looks like this:

It is interesting to note that although OpenCms is a web application, it comes with a shell application that provides an interpretive interface to the API from a Java command line interface! Furthermore, it is possible to script this interface to install content into the VFS.

Most of our development will center around using, or extending these core features. While working on our project, we will strive to work within the framework that OpenCms provides, rather than modify any OpenCms source code.

Extensibility through Modules

Modules are a key aspect of the OpenCms design. They provide a way to package together necessary components that may be easily plugged into OpenCms. Modules are the way that new content types, templates, or web capabilities are added to OpenCms. Later in this book, we will go into the details of creating an administration module for OpenCms.

The OpenCms Web Request Process

It would be useful to understand how a request made to OpenCms results in the display of content. The structure of a typical OpenCms URL looks like:

http://[server]:[port]/[context]/[servlet]/[parameters]

For example:

http://mydevserver:8080/opencms/opencms/system/logon/index.html

Server: mydevserver

Port: 8080

Context: opencms

Servlet: opencms

Parameters: /system/logon/index.html

The request will invoke the opencms servlet with the parameter /system/logon/index.html. When the servlet runs, it goes through the following sequence:

Uses the passed in parameter to locate the item in the virtual file systemDetermines its access permissions, and see if it can be accessed by the requestorDetermines its file typeBased on its file type, locates a resource loader for that typeInvokes the resource loader to load the file

There is a bit more going on; but for our discussion we will consider only the previous steps. It can be seen that after permission has been established, a resource loader is utilized to load the file. Resource loaders are responsible for encapsulating the knowledge required to load and execute items requested from the VFS. There are several types of resource loaders provided by OpenCms, and there is a one-to-one mapping between an OpenCms file type and a resource loader.

Most site content is structured XML, and the assigned loader for this type is the CmsXmlContentLoader. When this resource loader is invoked, it examines the properties assigned to the resource, specifically looking for the template-elements property. This property must contain the full path to a template used to render the XML content. The resource loader passes control to the template. When the template runs, it takes the responsibility of parsing the original XML resource, and displaying it. Most templates will be JSP files, but they are not restricted to this type. In fact, when a template is invoked, it follows the same loading process, resulting in its corresponding resource loader being invoked. This allows for new template languages to be plugged into OpenCms, by writing and adding new resource loaders.

As resource loaders act on file types, the extension of a file in the VFS is not significant. This means that a file with an HTML extension in the VFS may, in fact, be run as a JSP file, or vice versa. A useful way to leverage this, is to create a file with a .CSS extension that is in fact a JSP file. The JSP could then dynamically generate the CSS based on browser type. We will discuss resource loaders in more detail in a later chapter.

OpenCms Web Application Packaging

Although OpenCms is distributed in a standard WAR file it must be exploded when it is deployed into the application server. This is because, in order to execute a JSP stored in the OpenCms virtual file system, the JSP must be written to the real file system first. As the web application writes to the file system, it cannot be run as a WAR file.

Building a Complete Site with OpenCms

In this book, we will build a sample blog site using OpenCms. The site will have the following features:

We will be able to create blog entries easily.