SARAH: Persistance des données

Cet article décrit la manière dont sont persistées les données et leurs portées dans les différentes parties de SARAH.

Configuration: sur le disque

Le ConfigurationManager manipule un objet JSON pour organiser toute la configuration de SARAH. Cette configuration est toujours sauvegardée dans le fichier custom.prop. Au démarrage du serveur cet objet est construit à partir de:

  1. script/wsrnode.prop
  2. plugins/{plugin}/{plugin}.prop
  3. custom.prop

Attention ! si vous branchez de l’information dans cet objet, elle sera persisté lors de la prochaine sauvegarde.

Modules: en mémoire

Les modules ne sont chargés qu’une seule fois lors de l’appel de require('module'). Ils n’exposent que la fonction exports.action = function(data, callback, config, SARAH){ ... } ce qui veut dire:

  • Les autres fonctions sont privées
  • Le serveur doit redémarrer si le plugin est modifié.
  • Le plugin est rechargé si il est édité depuis le web (v2.8).
  • Il est possible de mémoriser des variables tant que le serveur est actif

Les plugins sont donc cloisonnés.

Règles: dans le flux

Un plugin est appelé avec un objet JSON data et se termine via un objet JSON callback({}).

L’objet JSON data passé au Plugin B contient l’information des data et callback() précédents. Dans le « do » d’une règle il s’appel options.

Ainsi les plugins peuvent véhiculer de l’information dans le contexte d’un enchaînement de règle. Un peu comme les attributs d’une requête HTTP d’un serveur J2EE.

Contexte: partagé en mémoire

L’objet SARAH est un singleton transverse à toute l’API. Son usage est décrit dans un précédent article.

Par convention, les plugins peuvent enregistrer de l’information dans SARAH.context.

C’est une bonne pratique pour partager de l’information entre plugins.

Conclusion

Dans un plugin:

  • Les propriétés se persistent sur disque
  • Les variables se persistent en mémoire
  • Le SARAH.context se partage entre plugins
  • Le data/callback() se partage entre règles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *