Skip to end of metadata
Go to start of metadata

Overall Architecture

Alfresco is built on top of Spring framework. Almost every component in Alfresco is implemented as Spring bean.
There is a group of Spring beans called services that interact with the data (read/write content, edit metadata of nodes, browse nodes and their parents and children) and form the core of Alfresco.

The repository provides REST services called *web scripts* that are available through HTTP requests. The webscripts follow MVC pattern - there is a controller (usually implemented in Java but could be also implemented using server-side JavaScript) that processes the requests, stores results data in the model and returns a response to the caller using the view (Freemarker template that produces the final markup which usually is a JSON or XML).
More info about webscripts can be found here.

The original Architecture can be found here.

GUI architecture

Alfresco has a web client called Alfresco Share that is a thin client for the Alfresco repository. It is based on a Spring Surf framework (a scriptable, content-oriented framework for defining pages, templates, components and layout of a web application).

The web pages are defined using XML. Every page has its own web script with a controller (controllers can be written using various script languages like JavaScript, PHP, Groovy, etc.) which can fetch data from Alfresco repository, process and store it in the model and Freemarker template as a view, where the page regions are defined using custom Freemarker macros. Every region itself is another webscript with its own model, view and controller. When a Surf page is requested all web scripts are invoked and the produced markup is sent to the client.

Most of the page content is loaded asynchronously. The part of the page where the data will be shown is usually marked with an empty container element (usually a html div element). When the container is loaded on the page, an AJAX request is sent to the repository to fetch a particular data, transform it into a proper for display format (usually JavaScript objects) and update the content of the page so the data becomes visible to the user.


Alfresco uses MyBatis (iBatis) persistence framework. The Community Edition works only with MySQL and PostreSQL (free databases). The Enterprise Edition works with commercial databases like MSSQL, Oracle, DB2. More info could be found here.

Extension points

Extensions to the Alfresco repository are defined as spring beans of a specific type or are named using a specific name pattern and are processed at the startup of the server.
The services are defined as Spring beans and can be easily overridden by custom Spring bean with the same name. Additionally invocations of an existing Spring bean can be decorated using Spring AOP (AspectJ definitions).

The GUI part of Alfresco is usually hard to extend. To change the behavior of an existing functionality, the existing code should be changed directly which makes it hard to migrate to a newer version of Alfresco.

Plugins/Plugins and Ready to use extensions/Third party integrations

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.