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 funzioneranno 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() 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 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. Ciò significa che non puoi fare affidamento su entrambi i 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).

    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, 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™. In teoria, sarebbe possibile accedere a tutte le implementazioni di AdapterFactory dal runtime del servizio OSGi e esaminare le relative configurazioni "adattabili" (origini e destinazioni), ma non mapparle tra loro. Alla fine, questo 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 che fa riferimento a un nodo.
Proprietà
Se si tratta di una risorsa basata su proprietà JCR
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 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 su 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 delle 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; il contenuto del file se si tratta di una risorsa del file system) o 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 si tratta di una risorsa del file system
SlingScript
Se questa risorsa è uno script (ad esempio, un file jsp) per il quale un motore di script è registrato con sling
Servlet
Se questa 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 si tratta di 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 si tratta di una risorsa nodo cq:Component
Design
Se si tratta di un nodo di progettazione (cq:Page)
Modello
Se si tratta di una risorsa nodo cq:Template
Blueprint
Se si tratta di 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 si tratta di 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 si tratta di 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 si tratta di un risolutore risorse basato su JCR (impostazione predefinita)
PageManager
ComponentManager
Designer
Gestione risorse
In base alla sessione JCR, se si tratta di un risolutore risorse basato su JCR
TagManager
In base alla sessione JCR, se si tratta di un risolutore risorse basato su JCR
UserManager
UserManager fornisce l'accesso e i mezzi per 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

Authorizable, User e ​ Group** 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](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) per gli oggetti OCM personalizzati (Object Content Mapping).

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2