Fermer

mai 19, 2021

Comprendre les ressources AEM en 10 minutes


L'une des principales fonctionnalités d'Adobe Experience Manager (AEM) est la création de contenu d'interface utilisateur à l'aide de la fonction de création de contenu avec les composants principaux. Au fur et à mesure que le contenu est créé, il est stocké dans un référentiel Jackrabbit Oak en tant que ressources, qui est ensuite récupéré et rendu sous forme de contenu HTML. Lorsque les composants de création de contenu prêts à l'emploi ne répondent pas aux besoins de l'entreprise, AEM fournit des fonctionnalités permettant de créer des composants d'interface utilisateur personnalisés à l'aide de l'infrastructure HTL et des modèles Sling.

Qu'est-ce qu'une ressource?

Dans AEM, tout est stocké sous forme de contenu structuré dans un référentiel Jackrabbit Oak. Les informations de contenu Jackrabbit Oak sont stockées sous la forme de nœuds contenant des valeurs comme attributs. L'API Jackrabbit Oak fait référence à ces nœuds en tant que ressource. Resources stocke les valeurs dans les attributs. Dans les composants de l'interface utilisateur, les développeurs utilisent Resource et ses valeurs pour afficher l'interface utilisateur sur les pages Web.

Pour que les développeurs puissent accéder à Resource, AEM fournit plusieurs API. Pourquoi plusieurs API? L'accès à la ressource a un coût pour les performances du composant de l'interface utilisateur, ce qui affecte le temps de chargement de la page pour les pages non mises en cache. Dans cet article de blog, nous allons mettre en évidence quand utiliser QueryBuilder, ResourceResolver et ResourceUtil API.

Query Builder

Query Builder est construit sur l'API JCR. Dans AEM, les informations sont stockées dans un format structurel en tant que ressource, attributs et valeurs. L'API Query Builder est comme une requête SQL où des requêtes sont exécutées pour récupérer des données structurelles. Query Builder se compose d'une instruction qui inclut des prédicats, des expressions et des clauses similaires à l'instruction SQL.

Cas d'utilisation de Query Builder

Query Builder est pratique lorsque vous:

  • Récupérez un ensemble de données volumineux à afficher dans l'interface utilisateur en tant que Liste
  • Récupération d'un ensemble de données volumineux en fonction de critères donnés tels que des valeurs d'attribut
  • Récupération de données basées sur du texte comme la recherche de texte

L'API Query Builder prend en charge les instructions de format XPath, SQL2 et SQL. SQL est obsolète, donc dans ce blog, nous allons parler de XPath et SQL2.

XPath Query

La requête XPath en mots simples est décrite comme une syntaxe pour lire des nœuds spécifiques qui correspondent à des modèles donnés dans les prédicats. Ici, les nœuds sont le chemin de la ressource et le modèle qui seront valorisés pour les valeurs d'attribut correspondantes.
type = cq: Page
1_property = jcr: content / cq: modèle
1_property.value = / conf / we-retail / settings / wcm / templates / hero-page

Dans l'exemple ci-dessus, le chemin indique le chemin de la ressource, 1_property l'attribut et 1_property.value la valeur de l'attribut.

Exemple de code Java:

 Map  predicateMap = new HashMap <> ();
predicateMap.put ("chemin", "/ content / we-retail / us / fr");
predicateMap.put ("type", "cq: Page");
predicateMap.put ("1_property", "jcr: content / cq: template");
predicateMap.put ("1_property.value", "/ conf / we-retail / settings / wcm / templates / hero-page");

Session session = resourceResolver.adaptTo (Session.class);
QueryBuilder queryBuilder = resourceResolver.adaptTo (QueryBuilder.class);
Query query = queryBuilder.createQuery (PredicateGroup.create (predicateMap), session);
query.setStart (0);
SearchResult result = query.getResult ();

Remarque: XPath est obsolète, Apache Jackrabbit Oak prend toujours en charge l'utilisation de XPath.

Requête SQL2

La requête SQL2 est similaire à la requête RDMS. Les requêtes sont écrites pour récupérer les valeurs de colonne qui correspondent à un critère donné pour un chemin spécifique.

 SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE ([/content/we-retail]) AND s. [cq:template] = '/ conf / we-retail / settings / wcm / templates / hero-page' 

Dans l'exemple ci-dessus, * désigne toutes les colonnes pour le critère cq: template égal au template hero-page sous le chemin du contenu we-retail .

Exemples de code Java:

Exemple 1:

 String queryString = "SELECT * FROM [nt:base] WHERE ISDESCENDANTNODE ('/ content / we-retail / us / fr ') AND [cq:template] =' / conf / we-retail / settings / wcm / templates / hero-page '";
Iterator  resourceIterator = resourceResolver.findResources (queryString, Query.JCR_SQL2);

Exemple 2:

 String queryString = "SELECT * FROM [nt:base] WHERE ISDESCENDANTNODE ('/ content / we-retail / us / fr') AND [cq:template] = '/ conf / we-retail / paramètres / wcm / templates / page-héros '";
