With the introduction of 5.x in 2012, eZ Publish made an important leap forwards in terms of technology, introducing a new architecture side by side with the 4.x based "Legacy", allowing user to gradually migrate towards what by 2015 was set to become the 6th generation eZ CMS: eZ Platform.

In summary eZ Publish 5.0 introduces a new technology stack referred to as "Platform" (earlier sometimes referred to as "new stack", "6.x stack" or "Symfony stack") next to the existing eZ Publish 4.x technology, herby referred to as Legacy. Platform Stack will throughout the 5.x series mature for each release until it becomes ready to be next evolution of eZ Publish.

 This approach allows for very high degree of forward and backwards compatibility, its accomplished thanks to a Legacy Bundle acting as a "bridge" between the two, passing on platform/symfony requests to legacy whenever needed and injecting sessions, configuration, user and integrating cache across the two systems.

This document will explain why we are renewing our technology platform, and to some degree explain what this evolution in architecture means to eZ Publish developers and users, and last but not least how eZ Systems is affected by these changes.

Why this change in technology

The background for the changes is to meet the challenges ahead:

The overall goal is to reach Digital Service Excellence, ie, we would like our partners to be able to offer the customers exactly what they want, within acceptable timeframes and price tags on the eZ Publish Platform.

What are the changes?

eZ Systems is now introducing the following as the new "Platform":

And as a result of all these changes, a major last item is

What will be gained?

Symfony2

With Symfony as the web framework eZ Publish will be more accessible. Thanks to the framework, it will be used for instance to extend eZ Publish applications with new features, potentially not based at all on the content repository (for example, business specific application logic) using a standard PHP framework and a very clean application design with minimum interlocking with eZ Publish itself.

Any developer knowing Symfony will then be able to easily develop eZ Publish Bundles the equivalent of eZ Publish legacy extensions.

This will cater for :

Twig

Initially, eZ Systems has developed its own templating engine. eZ has also worked and redeveloped a second one at some point as part of the eZ Component project. When designing eZ Publish 5, we knew the old template engine was not good enough anymore and needed to be replaced. We knew the eZ Components template engine we contributed and originated was an option, but we decided to go for another one: Twig. Reasons are multiple: quality of course (even if the eZ components one was also very high quality), integration and cohesion to use it with the Symfony stack and finally again the strength and size of the community using it today. Symfony has developed Twig as a standard template engine, and eZ Systems is using it to further the following:

This is a move that will influence every stakeholder in the eZ Publish development. As developers will implement faster, this also mean project will significantly improve in total cost of ownership as well as in time to market. 

New storage systems

In order to meet performance and scalability requirements in the future, eZ introduces new storage systems with the version 5 serie.

In 5.0, this storage system lives beside the legacy storage system and data model, but will use the new API to access the data.

Also in 5.0 version, this new storage engine only support MySQL relational database, nevertheless it is designed to allow the development of drivers for other storage engines through the Persistence SPI (service provider interface) and in the future will include drivers for NoSQL and Document based storage engine.

The ultimate goal is to open for custom storage developments.

Rest API

In order to meet all multi-channel requirements we are developing a Rest API that cover all core feature of content management so we can integrate with any application on any channel in any programming language.
The gain for users will be for anyone integrating eZ Publish with other applications, not only the development will be significantly improved but more importantly, the value of an API also lies in the maintainability and sustainability it offers. the new rest api is designed to stay and will remain identical in all future 5.x version. this means that development done on top of the api will seamlessly support eZ Publish version upgrades.

PHP API

The PHP API, also called Public API, is the development glue and will a create shield between internal and external developments on eZ Publish. This will cater for an easier maintainability of code and speed up the performance of eZ Publish. PHP developers will experience a better extensibility which in turn  will enable them to create extensions to eZ Publish faster and easier.

The Public API is key to development speed, shorter projects and better quality. Important to be noted: the php api is the foundation for the rest api and the second is naturally relying on the first.

Compatibility with the legacy architecture

When we introduce changes of this magnitude, eZ Systems as an international software house must also consider the reality of the installed customer base. Every installation must be able to take care of the old and create on the new architecture.
The reason for change is of course to be able to meet new requirements and the need to enable progressive changes.
 

Understanding the architecture in more detail

The target architecture: "eZ Platform"

The first important thing to understand about the new architecture is to explain it standalone, without considering the old legacy architecture.

The following diagram shows a simplistic view of this new architecture, and a more detailed view for developers.

  

