Uso de adaptadores Sling using-sling-adapters

CAUTION
AEM 6.4 chegou ao fim do suporte estendido e esta documentação não é mais atualizada. Para obter mais detalhes, consulte nossa períodos de assistência técnica. Encontre as versões compatíveis here.

Sling oferece uma Padrão do adaptador para traduzir convenientemente objetos que implementam o Adaptável interface. Essa interface fornece um adaptTo() método que traduzirá o objeto para o tipo de classe que está sendo passado como argumento.

Por exemplo, para traduzir um objeto de Recurso para o objeto Nó correspondente, você pode simplesmente fazer:

Node node = resource.adaptTo(Node.class);

Casos de uso use-cases

Há os seguintes casos de uso:

  • Obter objetos específicos de implementação.

    Por exemplo, uma implementação baseada em JCR da variável genérica Resource A interface fornece acesso ao JCR subjacente Node.

  • Criação de atalhos de objetos que exigem que objetos de contexto internos sejam passados.

    Por exemplo, o baseado em JCR ResourceResolver contém uma referência ao JCR Session, que, por sua vez, é necessário para muitos objetos que funcionarão com base nessa sessão de solicitação, como o PageManager ou UserManager.

  • Atalho para serviços.

    Um caso raro - sling.getService() é simples também.

Valor de Retorno Nulo null-return-value

adaptTo() pode retornar nulo.

Há várias razões para isso, incluindo:

  • a implementação não suporta o tipo de alvo
  • uma fábrica de adaptadores que manipula este caso não está ativa (por exemplo, devido à falta de referências de serviço)
  • falha na condição interna
  • serviço não disponível

É importante lidar com o caso nulo normalmente. Para renderizações de jsp, pode ser aceitável ter a falha de jsp se isso resultar em um conteúdo vazio.

Armazenamento em cache caching

Para melhorar o desempenho, as implementações podem armazenar em cache o objeto retornado de um obj.adaptTo() chame. Se a variável obj for o mesmo, o objeto retornado será o mesmo.

Esse armazenamento em cache é executado para todos AdapterFactory casos baseados.

No entanto, não há regra geral - o objeto pode ser uma nova instância ou uma existente. Isso significa que você não pode depender de nenhum dos comportamentos. Por isso é importante, especialmente dentro AdapterFactory, que os objetos são reutilizáveis neste cenário.

Como funciona how-it-works

Existem várias maneiras de Adaptable.adaptTo() pode ser implementado:

  • Pelo próprio objeto; implementação do próprio método e mapeamento para determinados objetos.

  • Por um AdapterFactory, que pode mapear objetos arbitrários.

    Os objetos ainda devem implementar a variável Adaptable e deve estender SlingAdaptable (que passa pela variável adaptTo para um gerenciador central de adaptadores).

    Isso permite que os ganchos no adaptTo mecanismo para classes existentes, como Resource.

  • Uma combinação de ambos.

No primeiro caso, o javadocs pode indicar o que adaptTo-targets são possíveis. No entanto, para subclasses específicas, como o Recurso baseado em JCR, geralmente isso não é possível. No último caso, as implementações de AdapterFactory normalmente fazem parte das classes privadas de um pacote e, portanto, não são expostas em uma API do cliente, nem listadas em javadocs. Teoricamente, seria possível acessar todos AdapterFactory das OSGi tempo de execução do serviço e veja suas configurações "adaptáveis" (fontes e destinos), mas não para mapeá-las umas às outras. No fim, isso depende da lógica interna, que deve ser documentada. Daí esta referência.

Referência reference

Sling sling

Recurso se adapta a:

Se esse for um recurso baseado em nó JCR ou uma propriedade JCR que faz referência a um nó.
Propriedade
Se esse for um recurso baseado em propriedade do JCR.
Item
Se esse for um recurso baseado em JCR (nó ou propriedade).
Mapa
Retorna um mapa das propriedades, se este for um recurso baseado em nó JCR (ou outro recurso que suporta mapas de valor).
ValueMap
Retorna um mapa conveniente das propriedades, se for um recurso baseado em nó JCR (ou outro recurso que suporta mapas de valor). Também pode ser obtido (mais simplesmente) usando
ResourceUtil.getValueMap(Resource) (lida com letras maiúsculas e minúsculas, etc.).
InheritanceValueMap
Prorrogação ValueMap O que permite que a hierarquia de recursos seja levada em conta ao procurar propriedades.
PersistableValueMap
Se esse for um recurso baseado em nó JCR e o usuário tiver permissões para modificar propriedades nesse nó.
Observação: vários mapas persistentes não compartilham seus valores.
InputStream
Retorna o conteúdo binário de um "arquivo"nt:resource
AuthorizableResourceProvider``org.apache.sling.jackrabbit.usermanager``/system/userManager
cq:Page``cq:PseudoPage
cq:Component
cq:Page
cq:Template
cq:Page
cq:Tag
cq:Preferences
cq:ContentSyncConfig
cq:ContentSyncConfig

ResourceResolver se adapta a:

Sessão
A sessão JCR da solicitação, se for um resolvedor de recursos baseado em JCR (padrão).
PageManager
ComponentManager
Designer
AssetManager
Com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR.
TagManager
Com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR.
UserManager
Com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR e se o usuário tiver permissões para acessar o UserManager.
Autorizável
O usuário atual.
Usuário
O usuário atual.
PrivilegeManager
Preferências
Preferências do usuário atual (com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR).
PreferencesService
PinManager
QueryBuilder
Externalizador
Para exteriorizar URLs absolutos, mesmo sem o objeto de solicitação.

SlingHttpServletRequest se adapta a:

Nenhum destino ainda, mas implementa Adaptável e pode ser usado como fonte em um AdapterFactory personalizado.

SlingHttpServletResponse se adapta a:

ContentHandler
(XML)
Se esta for uma resposta de gravação de sling.

WCM wcm

Página se adapta a:

Recurso
Recurso da página.
RotuladoRecurso
Rótulo de recurso (== this).
Nó da página.
...
Tudo que o recurso da página pode ser adaptado.

Componente se adapta a:

Recurso
Recurso do componente.
RotuladoRecurso
Rótulo de recurso (== this).
Nó do componente.
Tudo que o recurso do componente pode ser adaptado.

Modelo se adapta a:

Recurso
Recurso do modelo.
RotuladoRecurso
Rótulo de recurso (== this).
Nó desse template.
...
Tudo que o recurso do modelo pode ser adaptado.

Segurança security

Autorizável, Usuário e Grupo adaptar a:

Retorna o nó inicial do usuário/grupo.
ReplicationStatus
Retorna o status de replicação do nó inicial do usuário/grupo.

DAM dam

Ativo se adapta a:

Recurso
Recurso do ativo.
Nó do ativo.
Tudo o que o recurso do ativo pode ser adaptado.

Marcação com tags tagging

Tag se adapta a:

Recurso
Recurso da tag.
Nó da tag.
Tudo que o recurso da tag pode ser adaptado.

Outro other

Além disso, o Sling / JCR / OCM também fornece um [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) para MAC personalizada (Mapeamento de conteúdo do objeto).

recommendation-more-help
2315f3f5-cb4a-4530-9999-30c8319c520e