Sling Adapters
- Onderwerpen:
- Developing
Gemaakt voor:
- Developer
Sling biedt een Adapterpatroon om objecten die het Aanpasbaar interface. Deze interface verstrekt een generiek adjustTo() methode die het object omzet in het klassentype dat als argument wordt doorgegeven.
Bijvoorbeeld om een voorwerp van het Middel aan het overeenkomstige voorwerp van de Knoop te vertalen, kunt u eenvoudig doen:
Node node = resource.adaptTo(Node.class);
Gevallen gebruiken
Er zijn de volgende gebruiksgevallen:
-
Hiermee krijgt u implementatiespecifieke objecten.
Bijvoorbeeld een op JCR gebaseerde implementatie van het generieke
Resource
interface biedt toegang tot het onderliggende JCRNode
. -
Het maken van sneltoetsen voor objecten waarvoor interne contextobjecten moeten worden doorgegeven.
Bijvoorbeeld op basis van de JCR
ResourceResolver
bevat een verwijzing naar deJCR Session
, die op zijn beurt nodig is voor veel objecten die op die aanvraagsessie zullen werken, zoals dePageManager
ofUserManager
. -
Snelkoppeling naar services.
Een zeldzame zaak -
sling.getService()
is ook eenvoudig.
Null-retourwaarde
adaptTo()
kan null retourneren.
Hiervoor zijn verschillende redenen, waaronder:
- de implementatie ondersteunt het doeltype niet
- een adapterfabriek die deze zaak afhandelt, is niet actief (bijv. vanwege ontbrekende serviceverwijzingen)
- interne voorwaarde is mislukt
- service is niet beschikbaar
Het is belangrijk dat u de null-case netjes afhandelt. Voor jsp-renderingen kan het acceptabel zijn dat de jsp mislukt als dat resulteert in een leeg stuk inhoud.
Caching
Om de prestaties te verbeteren, kunnen implementaties het object dat door een obj.adaptTo()
vraag. Als de obj
gelijk is, is het geretourneerde object hetzelfde.
Deze caching wordt uitgevoerd voor alle AdapterFactory
gegronde gevallen.
Er is echter geen algemene regel: het object kan een nieuw of een bestaand object zijn. Dit betekent dat u niet op één van beide gedrag kunt vertrouwen. Daarom is het belangrijk, vooral binnen AdapterFactory
, dat de objecten in dit scenario opnieuw kunnen worden gebruikt.
Hoe werkt het
Er zijn verschillende manieren om Adaptable.adaptTo()
kan worden uitgevoerd:
-
door het object zelf; het implementeren van de methode zelf en het toewijzen aan bepaalde objecten.
-
Met een
AdapterFactory
, die willekeurige objecten kunnen toewijzen.De objecten moeten de
Adaptable
interface en moet worden uitgebreidSlingAdaptable
(die deadaptTo
aanroep aan een centrale adaptermanager).Hierdoor kunnen haken in de
adaptTo
mechanisme voor bestaande klassen, zoalsResource
. -
Een combinatie van beide.
In het eerste geval kunnen de javadocs aangeven wat adaptTo-targets
zijn mogelijk. Voor specifieke subklassen zoals de op JCR gebaseerde Resource is dit echter vaak niet mogelijk. In het laatste geval worden AdapterFactory
ze maken doorgaans deel uit van de klassen van het type private van een bundel en worden dus niet weergegeven in een client-API, en worden ook niet vermeld in javadocs. Theoretisch gezien zou het mogelijk zijn om alle AdapterFactory
implementaties van de OSGi de dienstruntime en kijken naar hun "aanpasbare"configuraties (bronnen en doelstellingen), maar niet om hen aan elkaar in kaart te brengen. Uiteindelijk hangt dit af van de interne logica, die moet worden gedocumenteerd. Vandaar deze verwijzing.
Referentie
Sling
Resource aanpassen aan:
ResourceUtil.getValueMap(Resource)
(handelt null case enz. af).Opmerking: meerdere permanente kaarten delen hun waarden niet .
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 aanpassen aan:
SlingHttpServletRequest aanpassen aan:
Geen doelstellingen nog, maar voert Aangepast uit en kon als bron in een douane AdapterFactory worden gebruikt.
SlingHttpServletResponse aanpassen aan:
(XML)
WCM
Pagina aanpassen aan:
Component aanpassen aan:
Sjabloon aanpassen aan:
Beveiliging
Toestemming, Gebruiker en Groep aanpassen aan:
DAM
Element aanpassen aan:
Tags
Tag aanpassen aan:
Overige
Daarnaast biedt Sling / JCR / OCM ook een [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
voor aangepaste OCM (Objectinhoud toewijzen).