Simplified viewDetailed view


The new architecture is layered and uses clearly defined API’s between the layers.

To a lower level, the new architecture also totally redefined the way the system store data. while this is not finalized in version 5.0 (where the new storage system is only shipped with MySQL support), the architecture, when finalized will rely on a storage API that will be used to develop drivers to any kind of storage subsystem.

A motto for this new architecture is to heavily use APIs that will be maintained on the long term to ease upgrades and provide lossless couplings between each part of the architecture, improving the migration capabilities of the system at the same time.

 

The "real" version 5.x architecture: "Legacy" and "Platform" together

The chapter above is only explaining the new architecture but, as mentioned, version 5 also offers a way to run the legacy eZ Publish stack, in order to simplify upgrade and switch to version 5. This result in the end in a more sophisticated architecture that is illustrated in the diagram below.


 
 

The main difference is, the cohabitation between the new architecture explained in the previous chapter (on the right) and the previous architecture (on the left).

If we look at the old architecture, we can see that it is more monolithic: no defined public PHP API, a business logic implemented in the kernel but very dependent of the storage system and the underlying data model, an existing rest api but limited to read access to the content repository.
 

This whole legacy architecture is in its whole included with version 5, and can be used as is.

This means that, for people having developed 4.x websites and that are reluctant to invest time in migrating or even learning the new architecture components, they can use version 5 exactly as they were using version 4. Even the controller (access to the application through the web server) can totally bypass the new architecture (in that case the Symfony framework controller) and directly call the legacy eZ Publish controller and the legacy template engine.

 

On its side, the new architecture has been implemented, and eZ will implement new features and applications on top of it subsequently. So, as part of 5.0, the new architecture is in place, but does not provide yet the full application scope.

 

What is more interesting to understand is how these two integrate:

 

  1. First on the presentation side, the new eZ Publish 5 controller makes it possible to serve pages and functions that are either resulting from the new template engine or the legacy template engine. This is a first level of dual compatibility that will help developers in a smooth transition from one architecture to the other, starting with legacy templates and progressively replacing them with templates for the new system, Twig.
     
  2. Second, on the api side, the Public API has been designed to work against the business logic and to be used either on top of the legacy storage or on top of the new storage system. This means that, by implementing the new architecture and embracing the PHP Public API, developers enable an easy transition from the old data model to the new one.  An extension developed on top of the Public API will equally work on an old content repository or on a brand new one based on the new architecture.

 

These two ways to implement a compatibility between the past architecture and the new one offers a wide range of possibilities and a smooth transition path.

Summary on the ways to use eZ Publish 5

Using eZ Publish 5 in "pure legacy" setup

This way is the less disruptive coming from 4.x. In this way, eZ Publish 5.0 totally behave as if it was an eZ Publish 4.7, or we should say 4.8. This is ideal for users who have large existing applications with large amount of data and who are not willing to invest in learning and migrating them immediately.

In this way, your vhost is setup to go directly to legacy stack, and developers will see almost no differences.

 

In this setup you can not use any of the new Symfony or Platform features, and legacy "bridge" will not be used used for integrating the two system together.

If you choose this because of performance concerns, see our recommendations in Legacy code and features on how to alternatively handle those.


 

Using eZ Publish 5 with both legacy & platform stack to start to take advantage

This way offers a transition and allows to combine old template and new templates in the same application. In this case, the users will rely on the administration interface of eZ Publish as well as on the ez tool bar for front-end editing, through the legacy templates, but the front end will be either based on legacy or new twig based templates.

 

In this model, the two kernels can be used and the system can this way benefit from the Public API and the new REST API built on top.

 

 

This setup can be configured in "legacy mode" per siteaccess, if enabled legacy handles dynamic url alias lookups and page layout handling, it's what is used out of the box where admin is configured in this mode and demo frontend is not.

See Legacy code and features for how to take advantage of this for gradual transition your siteaccesses.


Using the brand new "Platform"architecture only

This case is the one that will deliver very strong improvements in scalability and performance, in this case the whole new architecture is used and there is no way to reuse components from the legacy architecture.

 

This means that:

While this might sound restricting for the time being, it is clearly the foundation of the future of eZ Publish: eZ Platform.

In the context of eZ Publish 5, it can be useful for new projects relying only on the concept of "content as a service" the platform is a high performance and scalability content repository with very advanced services but provide no editorial user interface. for traditional content management.


 

 Learn more with this video :