Chon CMS ALPHA

OSGi modular Java CMS

Architecture

We really want to keep things simple, but when we developed the framework we wanted to be able to create each use case that is currently implemented online. That is the big challenge, keep things simple while enabling a model for anything. With help of great opensource techologies available online we were able to do so.

Technologies

Architecture

JCRApplication logic is very simple, for each request made to our server, our application looks for a resource by URL typed in browser; first is looking into static resources (css, javascript), then looking into JCR. If static resource we render it as is, but if it is a JCR node we render by rules specified in execution environment. Those rules are defined by plugins. 

architecture.png

org.chon.cms.core plugin defines Velocity Template renderer for node. That is usually used for HTML rendering of a node with apache velocity template. Node is merged with template using $this variable, and with all its properties and childs it is enabled in design.

Core plugins defines several types of nodes that will by default use predefined template file for rendering a node:

  - RootNode - root node (Home Page), that is www public node in repository, usually redirects to html node, but can be rendered in pages/home.html

  - CategoryNode - simple hierarchy node that contains childs, rendered in pages/category.html

  - HtmlNode - node that contains html content and can also have childs (images, documents), rendered in pages/view.html

Each node requested is checked in its type definition to find a renderer. All above will use velocity template renderer that merge node content with velocity template.

 

Page can have additional widgets that are injected by designer using extenstions (eg, menus).

 

Main concept would be:

JCR Node + HTML (Velocity) Design + Extenstions (Registered in User Plugins) = Page View

merging-with-templates.png