Structure
Just like the Model-View-Controller Pattern, webCF is divided into three parts.
By partitioning these parts from each other, developers aren’t forced to deal with every part of this application, but only with the parts, they want to change.
According to the intention of giving the ability of creating a web community easily, didn’t reinvent the wheel by writing all these components.
In fact this project couples other, well-known frameworks.
The model-part of this application, storing the persistent data like userdata and -relations is managed by Hibernate.
By using this framework, the resulting web-community is virtually independent from the used database.
Developers only have to specify the so-called DAOs (data access objects).
The communication with the “physical” database is handled by Hibernate.
The service-layer is prepared with the previously called main functions of webCF.
For example a Usermanger for handling common userrelated operations is applicable.
A big part of this controll-layer is the managing of plug-ins. For this unique feature another framework is used - the Java Plugin Framework.
This framework allows the developer to controll plugins and the dependencies between them.
At last there is the view-division as interface to the user.
This part has to handle the communication between the controller and a webservice.
For fullfilling this task the Struts2-Framework in combination with Tiles is used.
Thus, the familiarization for using webCF is kept really minimal and developers can concentrate on their main task!
Frameworkadaptations
In order to keep webCF such as flexible, the basic frameworks had to be slightly adapted.Therefore the available listeners were changed in a way, so that virtually every single configuration-file is dynamically loaded from plugins.
The database-entries are managed through Hibernate in a structure like this:
In order to load the plugins and their additional beans, the WebCFPluginManager is used:
Last but not least, the Struts-actions and Tiles-definitions are loaded dynamically out of the plugin folders.
This task is implemented in the WebCFStrutsListener and WebCFTilesListener: