Show Menu
ARGOMENTI×

Utilizzo delle schede di rete Sling

Sling offre un pattern adapters.html Adapter per tradurre facilmente gli oggetti che implementano l'interfaccia Adattabile . 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 in un oggetto Node corrispondente, è sufficiente eseguire le operazioni seguenti:
Node node = resource.adaptTo(Node.class);

Use Cases

Esistono i seguenti casi di utilizzo:
  • Ottenete oggetti specifici per l'implementazione.
    Ad esempio, un'implementazione JCR dell' Resource interfaccia generica fornisce l'accesso al JCR sottostante Node ."
  • Creazione di collegamenti per oggetti che richiedono il passaggio di oggetti contestuali interni.
    Ad esempio, il codice JCR ResourceResolver contiene un riferimento a quello della richiesta JCR Session , che a sua volta è necessario per molti oggetti che funzioneranno in base alla sessione di richiesta, come il PageManager o UserManager .
  • Collegamento ai servizi.
    Un caso raro - sling.getService() è anche semplice.

Valore restituito Null

adaptTo() può restituire null.
I motivi di tale scelta sono diversi, tra cui:
  • l'implementazione non supporta il tipo di destinazione
  • un gestore di schede che gestisce questo caso non è attivo (ad esempio a causa di riferimenti di servizio mancanti)
  • condizione interna non riuscita
  • il servizio non è disponibile
È importante gestire il caso nullo in modo corretto. Per i rendering jsp potrebbe essere accettabile che il jsp non riesca se questo restituisce un contenuto vuoto.

Cache

Per migliorare le prestazioni, le implementazioni possono memorizzare nella cache l’oggetto restituito da una obj.adaptTo() chiamata. Se obj è lo stesso, l'oggetto restituito è lo stesso.
Questa memorizzazione nella cache viene eseguita per tutti i casi AdapterFactory basati.
Tuttavia, non esiste una regola generale: l'oggetto potrebbe essere una nuova istanza o una esistente. Ciò significa che non potete fare affidamento su entrambi i comportamenti. È quindi importante, soprattutto all'interno AdapterFactory , che gli oggetti siano riutilizzabili in questo scenario.

Come funziona

Esistono diversi modi per Adaptable.adaptTo() implementarlo:
  • dall'oggetto stesso; implementazione del metodo stesso e mappatura a determinati oggetti.
  • Tramite un carattere AdapterFactory `, che può mappare oggetti arbitrari.
    Gli oggetti devono comunque implementare l' Adaptable interfaccia e devono estendersi SlingAdaptable (che trasmette la adaptTo chiamata a un gestore di adattatori centrale).
    Questo consente di inserire i ganci nel adaptTo meccanismo per le classi esistenti, ad esempio Resource .
  • Una combinazione di entrambi.
Per il primo caso, i javadocs possono specificare quali adaptTo-targets sono possibili. Tuttavia, per sottoclassi specifiche come la risorsa basata su JCR, spesso ciò 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é sono elencate in javadocs. In teoria, sarebbe possibile accedere a tutte AdapterFactory le implementazioni dal runtime di servizio OSGi e vedere le loro configurazioni "adaptables" (origini e destinazioni), ma non mapparle l'una sull'altra. Alla fine, questo dipende dalla logica interna, che deve essere documentata. Di qui il riferimento.

Riferimento

Sling

La risorsa si adatta a:
Node 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 di altre mappe dei valori di supporto delle risorse).
ValueMap Restituisce una mappa pratica delle proprietà, se si tratta di una risorsa basata su nodo JCR (o di altre mappe di valore di supporto delle risorse). Può anche essere ottenuto (più semplicemente) utilizzando (gestisce lettere maiuscole e minuscole, ecc.) ResourceUtil.getValueMap(Resource) .
EreditanceValueMap Estensione di 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 necessarie per modificare le proprietà del 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 In base alla sessione JCR, se si tratta di un risolutore di risorse basato su JCR.
TagManager In base alla 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 L’utente corrente.
User L’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
Externalizer Per esternalizzare gli URL assoluti, anche con l'oggetto request.
Nessuna destinazione ancora, ma implementa Adattabile e potrebbe essere utilizzato come origine in un AdapterFactory personalizzato.
ContentHandler (XML) Se si tratta di una risposta sling rewriter.

WCM

La pagina si adatta a:
Risorsa Risorsa della pagina.
LabeledResource Risorsa con etichetta (== this).
Node Nodo della pagina.
... Tutto ciò a cui è possibile adattare la risorsa della pagina.
Il componente si adatta a:
Risorsa del componente.
Risorsa con etichetta (== this).
Nodo del componente.
...
Tutto ciò a cui la risorsa del componente può essere adattata.
Il modello si adatta a:
Risorsa Node.htmlRisorsa del modello.
LabeledResource Risorsa con etichetta (== this).
Node Nodo di questo modello.
... Tutto ciò a cui può essere adattata la risorsa del modello.

Sicurezza

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

DAM

La risorsa si adatta a:
Risorsa della risorsa.
Nodo della risorsa.
...
Tutto ciò a cui la risorsa della risorsa può essere adattata.

Assegnazione di tag

Tag si adatta a:
Risorsa del tag.
Nodo del tag.
...
Tutto ciò a cui la risorsa del tag può essere adattata.

Altro

Inoltre Sling / JCR / OCM fornisce un [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) per gli oggetti OCM ( Object Content Mapping ) personalizzati.