Uso de adaptadores Sling using-sling-adapters
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 subjacenteNode
. -
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 aoJCR Session
, que, por sua vez, é necessário para muitos objetos que funcionarão com base nessa sessão de solicitação, como oPageManager
ouUserManager
. -
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 estenderSlingAdaptable
(que passa pela variáveladaptTo
para um gerenciador central de adaptadores).Isso permite que os ganchos no
adaptTo
mecanismo para classes existentes, comoResource
. -
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:
ResourceResolver se adapta a:
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:
WCM wcm
Página se adapta a:
Componente se adapta a:
Modelo se adapta a:
Segurança security
Autorizável, Usuário e Grupo adaptar a:
DAM dam
Ativo se adapta a:
Marcação com tags tagging
Tag se adapta a:
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).