lundi 23 janvier 2012

Debug Series - Les sources Javascript Server

Introduction

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)

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 ».

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 !

7 commentaires:

  1. Merci pour l'article sur cet outil qui est souvent très utile pour les développeurs ou administrateurs Alfresco.

    Néanmoins, le debugger reste invisible lorsqu'Alfresco est démarré via un service Windows.
    Dommage, d'autant que les traditionnels scripts de démarrage alf_start.bat ne sont plus fournis avec Alfresco depuis quelques versions...

    Si quelqu'un a un truc pour pouvoir utiliser ce debugger, y compris lorsqu'Alfresco est démarré par un service Windows, je suis très intéressé !

    Denis

    RépondreSupprimer
    Réponses
    1. Voici la procédure que j'utilise pour pouvoir utiliser le débogueur Javascript d’Alfresco, donc pour pouvoir démarrer Alfresco en mode console et non en tant que service Windows.

      On peut copier les fichiers *.bat du dossier root\installer\bitrock\bitrock\alfresco\commands à partir des sources d’Alfresco et les coller dans le dossier d’installation d’Alfresco.

      Il faut aussi s’assurer que la variable d’environnement JAVA_HOME du fichier tomcat/bin/setenv.bat pointe vers une JDK et non seulement une JRE.

      Supprimer
  2. Toujours sur le sujet du debugging JavaScript, un article en anglais très intéressant :
    http://axel-faust.de/?p=47&lang=en

    RépondreSupprimer
  3. Salut,merci pour votre article grace aux blogs on apprend plein de choses sur alfresco.
    Bon j'ai un problème lorsque j'ajoute le fichier dev-log4j.properties et je redémarre tomcat.J'obtiens un message echec introuvable et dans le log de tomcat j'ai ceci :
    12:34:15,336 WARN [org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl] WQS unable to connect to repository: Introuvable
    Pourquoi j'ai ce message d'erreur et comment je peut l'éviter?
    J'utilise alfresco4.0.d

    RépondreSupprimer
  4. A priori le message d'erreur que vous mettez aussi n'est pas lié à la configuration log4j, mais une erreur de chargement du contexte Spring.
    Pouvez-vous créer un sujet sur le support alfresco, et nous donner le lien vers celui-ci. Nous continuerons allors la discussion sur le forum, plus adapté que les commentaires du blog :)

    RépondreSupprimer
  5. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  6. On peut également activer le debugger à chaud : http://localhost:8080/alfresco/s/api/javascript/debugger

    RépondreSupprimer