Manejo de excepciones automático en condiciones
Puede automatizar la gestión de excepciones en el nivel de proyecto del servicio de decisiones para que el motor de reglas siga procesando las condiciones de las reglas que generan excepciones Java™. Cuando activa el manejo automático de excepciones en condiciones, el motor maneja cuatro tipos de excepción Java de forma predeterminada, pero puede personalizar la lista de tipos de excepción Java que maneja el motor de reglas.
El motor de reglas ignora los valores desconocidos durante la evaluación de la condición de regla cuando el manejo automático de excepciones está habilitado. Puede habilitar e inhabilitar esta característica en Diseñador de reglas en el panel Motor de reglas de la ventana de propiedades del proyecto de reglas. El manejo automático de excepciones está inhabilitado de forma predeterminada.
Cuando habilita el manejo automático de excepciones, el motor de reglas maneja las siguientes subclases cuando está habilitado el manejo automático de excepciones:
- ArithmeticException
- NumberFormatException
- NullPointerException
- IndexOutOfBoundsException
Con el manejo automático de excepciones en condiciones habilitadas, las expresiones en condiciones que dan como resultado excepciones durante su evaluación se tratan como valores desconocidos y son manejadas por el motor de reglas. El motor de reglas evalúa las condiciones globales de la regla utilizando la siguiente lógica de tres valores:

