Cet article fait partie des « Debug Series », où l’on tente de vous exposer les différentes possibilités de « debugguer » votre instance Alfresco (sans doute personnalisée).
Après avoir compris comment debugguer les sources Java, nous allons voir ici qu’il est également possible de débugguer les sources javascript (côté serveur). Attention, cet article ne vise pas à expliquer les principes d’architectures REST, les webscripts, ou encore les APIs javascript d’Alfresco.
Activer le Javascript Debugger
Pour nous aider dans notre tâche, Alfresco embarque un « Javascript debugger ». Pour l’utiliser, celui-ci doit être activé, en configurant le niveau log4j de la classe « AlfrescoRhinoScriptDebugger ».
Evidemment, pour faire cela, nous respectons les bonnes pratiques, et nous n’allons donc pas modifier le fichier WEB-INF/classes/alfresco/log4j.properties (il est dans la webapp) !
Nous allons créer un fichier dev-log4j.properties dans tomcat/shared/classes/alfresco/extension, et y inscrire la simple ligne suivante :log4j.logger.org.alfresco.repo.web.scripts.AlfrescoRhinoScriptDebugger=debug
Au démarrage suivant d’Alfresco, nous voyons donc apparaître dans une fenêtre le debugger :
Exemple d’utilisation du javascript Debugger
Pour une raison inconnue (pour l’instant), mon instance locale d’Alfresco m’empêche de déposer des documents via l’interface Share. J’ai par exemple l’écran d’erreur suivant lorsque je tente d’uploader un document :
Ayant l’intuition que l’erreur peut provenir d’un problème côté javascript server (puisque Share n’est qu’une interface communiquant avec l’entrepôt Alfresco par appels REST), j’arrête Alfresco, configure l’activation du debugger, et relance Alfresco.
Ensuite, je reproduis mon scénario d’erreur. Et, ô magie, à l’upload, mon debugger javascript me lance un message d’erreur plutôt explicite :
Ce message m’apprend déjà trois choses importantes :
1/ en effet, il réside un bug dans le javascript
2/ le fichier, ainsi que la ligne, au sein duquel l’erreur apparaît (ici, le fichier upload.js)
3/ le type d’erreur (ici, TypeError)
2/ le fichier, ainsi que la ligne, au sein duquel l’erreur apparaît (ici, le fichier upload.js)
3/ le type d’erreur (ici, TypeError)
Mais ce n’est pas tout, cet outil apporte bien plus de fonctionnalités (à découvrir par vous-même, toutes ne seront pas détaillées dans cet article). Il est ainsi possible de mettre des points d’arrêt dans le code javascript, d’avancer pas à pas, de vérifier les variables, de définir des expressions, etc …
Ainsi, dans l’exemple que j’ai choisi, je place un point d’erreur à la ligne adéquate du fichier upload.js.
J’ai défini quelques « expressions » (cadre en bas à droite), pour visualiser, au niveau de la ligne d’arrêt, la valeur de certaines variables ou de certains appels de méthodes.
Je comprends assez rapidement d’ailleurs que l’expression problématique du code javascript est la suivante : « exampleForBlogPost.length ».
Je comprends assez rapidement d’ailleurs que l’expression problématique du code javascript est la suivante : « exampleForBlogPost.length ».
Conclusion
Par conséquent, je modifie mon fichier upload.js pour supprimer ces quelques lignes de code en erreur (que j’avais évidemment ajoutées pour cet exemple d’article) du fichier upload.js (pour être totalement sûr de mon instance Alfresco, je pourrais même vérifier le fichier original upload.js d’une installation vierge).
Cet outil de debug javascript est d’une assez grande richesse, alors ne le négligez pas, notamment en phase de développement !