AEM (e antes disso, o CQ) há muito tempo usa o princípio de sobreposições para permitir que você estenda e personalize os consoles e outras funcionalidades (por exemplo, criação de página).
A sobreposição é um termo que pode ser usado em muitos contextos. Neste contexto (estender AEM) uma sobreposição significa usar a funcionalidade predefinida e impor suas próprias definições sobre isso (para personalizar a funcionalidade padrão).
Em uma instância padrão, a funcionalidade predefinida é mantida em /libs
e é recomendável definir sua sobreposição (personalizações) na ramificação /apps
. AEM usa um caminho de pesquisa para localizar um recurso, pesquisando primeiro a ramificação /apps
e depois a ramificação /libs
(o caminho de pesquisa pode ser configurado). Esse mecanismo significa que sua sobreposição (e as personalizações definidas ali) terão prioridade.
Desde o AEM 6.0, foram feitas alterações no modo como as sobreposições são implementadas e usadas:
AEM 6.0 em diante - para sobreposições relacionadas a Granite (isto é, a interface habilitada para toque)
Método
Reconstrua a estrutura /libs
apropriada em /apps
.
Isso não requer uma cópia 1:1, o Sling Resource Fusion é usado para fazer referência cruzada às definições originais necessárias. A fusão Sling Resource presta serviços de acesso e fusão de recursos através de mecanismos de diferenciação (diferenciação).
Faça quaisquer alterações em /apps
.
Vantagens
/libs
.Sobreposições e sobreposições não granitas anteriores ao AEM 6.0
Método
Copie o conteúdo de /libs
para /apps
É necessário copiar a subramificação inteira, incluindo as propriedades.
Faça quaisquer alterações em /apps
.
Desvantagens
/libs
, talvez seja necessário recriar determinadas alterações que ocorrem na sobreposição em /apps
.O Sling Resource Fusion e os métodos relacionados só podem ser utilizados com Granite. Isso significa que a criação de uma sobreposição com uma estrutura de esqueleto é apropriada apenas para a interface de usuário padrão habilitada para toque.
As sobreposições para outras áreas (incluindo a interface clássica) envolvem a cópia do nó e da subestrutura inteira apropriados e, em seguida, as alterações necessárias.
As sobreposições são o método recomendado para muitas alterações, como configurar seus consoles ou criar sua categoria de seleção para o navegador de ativos no painel lateral (usado durante a criação de páginas). São exigidos como:
Você não deve fazer alterações na /libs
ramificação Quaisquer alterações feitas podem ser perdidas, pois essa ramificação está sujeita a alterações sempre que você:
Eles concentram suas alterações em um local; tornando mais fácil para você rastrear, migrar, fazer backup e/ou depurar as alterações conforme necessário.
Para sobreposições, o recurso fornecido é uma agregação dos recursos e propriedades recuperados, dependendo dos caminhos de pesquisa que podem ser definidos:
O recurso Resolver Search Path, conforme definido em Configuração OSGi para a Apache Sling Resource Resolver Fatory.
/apps
, /libs
- portanto, o conteúdo de /apps
tem uma prioridade mais alta do que o de /libs
(isto é, sobreposições).Dois usuários do serviço precisam de acesso JCR:READ ao local onde os scripts estão armazenados. Esses usuários são: components-search-service (usado pelos componentes com.day.cq.wcm.coreto access/cache) e sling-scripting (usado por org.apache.sling.servlets.resolver para localizar servlets).
A configuração a seguir também deve ser configurada de acordo com o local onde você coloca seus scripts (neste exemplo, em /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/"]
Finalmente, o Servlet Resolver também deve ser configurado (neste exemplo, para adicionar /etc também)
PID = org.apache.sling.servlets.resolver.SlingServletResolver
servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
Alguns exemplos são abordados quando: