Java, machine à états et SCXML

Le problème

Il y a quelque temps, je devais développer un logiciel pour un client qui contenait beaucoup de boutons de commande. Pour la plupart des boutons, il y a des conditions du genre :

  • Si on clique sur "Ajouter" et qu'une édition est en cours ...
  • Si on clique sur "Enregistrer" et que c'était un ajout ...
  • Si on est en train éditer ou d'ajouter une donnée ...

Étant donné la quantité de boutons et de conditions, je me retrouvais rapidement dans un situation pénible pour gérer tous les cas de figure. De plus, je n'étais pas convaincu que le mandant arrivait à m'aider à définir toutes les conditions avant l'écriture du code. Donc, je m'attendais à une phase de tâtonnement avant de livrer la première version.

La proposition de solution

Il se trouve que, par hasard, à ce moment-là je suivais un cours sur la modélisation avec Monsieur Medard Rieder qui est très versé dans le développement d'applications embarquées. Nous avons notamment parlé de logiciels de commande d’ascenseurs. La problématique est assez comparable à la mienne. Beaucoup de boutons de commande et des conditions du genre :

  • Si l'utilisateur choisi le deuxième alors qu'il est au rez ...
  • Si un utilisateur appelle l'ascenseur ...
  • Si quelqu'un appelle ascenseur alors qu'il est au même étage ...

Pour résoudre ce problème, cela fait longtemps que les électroniciens ont résolu ce problème. Pour ce faire ils utilisent les machines à états (Finite State Machine).

Rational Rose

Pour ce cours de modélisation, nous avons utilisé Rational Rose. Concernant les machines à états, ce logiciel permet de les modéliser en UML grâce au diagramme d'états-transitions. Ensuite, le code source peut être généré dans différents langages de programmation.

Le but est atteint, mais à quel prix ? Rational Rose est un excellent produit, ce que je viens de présenter n'est qu'une infime partie de la partie émergée de l'iceberg. Le revers de la médaille  c'est que les licences sont coûteuses et donc largement disproportionnées pour résoudre mon problème de base.

Produit plus réaliste pour mes besoins

Ce que j'aimerais c'est rational rose, mais en moins cher. Je m'attends donc à devoir faire des compromis, mais voici les points importants

  • Représentation graphique de la machine à états (idéalement UML)
  • Passage automatique de la version graphique au code source (Java dans mon cas)
  • Bon marché

Editeurs UML

D'abord, je me suis concentré sur les produits concurrents à Rose, mais open source. Tout ce que j'ai vu était nettement inférieur à ma référence, mais également beaucoup moins onéreux.

Il y a d'abord  les logiciels de schématique UML que j'utilise régulièrement : Violet et UMLet Ils sont très simples et permettent de modéliser rapidement. Par contre le passage du modèle au code se faire manuellement.

ArgoUML permet de générer du code, mais d'après mes souvenirs, seulement pour le diagramme de classe.

Je n'avais pas tellement confiance en BOUML car l'auteur venait de se fâcher avec un administrateur de Wikipedia et qu'il voulait laisser tombé le projet.

SCXML

Ensuite, j'ai cherché un éditeur de machine à états et je suis tombé rapidement sur SCXML.

  • Fondation Apache
  • Normalisation W3C
  • Editeur graphique scxmlgui.

Par contre la symbolique n'est pas l'UML, mais bon le rapport qualité/prix m'a eu l'air suffisant pour l'étudier attentivement...

Biokema

Biokema est une société qui fabrique des produits pharmaceutiques pour les animaux.

Une des matières premières utilisées pour certains produits est le colostrum bovin. S'agissant d'un besoin spécifique, Biokema, avait développé une petite application Access. Cette application avait été mise en service il y a de nombreuses années. Elle avait déjà été portée sous différentes versions successives d'Access. Mais l'application avait de plus en plus de peine à fonctionner avec les dernières versions. De plus, au cours du temps les besoins ont aussi un peu évolué. Il était donc temps de construire une nouvelle solution.

Les points remarquables de cette application sont les suivants :

  • Application réseau avec base de données MySQL
  • Client lourd, Java/Swing
  • Machine à états finis SCXML
  • JasperReport
  • Exportation des paiements selon la norme ISO 20022