Extensions

Les produits MRules sont accompagnés d’un certain nombres d’extensions, poursuivant des objectifs variés :

  • Enrichir les fonctionnalités offertes par le cœur de la librairie.
  • Utiliser des fonctionnalités de produits externes (Spring, versions supérieures du JDK)
  • Lier les différents produits proposés entre eux.

Ces extensions sont disponibles sur la page de téléchargement, ainsi que les sources associés. Ces sources sont libres d’utilisation et peuvent être repris et adaptés.

DSL pour le Moteur de Règles

Cette extension propose une nouvelle façon de configurer le Moteur de Règles Métier, en écrivant les règles dans une syntaxe proche du langage naturel.

Pour l’instant, la syntaxe a été créée en langue anglaise. Mais la traduction est en cours dans d’autres langues, dont le français.

Par exemple, la syntaxe suivante est tout à fait valide :

for each numbers starting from 10 ending at 20 increment by 5 set current element into $elementCourant then set current index into $indexCourant then execute all of
 print $elementCourant
 print $indexCourant
end of for

Cette extension est elle-même extensible :

  • Si vous avez développé vos propres Addon pour couvrir des besoins spécifiques, il est simple d’ajouter des éléments syntaxiques permettant de les intégrer à la grammaire.
  • Ajouter une traduction ou changer la syntaxe d’une grammaire existante est également possible.

Plus d’information sur l’utilisation de cette extension sur sa page dédiée.

Composant Web d’Editeur de DSL

Cette extension propose un composant Web, créé pour Vaadin, permettant d’éditer un texte respectant une DSL créée via notre produit « MRules Moteur de Grammaire ».

Cet éditeur propose nativement :

  • Une auto complétion simple et intuitive.
  • Une validation de la syntaxe lors de la frappe.

Cette extension doit être dérivée pour y intégrer la grammaire à éditer et quelques éléments de configuration. C’est le cas de :

  • L’extension de Composant Web d’Editeur de DSL du Moteur de Règles.
  • La Démo Editeur JSON.

Notre éditeur est basé sur ACE Editor, embarqué dans un composant Vaadin open source que nous avons forké et amélioré. Il peut être trouvé ici sur GitHub.

Composant Web d’Editeur de DSL du Moteur de Règles

Cette extension propose un composant Web, créé pour Vaadin, permettant d’éditer la configuration de notre produit « MRules Moteur de Règles », en utilisant la syntaxe « langage naturel » (c.f. extensions ci-dessus).

Ce composant peut être utilisé en standalone (un package Spring Boot est proposé) ou intégré à une application existante pour proposer une page d’administration des règles métiers.

Générateur de documentation html pour les grammaires

Cette extension enrichit le moteur de grammaire, afin de proposer un export de la documentation en format html. Son utilisation est illustrée dans le composant web d’édition ou dans la démo de grammaire JSon.

Également, la documentation en ligne de la syntaxe de la grammaire du moteur de règles est générée via cette extension.

Elle est basée sur le système de template jtwig et peut être facilement étendue ou personnalisée.

Elle peut être utilisée avec un JDK 1.8 +.

JDK 7

Cette extension enrichit le framework de conversion pour gérer l’Objet Path. Elle permet de convertir des données entre les types File, URI and Path.

Cette extension est utilisable à partir du JDK 1.7. Il suffit de l’inclure dans le CLASS_PATH à l’exécution pour qu’elle soit mise en place, sans autre action de configuration nécessaire.

L’utilisation de Maven pour utiliser cette extension est conseillée. En effet, elle contient une dépendance transitive vers le cœur de la librairie. Une seule dépendance déclarée est donc nécessaire.

Exemple de fichier POM pour Maven :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <dependencies>
        <!-- Adding dependency -->
        <dependency>
            <groupId>com.massa.mrules.extensions</groupId>
            <artifactId>mrules-ext-jdk7</artifactId>
        </dependency>
    </dependencies>
</project>

JDK 8

Cette extension enrichit le framework de conversion pour gérer lle nouveau package java.time. Elle permet de convertir des données entre le type java.util.Date, les nouveaux type Java 8 de représentation de dates et heures, les implémentations de Calendar et les types SQL.

