13 Mar 2015

Adobe Experience Manager (AEM) #2 : Technologies

aemAdobe Experience Manager est une application Web en Java construite autour d’OSGI. OSGI est une plateforme où  des composants standardisés peuvent être déployés, inclus et utilisés par une ou des applications. AEM s’appuie également sur Apache Sling, un framework d’applications Web orienté contenu interagissant avec un référentiel Java Content Repository (JCR).

L’applicatif d’AEM (ses interfaces, ses fonctionnalités) est un ensemble de bundles OSGI (dits « bundles », voir plus loin dans l’article) déployés sur la plateforme.

Les applications d’AEM comme WCM (Websites Content Management), DAM (Digital Assets Management), MCM (Marketing Content Management) et autres partagent donc la même infrastructure et le même framework d’interface utilisateur. Cette architecture et ce framework partagé sont appelés « Granite ».

AEM est une application accessible depuis n’importe quel navigateur Web moderne. Aucune installation n’est requise sur les postes clients. Ainsi, d’importantes installations avec des centaines d’utilisateurs peuvent donc être déployées et mises à jour facilement.

La couche applicative d’AEM apporte de nombreuses fonctionnalités, dont :

  • Application CMS : gestion de sites Web, multi-langues, gestion des médias, publication, moteur de workflow, versionning des pages etc.
  • Création de composants: éléments indépendants et réutilisables (édition et rendu du contenu). AEM fournit d’ailleurs une bibliothèque de composants (zone de texte riche, image, menu, footer, etc.)
  • Interfaces utilisateur : les interfaces d’AEM et les boites de dialogue d’édition de contenu sont construits grâce au framework JavaScript ExtJS/Sencha.

 

aem_archi_granite_2

 

1) OSGI

OSGI est une plateforme Java permettant d’installer, démarrer, modifier des composants de code, nommés « bundles », à chaud, c’est-à-dire sans redémarrer le serveur.

Une solution OSGI apporte de nombreux bénéfices :

  • Le code devient plus facile à écrire et à tester grâce au découpage en composants
  • La réutilisation de composants est améliorée (facilité d’utilisation)
  • Les déploiements de bundles sont aisés (fichiers Zip normés à installer via une console d’administration
  • Les bugs sont détectés plus tôt
  • Le moteur OSGI permet de voir en direct quels sont les composants actifs et visualiser les dépendances entre eux.

 

aem_archi

AEM utilise Apache Felix qui est une implémentation de la plateforme OSGI fournissant une console d’administration et une API permettant notamment de créer facilement des bundles OSGI et d’interagir avec le code déployés (notions de servlets, de services, etc.).

 

2) Apache Sling

Apache Sling est un framework permettant de développer des applications Web orientées contenu.

L’intérêt de Sling est d’exposer du contenu (généralement stocké dans un référentiel JCR) comme des ressources http favorisant ainsi une architecture de type RESTful (par le biais de requêtes REST).

Les principes d’une architecture Web RESTful sont :

  • Orienté ressources : chaque bribe d’informations comme un libellé, une actualité, une description de produit, un fichier ou une image par exemple est une ressource (« everything is content »)
  • Les ressources sont adressables et accessibles en REST via le protocole http. Chaque ressource possède une URI spécifique.
  • REST est un protocole normé, on utilise simplement les méthodes fournies comme GET, POST, PUT ou DELETE pour interagir avec le contenu.
  • Orienté représentation : un objet est référencé par une unique URI mais avoir différents formats de représentation disponible. Par exemple, une requête AJAX réclame du JSON, une application Java demande du XML, un navigateur Web veut du HTML. Pour répondre à ceci, on pourra créer différents services de représentation et rendu pour chaque type de ressource.
  • Communication sans état (stateless). REST est lui-même stateless, il n’utilise pas de cookies et ses clients doivent se ré-authentifier à chaque requête.

 

Sling étant orienté ressources, un contenu correspond généralement à des nœuds JCR. Au contraire des applications Web classiques, une requête Sling cherche d’abord à résoudre la ressource et ensuite sélectionne le traitement (servlet ou script) lié à ce type de ressource.

 

sling_rest_request_processing

 

3) Java Content Repository (JCR)

Java Content Repository est un espace de stockage de données semi-structuré sous la forme d’une arborescence de nœuds. Chaque élément (Item) est soit un nœud (Node), soit une propriété (Property).

Une Property stocke l’information (nom et valeur associée). Un Node structure le contenu.

jsr170-4

Il combine certaines fonctionnalités offertes par une base de données relationnelle traditionnelle et un système de fichiers.

Les avantages d’un système de fichiers repris par JCR :

  • Hiérarchie : chaque contenu JCR peut être retrouvé par son chemin
  • Contenu semi-structuré : JCR peut stocker des documents structurés (comme des fichiers XML) comme de simples ressources ou comme des structures intégrées directement dans la hiérarchie JCR.
  • Contrôle d’accès et « locking » : JCR peut restreindre l’accès à certaines parties de l’arborescence grâce aux règles ACL (Access Control), des nœuds rajoutés à certains niveaux de l’arborescence pour un groupe ou un ou plusieurs utilisateurs (droit de lecture, d’ajout, de modification, de suppression, de privilèges personnalisés sur un niveau donné). On peut également « locker » du contenu pour éviter des conflits dans JCR.

 

Les avantages d’une base de données relationnelle repris par JCR :

  • Requêtes de sélection : Un langage XPATH ou un langage proche de SQL permet de réaliser des requêtes de sélection dans l’arborescence de nœuds.
  • Contenu structuré : JCR peut contraindre une structure de données de respecter un schéma (hiérarchie de types de nœuds, types de propriétés autorisées sur tel type de nœud).
  • Intégrité référentielle : JCR peut contraindre l’intégrité référentielle entre différents « items » de contenu.

 

JCR offre également d’autres services :

  • Recherche « full text »
  • Ordonner/trier l’arborescence
  • Observation : un client de l’API JCR peut enregistrer des écouteurs afin de réagir aux changements survenus sur le référentiel.
  • Versions au niveau arborescence, au niveau nœud, au niveau propriété.

 

La nouvelle version d’AEM (version 6) se base sur Apache Jackrabbit Oak comme implémentation de JCR. Les versions précédentes, jusqu’à la version 5.6, utilisaient Adobe CRX. Oak et CRX apportent notamment une API pour interagir plus facilement avec JCR.

 

Dans une troisième partie, publiée prochainement, nous présenterons Sightly, le nouveau moteur de “templating”  introduit par AEM 6, permettant de développer plus facilement des composants graphiques.

Share