Utilizzo di adattatori Sling using-sling-adapters
Sling offre Pattern di adattatore per tradurre gli oggetti che implementano Adattabile interfaccia. Questa interfaccia fornisce un generico adaptTo() metodo che tradurrà l'oggetto nel tipo di classe passato come argomento.
Ad esempio, per tradurre un oggetto Resource all'oggetto Node corrispondente, è sufficiente eseguire le operazioni seguenti:
Node node = resource.adaptTo(Node.class);
Casi d'uso use-cases
Esistono i seguenti casi d’uso:
-
Ottenere oggetti specifici per l’implementazione.
Ad esempio, un’implementazione basata su JCR del generico
ResourceL'interfaccia fornisce l'accesso al JCR sottostanteNode. -
Creazione rapida di oggetti che richiedono il passaggio di oggetti contestuali interni.
Ad esempio, il modello basato su JCR
ResourceResolvercontiene un riferimento alJCR Session, che a sua volta è necessario per molti oggetti che funzioneranno in base a tale sessione di richiesta, comePageManageroUserManager. -
Collegamento ai servizi.
Un caso raro -
sling.getService()è anche semplice.
Valore restituito nullo null-return-value
adaptTo() può restituire null.
Ci sono varie ragioni per questo, tra cui:
- l'implementazione non supporta il tipo di destinazione
- un adattatore che gestisce questo caso in fabbrica non è attivo (ad esempio a causa di riferimenti di servizio mancanti)
- condizione interna non riuscita
- servizio non disponibile
È importante gestire il caso null in modo corretto. Per i rendering jsp potrebbe essere accettabile che jsp non riesca se questo si traduce in un contenuto vuoto.
Memorizzazione in cache caching
Per migliorare le prestazioni, le implementazioni sono libere di memorizzare nella cache l'oggetto restituito da un obj.adaptTo() chiama. Se la obj è lo stesso, l'oggetto restituito è lo stesso.
Questa memorizzazione in cache viene eseguita per tutti AdapterFactory casi basati.
Tuttavia, non esiste una regola generale: l'oggetto potrebbe essere una nuova istanza o una esistente. Ciò significa che non puoi affidarti a entrambi i comportamenti. Quindi è importante, soprattutto all'interno AdapterFactory, gli oggetti sono riutilizzabili in questo scenario.
Come funziona how-it-works
Ci sono diversi modi per Adaptable.adaptTo() può essere implementato:
-
dall'oggetto stesso; implementazione del metodo stesso e mappatura a determinati oggetti.
-
Da
AdapterFactory, che può mappare oggetti arbitrari.Gli oggetti devono ancora implementare il
Adaptablee deve estendereSlingAdaptable(che passaadaptTochiamare un gestore di adattatori centrali).Questo consente agli hook di
adaptTomeccanismo per le classi esistenti, ad esempioResource. -
Una combinazione di entrambi.
Per il primo caso, i javadocs possono indicare cosa adaptTo-targets sono possibili. Tuttavia, per sottoclassi specifiche come la risorsa basata su JCR, spesso questo non è possibile. In quest'ultimo caso, l'attuazione AdapterFactory in genere fanno parte delle classi private di un bundle e quindi non sono esposte in un'API client, né sono elencate in javadocs. Teoricamente, sarebbe possibile accedere a tutti AdapterFactory implementazioni dal OSGi runtime di servizio e guarda le loro configurazioni "adaptables" (origini e destinazioni), ma non per mapparle tra di 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:
Nessuna destinazione, ma implementa Adattabile e può 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 adattarsi a:
DAM dam
Risorsa si adatta a:
Assegnazione dei tag tagging
Tag si adatta a:
Altro other
Inoltre, Sling / JCR / OCM fornisce [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) per OCM personalizzata (Mappatura del contenuto degli oggetti).