Si utilisée avec le moteur de règles, elle surcharge certaines variables globale par défaut (#DATETIME, #DATE, #TIME) pour gérer les types fournis par java.time.

Cette extension est utilisable à partir du JDK 1.8. Il suffit de l’inclure dans le CLASS_PATH à l’exécution pour qu’elle soit mise en place, sans autre action de configuration nécessaire.

L’utilisation de Maven pour utiliser cette extension est conseillée. En effet, elle contient une dépendance transitive vers le coeur de la livrairie. Une seule dépendance déclarée est donc nécessaire.

Exemple de fichier POM pour Maven :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <dependencies>
        <!-- Adding dependency -->
        <dependency>
            <groupId>com.massa.mrules.extensions</groupId>
            <artifactId>mrules-ext-jdk8</artifactId>
        </dependency>
    </dependencies>
</project>

Monitoring

Cette extension permet d’exploiter les données de statistiques d’exécution collectées par les rulesets et exposées en JMX, afin de pouvoir les transposer dans un format d’export compatible avec les stacks de monitoring actuelles (Open Metrics, Prometheus, etc …).

Pour ceci, l’extension se base sur Micrometer. L’extension Spring permet de la configurer simplement. La démo « Assurance Santé » permet de la voir en action.

Cette extension est utilisable à partir du JDK 1.8.

Exemple de fichier POM pour Maven :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <dependencies>
        <!-- Adding dependency -->
        <dependency>
            <groupId>com.massa.mrules.extensions</groupId>
            <artifactId>mrules-ext-monitoring</artifactId>
        </dependency>
    </dependencies>
</project>

Spring

Cette extension met à disposition les factory Spring permettant de configurer l’instanciation et l’injection des moteurs de règles, en tant que beans gérés par Spring. Elle permet également de simplifier la configuration de l’extension de monitoring. Voir le « how to » et le projet de démo pour plus de détail sur son utilisation.

Cette extension est utilisable à partir du JDK 1.8. Il suffit de l’inclure dans le CLASS_PATH à l’exécution pour qu’elle soit mise en place, sans autre action de configuration nécessaire.

L’utilisation de Maven pour utiliser cette extension est conseillée. En effet, elle contient une dépendance transitive vers le coeur de la livrairie. Une seule dépendance déclarée est donc nécessaire.

Exemple de fichier POM pour Maven :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <dependencies>
        <!-- Adding dependency -->
        <dependency>
            <groupId>com.massa.mrules.extensions</groupId>
            <artifactId>mrules-ext-spring</artifactId>
        </dependency>
    </dependencies>
</project>

 Génération de bytecode

Lorsque le moteur de règles doit accéder à des données des beans d’entrée / sortie (en lecture ou en écriture), les API Java de réflexion sont utilisées.

Cette extension permet de ne plus utiliser ces API lorsque c’est possible, c’est-à-dire si les données accédées sont « public ». Du bytecode sera généré au runtime et directement utilisé. Les API de réflexion continueront cependant à être utilisées pour les données « private » ou « protected ».

L’API Java de réflexion est devenue de plus en plus rapide à chaque version, et depuis le JDK 1.7 elle est presque aussi rapide que l’utilisation standard des getters / setter avec du code natif. Donc utiliser cette extension apportera peu d’amélioration de performances à l’exécution (moins de 5%) mais augmentera significativement le temps de compilation. Elle sera donc réellement utile dans peu de cas, mais est un excellent exemple de développement d’extension, et d’utilisation de la fonctionnalité de compilation à la volée introduite en Java 7.

Cette extension est utilisable à partir du JDK 1.7. Il suffit de l’inclure dans le CLASS_PATH à l’exécution pour qu’elle soit mise en place, sans autre action de configuration nécessaire.

Exemple de fichier POM pour Maven :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <dependencies>
        <dependency>
            <groupId>com.massa.mrules.extensions</groupId>
            <artifactId>mrules-ext-native-properties</artifactId>
        </dependency>
    </dependencies>
</project>

Web Service REST JSON

Une application Web permettant d’exécuter le moteur de règles à distance via un Web Service JSON est en cours de développement.

Une pré-version est actuellement disponible. Les fonctionnalités offertes sont les suivantes :

  • Déclarer une ou plusieurs instance de Rule Set par l’intermédiaire de ressources JNDI.
  • Exécuter à distance ces Rule Set via un Web Service REST JSON en POST.

Les noms JNDI des Rule Set doivent être sous la forme « java:comp/env/rules/{name} », auquel cas l’URL d’exécution du moteur sera « http://host/MRulesWS/run/{name} ».

L’application est construite pour être utilisée sur Tomcat 8.0 mais peut être facilement portée sur tout autre conteneur Web. Elle est à ce stade destinée à servir de base de développement mais n’est pas destinée à être utilisée telle que.

Les développements sont en cours afin d’ajouter de nombreuse fonctionnalités et d’obtenir une application utilisable dans un environnement de production et facilement déployable via des conteneurs Docker.