Uso de adaptadores Sling using-sling-adapters
Sling oferece um Padrão do adaptador para traduzir convenientemente objetos que implementam a Adaptável interface. Essa interface fornece uma interface adaptTo() método que traduz o objeto para o tipo de classe que está sendo transmitido como argumento.
Por exemplo, para traduzir um objeto Resource para o objeto Node correspondente, você pode simplesmente fazer:
Node node = resource.adaptTo(Node.class);
Casos de uso use-cases
Existem os seguintes casos de uso:
-
Obter objetos específicos de implementação.
Por exemplo, uma implementação baseada em JCR do genérico
Resource
fornece acesso ao JCR subjacenteNode
. -
Criação de atalhos de objetos que exigem que objetos de contexto interno sejam passados.
Por exemplo, a variável baseada em JCR
ResourceResolver
mantém uma referência à solicitação doJCR Session
, que por sua vez é necessário para muitos objetos que funcionam com base nessa sessão de solicitação, como oPageManager
ouUserManager
. -
Atalho para serviços.
Um caso raro -
sling.getService()
também é simples.
Valor de retorno nulo null-return-value
adaptTo()
Pode retornar nulo.
Há vários motivos para o retorno nulo, incluindo o seguinte:
- a implementação não dá suporte ao tipo de destino
- uma fábrica de adaptadores que lida com esse caso não está ativa (por exemplo, devido a referências de serviço ausentes)
- falha na condição interna
- serviço não disponível
É importante que você lide com o caso nulo normalmente. Para renderizações jsp, pode ser aceitável que o jsp falhe se resultar em um conteúdo vazio.
Armazenamento em cache caching
Para melhorar o desempenho, as implementações estão livres para armazenar em cache o objeto retornado de uma 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á uma regra geral: o objeto pode ser uma nova instância ou uma existente. Dessa forma, significa que você não pode confiar em nenhum dos comportamentos. Por isso, é importante, especialmente dentro AdapterFactory
, de que os objetos são reutilizáveis nesse cenário.
Como funciona how-it-works
Há várias maneiras de Adaptable.adaptTo()
pode ser implementado:
-
Pelo próprio objeto; implementando o próprio método e mapeando para determinados objetos.
-
Por um
AdapterFactory
, que podem mapear objetos arbitrários.Os objetos ainda devem implementar o
Adaptable
e deve estenderSlingAdaptable
(que passa oadaptTo
chamada para um gerenciador de adaptador central).Esse método permite ganchos na
adaptTo
para classes existentes, comoResource
. -
Uma combinação de ambos.
Para o primeiro caso, os documentos Java™ podem indicar o que adaptTo-targets
são possíveis. No entanto, para subclasses específicas, como o Recurso baseado em JCR, essa instrução geralmente não é possível. Neste último caso, as AdapterFactory
normalmente fazem parte das classes privadas de um pacote e, portanto, não estão expostas em uma API do cliente, nem listadas em documentos Java™. Teoricamente, é possível acessar todos os AdapterFactory
implementações do OSGi tempo de execução do serviço e observar as configurações (fontes e destinos) de "adaptáveis", mas não mapeá-las entre si. No final, depende da lógica interna, que deve ser documentada. Daí esta referência.
Referência reference
Sling sling
Recurso adapta-se a:
ResourceResolver adapta-se a:
SlingHttpServletRequest adapta-se a:
Ainda sem destinos, mas implementa Adaptable e pode ser usado como origem em um AdapterFactory personalizado.
SlingHttpServletResponse adapta-se a:
WCM wcm
Página adapta-se a:
Componente adapta-se a:
Modelo adapta-se a:
Segurança security
Autorizável, Usuário, e Grupo adaptar a:
DAM dam
Ativo adapta-se a:
Marcação com tags tagging
Tag adapta-se a:
Outro other
Além disso, o Sling/JCR/OCM também fornece uma AdapterFactory
para OCM personalizado (Mapeamento de conteúdo do objeto) objetos.