Utilizzo di adattatori Sling using-sling-adapters
Sling offre un Pattern adattatore per tradurre facilmente gli oggetti che implementano Adattabile di rete. Questa interfaccia fornisce un adaptTo() metodo che converte l'oggetto nel tipo di classe passato come argomento.
Ad esempio, per tradurre un oggetto Resource nell’oggetto Node corrispondente, puoi semplicemente effettuare le seguenti operazioni:
Node node = resource.adaptTo(Node.class);
Casi d’uso use-cases
Sono disponibili i seguenti casi d’uso:
-
Ottieni oggetti specifici per l’implementazione.
Ad esempio, un’implementazione JCR del modello generico
Resource
fornisce accesso al JCR sottostanteNode
. -
Creazione di collegamenti di oggetti che richiedono il passaggio di oggetti contestuali interni.
Ad esempio, il modello basato su JCR
ResourceResolver
contiene un riferimento aJCR Session
, a sua volta necessario per molti oggetti che funzioneranno in base a tale sessione di richiesta, ad esempioPageManager
oUserManager
. -
Collegamento ai servizi.
Un caso raro -
sling.getService()
è semplice.
Valore restituito nullo null-return-value
adaptTo()
restituisce null.
Le ragioni sono diverse, tra cui:
- l’implementazione non supporta il tipo di target
- un adapter factory che gestisce questo caso non è attivo (ad esempio, a causa di riferimenti di servizio mancanti)
- condizione interna non riuscita
- servizio non disponibile
È importante gestire il caso nullo in modo corretto. Per i rendering JSP potrebbe essere accettabile che l’esecuzione di JSP non riesca se si verifica una parte di contenuto vuota.
Memorizzazione in cache caching
Per migliorare le prestazioni, le implementazioni possono memorizzare in cache l’oggetto restituito da un obj.adaptTo()
chiamare. Se il obj
è uguale, l’oggetto restituito è uguale.
Questa memorizzazione in cache viene eseguita per tutti AdapterFactory
casi basati su.
Tuttavia, non esiste una regola generale: l’oggetto potrebbe essere una nuova istanza o una esistente. Ciò significa che non puoi fare affidamento su entrambi i comportamenti. Quindi è importante, soprattutto all'interno AdapterFactory
, che gli oggetti siano riutilizzabili in questo scenario.
Come funziona how-it-works
Esistono diversi modi per Adaptable.adaptTo()
può essere implementato:
-
Dall'oggetto stesso, implementando il metodo stesso e mappando a determinati oggetti.
-
Da un
AdapterFactory
, che può mappare oggetti arbitrari.Gli oggetti devono ancora implementare
Adaptable
e deve estendereSlingAdaptable
(che supera iladaptTo
chiamata a un gestore di schede di rete centrale).Questo consente agli hook nel
adaptTo
meccanismo per le classi esistenti, ad esempioResource
. -
Una combinazione di entrambi.
Per il primo caso, i documenti Java™ possono indicare cosa adaptTo-targets
sono possibili. Tuttavia, spesso questo non è possibile per sottoclassi specifiche, come la risorsa basata su JCR. In quest'ultimo caso, le implementazioni di AdapterFactory
fanno generalmente parte delle classi private di un bundle e quindi non sono esposte in un’API client, né elencate nei documenti Java™. Teoricamente, sarebbe possibile accedere a tutti AdapterFactory
implementazioni da OSGi runtime dei servizi e visualizzarne le configurazioni "adattabili" (origini e destinazioni), ma non per mapparle tra loro. Alla fine, questo dipende dalla logica interna, che deve essere documentata. Da qui questo riferimento.
Riferimento reference
Sling sling
Risorsa si adatta a:
ResourceResolver si adatta a:
SlingHttpServletRequest si adatta a:
Ancora nessuna destinazione, ma implementa Adaptable e potrebbe essere utilizzato come origine in un AdapterFactory personalizzato.
SlingHttpServletResponse si adatta a:
WCM wcm
Pagina si adatta a:
Componente si adatta a:
Modello si adatta a:
Sicurezza security
Autorizzabile, Utente e Gruppo** adatta a:
DAM dam
Risorsa si adatta a:
Assegnazione dei tag tagging
Tag si adatta a:
Altro other
Inoltre, Sling / JCR / OCM fornisce anche un [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
per OCM personalizzata (Mappatura contenuto oggetto).