Utilisation des adaptateurs Sling using-sling-adapters
Sling propose un modèle Adaptateur permettant de convertir facilement les objets qui mettent en œuvre l’interface Adaptable. Cette interface fournit une méthode adaptTo() générique qui convertit les objets dans le type de classe qui est transmis comme argument.
Par exemple, pour convertir un objet Resource en objet Node correspondant, vous pouvez simplement procéder comme suit :
Node node = resource.adaptTo(Node.class);
Cas d’utilisation use-cases
Il existe plusieurs scénarios d’utilisation :
-
Obtenir des objets spécifiques à l’implémentation.
Par exemple, une implémentation basée sur JCR de l’interface
Resource
permet d’accéder à l’objetNode
JCR sous-jacent. -
Création de raccourcis d’objets qui nécessitent la transmission d’objets de contexte internes.
Par exemple, le
ResourceResolver
basé sur JCR contient une référence à laJCR Session
de la requête qui, à son tour, est nécessaire pour de nombreux objets qui s’exécuteront sur la base de cette session de requête ;PageManager
ouUserManager
, par exemple. -
Raccourci vers les services.
Cas peu fréquent :
sling.getService()
s’avère également simple.
Valeur renvoyée nulle null-return-value
adaptTo()
renvoie null.
Il existe plusieurs raisons à cela, notamment :
- l’implémentation ne prend pas en charge le type de cible.
- une usine d’adaptateurs qui gère ce cas n’est pas active (par exemple, en raison de références de service manquantes).
- la condition interne a échoué
- Le service n’est pas disponible.
Il est important de gérer correctement ce cas « null ». Pour les rendus jsp, il peut être acceptable que le jsp échoue si cela entraîne un élément de contenu vide.
Mise en cache caching
Pour améliorer les performances, les implémentations peuvent mettre en cache l’objet renvoyé par un appel obj.adaptTo()
. Si obj
est identique, l’objet renvoyé l’est également.
Cette mise en cache est exécutée pour tous les scénarios basés sur AdapterFactory
.
Cependant, il n’existe aucune règle générale : l’objet peut être soit une nouvelle instance, soit une instance existante. Cela signifie que vous ne pouvez pas vous fier à l’un ou l’autre de ces comportements. Par conséquent, il est important, notamment dans l’AdapterFactory
, que les objets soient réutilisables dans ce scénario.
Fonctionnement how-it-works
Adaptable.adaptTo()
peut être implémenté de différentes façons :
-
Par l’objet proprement dit ; implémentation de la méthode et mappage sur certains objets.
-
Par une
AdapterFactory
, qui peut mapper des objets arbitraires.Les objets doivent cependant implémenter l’interface
Adaptable
et étendreSlingAdaptable
(qui transmet l’appeladaptTo
à un gestionnaire d’adaptateur central).Cela autorise les hooks dans le mécanisme
adaptTo
pour les classes existantes, commeResource
. -
Une combinaison des deux.
Pour le premier cas, vous pouvez consulter les documents Java™ pour connaître les adaptTo-targets
possibles. Cependant, pour des sous-classes spécifiques, telles que la ressource basée sur JCR, cela s’avère souvent impossible. Dans ce cas, les implémentations de AdapterFactory
font généralement partie des classes privées d’un lot et ne sont donc pas exposées dans une API cliente ni répertoriées dans les documents Java™. En théorie, il serait possible d’accéder à toutes les implémentations AdapterFactory
à partir de l’exécutable de service OSGi et d’observer leurs configurations « adaptables » (sources et cibles), mais pas de les mapper entre elles. En fin de compte, cela dépend de la logique interne, qui doit être documentée. D’où cette référence.
Référence reference
Sling sling
Resource s’adapte à :
ResourceResolver s’adapte à :
SlingHttpServletRequest s’adapte à :
Pas encore de cible, mais implémente l’interface Adaptable et peut être utilisé comme source dans une AdapterFactory personnalisée.
SlingHttpServletResponse s’adapte à :
WCM wcm
Page s’adapte à :
Component s’adapte à :
Template s’adapte à :
Sécurité security
Authorizable, **User et Group s’adaptent à :
Gestion des ressources numériques (DAM) dam
Asset s’adapte à :
Balisage tagging
Tag s’adapte à :
Autres other
Sling/JCR/OCM fournit, en outre, un [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
pour les objets OCM (Object Content Mapping) personnalisés.