Alfresco est il une solution pour votre entreprise ?

le 05/07/2009 par Rémy Saissy
Tags: Software Engineering

En ce moment, on entend beaucoup parler de collaboratif, d'entreprise 2.0, de wiki, ... et aussi d'Alfresco.

Logiciel libre, grosse communauté, architecture logicielle très proche de celle de Documentum mais avec des technologies plus récentes, Alfresco est une solution de gestion électronique de documents qui a semble-t-il tout pour plaire.

Cela dit tout le monde sait bien que la solution ultime et universelle n'existe pas et en vertu de cela je vous propose de faire une petite revue de l'adéquation entre des besoins courants et la manière dont Alfresco y répond, l'objectif étant de vous fournir un premier aperçu de ce qu'est Alfresco.

Cet article n'a pas pour but de vous "vendre" ou de vous décourager d'utiliser Alfresco mais simplement de donner un aperçu des possibilités du produit. N'hésitez pas à me faire part de vos remarques, demandes d'informations, ...

J'ai besoin de stocker mes données de façon organisée.

Si votre besoin s'arrête à cela, un partage NFS ou CIFS sera amplement suffisant.

Si par contre vous avez besoin "d'intelligence" dans cette organisation des données, Alfresco pourrait répondre à votre besoin car il intègre un mécanisme d'orchestration d'actions qui peuvent se déclencher lorsque l'on touche à son dépôt de données. Pour faire simple il est possible d'enchaîner des actions à l'ajout, la modification ou la suppression d'une donnée sur le dépôt. Ces dernières pouvant aller de la simple copie à la transformation d'un format à un autre en passant par la notification automatique des ayant droit sur la donnée.

J'ai besoin de capitaliser sur une base de connaissances.

Cela tombe bien, Alfresco est justement avant tout une solution de gestion documentaire !

Dans Alfresco, toute donnée ajoutée est stockée en un point bien identifié sur un support de stockage de masse. La suppression d'une donnée ne la supprime pas du support mais la met en quinzaine voire plus longtemps si vous préférez. De cette manière, vous limitez le risque de perte accidentelle d'information.

J'ai besoin de mettre en place des workflows complexes des directions métiers sur les données stockées.

Alfresco utilise le moteur de workflow JBPM ce qui lui permet de traiter des workflows allant de la simple validation d'un document par un tiers à des processus complexes entièrement modélisés avec jBPM Process Designer par exemple.

En outre, les mécanismes d'orchestration d'actions sur le dépôt de données permettent de transformer, déplacer, copier, envoyer par courriel, ... toute donnée stockée sur Alfresco.

J'ai besoin de pouvoir enrichir les données stockées.

Alfresco repose entièrement sur un mécanisme de modèle de données. Toute donnée stockée, des utilisateurs et leurs droits d'accès aux documents en passant par les répertoires sont des éléments d'un modèle de données.

Je dis 'un' et non 'le' parce que la solution est faîte de sorte que les développements spécifiques, les besoins métiers tels que l'enrichissement des données stockées sont effectués sous la forme de l'adjonction de modèles de données personnalisés au modèle livré d'origine.

Et puis de toutes façons, même d'origine, il y a déjà plusieurs modèles de données dans Alfresco à savoir :

  • un pour les types de données comme les répertoires, les images, les documents;
  • un pour les habilitations;
  • un pour les workflows.

Enrichir est quelque chose de naturel et facile à effectuer pour Alfresco.

J'ai besoin de gérer finement les droits d'accès à mes données.

Si les habilitations par défaut ne conviennent pas, Alfresco permet de définir son propre modèle de permission. Autrement, sachez que les accès peuvent se gérer au niveau donnée, au niveau répertoire, que des quotas utilisateurs peuvent être appliqués.

En outre, Alfresco gère des rôles. Mais qu'est ce qu'un rôle ? Juste un ensemble de permissions. On affecte des rôles à des utilisateurs ou des groupes d'utilisateurs par donnée ou par répertoire.

Par défaut, les rôles suivants sont proposés, libre à vous de les enrichir :

  • administrateur;
  • coordinateur;
  • collaborateur;
  • contributeur;
  • éditeur;
  • lecteur.

Nous pourrons en parler plus longuement dans un autre article.

J'ai besoin d'avoir un accès distant à mes données.

Alfresco propose plusieurs méthodes d'accès aux données.

L'interface web-client

