Sie sehen sich Hilfeinhalte der folgenden Version an:
- 6.4
- Ältere Versionen
Mit Sling wird ein Adaptermuster zum bequemen Übersetzen von Objekten bereitgestellt, die zum Implementieren der Adaptable-Schnittstelle verwendet werden. Über diese Schnittstelle wird eine generische adaptTo()-Methode bereitgestellt, mit der das Objekt in den Klassentyp übersetzt wird, der als Argument übergeben wird.
Sie können beispielsweise einfach wie folgt vorgehen, um ein Ressourcenobjekt in das entsprechende Node-Objekt zu übersetzen:
Node node = resource.adaptTo(Node.class);
Es gibt die folgenden Nutzungsszenarien:
- Rufen Sie spezifische Objekte für die Implementierung ab.
Eine JCR-basierte Implementierung der generischen Resource-Schnittstelle ermöglicht beispielsweise Zugriff auf das zugrunde liegende JCR-Node-Element. - Erstellung von direkten Verknüpfungen für Objekte, für die interne Kontextobjekte übergeben werden müssen.
Das JCR-basierte ResourceResolver-Element enthält beispielsweise einen Verweis auf die JCR-Sitzung der Anforderung, die wiederum für viele Objekte benötigt wird, deren Ausführung von dieser Anforderungssitzung abhängig ist, z. B. PageManager oder UserManager. - Direkte Verknüpfung mit Diensten.
Dies ist ein seltener Fall, da sling.getService() bereits eine einfache Möglichkeit darstellt.
adaptTo() kann NULL zurückgeben.
Hierfür gibt es verschiedene Gründe, z. B.:
- Die Implementierung unterstützt den Zieltyp nicht.
- Eine Adapter-Factory zur Verarbeitung dieses Falls ist nicht aktiv (z. B. aufgrund von fehlenden Dienstverweisen)
- Fehler für interne Bedingung
- Dienst ist nicht verfügbar
Es ist wichtig, dass Sie den NULL-Fall ordnungsgemäß verarbeiten. Für das JSP-Rendering kann es zulässig sein, dass für JSP ein Fehler auftritt, wenn dies zu einem leeren Inhaltselement führt.
Zur Verbesserung der Leistung kann für Implementierungen das Objekt zwischengespeichert werden, das über einen obj.adaptTo()-Aufruf zurückgegeben wird. Wenn das obj-Element gleich ist, ist auch das zurückgegebene Objekt dasselbe.
Diese Zwischenspeicherung wird für alle auf AdapterFactory basierenden Fälle durchgeführt.
Es gibt aber keine allgemeine Regel. Bei dem Objekt kann es sich entweder um eine neue oder eine vorhandene Instanz handeln. Dies bedeutet, dass Sie sich nicht auf eines der Verhalten verlassen können. Es ist – vor allem innerhalb von AdapterFactory – also wichtig, dass Objekte bei diesem Szenario wiederverwendet werden können.
Es gibt verschiedene Möglichkeiten, Adaptable.adaptTo() zu implementieren:
- Über das Objekt selbst. Die eigentliche Methode wird implementiert und dann erfolgt die Zuordnung zu bestimmten Objekten.
- Über ein AdapterFactory-Element, mit dem zufällige Objekte zugeordnet werden können.
Die Objekte müssen trotzdem noch die Adaptable-Schnittstelle implementieren und SlingAdaptable (übergibt den adaptTo-Aufruf an einen zentralen Adapter-Manager) erweitern.
Dies ermöglicht die Verwendung von Hooks für den adaptTo-Mechanismus für vorhandene Klassen, z. B. Resource. - Eine Kombination beider Vorgehensweisen.
Im ersten Fall kann über javadocs angegeben werden, welche adaptTo-targets möglich sind. Für bestimmte Unterklassen, z. B. die JCR-basierte Resource-Klasse, ist dies häufig nicht möglich. Da Implementierungen von AdapterFactory im letzteren Fall normalerweise Teil der privaten Klassen eines Bundles sind, werden sie nicht per Client-API verfügbar gemacht und auch nicht in javadocs aufgeführt. Theoretisch wäre es möglich, auf alle AdapterFactory-Implementierungen über die OSGi-Dienstlaufzeit zuzugreifen und sich die Konfigurationen der „adaptierbaren Elemente“ (Quellen und Ziele) anzusehen, diese aber nicht einander zuzuordnen. Dies hängt letztendlich von der internen Logik ab, die dokumentiert werden muss. Dies ist der Grund für diesen Verweis.
Adaptierung von Resource für:
Node | Wenn dies eine auf einem JCR-Knoten basierende Ressource oder eine JCR-Eigenschaft mit Verweis auf einen Knoten ist. |
Property | Wenn dies eine auf einer JCR-Eigenschaft basierende Ressource ist. |
Item | Wenn dies eine JCR-basierte Ressource ist (Knoten oder Eigenschaft). |
Map | Gibt eine Zuordnung der Eigenschaften zurück, wenn dies eine auf einem JCR-Knoten basierende Ressource ist (oder eine andere Ressource, die Wertzuordnungen unterstützt). |
ValueMap | Gibt eine benutzerfreundliche Zuordnung der Eigenschaften zurück, wenn dies eine auf einem JCR-Knoten basierende Ressource ist (oder eine andere Ressource, die Wertzuordnungen unterstützt). Dies kann (auf einfachere Weise) auch per ResourceUtil.getValueMap(Resource) (zur Verarbeitung von NULL-Fällen usw.) erreicht werden. |
InheritanceValueMap | Erweiterung von ValueMap, mit der beim Suchen nach Eigenschaften die Hierarchie der Ressourcen berücksichtigt werden kann. |
PersistableValueMap | Wenn dies eine auf einem JCR-Knoten basierende Ressource ist und der Benutzer über Berechtigungen zum Ändern von Eigenschaften auf diesem Knoten verfügt. Hinweis: Bei mehreren beibehaltbaren Zuordnungen werden die Werte nicht gemeinsam genutzt. |
InputStream | Gibt den binären Inhalt einer „file“-Ressource (wenn es eine auf einem JCR-Knoten basierende Ressource ist und der Knotentyp nt:file oder nt:resource lautet, wenn es eine Bundle-Ressource ist, oder file-Inhalt, wenn es eine Dateisystemressource ist) oder die Daten einer binären JCR-Eigenschaftsressource zurück. |
URL | Gibt eine URL für die Ressource zurück (Repository-URL dieses Knotens, wenn es eine auf einem JCR-Knoten basierende Ressource ist, eine jar-Bundle-URL, wenn es eine Bundle-Ressource ist, oder eine file-URL, wenn es eine Dateisystemressource ist). |
File | Wenn es eine Dateisystemressource ist. |
SlingScript | Wenn diese Ressource ein Skript ist (z. B. eine JSP-Datei), für das ein Skriptmodul bei Sling registriert ist. |
Servlet | Wenn diese Ressource ein Skript ist (z. B. eine JSP-Datei), für das ein Skriptmodul bei Sling registriert ist, oder wenn es eine Servlet-Ressource ist. |
Authorizable (Jackrabbit) |
Wenn es eine autorisierbare Ressource ist (per AuthorizableResourceProvider in org.apache.sling.jackrabbit.usermanager unter /system/userManager). |
String Boolean Long Double Calendar Value String[] Boolean[] Long[] Calendar[] Value[] |
Gibt den bzw. die Werte zurück, wenn es eine auf einer JCR-Eigenschaft basierende Ressource ist (und der Wert passt). |
LabeledResource | Wenn es eine auf einem JCR-Knoten basierende Ressource ist. |
Page | Wenn es eine auf einem JCR-Knoten basierende Ressource ist und der Knoten den Typ cq:Page (oder cq:PseudoPage) hat. |
Component | Wenn es eine cq:Component-Knotenressource ist. |
Design | Wenn es ein Entwurfsknoten ist (cq:Page, normalerweise unter /etc/designs). |
Template | Wenn es eine cq:Template-Knotenressource ist. |
Blueprint | Wenn es eine cq:Page-Knotenressource ist (in Zukunft werden spezifischere Überprüfungen möglich sein). |
Asset | Wenn es eine dam:Asset-Knotenressource ist. |
Rendition | Wenn es eine dam:Asset-Wiedergabe ist (nt:file unter dem Ordner „rendition“ eines dam:Assert-Elements). |
Tag | Wenn es eine cq:Tag-Knotenressource ist. |
Preferences | Wenn es eine cq:Preferences-Knotenressource für einen gültigen Benutzer bzw. eine Gruppe ist. |
Profile | Wenn es das Profil unterhalb eines Benutzer-/Gruppenknotens ist (z. B. cq/security/components/profile). |
UserManager | Basiert auf der JCR-Sitzung, wenn es eine JCR-basierte Ressource ist und der Benutzer über Berechtigungen zum Zugreifen auf den UserManager verfügt. |
Authorizable (cq-security) |
Dies ist ein autorisierbarer Home-Knoten. |
User (cq-security) |
Wenn es ein Home-Benutzerknoten ist. |
PrivilegeManager | |
SimpleSearch | Sucht unter der Ressource (oder es wird setSearchIn() genutzt), wenn es eine JCR-basierte Ressource ist. |
WorkflowStatus | Workflowstatus für den jeweiligen Seiten-/Workflow-Nutzlast-Knoten. |
ReplicationStatus | Replikationsstatus für die jeweilige Ressource oder dem zugehörigen Unterknoten „jcr:content“ (wird zuerst geprüft). |
ConnectorResource | Gibt eine angepasste Connector-Ressource für bestimmte Typen zurück, wenn es eine auf einem JCR-Knoten basierende Ressource ist. |
Config | Wenn es eine cq:ContentSyncConfig-Knotenressource ist. |
ConfigEntry | Wenn das Element unter einer cq:ContentSyncConfig-Knotenressource angeordnet ist. |
Adaptierung von ResourceResolver für:
Session | Die JCR-Sitzung der Anforderung, wenn es ein JCR-basierter Ressourcen-Resolver (Standard) ist. |
PageManager | |
ComponentManager | |
Designer | |
AssetManager | Basiert auf der JCR-Sitzung, wenn es ein JCR-basierter Ressourcen-Resolver ist. |
TagManager | Basiert auf der JCR-Sitzung, wenn es ein JCR-basierter Ressourcen-Resolver ist. |
UserManager | Basiert auf der JCR-Sitzung, wenn es ein JCR-basierter Ressourcen-Resolver ist und wenn der Benutzer über Berechtigungen zum Zugreifen auf den UserManager verfügt. |
Authorizable | Der aktuelle Benutzer. |
User | Der aktuelle Benutzer. |
PrivilegeManager | |
Preferences | Voreinstellungen des aktuellen Benutzers (basiert auf der JCR-Sitzung, wenn es ein JCR-basierter Ressourcen-Resolver ist). |
PreferencesService | |
PinManager | |
QueryBuilder | |
Externalizer | Dient zum Externalisieren von absoluten URLs, auch ohne Anforderungsobjekt. |
Adaptierung von SlingHttpServletRequest für:
Es sind noch keine Ziele vorhanden, aber „Adaptable“ wird implementiert und kann als Quelle in einer benutzerdefinierten „AdapterFactory“ verwendet werden.
Adaptierung von SlingHttpServletResponse für:
ContentHandler (XML) | Wenn es eine Sling-Antwort für einen Umschreibungsvorgang ist. |
Adaptierung von Page für:
Resource | Die Ressource der Seite. |
LabeledResource | Ressource mit Beschriftung (== this). |
Node | Der Knoten der Seite. |
... | Alle Elemente, für die die Ressource der Seite adaptiert werden kann. |
Adaptierung von Component für:
Resource | Die Ressource der Komponente. |
LabeledResource | Ressource mit Beschriftung (== this). |
Node | Der Knoten der Komponente. |
... | Alle Elemente, für die die Ressource der Komponente adaptiert werden kann. |
Adaptierung von Template für:
Resource | Die Ressource der Vorlage. |
LabeledResource | Ressource mit Beschriftung (== this). |
Node | Der Knoten dieser Vorlage. |
... | Alle Elemente, für die die Ressource der Vorlage adaptiert werden kann. |
Adaptierung von Authorizable, User und Group für:
Node | Gibt den Home-Knoten für den Benutzer bzw. die Gruppe zurück. |
ReplicationStatus | Gibt den Replikationsstatus für den Home-Knoten des Benutzers bzw. der Gruppe zurück. |
Adaptierung von Asset für:
Adaptierung von Tag für:
Über Sling/JCR/OCM wird außerdem eine AdapterFactory für benutzerdefinierte OCM-Objekte (Object Content Mapping) bereitgestellt.