AEM (et, avant cela, CQ) applique depuis longtemps déjà le principe des incrustations pour vous permettre d’étendre et de personnaliser les consoles et d’autres fonctionnalités (la création de pages, par exemple).
Recouvrement est un terme qui peut être utilisé dans de nombreux contextes. Dans ce contexte, l’incrustation désigne l’utilisation de la fonctionnalité prédéfinie et l’application de vos propres définitions par-dessus (afin de personnaliser la fonctionnalité standard).
Dans une instance standard, la fonctionnalité prédéfinie est conservée sous /libs
et il est conseillé de définir votre incrustation (personnalisations) sous la branche /apps
. AEM utilise un chemin de recherche pour localiser une ressource, en commençant par la branche /apps
, puis la branche /libs
(le chemin de recherche peut être configuré). Ce mécanisme signifie que votre incrustation (et les personnalisations qui y sont définies) est prioritaire.
Depuis AEM 6.0, des modifications ont été effectuées sur le plan de la mise en œuvre et de l’utilisation des incrustations :
AEM 6.0 et versions ultérieures : pour les incrustations liées à Granite (interface utilisateur tactile)
Méthode
Recréez la structure /libs
appropriée sous /apps
.
Cela ne nécessite aucune copie 1:1 ; Sling Resource Merger est utilisé pour effectuer des références croisées avec les définitions d’origine qui sont requises. Sling Resource Merger propose des services pour accéder à des ressources et les fusionner par le biais de mécanismes de différenciation (diff).
Le cas échéant, effectuez des modifications sous /apps
.
Avantages
/libs
.Recouvrements autres que Granite et antérieurs à AEM 6.0
Méthode
Copiez le contenu de /libs
vers /apps
.
Vous devez copier la sous-branche entière, y compris les propriétés.
Le cas échéant, effectuez des modifications sous /apps
.
Inconvénients
/libs
n’entraînera pas la perte des changements effectués. Cependant, il se peut que vous deviez recréer certaines modifications affectant votre recouvrement sous /apps
.Sling Resource Merger et les méthodes connexes ne peuvent être utilisées qu’avec Granite. Cela signifie que la création d’un recouvrement avec une ossature n’est appropriée que pour l’interface utilisateur (IU) tactile standard.
Les incrustations relatives à d’autres zones (y compris l’IU classique) impliquent la copie du nœud approprié et de toute la sous-structure, apportant ainsi les modifications nécessaires.
Il est conseillé de recourir aux incrustations pour de nombreuses modifications ; par exemple, pour configurer vos consoles ou créer votre catégorie de sélection dans l’explorateur de ressources dans le panneau latéral (utilisé lors de la création de pages). Ils sont requis pour les raisons suivantes :
Vous **ne devez pas effectuer de modifications dans la branche /libs
**Les modifications que vous effectuez risquent d’être perdues, car cette branche est sensible aux modifications lorsque vous :
Ils centralisent vos modifications dans un seul emplacement ; ils facilitent le suivi, la migration, la sauvegarde et/ou le débogage de vos modifications, suivant les besoins.
Dans le cas des incrustations, la ressource diffusée est un regroupement des ressources et propriétés récupérées, en fonction des chemins de recherche qui peuvent être définis :
La ressource Resolver Search Path, telle qu’elle est définie dans la configuration OSGi pour Apache Sling Resource Resolver Factory.
/apps
, /libs
. Par conséquent, le contenu de /apps
a une priorité supérieure à celui de /libs
(en d’autres termes, il le recouvre).Deux utilisateurs du service ont besoin d’un accès JCR:READ à l’emplacement de stockage des scripts. Ces utilisateurs sont : components-search-service (utilisé par les composants de cache et d’accès com.day.cq.wcm.coreto) et sling-scripting (utilisé par org.apache.sling.servlets.resolver pour rechercher des servlets).
La configuration suivante doit également être définie en fonction de l’emplacement de stockage des scripts (dans cet exemple sous /etc, /libs ou /apps).
PID = org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
resource.resolver.searchpath=["/etc","/apps","/libs"]
resource.resolver.vanitypath.whitelist=["/etc/","/apps/","/libs/","/content/"]
Enfin, le Servlet Resolver doit également être configuré (dans cet exemple, pour ajouter également /etc).
PID = org.apache.sling.servlets.resolver.SlingServletResolver
servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
Quelques exemples sont donnés pour les scénarios suivants :