Interface web historique du produit, elle n'évolue plus aujourd'hui. Cette interface présente plusieurs particularités :

  • accès quasi-exhaustif aux fonctionnalités de l'outil ce qui la rend inutilisable pour un utilisateur lambda;
  • panneau d'administration bien fourni (gestion des groupes, des utilisateurs, des rôles, du dépôt, des workflows, ...);
  • capacité à être adaptée moyennant un peu de configuration (des xml à modifier et écrire peuvent influer sur tous les boutons de l'interface);
  • doit tourner sur la même instance que le coeur d'Alfresco, la partie gestion documentaire.

Je vous déconseille d'utiliser cette interface sauf pour des besoins d'administration. Pour les métiers, il vaut souvent mieux développer une interface correspondant aux attentes se basant sur les API d'accès distant d'Alfresco.

L'interface share

Share est le nouveau client léger proposé par Alfresco. Il s'agit d'un site collaboratif orienté utilisateurs et non administrateur. Pas de panneau d'administration donc mais un fonctionnement sur le mode d'un portail comme Liferay consommant des services provenant du coeur d'Alfresco au travers de l'API REST.

API REST et SOAP

Alfresco expose ses fonctionnalités sous la forme d'une API REST eǵalement appelée Webscript et d'une API SOAP.

Ces deux API sont très complètes et permettent de concevoir des interfaces client léger ou lourd qui tourneront sur un serveur autre que le serveur de gestion documentaire, lui permettant ainsi de se concentrer sur sa tâche principale, la gestion documentaire.

L'API CMIS

Dernière née des API disponibles pour communiquer avec Alfresco, CMIS a été implémenté dans Alfresco 3 dans un effort d'intéropérabilité des accès aux dépôts de solutions de gestion documentaire. Concrètement, cette norme défini une interface standard pour accéder à un dépôt documentaire qu'il soit sous Alfresco, sous Sharepoint ou d'autres.

JCR et JCR over RMI

Si vous en avez besoin (intégration Liferay par exemple), le dépôt Alfresco implémente la norme JCR (JSR-170). Cette dernière peut être accédée en local ou au travers de RMI. Cependant, cette méthode est déconseillée par Alfresco qui mets plus l'accent sur le REST et sur l'API CMIS.

Actuellement nous avons un projet de plateforme collaborative basée sur Alfresco chez un client et ce dernier y est utilisé comme socle pour la gestion documentaire.

Dans les besoins exprimés, trois grandes catégories ont été dégagées :

  • les besoins d'administration de la plateforme;
  • les besoins d'accès à des données enrichies par le métier au travers d'une interface très ergonomique et graphiquement léchée;
  • les besoins de type portail favorisant un travail collaboratif.

Ces trois types de besoins se retrouvent dans les modes d'accès proposés par Alfresco. L'administration est donc assurée par le panneau d'administration de l'interface web-client, les accès aux données enrichies par le métier se font au travers d'une interface REST consommée par un client léger Flex répondant aux attentes d'ergonomie et de graphisme et les besoins de type portail collaboratif sont traité avec l'interface share qui nous fourni une plateforme sur laquelle nous pouvons agencer des composants existants et ajouter ceux dont la partie métier requiert un développement spécifique.

Au final, nous obtenons un ensemble cohérent, performant et évolutif et nous avons gagné du temps par rapport à un développement spécifique à 100%.

Je veux intégrer Alfresco avec le portail Liferay.

Nous avons eu un demande de ce type pour un client qui voulait utiliser Alfresco avec Liferay comme portail.

Bien qu'Alfresco prétende qu'il s'intègre très bien avec Liferay, en pratique, nous avons constaté qu'il ne s'agit pas d'une intégration mais plutôt d'une communication. En fait, la norme portlet permet d'intégrer des contenus récupérés sous la forme de code HTML. C'est ce qu'Alfresco propose avec quelques portlets codées grâce à son API Webscripts mais elles sont surtout là en temps que preuve de concept que les Webscripts peuvent retourner des contenus HTML intégrables dans Liferay au travers d'une portlet de type iframe.

Charge donc à votre équipe de développement de concevoir les portlets et éventuellement des services REST côté Alfresco pour réaliser l'intégration. C'est la conclusion à laquelle nous en sommes venu eu égard aux besoins métiers du client et à l'inadéquation des Webscripts proposés par défaut. Cela dit, il était quelque peu prévisible qu'Alfresco ne prévoit pas le besoin spécifique demandé par notre client. L'essentiel ici est qu'Alfresco propose tout l'outillage nécessaire pour réaliser cette communication facilement et rapidement. En outre, si vous souhaitez que Liferay utilise Alfresco comme fond documentaire, c'est possible puisque les deux sont compatibles JCR (JSR-170).

J'ai l'obligation de m'interfacer avec l'annuaire d'entreprise et je ne veux pas de mécanisme de provisioning tiré par les cheveux.

Aucun problème ! Alfresco repose sur la LDAPFactory standard de la JVM. De fait, il supporte parfaitement l'intégration avec un annuaire LDAP, que ce soit AD, OpenLDAP ou un autre.

Certains annuaires ont des champs non standards. Alfresco gère facilement cela au niveau de ses fichiers de configuration.

Le provisioning par défaut est de créé un compte à la racine du dépôt. Cela peut être paramétré facilement et si un provisioning plus complexe est à mettre en oeuvre (création de dossier personnel et copie de données, ...). Alfresco propose un mécanisme de modèle de dossiers et permet aussi de tout simplement développer une classe de provisioning spécifique.

Le déprovisioning par défaut est de ne pas supprimer le dossier personnel. Là encore, ce comportement peut être facilement modifié en modifiant la classe implémentant le mécanisme de déprovisioning.

Les opérations de synchronisation dans Alfresco sont ordonnancées par quartz. Ce dernier permet de configurer la fréquence des synchronisations tout comme dans une crontab standard.

En outre, Alfresco supporte plusieurs annuaires et fait une distinction entre synchronisation des utilisateurs et synchronisation des groupes. De cette manière, il est facile d'adapter sa configuration aux contraintes du SI.

Enfin, si vos annuaires limitent le nombre de réponses possibles, Alfresco, à partir de sa version 3.2 et dès maintenant dans la version labs supporte la pagination des requêtes LDAP.

Quartz ? Mais je ne veux pas de mécanisme d'ordonnancement interne dans les applications de mon système d'information

Pas de problème, Quartz est fourni par défaut et est configuré grâce à des beans Spring. Moyennant un peu de configuration et probablement quelques développements pour certaines tâches ne disposant pas de service REST ou SOAP exposé, il est tout à fait possible de le désactiver et de d'insérer ses tâches dans votre ordonnanceur central.

À titre d'exemple, nous avons failli le faire à un moment pour un client souhaitant que la synchronisation LDAP soit effectuée par son ordonnanceur central. Il faut savoir que dans Alfresco la synchronisation LDAP se fait en deux temps :

  • extraction du contenu à synchroniser et création d'un fichier XML représentant les utilisateurs, groupes, ...;
  • insertion de ce contenu dans Alfresco.

Nous avons donc deux tâches, deux classes et un XML dont la structure est connue.

Pour sortir la synchronisation du produit, il suffisait de :

  • coder un petit script aux normes de l'ordonnanceur central qui générerait l'XML attendu par Alfresco;
  • l'insérer dans Alfresco en exécutant un programme Java d'import fourni dans le WAR d'Alfresco.

Petit problème cependant, ledit programme JAVA requiert de couper le serveur Alfresco durant la mise à jour... Pas de problèmes là non plus, il suffit alors de coder le service REST manquant pour effectuer l'import et plus besoin de couper le serveur. Ce service est assez simple puisque toute la mécanique d'import étant déjà présente dans Alfresco, il n'a qu'à récupérer un fichier XML.

La sécurité me demande des flux en 's' partout.

Aucun problème, les flux LDAPS ou HTTPS sont parfaitement supportés.

Je dois mettre en place du SSO en interne et une connexion LDAP en externe.

Kerberos, NTLM, CAS, JAAS faîtes votre choix, le chaînage d'authentification est également supporté dans le cas où, par exemple, un accès extranet est mis en place avec un couple login/mot de passe et qu'un accès intranet utilise Kerberos.

Je veux une solution fonctionnant en grappe.

Alfresco est prévu pour ce type de configuration. L'effort de configuration spécifique est donc minimal.

En revanche, il faut savoir que si le mode grappe est supporté par défaut pour les instances d'Alfresco, toutes les instances doivent utiliser la même base de donnée et le même dépôt de données.

Base de données ? Mais je croyais que tout était sur un support de stockage !

En effet, c'est le cas pour toutes les données ayant un contenu.

Les utilisateurs, les répertoires (mais pas leur contenu), les méta-informations que vous avez utilisé pour enrichir vos données et vos workflows sont stockés sur une base de données qui en pratique n'est pas très chargée. Un simple MySQL suffit amplement.

Quels sont les bases de données supportées ?

Oracle, MSSQL, MySql, PostreSQL, Derby, ... Le choix est large. De plus, la charge sur la base est minimale, Alfresco n'utilisant pas de schémas complexes et reposant massivement sur son indexeur, sur Hibernate et sur EHCache.

Et pour le stockage, quels sont les pré-requis ?

Le dépôt de données à besoin d'un support ayant surtout une capacité de stockage en accord avec vos besoins.

L'indexation des données représente en moyenne 30% du volume total de données stockées sur le dépôt. De plus, l'indexation étant effectuée sur un support de stockage (Lucene est la technologie utilisée), il est plus que recommandé d'utiliser un disque très rapide supportant les opérations de vérrouillage de fichiers).

Je veux segmenter mes données sur plusieurs dépôts.

Alfresco est aussi prévu pour ce type de configuration bien que l'exercice soit un peu plus complexe à configurer. En outre, vous avez toujours une seule base de données possible et donc la procédure de sauvegarde doit prendre en compte le fait que pour une base de données, deux dépôts physiques devront être sauvegardés.

Dans le cas où vous auriez en tête une partie interne ayant tout le dépôt et une partie externe, exposée sur internet qui ne doit avoir qu'un sous ensemble de données et en lecture seule, sachez que pour Alfresco ce n'est qu'un cas particulier d'une configuration en mode grappe. En pratique, il s'agit de mettre l'instance "lecture seule" en mode grappe avec l'instance accès complet et de configurer son index pour qu'il ne traite qu'un sous ensemble des données.

Nous avons récemment rencontré un cas similaire à Octo et notre solution a été une troisième voie qui évite la mise en place d'un second serveur Alfresco; consommer un service REST côté Alfresco permettant de récupérer ledit sous ensemble de données qui est marqué par un tag.

Je veux une solution simple à déployer et à mettre à jour.

Actuellement, Alfresco ne fonctionne qu'avec tomcat. L'application est livrée sous la forme d'un WAR que vous déployez et c'est tout !

Si vous souhaitez le faire fonctionner sur Jetty, Jboss, ou encore Websphere, un effort de développement est à prévoir pour corriger les bugs empêchant la portabilité du produit.

Je veux un traçage fin des évènements.

Alfresco dispose d'un mécanisme d'audit qui, une fois activé, permet de suivre à la trace les évènements sur chaque objet du dépôt. À configurer avec précaution pour éviter de faire exploser la taille de la base de données et de trop ralentir le serveur.

Je veux un socle extensible.

Basé sur Spring avec les mécanismes exposés plus haut, Alfresco est particulièrement adapté si vous souhaitez l'utiliser comme un socle sur lequel prendront place des projets métiers nécessitant de capitaliser sur les informations.

J'ai besoin d'un wiki.

Alfresco s'interface avec mediaWiki. Toutefois, si votre besoin de limite au wiki, il peut être plus intéressant de n'installer que mediaWiki et de le relier éventuellement à Alfresco plus tard, le jour où le besoin de mise en place de ce dernier sera réel.

J'ai besoin de solutions collaboratives avec un client léger.

Alfresco propose des interfaces web tels que share. Cependant, il ne couvre pas tous les besoins et surtout son développement peut être fastidieux. En effet, ce n'est pas le domaine où Alfresco excelle, pas le portail collaboratif aussi il vaut mieux considérer un interfaçage d'une solution collaborative plus poussée avec Alfresco au travers de REST ou de SOAP.

Le mieux est encore de profiter des possibilités de communication offertes avec Alfresco et de mélanger les types d'accès en fonction des besoins. Comme expliqué plus haut, cela nous a permis de répondre efficacement à un besoin client récemment.

Je veux que mes équipes soient rapidement opérationnelles pour mes développements spécifiques.

La nature extensible et libre d'Alfresco est particulièrement adaptée pour une prise en main assez rapide. De plus, une véritable communauté est présente notamment au travers des forums et l'architecture logicielle propre et claire du produit fait que le recours au support développement n'est pas souvent nécessaire même pour un développeur Java junior.

Attention tout de même, il est important de connaître Spring, Java 6 et tomcat pour pouvoir rapidement prendre en main le produit.

Je veux faire de l'Agile.

C'est tout à fait possible et c'est ce qu'Octo fait chez ses clients. Toutefois, sachez qu'appliquer strictement du TDD (développpement dirigé par les tests) avec Alfresco peut parfois se révéler être une tâche ardue, la totalité du code n'étant pas couvert par les tests et l'execution des tests unitaires demandant le lancement d'une mini instance d'Alfresco. Une personne expérimentées sur Alfresco est alors un bon moyen d'éviter bien des pertes de temps. Nous avons rencontré pas mal de problèmes pour mettre en place les tests unitaires REST avec Alfresco à cause de quelques loudeurs comme la nécessités de lancer un mini Alfresco pour effectuer les tests unitaires. Cela dit, dans 80% des cas, les tests unitaires n'ont pas posé de problèmes et le produit étant libre, cela facilite et accélère grandement le dépannage en cas de blocage ce qui n'est pas négligeable.