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.

Continue reading GS-reactor ― Introduction

GS-reactor ― Exemple : Lancement d’une application

Voici d’abord comment lancer une application à l’aide de la partie serveur d’applications du réacteur :

Continue reading GS-reactor ― Exemple : Lancement d’une application

GS-reactor — Exemple : Composant créé avec gs-reactor

L’exemple d’application donné ci-dessus fait appel à une classe Table, qui a été écrite pour donner un exemple relativement simple d’utilisation du framework Generic System, elle est donc moins complexe que la table utilisée dans la démonstration disponible sur genericsystem.com.
Ce composant se contente d’afficher toutes les instances d’un type donné avec les valeurs de leurs holders et des composants de leurs liens.
Nous verrons plus bas comment l’arbre de tags créé est transformé en arbre de DOM nodes affichable par le navigateur.

Continue reading GS-reactor — Exemple : Composant créé avec gs-reactor

GS-reactor avancé — Transformation de l’arbre des tags en arbre de DOM nodes, @ForEach, @Select

Afin de créer l’arbre des DOM nodes, l’arbre des tags est parcouru en profondeur. Un DOM node racine correspondant au tag racine et à un contexte racine correspondant au générique Engine est créé. Puis par défaut, pour chaque tag enfant, un DOM node enfant associé au tag enfant et au même contexte que le DOM node parent est créé. Ce comportement est toutefois modifié lorsqu’un metaBinding a été défini sur le tag enfant. Le métabinding précise quel(s) contexte(s) associer au tag enfant afin de créer un ou plusieurs DOM nodes enfants, en créant de nouveaux contextes si nécessaire.
Il existe deux sortes de métabindings : les forEach et les selects. Un seul métabinding peut être défini sur un tag donné. Un métaBinding peut servir à :

  • Démultiplier un tag en l’associant à plusieurs contextes enfants du contexte courant (forEach).
  • Afficher ou non un tag en fonction de conditions liées au contexte courant (select).
  • Créer un unique contexte enfant du contexte courant en sélectionnant une classe générique.

Les deux premières utilisations sont similaires aux forEach et if des JSP. La troisième permet d’utiliser exactement la même classe Table pour afficher les instances de types différents.

Les métabindings sont usuellement définis à l’aide des annotations @ForEach, @ForEachContext, @Select, @SelectContext ou @DirectSelect.

Continue reading GS-reactor avancé — Transformation de l’arbre des tags en arbre de DOM nodes, @ForEach, @Select

GS-reactor, annotations ― Description des annotations

@Children

Prend comme valeur un tableau de classes étendant TagImpl qui correspondent aux classes des tags enfants à instancier. Lors du lancement de l’application, cette annotation est traitée en premier afin de construire entièrement l’arborescence des tags. Puis l’arbre est parcouru afin de traiter les autres annotations.

Exemple : InstancesTable permet d’afficher les instances d’un type. Les instances de cette classe ont 3 enfants : HeaderRow qui correspond à la ligne de titre, InstanceBuilder qui permet de créer une nouvelle instance du type affiché, et enfin ContentRow qui affiche les instances du type affiché.

Continue reading GS-reactor, annotations ― Description des annotations