dotCMS Architecture Overview
dotCMS is an extendable web content management platform. At the core of dotCMS is the web administrative tools. dotCMS offers full management capabilities that can be extended and customized through the use of dotCMS' plugin architecture. For most Administrative functions, dotCMS uses Apache Struts for maintaining a MVC pattern for system tools.
dotCMS Content Engine
Central to dotCMS is the Content Engine, whcih can be accessed programmatically via the ContentAPI or via a number of RESTful/URL addressable interfaces. Custom XML formats can be delivered using templates driven by Velocity Markup. All accesses to the Content Engine are permission based - content permissions are verified down to the object level. The ContentAPI provides pre and post interceptors that can be used to override content, checkin and publishing behaviors.
Programmatic Layers: dotCMS Web Admin Interface
The dotCMS core provides the backend interface, content management funcionality, athorization and permisioning, versioning, etc. The tooling in dotCMS follow a multi-tier architecture that clearly delineates the View/UI, the Controller logic, the Model and the API/Service layers.
Some of the basic architectural elements are:
- APIs: APIs are the recommended way of interacting with the core functionality of dotCMS. Concrete APIs con be found using the APILocator
- Factories: Factories act as the DAO layer of dotCMS, providing single source access to objects weather they come from DB, cache or from the index.
- Caches: Caches are mostly handled by the different factories. However it's important to understand that the cache plays and import role in dotCMS, therefore data should only be interacted with through the factories, to prevent inconsistencies in the cache.
- Persistance: Persistance to the database is handled mostly through Hibernate, using POJOs. Transactional logic is provided by HibernateUtil and DotHibernate
Other services are provided to be leveraged during development:
- Mail services
- Unified logging
- Configuration services
- User management, both for front end and for back end.
Page Delivery from the Front end
Each node in a dotCMS cluster has an individual lucene index, memory cache and on disk cache that dotCMS uses to build and deliver a page. Dynamic pages in dotCMS can be built and delivered without ever hitting the shared database. Content and cache updates are invalidated across each node the cluster and rebuilt lazily as needed by each node.
User Interaction with dotCMS
Depending on level of expertise, dotCMS offers different ways of building content and applications with the dotCMS system.
Content contributors can interact with the dotCMS using web based management tools, This allows contributors to manage pages, files and content objects based on their permissions.
dotCMS is unique in the rich tooling provided to scripting users with light programming knowledge. These users can build templates, custom content types, custom macros and widgets. Velocity scripting can be used to integrate with 3rd party web services, databases or any XML based data feed. In dotCMS, you can generally achieve a majority of just about any customization from within the tool itself.
Finally, for the Java developers, dotCMS offers a powerful plugin architecture with well defined extension points that make deeper programatic integrations straightforward. Using plugins, a developer can add new web frameworks to dotCMS and override just about any system class or function. ViewTools provide a way to expose custom APIs or methods to the Velocity view layer and can drive view logic and content when building web applications in dotCMS.