vendredi 23 décembre 2011

Debug Series - Les sources Java Alfresco

Introduction

Le saviez-vous : Alfresco peut être débuggué comme n’importe quelle application Java.
Ce dont vous avez besoin :
- Une instance d’Alfresco sur votre poste
- Un environnement de développement
- Le code source d’Alfresco (de la même version que votre instance)

Dans l’exemple que je vais suivre ici, j’utilise Alfresco Community 4.0a (dans un serveur tomcat, sur environnement Windows), l’environnement de développement Eclipse, au sein duquel j’ai importé les sources d’Alfresco community 4.0a.

Pour le téléchargement des sources d’Alfresco, vous pouvez visiter ces quelques liens :

Configuration

Notre objectif est de pouvoir debugguer Alfresco, en plaçant des points d’arrêt dans le code, en observant la valeur des variables à un instant t, etc …

Pour ce faire, il faut réaliser quelques configurations.

1/ Tout d’abord, en lisant la page suivante de la doc d’Apache tomcat :
http://wiki.apache.org/tomcat/FAQ/Developing
Il faut donc, dans votre installation d’Alfresco, modifier le fichier alfresco.bat pour ajouter, à la fin de la ligne « set JAVA_OPTS= » :

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

On a ainsi configuré le serveur d’application pour qu’il « écoute » un éventuel debugger sur le port 8000.

2/ Alfresco étant lancé, on peut « activer » le debugger d’Eclipse.

Dans Eclipse, ouvrir le menu « Run/Debug configurations ». Sélectionner « Remote Java Application », puis cliquer sur le bouton en haut à gauche « New Launch configuration ».














Alors, dans le volet de droite, il faut configurer cette nouvelle configuration de Debug. A minima, voici ce dont il faut s’assurer :

- Donner un nom à la configuration
- Onglet « connect » / Vous pouvez laisser les paramètres de connextion par défaut (hôte : localhost, port : 8000)
- Onglet « source » / ajoutez l’ensemble des projets source Alfresco
- Onglet « common » : vous pouvez laisser les valeurs par défaut
(Bien sûr, avec un peu d’expérience, vous pourrez modifier l’ensemble des champs.)

Enfin, cliquez sur sur le bouton « debug », en bas de la fenêtre de configuration.

Debug Mode

Alors, une nouvelle « perspective » dans Eclipse s’ouvre : c’est la vue Debug.
Elle vous permet d’ouvrir des classes, d’y placer des points d’arrêt, de définir des variables pour en observer la valeur à un instant t, etc … comme pour toute application Java !

lundi 12 décembre 2011

Conseils pour la découverte de Solr avec Alfresco

Pour ceux qui s'apprêteraient à essayer l'intégration Solr dans Alfresco (en préparation de la sortie de la version 4.0), voici quelques conseils et ressources :

Lire tout d'abord :



Une fois les concepts de base appréhendés, il peut être intéressant par exemple de dumper le traffic HTTP entre un repository et Solr, pour avoir quelques exemples de requête effectuées et mieux comprendre l'interaction entre les deux.

Exemple de requête sur le mot "test" effectué depuis Share :


 (test) AND -TYPE:"cm:thumbnail" AND -TYPE:"cm:failedThumbnail" 
        AND - TYPE:"cm:rating"

Pour analyser les résultats, cette requête peut également être exécutée sur l'interface d'admin Solr.

Cette interface d'admin permet de mieux comprendre le fonctionnement interne de Solr, et est fournie avec le war solr et accessible à l'addresse suivante :  http://localhost:8080/solr/

Des  pages d'admin sont disponibles par "core" Solr, par défaut une pour "alfresco" correspondant à workspace/SpacesStore et une pour archive/SpacesStore. La documentation de cette interface est disponible ici : http://wiki.apache.org/solr/SolrAdminGUI

Des options de recherche avancée permettent de sélectionner des options supplémentaires telles que les champs à retourner, le nombre de résultats, le type de sortie (xml, json, ...)... Des options permettent également de demander la sortie "debug", c'est à dire la sortie incluant l'explain sur la requête, et les temps d'exécution des differentes étapes : parsing, filtrage, etc ..

Un point qui n'est pas sélectionnable dans l'interface d'admin actuellement est le query parser. Il en existe 4 par défaut : "alfresco" (AlfrescoLuceneQParserPlugin), "afts" (AlfrescoFTSQParserPlugin) et "cmis" (CmisQParserPlugin), ainsi que "select" (le parseur Solr/Lucene par défaut).

Voir http://www.slideshare.net/alfresco/moving-from-lucene-to-alfresco-fts pour plus d'informations sur le parseur FTS.

Pour chaque node à indexer côté repository, 2 nodes sont indexées dans Solr/Lucene :

- le node "LEAF", contenant le type, les aspects, et les identifiants du node. C'est celui qui est retourné lorsque l'on utilise les parseurs alfresco ou afts

- le node "AUX" (auxiliaire) contenant les informations "auxiliares" du node, à savoir ses parents, son path, le owner, les éventuelles ACL indexées, ainsi que les identifiants également.

Il y a donc dans ce cas deux documents au sens Lucene correspondant à un node indexé par Alfresco.
Ressources supplémentaires :

http://www.slideshare.net/teofili/apache-solr-crash-course http://lucidworks.lucidimagination.com/display/solr/Apache+Solr+Reference+Guide
http://wiki.apache.org/solr/SolrAdminGUI

Facilitez vos développements Alfresco Share avec Surfbug

Un commentaire qui revient de temps en temps est qu'il n'est pas simple d'étendre des composants Alfresco Share ou de s'inspirer d'existants pour en créer des nouveaux.

Surfbug est là pour répondre à ce besoin. Disponible depuis la version 3.4.3 (et +), il permet par simple clic d'afficher toutes les informations relatives à un composant : son URL, sa définition, les templates le constituant, et la localisation dans le classpath des fichiers qui le composent. 

Il s'active via la page http://localhost:8080/share/page/surfBugStatus . Cet accès est restreint aux administrateurs, car l'activation est globale pour tous les utilisateurs. Il faut donc l'utiliser comme un outil de développpement. 

Son utilisation est très simple : Des rectangles rouges démarquent les différents composants. il suffit, après l'avoir activé, de cliquer sur un composant pour lequel on souhaite connaître les détails. 

Voici un exemple : 



Plus d'informations disponibles ici : http://blogs.alfresco.com/wp/ddraper/2011/08/31/surfbug/