Un développeur AEM construit les composants que les auteurs assemblent en pages, les services Java qui les alimentent et la configuration du cache qui protège le site. Les questions d'entretien d'un développeur AEM tournent autour de trois couches : Sling et le dépôt de contenu, les composants en HTL et Sling Models, le Dispatcher et le CDN. Les offres récentes demandent souvent le headless avec les Content Fragments.
Deux plateformes cohabitent. AEM as a Cloud Service, mis à jour par Adobe chaque mois (version 2026.10.0 fin octobre 2026), impose un /apps immuable, Repo Init et Cloud Manager. AEM 6.5 LTS, disponible depuis mars 2025, reste installé chez le client ou chez un hébergeur, avec Java 17 ou 21. Un profil qui n'a connu que l'un des deux aura des réflexes à revoir sur l'autre.
Les CV listent souvent les mêmes mots. Demandez une page restée en cache après publication, un index Oak ajouté ou une configuration OSGi par environnement : les réponses précises viennent de ceux qui ont exploité un site. Le PDF propose un cas de 20 minutes sur la refonte d'un site multi-pays.
Ce qu'un développeur AEM manipule chaque jour
Sling et le dépôt JCR (Oak)
Tout le contenu d'AEM est un arbre de nœuds dans un dépôt JCR, implémenté par Apache Oak. Apache Sling transforme une URL en ressource de cet arbre et choisit le script qui l'affiche selon son type, ses sélecteurs et son extension. C'est la notion que les développeurs Java venus d'ailleurs mettent le plus de temps à assimiler.
OSGi (Apache Felix)
Le code Java est découpé en bundles OSGi qui exposent des services et reçoivent leur configuration par environnement. Une configuration mal rangée ou un service qui ne démarre pas font partie des pannes classiques. Demandez comment la personne configure un service différemment en stage et en production.
HTL et Sling Models
HTL (anciennement Sightly) est le langage de template des composants, avec un échappement automatique selon le contexte. La logique vit dans des Sling Models, des classes Java annotées qui lisent les propriétés du contenu. Un bon composant garde un HTL court et un modèle testé.
Core Components et templates éditables
Adobe fournit une bibliothèque de composants standards (titre, image, liste, formulaire) que les projets étendent au lieu de tout réécrire. Les templates éditables et les politiques de contenu définissent ce que chaque auteur peut placer sur une page.
Dispatcher et CDN
Le Dispatcher est le module Apache qui met en cache les pages devant l'instance de publication et filtre les requêtes. Sur AEM as a Cloud Service, un CDN géré par Adobe s'ajoute devant. La plupart des incidents visibles (page pas à jour, contenu exposé) se règlent dans cette configuration.
AEM as a Cloud Service et Cloud Manager
La version SaaS d'AEM, mise à jour en continu par Adobe. /apps et /libs ne changent plus à l'exécution, tout part du dépôt Git et passe par les pipelines Cloud Manager, avec des contrôles de qualité du code. Le runtime Java 21 laissera la place à Java 25, proposé en option à partir du 20 novembre 2026.
Content Fragments et GraphQL
Les Content Fragments sont des contenus structurés, sans mise en page, que l'API GraphQL d'AEM sert à une application mobile ou à un front React ou Next.js. Les requêtes persistées, appelées en GET, se mettent en cache comme des pages.
Edge Delivery Services et Universal Editor
Edge Delivery Services sert des sites rapides à partir de blocs écrits en JavaScript et CSS simples, stockés dans GitHub, avec du contenu venu de documents ou d'AEM. L'Universal Editor permet l'édition visuelle d'un front quel que soit son framework. Ce sont les sujets que les CV récents ajoutent.
Le poste se décline selon la couche tenue. Le développeur back-end AEM écrit les Sling Models, les services OSGi, les workflows et les intégrations. Le développeur front-end AEM travaille le HTL, les client libraries ou les blocs d'Edge Delivery Services. Le profil senior ou architecte tient le Dispatcher, la structure du contenu, les index Oak et les pipelines Cloud Manager. Beaucoup d'offres comptent aussi le headless avec les Content Fragments et un front React ou Next.js. Adobe propose des certifications AEM Sites Developer, qui attestent la connaissance de la plateforme. L'expérience d'exploitation d'un site en production se vérifie en entretien.
Les compétences AEM à contrôler pendant l'entretien
- Composants HTL et Sling Models
- Résolution Sling, JCR et services OSGi
- Cache Dispatcher et CDN
- Déploiement sur AEM as a Cloud Service
- Content Fragments et diffusion headless
- Droits, workflows et gestion multi-sites
Cinq questions à poser à un développeur AEM
Chaque question vient avec ce qu'une bonne réponse contient et le signal qui doit vous alerter. Pas besoin d'être technique pour les poser : écoutez si le candidat raconte du vécu.
Question 1 · confirmé
Un composant doit afficher les trois dernières pages publiées sous une rubrique choisie par l'auteur. Où placez-vous la logique, et comment la testez-vous ?
Une bonne réponseDans un Sling Model adapté depuis la requête ou la ressource, avec @ValueMapValue pour lire le chemin choisi dans la boîte de dialogue et le PageManager pour parcourir les pages enfants. Le template HTL ne fait qu'afficher, avec data-sly-use et data-sly-list. Il pense à étendre le composant List des Core Components par délégation plutôt que de tout réécrire. Les tests passent par AEM Mocks (wcm.io) et JUnit 5, avec un contenu JSON chargé dans un faux dépôt.
Signal d'alerteDe la logique Java dans un JSP, des boucles et des conditions métier dans le HTL, ou une requête sur tout le dépôt à chaque affichage.
Question 2 · confirmé
Après la publication d'une page, les visiteurs voient encore l'ancienne version pendant une heure. Où cherchez-vous ?
Une bonne réponseIl remonte la chaîne : navigateur, CDN, Dispatcher, instance de publication. Avec curl, il lit les en-têtes de réponse (Age, Cache-Control, Surrogate-Control) pour savoir quelle couche répond. Côté Dispatcher, l'invalidation (en AEM as a Cloud Service, elle est déclenchée par Sling Content Distribution à la publication), le statfileslevel et les règles /invalidate. Côté CDN, une durée de cache trop longue fixée dans la configuration Apache. La correction se fait sur la bonne couche, sans vider tout le cache.
Signal d'alerte« On vide tout le cache du Dispatcher à chaque publication », ou une réponse qui ignore qu'un CDN se trouve devant le Dispatcher.
Question 3 · confirmé
En AEM as a Cloud Service, un développeur veut créer un nœud sous /apps au démarrage avec du code Java. Que lui répondez-vous ?
Une bonne réponseQue c'est impossible : /apps et /libs sont immuables à l'exécution sur AEM as a Cloud Service. Le code et les composants passent par le paquet ui.apps déployé par Cloud Manager. Les structures de contenu, les utilisateurs de service et les ACL se déclarent en Repo Init dans ui.config. Le contenu modifiable (/content, /conf) va dans ui.content. Pour itérer vite, un Rapid Development Environment reçoit les paquets sans passer par le pipeline complet.
Signal d'alerteUn paquet installé à la main par le Package Manager en production, ou aucune idée de la séparation entre contenu immuable et contenu modifiable.
Question 4 · confirmé
L'URL d'une API externe change entre dev, stage et prod, et la clé d'accès ne doit pas être dans Git. Comment configurez-vous le service OSGi qui l'appelle ?
Une bonne réponseUne interface de configuration annotée @ObjectClassDefinition, liée au service par @Designate. Des fichiers .cfg.json dans ui.config, rangés par mode d'exécution (config.author, config.publish, config.stage, config.prod). L'URL vient d'une variable d'environnement de Cloud Manager ($[env:API_URL]) et la clé d'un secret ($[secret:API_KEY]), définis par environnement sans apparaître dans le dépôt.
Signal d'alerteL'URL codée en dur avec un test sur le nom de l'hôte, la clé commitée dans le dépôt, ou une configuration saisie à la main dans la console Felix.
Question 5 · confirmé
Une application mobile doit lire des contenus gérés dans AEM. Comment les exposez-vous ?
Une bonne réponseDes modèles de Content Fragments, saisis par les auteurs, puis l'API GraphQL d'AEM avec des requêtes persistées. Une requête persistée s'appelle en GET, donc le Dispatcher et le CDN peuvent la mettre en cache. Il configure le point d'accès GraphQL, le CORS pour les origines autorisées et une authentification pour l'aperçu des contenus non publiés. Pour un contenu de page, le Sling Model Exporter qui sert le JSON d'un composant est une alternative.
Signal d'alerteDes requêtes GraphQL envoyées en POST depuis l'application en production, ou l'exposition des sélecteurs .infinity.json sur /content.
Recevez la fiche d'entretien complète en PDF
La fiche pour mener l'entretien de bout en bout, prête à imprimer ou à partager avec le manager.
- 30 questions sur 6 axes, avec la bonne réponse, le signal d'alerte et la relance
- Le niveau visé pour chaque question
- Une mise en situation de 20 minutes et ce qu'on attend du candidat
- La grille d'évaluation de 1 à 4, axe par axe
Questions de recruteurs sur les profils AEM
Un bon développeur Java devient-il vite développeur AEM ?
Il a la base du langage, des tests et de Maven, mais AEM ajoute un modèle à part : un dépôt de contenu en arbre, Sling qui choisit le script d'après l'URL, OSGi pour les services et le Dispatcher pour le cache. Comptez plusieurs semaines avant qu'il soit autonome sur un projet existant. En entretien, demandez-lui comment une URL devient une page dans AEM : sa réponse montre tout de suite s'il a déjà travaillé sur la plateforme.
Une expérience sur AEM 6.5 suffit-elle pour un site sur AEM as a Cloud Service ?
Pas sans préparation. Le Cloud change la façon de travailler : /apps immuable, Repo Init, déploiement uniquement par Cloud Manager, mises à jour mensuelles d'Adobe. Un profil venu d'AEM 6.5 s'y adapte, à condition de connaître ces règles avant d'arriver, et l'entretien doit le vérifier. Pour un site resté sur AEM 6.5 LTS, l'expérience de l'installation en interne et de ses service packs compte davantage.
Comment vérifier l'expérience du Dispatcher sans environnement complet ?
Montrez un extrait de configuration Dispatcher avec deux erreurs : un filtre qui autorise /content.infinity.json et une règle d'invalidation trop large. Demandez à la personne de les trouver et de dire ce qu'elles provoquent en production. Ajoutez une réponse HTTP avec ses en-têtes et demandez quelle couche l'a servie. Ce test technique tient en quinze minutes et sépare vite ceux qui ont exploité un site de ceux qui ont seulement écrit des composants.
Que prouve une certification Adobe AEM Sites Developer ?
Elle montre que la personne connaît l'architecture, les composants et le déploiement tels qu'Adobe les décrit. Vérifiez la date : une certification passée avant le passage au Cloud ne couvre ni Cloud Manager ni Repo Init. Elle ne dit rien de la capacité à diagnostiquer une page restée en cache ou une requête lente. Gardez au moins une mise en situation sur ces sujets.
Pour structurer vos autres entretiens, consultez aussi nos pages sur les questions d'entretien de recrutement, la méthode de l'entretien structuré et la grille d'évaluation d'entretien.





