Em versões anteriores de AEM várias APIs foram expostas via Uber Jar. Algumas dessas APIs não foram destinadas aos clientes, mas foram expostas ao suporte AEM funcionalidade em pacotes. A partir de agora, as APIs de Java serão marcadas como Públicas ou Privadas para indicar aos clientes quais APIs são seguras para usar no contexto de atualizações. Outras especificações incluem:
O pacote de compatibilidade conterá um Uber JAR compatível para garantir compatibilidade com versões anteriores
As APIs Java marcadas como Private destinam-se apenas a ser usadas por pacotes internos AEM e não devem ser usadas por pacotes personalizados.
O conceito de Private e Public neste contexto não deve ser confundido com noções Java de classes públicas e privadas.
AEM há muito tempo usa o principal das sobreposições e da Fusão de recursos Sling para permitir que os clientes estendam e personalizem a funcionalidade AEM. A funcionalidade predefinida que alimenta os consoles AEM e a interface do usuário é armazenada em /libs. Os clientes nunca devem modificar nada abaixo de /libs, mas podem adicionar conteúdo adicional abaixo de /apps para sobrepor e estender a funcionalidade definida em /libs (Consulte Desenvolvimento com sobreposições para obter mais informações). Isso ainda causou vários problemas ao atualizar AEM, já que o conteúdo em /libs pode mudar, fazendo com que a funcionalidade de sobreposição quebre de maneiras inesperadas. Os clientes também podem estender componentes AEM por herança via sling:resourceSuperType, ou simplesmente referenciar um componente em /libs diretamente por sling:resourceType. Problemas semelhantes de atualização podem ocorrer com casos de referência e substituição de uso.
Para tornar mais seguro e fácil para os clientes compreender quais áreas de /libs são seguras para usar e sobrepor o conteúdo em /libs foi classificado com as seguintes combinações:
Público (granite:PublicArea) - Define um nó como público para que possa ser sobreposto, herdado ( sling:resourceSuperType) ou usado diretamente ( sling:resourceType). Os nós abaixo de /libs marcados como Público serão seguros para atualizar com a adição de um Pacote de compatibilidade. Em geral, os clientes devem aproveitar apenas os nós marcados como Público.
Abstrato (granite:AbstractArea) - Define um nó como abstrato. Os nós podem ser sobrepostos ou herdados ( sling:resourceSupertype), mas não podem ser usados diretamente ( sling:resourceType).
Final (granite:FinalArea) - Define um nó como final. Os nós classificados como finais idealmente não devem ser sobrepostos ou herdados. Os nós finais podem ser usados diretamente via sling:resourceType. Os subnós no nó final são considerados internos por padrão.
Interno (granite:InternalArea) *- *Define um nó como interno. Os nós classificados como internos idealmente não devem ser sobrepostos, herdados ou usados diretamente. Esses nós destinam-se apenas à funcionalidade interna de AEM
Sem anotação - os nós herdam a classificação com base na hierarquia da árvore. A raiz / é, por padrão, Público. Os nós com um pai classificado como Interno ou Final também devem ser tratados como Interno.