Utilizzo di adattatori Sling using-sling-adapters

Sling offre un pattern di adattatore per tradurre in modo comodo gli oggetti che implementano l'interfaccia Adaptable. Questa interfaccia fornisce un metodo adaptTo() generico 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 dell'interfaccia generica Resource fornisce l'accesso al JCR sottostante Node.

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

    Ad esempio, il ResourceResolver basato su JCR contiene un riferimento al JCR Session della richiesta, che a sua volta è necessario per molti oggetti che funzionano in base alla sessione di richiesta, ad esempio PageManager o UserManager.

  • Collegamento ai servizi.

    Un caso raro - sling.getService() è semplice.

Valore restituito nullo null-return-value

adaptTo() Può restituire Null.

Esistono diversi motivi per il ritorno a valori nulli, tra cui i seguenti:

  • 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 nella cache l'oggetto restituito da una chiamata obj.adaptTo(). Se obj è lo stesso, l'oggetto restituito è lo stesso.

Questa memorizzazione nella cache viene eseguita per tutti i AdapterFactory casi basati su.

Tuttavia, non esiste una regola generale: l’oggetto potrebbe essere una nuova istanza o una esistente. Di conseguenza, non puoi fare affidamento su nessuno dei due comportamenti. È quindi importante, soprattutto all'interno di AdapterFactory, che gli oggetti siano riutilizzabili in questo scenario.

Come funziona how-it-works

È possibile implementare Adaptable.adaptTo() in vari modi:

  • 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 l'interfaccia Adaptable e devono estendere SlingAdaptable (che trasmette la chiamata adaptTo a un gestore adapter centrale).

    Questo metodo consente gli hook nel meccanismo adaptTo per le classi esistenti, ad esempio Resource.

  • Una combinazione di entrambi.

Nel primo caso, i documenti Java™ possono indicare le adaptTo-targets possibili. Tuttavia, per sottoclassi specifiche come la risorsa basata su JCR, questa istruzione spesso non è possibile. 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™. In teoria, è possibile accedere a tutte le implementazioni di AdapterFactory dal runtime del servizio OSGi e visualizzarne le configurazioni di "adattabili" (origini e destinazioni), ma non mapparle tra loro. Alla fine, dipende dalla logica interna, che deve essere documentata. Da qui questo riferimento.

Riferimento reference

Sling sling

La risorsa si adatta a:

