Los principales elementos de datos utilizados con CER son:
Un objeto de regla es una instancia de una clase de regla de un conjunto de reglas CER; por ejemplo, el objeto de regla para la persona "Juan Herrero" y
Un valor de atributo es el valor de un atributo de regla CER en un objeto de regla determinada; por ejemplo la fecha de nacimiento de Juan Herrero.
Toda la interacción con los objetos de regla CER y los valores de atributo se produce en una sesión CER. Estas interacciones incluyen la creación, recuperación y/o eliminación de objetos de regla CER y cualquier cálculo o recálculo de atributos en los objetos de regla.
Cada sesión CER se crea utilizando la clase curam.creole.execution.session.Session_Factory.
Cuando se crea una sesión CER, se debe especificar lo siguiente:
La estrategia para manejar una solicitud para volver a calcular un valor de atributo CER en una sesión1.
La estrategia para manejar una solicitud para volver a calcular un valor de atributo CER; por ejemplo si se debe volver a calcular inmediatamente, aplazar el recálculo a otra transacción o no permitir el recálculo en absoluto.
El mecanismo de almacenamiento2a utilizar para objetos de regla persistentes; por ejemplo sólo en memoria (que se perderá cuando la sesión quede fuera de ámbito), almacenamiento de base de datos o almacenamiento de instantánea.
A su vez, las implementaciones de almacenamiento de datos debe especificar una fábrica de objetos de regla a utilizar. Esta fábrica controla si los objetos de regla se crean de forma de tipo fuerte o de manera sólo interpretada.
La aplicación incluye estas implementaciones:
Genera un error si se intenta cualquier recálculo con la sesión CER.
Realiza recálculos inmediatamente (de forma síncrona, en la misma transacción de base de datos).
Aplaza los recálculos (para valores de atributo almacenados) a otra transacción de base de datos.
Aplaza los recálculos (para valores de atributo almacenados) a otra transacción de base de datos.
Conserva los objetos de regla en memoria sólo. Los objetos de regla de este almacenamiento de datos sólo están disponibles mientras el almacenamiento de datos está en ámbito - normalmente sólo para una única transacción de base de datos.
Recupera objetos de regla externos3:
Crea un documento XML que contiene detalles de un conjunto de objetos de regla implicados en las dependencias de uno o varios cálculos de atributo. Proporciona un "seguimiento de auditoría" de los datos utilizados finalmente en ese cálculo. Normalmente, el documento XML se puede almacenar en una tabla de base de datos para que la instantánea de objetos de regla se pueda consultar (pero no modificar) mediante una transacción de bases de datos posterior.
Están disponibles objetos de regla externos para que las transacciones de base de datos posteriores los recuperen y manipulen.
Combina aspectos de comportamiento de InMemoryDataStorage y DatabaseDataStorage. Reservado sólo para el uso interno de Cúram.
Crea y recupera objetos de regla como instancias de clases Java generadas por el generador de código de pruebas de CER (consulte Generador de códigos de prueba de CER). No se debe utilizar en el código de producción.
Crea y recupera objetos de regla en una forma totalmente interpreta (y por lo tanto dinámica). (Consulte Intérprete de conjunto de reglas).
No se garantiza el comportamiento si más de una sesión CER (en la misma transacción) intenta recuperar o consultar el mismo objeto de regla de la base de datos.
Utilice InMemoryDataStorage (para rapidez de ejecución) con StronglyTypedRuleObjectFactory (para que se puedan utilizar en las pruebas las clases Java generadas) y RecalculationsProhibited (para que las pruebas no cambien por accidente los datos durante una parte del proceso).
Utilice DatabaseDataStorage (para que los objetos de regla estén disponibles a lo largo de las transacciones) con un InterpretedRuleObjectFactory (para que los conjuntos de reglas sean totalmente dinámicos) y RecalculationsProhibited y utilice las características proporcionadas por el Gestor de dependencias (consulte Gestor de dependencias) para realizar las solicitudes para recalcular los valores CER en una sesión de CER nueva (e independiente).
Utilice SnapshotDataStorage (para que los objetos de regla se lean de un documento XML no modificable) con un InterpretedRuleObjectFactory (para que los conjuntos de regla sean totalmente dinámicos) y RecalculationsProhibited (las instantáneas no soportan cambios).
La interfaz de estrategia de recálculo de CER y las implementaciones se proporcionan sólo por compatibilidad con versiones anteriores.
Lo que es más importante, la opción de almacenamiento de datos no afecta la semántica de las expresiones de regla. Esto significa que puede utilizar un almacenamiento de datos ligero (en memoria) para las pruebas de JUnit (para que los objetos de regla permanezcan entre transacciones), sin ninguna diferencia en los cálculos subyacentes.
Por ejemplo, algunos conversores de objeto de regla no pueden soportar la ejecución de un readall (sin una coincidencia anidada) y/o poner restricciones en qué atributos de regla se pueden mencionar en el valor retrievedattribute de la coincidencia.
Cualquier violación de las limitaciones del conversor de objeto de regla hará que se genere una excepción en el tiempo de ejecución. Debe asegurarse de que las pruebas de conjunto de reglas incluyan lógica que invoque los conversores de objeto de regla (es decir, que se ejecute en el almacenamiento de datos de base de datos); a diferencia de la mayoría de las pruebas de lógica de reglas que utilizarán almacenamiento de datos en memoria (y que por lo tanto no invocan los conversores de objeto de regla).
Consulte la documentación de cada implementación de conversor de objeto de regla para conocer los límites que impone en el soporte para readall.