Utilizzo di adattatori Sling using-sling-adapters

CAUTION
AEM 6.4 ha raggiunto la fine del supporto esteso e questa documentazione non viene più aggiornata. Per maggiori dettagli, consulta la nostra periodi di assistenza tecnica. Trova le versioni supportate qui.

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 Resource L'interfaccia fornisce l'accesso al JCR sottostante Node.

  • Creazione rapida di oggetti che richiedono il passaggio di oggetti contestuali interni.

    Ad esempio, il modello basato su JCR ResourceResolver contiene un riferimento al JCR Session, che a sua volta è necessario per molti oggetti che funzioneranno in base a tale sessione di richiesta, come PageManager o UserManager.

  • 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 Adaptable e deve estendere SlingAdaptable (che passa adaptTo chiamare un gestore di adattatori centrali).

    Questo consente agli hook di adaptTo meccanismo per le classi esistenti, ad esempio Resource.

  • 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:

Nodo
Se si tratta di una risorsa basata su nodo JCR o di una proprietà JCR che fa riferimento a un nodo.
Proprietà
Se si tratta di una risorsa basata su JCR-property.
Elemento
Se si tratta di una risorsa basata su JCR (nodo o proprietà).
Mappa
Restituisce una mappa delle proprietà, se si tratta di una risorsa basata su un nodo JCR (o di altre risorse che supportano le mappe dei valori).
ValueMap
Restituisce una mappa pratica delle proprietà, se si tratta di una risorsa basata su un nodo JCR (o di altre risorse che supportano le mappe dei valori). Può essere ottenuto anche (più semplicemente) utilizzando
ResourceUtil.getValueMap(Resource) (gestisce lettere maiuscole, ecc.).
EreditarietàValueMap
Proroga ValueMap che consente di tenere conto della gerarchia delle risorse nella ricerca delle proprietà.
PersistableValueMap
Se si tratta di una risorsa basata su nodo JCR e l'utente dispone delle autorizzazioni per modificare le proprietà su quel nodo.
Nota: più mappe persistenti non condividono i loro valori.
InputStream
Restituisce il contenuto binario di un "file"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 si adatta a:

Sessione
La sessione JCR della richiesta, se si tratta di un risolutore di risorse basato su JCR (predefinito).
PageManager
ComponentManager
Designer
AssetManager
Basato sulla sessione JCR, se si tratta di un risolutore di risorse basato su JCR.
TagManager
Basato sulla sessione JCR, se si tratta di un risolutore di risorse basato su JCR.
UserManager
In base alla sessione JCR, se si tratta di un risolutore di risorse basato su JCR e se l'utente dispone delle autorizzazioni per accedere a UserManager.
Autorizzabile
Utente corrente.
User
Utente corrente.
PrivilegeManager
Preferenze
Preferenze dell'utente corrente (basate sulla sessione JCR se si tratta di un risolutore di risorse basato su JCR).
PreferencesService
PinManager
QueryBuilder
Esternalizzatore
Per esternalizzare gli URL assoluti, anche con l’oggetto di richiesta.

SlingHttpServletRequest si adatta a:

Nessuna destinazione, ma implementa Adattabile e può essere utilizzato come origine in un AdapterFactory personalizzato.

SlingHttpServletResponse si adatta a:

ContentHandler
(XML)
Se si tratta di una risposta sling rewriter.

WCM wcm

Pagina si adatta a:

Resource
Risorsa della pagina.
LabeledResource
Risorsa con etichetta (== this).
Nodo
Nodo della pagina.
...
Tutto ciò a cui la risorsa della pagina può essere adattata.

Componente si adatta a:

Resource
Risorsa del componente.
LabeledResource
Risorsa con etichetta (== this).
Nodo
Nodo del componente.
Tutto ciò a cui può essere adattata la risorsa del componente.

Modello si adatta a:

Resource
Risorsa del modello.
LabeledResource
Risorsa con etichetta (== this).
Nodo
Nodo di questo modello.
...
Tutto ciò a cui può essere adattata la risorsa del modello.

Sicurezza security

Autorizzabile, Utente e Gruppo adattarsi a:

Nodo
Restituisce il nodo principale utente/gruppo.
ReplicationStatus
Restituisce lo stato di replica per il nodo home utente/gruppo.

DAM dam

Risorsa si adatta a:

Resource
Risorsa della risorsa.
Nodo
Nodo della risorsa.
Tutto ciò a cui la risorsa può essere adattata.

Assegnazione dei tag tagging

Tag si adatta a:

Resource
Risorsa del tag .
Nodo
Nodo del tag.
Tutto ciò a cui la risorsa del tag può essere adattata.

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).

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