DynamicExpressionRegistry y Alcances

El DynamicExpressionRegistry es un singleton que almacena y recupera valores de variables dinámicas en tiempo de ejecución. Soporta múltiples ámbitos para una gestión de configuración flexible.

Descripción general

El registro sirve como el almacenamiento central para todos los valores de variables dinámicas configuradas. Cuando se ejecuta el código de reglas de negocio generado, consulta el registro para resolver los valores de las variables.

Funciones clave:

  • Singleton patrón- una instancia global accesible a lo largo de la aplicación

  • Almacenamiento en dos niveles- registro global más registros con alcance de entidad

  • Seguro para hilos- usos ConcurrentHashMap para el acceso concurrente

  • Recuperación segura de tipos- devuelve valores escritos de acuerdo con DynamicVariable<T> definiciones

Ámbitos de Registro

Alcance Global

Los valores globales están disponibles para todas las ejecuciones y generalmente se establecen al inicio de la aplicación a partir de fuentes de configuración.

// Register a global value
DynamicExpressionRegistry.getInstance().register("paymentService_upperBound", 5000);

// Or using the type-safe API
DynamicExpressionRegistry.getInstance().register(
    PaymentServiceVariables.upperBound,
    BigInteger.valueOf(5000)
);

Ámbito de la Entidad

Los valores con alcance de entidad están asociados con un específico ProcessingEntity y anule los valores globales para ese contexto. Esto es útil para la configuración por entidad.

ProcessingEntity entity = ...; // from ProcessingContext

// Register an entity-scoped value
DynamicExpressionRegistry.getInstance().register(
    entity,
    "paymentService_upperBound",
    10000
);

Precedencia de Resolución

Al resolver el valor de una variable dinámica, el registro sigue esta precedencia:

  1. Valor con alcance de entidad (si un ProcessingContext está disponible)

  2. Valor global

  3. Valor predeterminado (de la DynamicVariable definición, definida en MPS)

Esto permite a las aplicaciones establecer valores predeterminados globales sensatos mientras anulan valores específicos para contextos de procesamiento particulares.

Seguridad de Hilos

El registro está diseñado para el acceso concurrente:

  • Uso del registro global ConcurrentHashMap

  • Los registros con alcance de entidad utilizan anidado ConcurrentHashMap estructuras

  • Las operaciones de registro y recuperación son atómicas.

Esto hace que sea seguro registrar valores de múltiples hilos y resolverlos de manera concurrente durante el procesamiento paralelo.