Si el motor de reglas evalúa la condición de regla como verdadera o falsa, a pesar de los valores desconocidos en las expresiones de condición, se aplica la lógica de acción de regla. Si el motor de reglas evalúa la condición de regla como desconocida, debido a valores desconocidos en las expresiones de condición, la regla no se activa.
Por ejemplo, en la regla siguiente, cuando el valor del nombre del cliente es nulo y la edad del cliente es 20, la primera condición no se puede resolver y se cumple la segunda condición:
if
the name of the customer is 'Paul'
or the age of the customer is 20
then
reject the loan;
Puesto que la regla utiliza el operador lógico or , se realiza la acción para rechazar el préstamo. Si la edad del cliente no es 20, la primera condición no se puede resolver y no se cumple la segunda condición. En este caso, la regla no se activa y el préstamo no se rechaza.
Variable de regla
Si una definición es desconocida, la parte de la condición se desconoce automáticamente independientemente de las condiciones restantes.
Si la variable de regla 'statusIsNew' es desconocida, la condición se considera desconocida y no se realiza ninguna acción de regla.
definitions
set 'statusIsNew' to the status of 'the borrower' starts with “New";
if it is not true that 'statusIsNew' and the comment of 'the loan' contains "similar"
then
reject 'the loan' ;
add "duplicate detected" to the messages of 'the loan' ;
else
add "no duplicate found" to the messages of 'the loan' ;
Todas las variables de regla deben resolverse de forma diferente a las desconocidas para permitir la evaluación de la parte de condición. Si la variable de regla statusIsDuplicate es desconocida, la condición se considera desconocida y no se realiza ninguna acción de regla, incluso si existe una condición or y parte de ella es verdadera. Por ejemplo, en la regla siguiente, el comentario de 'the loan' contiene "similar":
set 'statusIsDuplicate' to the customer status of 'the borrower' starts with "Duplicate";
if
'statusIsDuplicate' or the comment of 'the loan' contains "similar"
then
reject 'the loan' ;
add "duplicate detected" to the messages of 'the loan' ;
else
add "no duplicate found" to the messages of 'the loan' ;
Condiciones que utilizan colecciones
Cuando el motor de reglas ensambla colecciones de objetos, los objetos para los que la cláusula where es desconocida o falsa se ignoran. En consecuencia, la prueba sobre el número de objetos de una colección refleja este comportamiento: solo se cuentan los objetos que tienen una cláusula where evaluada como verdadera.
If the number of ...If there is no ...If there is at least one ...If there are at least <number> ...If there are more than <number> ...If there are less than <number> ...If there are <number> ...
El ejemplo siguiente muestra una condición que utiliza colecciones y prueba el número de objetos. En el ejemplo, la colección (the borrowers) sólo contiene prestatarios para los que se conocen los valores de atributo. Por lo tanto, cuando se realiza la operación de recuento ( is less than
3 ), cualquier prestatario para el que se desconozca un atributo no se incluye en el recuento. En otras palabras, si se evalúan 3 prestatarios y el nombre de un prestatario es desconocido mientras que el nombre de los otros dos préstamos es el nombre del 'borrower', la condición es verdadera y se realiza la acción then .
if
the number of borrowers where the name of each borrower is the name of 'the borrower',
is less than 3,
then
add "less than 3 similar barrowers found" to the messages of 'the loan' ;
else
add "duplicate detected" to the messages of 'the loan' ;
reject 'the loan' ;
En el ejemplo siguiente, si la cláusula where es verdadera para dos prestatarios y desconocida para dos prestatarios, el motor de reglas considera que la condición de regla es falsa. Se realiza la acción else :
If there are more than 3 borrowers in the past borrowers of 'the loan' where the name of each borrower is the name of 'the borrower',
then
reject 'the loan';
add "more than 3 similar borrowers found" to the messages of 'the loan' ;
else
add "3 or fewer similar borrowers found " to the messages of 'the loan' ;
Adición de tipos de excepción
Puede personalizar la lista de tipos de excepción manejados automáticamente creando un BOM con las clases correspondientes y añadiendo propiedades específicas, de.autoCatchExceptionInConditions y de.doNotAutoCatchExceptionInConditions, a cada clase cuando corresponda. Cuando el manejo automático de excepciones está habilitado en Diseñador de reglas, el comportamiento consiste en manejar automáticamente las excepciones que se producen en las partes de condición de las reglas para las excepciones que pertenecen a las subclases siguientes:
- ArithmeticException
- NumberFormatException
- NullPointerException
- IndexOutOfBoundsException
Puede personalizar el comportamiento predeterminado para añadir más tipos de excepción que se manejarán automáticamente estableciendo una propiedad denominada de.autoCatchExceptionInConditions en la clase correspondiente utilizando el editor BOM:
package java.lang;
public class ClassCastException
extends java.lang.RuntimeException
property "de.autoCatchExceptionInConditions" "true"
{
public ClassCastException();
public ClassCastException(string arg);
} Exclusión de tipos de excepción
Puede excluir tipos de excepción del manejo automático de excepciones en una de las clases manejadas alterando temporalmente la definición de la clase en el BOM con la propiedad denominada de.autoCatchExceptionInConditions. Por ejemplo, puede eliminar excepciones aritméticas del manejo automático de excepciones eliminando la propiedad de.autoCatchExceptionInConditions de la clase ArithmeticException :
public class ArithmeticException
extends java.lang.RuntimeException
{
public ArithmeticException();
public ArithmeticException(string arg);
} Puede excluir una subclase de las cuatro clases predeterminadas del manejo automático de excepciones estableciendo una propiedad denominada de.doNotAutoCatchExceptionInConditions (en negrita):
public class StringIndexOutOfBoundsException
extends java.lang.IndexOutOfBoundsException
property "de.doNotAutoCatchExceptionInConditions" "true"
{
public StringIndexOutOfBoundsException();
public StringIndexOutOfBoundsException(string arg);
public StringIndexOutOfBoundsException(int arg);
} Registro
El manejo automático de excepciones utiliza el servicio de registro del registrador Java™ estándar, para que pueda registrar los mensajes basándose en el tipo y nivel de mensaje y controlar cómo se formatean y almacenan estos mensajes en tiempo de ejecución.
En Diseñador de reglas, para capturar rastreos de actividad que se producen en el manejo automático de excepciones, primero debe definir un archivo logging.properties y ponerlo a disposición de la JVM que se utiliza en la ejecución de reglas o en la configuración de depuración. A continuación, en la ventana Configuraciones de ejecución , en la pestaña Parámetros y argumentos de la operación de decisión, especifique uno de los siguientes argumentos de máquina virtual: -Djava.util.logging.config.file=file_path/logging.properties o -Djava.util.logging.config.file="${workspace_loc}/your_project/logging.properties".
FINE.handlers = java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
# Limit the messages that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
com.ibm.rules.engine.aeh.level = FINEPara habilitar los registros automáticos de manejo de excepciones en un entorno de servidor, defina un archivo logging.properties y haga que esté disponible para la JVM configurando el servidor de aplicaciones, el nivel de registro para el nombre de registrador com.ibm.rules.engine.aeh debe establecerse en FINE.
Para una introducción a la API de Java Logging, véase Java Logging Overview
. Para obtener más información sobre el registrador Java java.util.logging , consulte java.util.logging
en la documentación de Oracle.