GS-reactor ― Introduction

La partie moteur de données de Generic System est développée depuis 2005 et elle est actuellement stable. Elle peut être utilisée dans n’importe quel projet Java 8, il suffit de la définir comme dépendance du projet. Il est également possible d’utiliser CDI pour injecter une référence à Engine au lieu de la créer.

Qu’est-ce que gs-reactor ?

gs-reactor est la partie front-end de Generic System. Le développement de gs-reactor a débuté beaucoup plus récemment que celui du noyau de Generic System. Par conséquent, gs-reactor est encore en cours de développement intensif et l’API n’est pas encore stable.

gs-reactor est à la fois :

  • Un serveur d’applications web pouvant utiliser des unités de persistance fournies par Generic System ;
  • Un framework de développement permettant de développer des applications web réactives directement en Java ;
  • Une bibliothèque de composants graphiques pouvant s’adapter au modèle de persistance configuré dans Generic System.

Les applications gs-reactor sont principalement configurées à l’aide d’annotations.

Présentation

gs-reactor permet de créer des applications web de gestion de données uniquement à l’aide de Java. Au lieu de créer des JSP, des contrôleurs et des beans, on définit directement l’arbre des tags HTML dans le code source Java, où l’on définit également les actions à effectuer lors d’évènements comme un clic sur un lien ou un bouton ou la saisie de texte dans un champ de texte. Les avantages de cette façon de faire sont d’une part, que l’on peut définir une application en un seul fichier, d’autre part, qu’à partir du moment où le code Java compile, il est quasi-certain que le code HTML produit sera correct : pas de problème de tags HTML non refermés, ou refermés dans le mauvais ordre.

Les actions sont transmises du navigateur à gs-reactor et inversement par l’intermédiaire d’une WebSocket, y compris pour la création initiale des DOM nodes lors du chargement initial de la page.

gs-reactor repose sur trois arbres reliés entre eux :

  • Un arbre de tags décrivant la structure de la page à afficher et définissant les actions à effectuer en réponse aux actions de l’utilisateur, comme la sélection d’un item dans une combobox ou le clic sur un lien.
  • Un arbre de contextes contenant l’information sur le contenu à afficher.
  • Un arbre de DOM nodes représentant la page affichée concrètement par le navigateur.

Les relations entre les classes correspondantes et les méthodes principales de ces classes sont présentées dans l’illustration ci-dessous :

Diagramme de classes simplifié du réacteur

Remarques importantes :

  • La donnée d’un tag et d’un contexte définit (au plus) un unique DOM node.
  • Un tag peut correspondre à plusieurs DOM nodes, s’il est associé à plusieurs contextes.
  • Un contexte peut correspondre à plusieurs tags.
  • Un contexte contient un tableau de génériques. À la racine de l’arbre des contextes, ce tableau contient seulement Engine. À chaque fois qu’un niveau est ajouté à l’arbre des contextes, un élément est ajouté au début du tableau, par exemple {Car, Engine}, puis {Audi S4, Car, Engine}. Le générique associé à un contexte, retourné par la méthode getGeneric(), est le premier élément de ce tableau.

Pour créer une application avec gs-reactor, une fois le modèle de données et le script de démarrage éventuel définis et l’application lancée, il ne reste qu’à créer l’arbre des tags sous forme de classes Java.

L’arbre des tags est défini par les concepteurs de l’application. Les enfants d’un nœud sont les tags contenus dans celui-ci. Au chargement de la page dans un navigateur, un arbre de tags est créé, puis l’arborescence des tags est transformée en arborescence de DOM nodes à l’aide d’un arbre intermédiaire de contextes construits pour l’occasion. Les DOM nodes et les contextes sont mis à jour en fonction des évolutions de l’information contenue dans Generic System et des actions de l’utilisateur. Les contextes et les DOM nodes sont propres à chaque utilisateur.

Nous allons tout d’abord voir comment lancer une application avec la partie serveur d’applications du réacteur, puis étudier un exemple de composant écrit avec la partie framework de gs-reactor.