Les éléments de données principaux utilisés avec CER sont les suivants :
Un objet de règle est une instance de classe de règles issue d'un jeu de règles CER ; par exemple, l'objet de règle de la personne John Smith ; et
Une valeur d'attribut est la valeur d'un attribut de règle CER sur un objet de règle particulier ; par exemple, la date de naissance de John Smith.
Toutes les interactions avec les objets de règle CER et les valeurs d'attribut apparaissent au sein d'une session CER. Ces interactions incluent la création, l'extraction et/ou la suppression d'objets de règle CER, et tout calcul ou recalcul d'attributs sur les objets de règle.
Chaque session CER peut être créée à l'aide de la classe curam.creole.execution.session.Session_Factory.
Lorsqu'une session CER est créée, vous devez indiquer les informations suivantes :
La stratégie de traitement d'une demande visant à recalculer une valeur d'attribut CER dans une session CER 1.
La stratégie de traitement d'une demande visant à recalculer une valeur d'attribut CER. Par exemple, le recalcul immédiat, le report du recalcul vers une autre transaction ou le refus de celui-ci.
Le mécanisme de stockage 2à utiliser pour les objets de règle permanents ; par exemple, mémoire en lecture seule (qui sera perdue lorsque la session sort de la portée), stockage de base de données ou stockage par images instantanées.
Les implémentations de stockage de données doivent également spécifier une fabrique d'objets de règle à utiliser. Cette fabrique détermine si les objets de règle sont créés selon une méthode fortement typée ou en interprétation seule.
L'application comprend les implémentations suivantes :
Génère une erreur si vous tentez de lancer un calcul au sein de la session CER.
Exécute immédiatement les recalculs (de manière synchrone, au sein de la même transaction de base de données).
Reporte les recalculs (pour les valeurs d'attribut stockées) à une autre transaction de base de données.
Reporte les recalculs (pour les valeurs d'attribut stockées) à une autre transaction de base de données.
Conserve les objets de règle dans la mémoire uniquement. Les objets de règle de ce stockage de données sont disponibles uniquement lorsque le système de stockage de données se trouve dans la portée, en général uniquement pour une transaction de base de données unique.
Extrait les objets 3règle externes à partir de :
Crée un document XML contenant les détails d'un ensemble d'objets de règle impliqués dans les dépendances d'un ou de plusieurs calculs d'attributs. Fournit une trace d'audit des données finalement utilisés dans ce calcul. En général, le document XML peut être stocké sur une table de base de données de sorte que l'image instantanée des objets de règle puisse être interrogée (mais pas modifiée) par une transaction de base de données ultérieure.
Les objets de règle externes sont disponibles pour extraction et manipulation par les transactions de base de données suivantes.
Combine les aspects comportementaux de InMemoryDataStorage et DatabaseDataStorage. Réservé à l'usage interne de Cúram uniquement.
Crée et extrait les objets de règle comme des instances de classes Java générées par le générateur de code de test CER (voir Générateur de code de test CER). Ne doit pas être utilisé dans le code de production.
Crée et extrait les objets de règle selon une méthode d'interprétation complète (et donc dynamique). (voir Interpréteur de jeu de règles).
Le comportement n'est pas garanti si plus d'une session CER (dans la même transaction) tentent d'extraire ou d'interroger le même objet de règle de la base de données.
Utilisez InMemoryDataStorage (pour sa vitesse d'exécution) avec StronglyTypedRuleObjectFactory (pour pouvoir utiliser des classes Java générées dans les tests), et RecalculationsProhibited (de sorte que les tests ne changent pas accidentellement les données au cours du processus).
Utilisez DatabaseDataStorage (de sorte que les objets de règle soient disponibles pour toutes les transactions) avec InterpretedRuleObjectFactory (pour que les jeux de règles soient entièrement dynamiques), et RecalculationsProhibited, et utilisez les fonctions fournies par le gestionnaire de dépendance (voir Gestionnaire de dépendance) pour effectuer toutes les demandes de recalcul de valeurs CER dans une nouvelle session CER (indépendante).
Utilisez SnapshotDataStorage (pour que les objets de règle soient lus dans un document XML inaltérable) avec InterpretedRuleObjectFactory (pour que les jeux de règles soient entièrement dynamiques)et RecalculationsProhibited (les images instantanées ne prennent pas en charge les changements).
L'interface et les implémentations de la stratégie de recalcul de CER sont fournies uniquement à des fins de compatibilité amont.
Il est important de noter que le choix du stockage de données n'a pas d'incidence sur la sémantique de vos expressions de règle. Cela signifie que vous pouvez utiliser un stockage de données léger (en mémoire) pour vos tests JUnit (de sorte qu'un grand nombre de tests JUnit puisse s'exécuter rapidement), et un stockage de données permanent (base de données) pour votre logique de production (de sorte que les objets de règle soient conservés pour toutes les transactions), sans aucune différence dans vos calculs sous-jacents.
Par exemple, il se peut que certains convertisseurs d'objet de règle ne prennent pas en charge l'exécution d'une expression readall (sans un élément imbriqué match), et/ou placent des restrictions sur les attributs de règle pouvant être nommés dans la valeur retrievedattribute de ce match.
Toute violation des limites du convertisseur d'objet de règle du convertisseur entraîne la génération d'une exception lors de l'exécution. Vous devez vérifier que vos tests de jeu de règles incluent une logique qui appelle les convertisseurs d'objet de règle (c'est-à-dire qui s'exécute sur le stockage de données de base de données), contrairement à la majorité de vos tests de logique de règles qui utilise le stockage de données en mémoire (et donc qui n'appelle pas les convertisseurs d'objet de règle).
Consultez la documentation de chaque implémentation du convertisseur d'objet de règle pour comprendre les limites qu'il impose sur son support pour readall.