Nodo
Se si tratta di una risorsa basata su nodo JCR o di una proprietà JCR, con riferimento a un nodo
Proprietà
Se è una risorsa basata su proprietà JCR
Elemento
Se è una risorsa basata su JCR (nodo o proprietà)
Mappa
Restituisce una mappa delle proprietà, se si tratta di una risorsa basata su nodo JCR (o altre mappe di valore di supporto delle risorse)
ValueMap
Restituisce una mappa delle proprietà di facile utilizzo, se si tratta di una risorsa basata su nodo JCR (o altre mappe di valore di supporto delle risorse). Può anche essere ottenuto (più semplicemente) utilizzando
ResourceUtil.getValueMap(Resource) (gestisce le maiuscole/minuscole e così via)
InheritanceValueMap
Estensione di ValueMap che consente di tenere conto della gerarchia di risorse durante la ricerca delle proprietà
ModifiableValueMap
Estensione di ValueMap, che consente di modificare le proprietà in tale nodo
InputStream
Restituisce il contenuto binario di una risorsa file (se si tratta di una risorsa basata su nodo JCR e il tipo di nodo è nt:file o nt:resource; se si tratta di una risorsa bundle; contenuto file, se si tratta di una risorsa del file system). In alternativa, restituisce i dati di una risorsa proprietà JCR binaria.
URL
Restituisce un URL alla risorsa (URL archivio di questo nodo se si tratta di una risorsa basata su nodo JCR; URL bundle JAR se si tratta di una risorsa bundle; URL file se si tratta di una risorsa del file system)
File
Se è una risorsa del file system
SlingScript
Se la risorsa è uno script (ad esempio, un file jsp) per il quale un motore di script è registrato con sling
Servlet
Se la risorsa è uno script (ad esempio, un file jsp) per il quale un motore di script è registrato con sling, o se si tratta di una risorsa servlet
Stringa
Booleano
Lungo
Doppio
Calendario
Valore
Stringa[]
Booleano[]
Lungo[]
Calendario[]
Valore[]
Restituisce i valori se si tratta di una risorsa basata su proprietà JCR (e il valore si adatta)
LabeledResource
Se è una risorsa basata su nodo JCR
Pagina
Se si tratta di una risorsa basata su nodo JCR e il nodo è un cq:Page (o cq:PseudoPage)
Componente
Se è una risorsa nodo cq:Component
Design
Se è un nodo di progettazione (cq:Page)
Modello
Se è una risorsa nodo cq:Template
Blueprint
Se è una risorsa nodo cq:Template
Risorsa
Se si tratta di una risorsa nodo dam:Asset
Rappresentazione
Se si tratta di una rappresentazione dam:Asset (nt:file sotto la cartella di rappresentazione di una dam:Assert)
Tag
Se è una risorsa nodo cq:Tag
UserManager
In base alla sessione JCR se si tratta di una risorsa basata su JCR e l’utente dispone delle autorizzazioni per accedere a UserManager
Autorizzabile
Authorizable è l'interfaccia di base comune per Utente e Gruppo
User
L’utente è un Autorizzabile speciale che può essere autenticato e rappresentato
Ricerca semplice
Cerca sotto la risorsa (o usa setSearchIn()) se si tratta di una risorsa basata su JCR
WorkflowStatus
Stato del flusso di lavoro per il nodo payload pagina/flusso di lavoro specificato
ReplicationStatus
Stato della replica per la risorsa specificata o il relativo sottonodo jcr:content (selezionato per primo)
ConnectorResource
Restituisce una risorsa connettore adattata per alcuni tipi, se si tratta di una risorsa basata su nodo JCR
Configurazione
Se è una risorsa nodo cq:ContentSyncConfig
ConfigEntry
Se si trova al di sotto di una risorsa nodo cq:ContentSyncConfig

ResourceResolver si adatta a:

Sessione
La sessione JCR della richiesta, se è un risolutore risorse basato su JCR (impostazione predefinita)
PageManager
ComponentManager
Designer
Gestione risorse
In base alla sessione JCR, se è un risolutore risorse basato su JCR
TagManager
In base alla sessione JCR, se è un risolutore risorse basato su JCR
UserManager
UserManager consente di accedere e gestire gli oggetti autorizzabili, ovvero utenti e gruppi. UserManager è associato a una sessione specifica
Autorizzabile
L'utente corrente
Utente
L'utente corrente
QueryBuilder
Esternalizzatore
Per l'esternalizzazione di URL assoluti, anche senza l'oggetto richiesta

SlingHttpServletRequest si adatta a:

Ancora nessuna destinazione, ma implementa Adaptable e potrebbe essere utilizzato come origine in un AdapterFactory personalizzato.

SlingHttpServletResponse si adatta a:

Gestore contenuto
(XML)
Se si tratta di una risposta del rewriter di Sling

WCM wcm

La pagina si adatta a:

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

Il componente si adatta a:

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

Il modello si adatta a:

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

Sicurezza security

Autorizzabile, Utente e Gruppo si adattano a:

Nodo
Restituisce il nodo principale dell'utente/gruppo.
StatoReplica
Restituisce lo stato di replica per il nodo principale utente/gruppo.

DAM dam

Risorsa si adatta a:

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

Assegnazione dei tag tagging

Tag si adatta a:

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

Altro other

Inoltre, Sling / JCR / OCM fornisce anche un AdapterFactory per gli oggetti OCM personalizzati (Object Content Mapping).

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab