Sovrapposizioni

AEM (e prima ancora, CQ) utilizza da tempo il principio delle sovrapposizioni per estendere e personalizzare le console e altre funzionalità (ad esempio, l’authoring delle pagine).

Sovrapposizione è un termine che può essere utilizzato in molti contesti. In questo contesto (estensione AEM) una sovrapposizione significa acquisire le funzionalità predefinite e imporre le proprie definizioni su di essa (per personalizzare la funzionalità standard).

In un’istanza standard la funzionalità predefinita è mantenuta in /libs ed è consigliabile definire la sovrapposizione (personalizzazioni) sotto il /apps ramo. AEM utilizza un percorso di ricerca per trovare una risorsa, eseguendo prima la ricerca nel /apps ramo e poi nel /libs ramo (il percorso di ricerca può essere configurato). Questo meccanismo significa che la sovrapposizione (e le personalizzazioni qui definite) avranno priorità.

A partire dal AEM 6.0, sono state apportate modifiche alle modalità di implementazione e utilizzo delle sovrapposizioni:

  • A partire da AEM 6.0 - per le sovrapposizioni Granite(ad es. l’interfaccia touch)

    • Metodo

      • Ricostruire la struttura appropriata sotto /libs /apps.

        Questa operazione non richiede una copia 1:1. La fusione delle risorse Sling viene utilizzata per fare riferimento incrociato alle definizioni originali richieste. Sling Resource Merger fornisce servizi per l'accesso e l'unione delle risorse mediante meccanismi diversi (differenziazione).

      • Apportate eventuali modifiche in /apps.

    • Vantaggi

      • Più robusto ai cambiamenti in /libs.
      • Ridefinisci solo ciò che è effettivamente richiesto.
  • Sovrapposizioni e sovrapposizioni non granite prima di AEM 6.0

    • Metodo

      • Copiare il contenuto da /libs a /apps

        È necessario copiare l’intero ramo secondario, incluse le proprietà.

      • Apportate eventuali modifiche in /apps.

    • Svantaggi

      • Sebbene le modifiche non vadano perdute in caso di modifiche apportate in /libs, potrebbe essere necessario ricreare alcune modifiche apportate nella sovrapposizione /apps.
ATTENZIONE

La fusione di risorse Sling e i metodi correlati possono essere utilizzati solo con Granite. Ciò significa che la creazione di una sovrapposizione con una struttura di ossatura è appropriata solo per l’interfaccia touch standard.

Le sovrapposizioni per altre aree (inclusa l’interfaccia classica) comportano la copia del nodo appropriato e dell’intera sottostruttura, quindi l’esecuzione delle modifiche richieste.

Le sovrapposizioni sono il metodo consigliato per molte modifiche, ad esempio per configurare le console o creare la categoria di selezione nel browser delle risorse nel pannello laterale (utilizzato per l’authoring delle pagine). Sono richiesti come:

  • Non **è necessario apportare modifiche al/libsramo Eventuali modifiche apportate potrebbero andare perdute, in quanto questo ramo può subire modifiche ogni volta che:

    • aggiornare l'istanza
    • applica un hotfix
    • installare un pacchetto di funzioni
  • Consentono di concentrare le modifiche in un'unica posizione; facilitando il monitoraggio, la migrazione, il backup e/o il debug delle modifiche, a seconda delle necessità.

Configurazione dei percorsi di ricerca

Per le sovrapposizioni, la risorsa consegnata è un insieme di risorse e proprietà recuperate, a seconda dei percorsi di ricerca che è possibile definire:

  • Il percorso di ricerca di Resource Resolver come definito nella configurazione OSGi per Apache Sling Resource Resolver Factory.

    • L'ordine superiore dei percorsi di ricerca indica le rispettive priorità.
    • In un’installazione standard le impostazioni predefinite principali sono /apps, /libs pertanto il contenuto di /apps ha una priorità maggiore di quella di /libs (ovvero sovrappone ).
  • Due utenti di servizi necessitano dell'accesso JCR:READ alla posizione in cui sono memorizzati gli script. Tali utenti sono: components-search-service (utilizzato dai com.day.cq.wcm.coreto access/cache components) e sling-scripting (utilizzato da org.apache.sling.servlets.resolver per trovare servlet).

  • È inoltre necessario configurare la seguente configurazione in base al punto in cui vengono inseriti gli script (in questo esempio in /etc, /libs o /apps).

    PID = org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
    resource.resolver.searchpath=["/etc","/apps","/libs"]
    resource.resolver.vanitypath.whitelist=["/etc/","/apps/","/libs/","/content/"]
    
  • Infine, deve essere configurato anche Servlet Resolver (in questo esempio per aggiungere anche /etc)

    PID = org.apache.sling.servlets.resolver.SlingServletResolver  
    servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
    

Esempio di utilizzo

Alcuni esempi riguardano:

In questa pagina