QueryManager queryManager = session.getWorkspace (). GetQueryManager ();
Query query = queryManager.createQuery (queryString, Query.JCR_SQL2);
QueryResult result = query.execute ();

Ce qu'il faut savoir:

  • Tout comme les requêtes SGBDR, les requêtes Query Builder utilisent des index pour récupérer l'ensemble de données.
  • AEM fournit des outils à l'outil Query Explain pour vérifier les performances des requêtes personnalisées . http: // localhost: 4502 / libs / granite / operations / content / diagnostosistools / queryPerformance.html  Explainquery Aem
  • L'analyse et l'optimisation des index sont importantes pour les performances optimales du serveur. Si les index ne sont pas créés correctement, cela aura un impact sur le parcours de la requête et les performances du serveur seront affectées. Pour plus d'informations, lisez Oak Queries and Indexing .
  • AEM a une limitation pour le nombre de lignes extraites. Le service des paramètres du moteur de requêtes Apache Jackrabbit limite le nombre de nœuds récupérés dans la mémoire. Si les exigences de l'entreprise imposent de récupérer un ensemble de données volumineux, puis des paramètres prêts à l'emploi (OOTB), nous pouvons ajuster la «limite de lecture en mémoire». Cependant, vous devez être prudent avec le dimensionnement du matériel qui aura un impact sur les performances du serveur.
  • Si vous utilisez la recherche textuelle, elle ne renverra pas les résultats escomptés. Les index doivent être optimisés et pour plus d'informations à ce sujet, vous pouvez consulter le Augmentation des résultats de recherche souhaités avec Oak Indexing Analyzer .

Pour plus d'informations, visitez Query Builder API | Adobe Experience Manager .

ResourceResolver

Une autre API importante est l'API ResourceResolver fournie par Apache Sling. Cette API fournit des méthodes pour créer une ressource, récupérer une ressource spécifique et ses enfants, et rechercher des ressources. L'unicité de cette API est créée à l'aide de la requête de servlet HTTP Sling ou avec Resource Resolver Factory. Ceci est très utile car la session utilisateur actuelle ou l'autorisation spécifique à l'utilisateur du service sera implicitement appliquée lors des opérations de création, de mise à jour ou de suppression.

Use Cases for Resource Resolver

  • Récupération d'une ressource lorsqu'un chemin est fourni
  • Récupération des enfants d'une ressource donnée
  • Opération CRUD dans un workflow ou un traitement par lots

Exemple de code Java:

 Resource resource = resourceResolver.getResource ("/ content / we-retail / us / fr / men ”); 

Dans l'exemple ci-dessus, l'objet resourceResolver récupère la ressource spécifique appelée men dans le chemin / content / we-retail / us / en / men et crée un objet. Pour plus d'informations, visitez ResourceResolver (Apache Sling 11 API) .

ResourceUtil

ResourceUtil est une classe statique fournie par Apache Sling API. Cette classe est très utile lorsque nous n'avons pas besoin d'écrire de code supplémentaire pour créer des nœuds JCR. Cette classe fournit des méthodes pour créer une ressource à l'aide du résolveur de ressources et du chemin existants créés et pour fournir des attributs et des valeurs sous forme de mappes. Cela aide également les développeurs à accéder facilement aux valeurs d'attributs rapidement.

Exemple de code Java:

 ValueMap properties = ResourceUtil.getValueMap (resource); 

Dans l'exemple ci-dessus, la classe resource util renvoie la valeur de la propriété sous la forme Objet ValueMap. Pour plus d'informations, lisez ResourceUtil (API Apache Sling 11) .

La carte des valeurs peut être obtenue de plusieurs manières. Si nous avons déjà l'objet de ressource, alors en utilisant la méthode adaptTo (), nous pouvons obtenir ValueMap comme indiqué ci-dessous:

 ValueMap properties = resource.adaptTo (ValueMap.class); 

Si nous utilisons le SlingModel, nous pouvons utilisez l'annotation @ValueMapValue pour obtenir la valeur actuelle de la propriété des objets comme ceci:

 @ValueMapValue (name = "jcr: title")
private String title; 

Après cette lecture rapide, j'espère que vous aurez une idée générale des ressources dans AEM et de la manière dont elles répondent au besoin de stocker du contenu. Nous avons également parcouru différentes API pour récupérer ces ressources ainsi que les cas d'utilisation à prendre en compte lors du choix d'une API pour obtenir les ressources.

N'hésitez pas à partager vos points de vue et à ajouter vos questions dans la section des commentaires ci-dessous

À propos de l'auteur

Rubal est un développeur AEM full-stack qui travaille à créer des solutions optimisées et efficaces pour divers problèmes techniques. Elle est certifiée Scrum Alliance Scrum Master (CSM®). Rubal apprécie la façon dont le fait d'être développeur de logiciels l'aide à explorer sa créativité et à y trouver de la joie.

Plus de cet auteur






Source link