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 sottostante Node.

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

    Ad esempio, il modello basato su JCR ResourceResolver contiene un riferimento a JCR Session, a sua volta necessario per molti oggetti che funzioneranno in base a tale 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 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 estendere SlingAdaptable (che supera il adaptTo chiamata a un gestore di schede di rete centrale).

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

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

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ò 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 nella ricerca delle proprietà
ModifiableValueMap
Un’estensione del ValueMap, che consente di modificare le proprietà su 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 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 un cq:Component risorsa nodo
Design
Se si tratta di un nodo di progettazione (cq:Page)
Modello
Se si tratta di un cq:Template risorsa nodo
Blueprint
Se si tratta di un cq:Template risorsa nodo
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 un cq:Tag risorsa nodo
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 un cq:ContentSyncConfig risorsa nodo
ConfigEntry
Se è inferiore a cq:ContentSyncConfig risorsa nodo

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 esternalizzare gli URL assoluti, anche senza l’oggetto della 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:

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

WCM wcm

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

Componente si adatta a:

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

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** adatta a:

Nodo
Restituisce il nodo principale dell'utente/gruppo.
ReplicationStatus
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 OCM personalizzata (Mappatura contenuto oggetto).

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