Gestione automatica dell'eccezione nelle condizioni
È possibile automatizzare la gestione delle eccezioni a livello di progetto del servizio decisionale, in modo che il motore delle regole continui a elaborare le condizioni delle regole che generano eccezioni Java™. Quando si attiva la gestione automatica delle eccezioni in condizioni, il motore gestisce quattro tipi di eccezioni Java per impostazione predefinita, ma è possibile personalizzare l'elenco di tipi di eccezioni Java gestiti dal motore delle regole.
Il motore delle regole ignora i valori sconosciuti durante la valutazione della condizione della regola quando è abilitata la gestione automatica delle eccezioni. È possibile abilitare e disabilitare questa funzione in Rule Designer nel pannello Rule Engine della finestra delle proprietà del progetto di regole. La gestione automatica delle eccezioni è disabilitata per impostazione predefinita.
Quando si abilita la gestione automatica delle eccezioni, le seguenti sottoclassi vengono gestite dal motore delle regole quando è abilitata la gestione automatica delle eccezioni:
- ArithmeticException
- NumberFormatException
- NullPointerException
- IndexOutOfBoundsException
Con la gestione automatica delle eccezioni nelle condizioni abilitate, le espressioni nelle condizioni che risultano in eccezioni durante la loro valutazione vengono trattate come valori sconosciuti e vengono gestite dal motore delle regole. Il motore delle regole valuta le condizioni generali delle regole utilizzando la seguente logica a tre valori:

Se il motore di regole valuta la condizione della regola come true o false, nonostante i valori sconosciuti nelle espressioni della condizione, viene applicata la logica dell'azione della regola. Se il motore delle regole valuta la condizione della regola come sconosciuta, a causa di valori sconosciuti nelle espressioni della condizione, la regola non viene attivata.
Ad esempio, nella seguente regola, quando il valore del nome del cliente è null e l'età del cliente è 20, la prima condizione non può essere risolta e la seconda condizione viene soddisfatta:
if
the name of the customer is 'Paul'
or the age of the customer is 20
then
reject the loan;
Poiché la regola usa l'operatore logico or , viene eseguita l'azione per rifiutare il prestito. Se l'età del cliente non è 20, la prima condizione non può essere risolta e la seconda condizione non viene soddisfatta. In questo caso, la regola non viene attivata e il prestito non viene rifiutato.
Variabile regola
Se una definizione è sconosciuta, la parte della condizione è automaticamente sconosciuta indipendentemente dalle restanti condizioni.
Se la variabile di regola 'statusIsNew' è sconosciuta, la condizione viene considerata sconosciuta e non viene eseguita alcuna azione della regola.
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' ;
Tutte le variabili di regola devono essere risolte in modo diverso da sconosciuto per consentire la valutazione della parte condizione. Se la variabile di regola statusIsDuplicate è sconosciuta, la condizione viene considerata sconosciuta e non viene eseguita alcuna azione della regola, anche se esiste una condizione or e parte di essa è true. Ad esempio, nella seguente regola il commento di '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' ;
Condizioni che utilizzano raccolte
Quando il motore delle regole assembla raccolte di oggetti, gli oggetti per cui la clausola where è sconosciuta o false vengono ignorati. Di conseguenza, il test sul numero di oggetti in una raccolta riflette questo comportamento: vengono contati solo gli oggetti che hanno una clausola where valutata true.
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> ...
Il seguente esempio mostra una condizione che utilizza le raccolte e verifica il numero di oggetti. Nell'esempio, la raccolta (the borrowers) contiene solo i mutuatari per i quali sono noti i valori degli attributi. Quindi, quando l'operazione di conteggio è terminata ( is less than
3 ), qualsiasi mutuatario per il quale un attributo è sconosciuto non è incluso nel conteggio. In altre parole, se vengono valutati 3 mutuatari e il nome di un mutuatario è sconosciuto, mentre il nome degli altri due è il nome di 'borrower', la condizione è True e viene eseguita l'azione 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' ;
Nel seguente esempio, se la clausola where è true per due mutuatari e non è nota per due mutuatari, il motore delle regole considera che la condizione della regola è false. L'azione else viene eseguita:
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' ;
Aggiunta di tipi di eccezioni
È possibile personalizzare l'elenco di tipi di eccezione gestiti automaticamente creando un BOM con le classi corrispondenti e aggiungendo proprietà specifiche, de.autoCatchExceptionInConditions e de.doNotAutoCatchExceptionInConditions, a ciascuna classe, dove appropriato. Quando la gestione automatica delle eccezioni è abilitata in Rule Designer, il funzionamento è quello di gestire automaticamente le eccezioni che si verificano nelle parti di condizione delle regole per eccezioni che appartengono alle seguenti sottoclassi:
- ArithmeticException
- NumberFormatException
- NullPointerException
- IndexOutOfBoundsException
È possibile personalizzare il comportamento predefinito per aggiungere ulteriori tipi di eccezioni da gestire automaticamente impostando una proprietà denominata de.autoCatchExceptionInConditions sulla classe corrispondente utilizzando l'Editor BOM:
package java.lang;
public class ClassCastException
extends java.lang.RuntimeException
property "de.autoCatchExceptionInConditions" "true"
{
public ClassCastException();
public ClassCastException(string arg);
} Esclusione dei tipi di eccezioni
È possibile escludere i tipi di eccezione dalla gestione automatica delle eccezioni in una delle classi gestite sovrascrivendo la definizione della classe nel BOM con la proprietà denominata de.autoCatchExceptionInConditions. Ad esempio, è possibile rimuovere le eccezioni aritmetiche dalla gestione automatica delle eccezioni rimuovendo la proprietà de.autoCatchExceptionInConditions dalla classe ArithmeticException :
public class ArithmeticException
extends java.lang.RuntimeException
{
public ArithmeticException();
public ArithmeticException(string arg);
} È possibile escludere una sottoclasse delle quattro classi predefinite dalla gestione automatica delle eccezione impostando una proprietà denominata de.doNotAutoCatchExceptionInConditions (in grassetto):
public class StringIndexOutOfBoundsException
extends java.lang.IndexOutOfBoundsException
property "de.doNotAutoCatchExceptionInConditions" "true"
{
public StringIndexOutOfBoundsException();
public StringIndexOutOfBoundsException(string arg);
public StringIndexOutOfBoundsException(int arg);
} Registrazione
La gestione automatica delle eccezioni utilizza il servizio di registrazione log del logger Java™ standard, in modo da poter registrare i messaggi in base al tipo e al livello di messaggio e controllare il modo in cui questi messaggi vengono formattati e memorizzati al runtime.
In Rule Designer, per catturare le tracce dell'attività che si verificano nella gestione automatica delle eccezioni, è necessario prima definire un file logging.properties e renderlo disponibile per la JVM utilizzata nell'esecuzione della regola o nella configurazione di debug. Quindi, nella finestra Esegui configurazioni , nella scheda Parametri & Argomenti dell'operazione di decisione, immettere uno dei seguenti argomenti VM: -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 = FINEPer abilitare la gestione automatica delle eccezioni in un ambiente server, definire un file logging.properties e renderlo disponibile per la JVM configurando il server delle applicazioni, il livello di log per il nome Logger com.ibm.rules.engine.aeh deve essere impostato su FINE.
Per un'introduzione all'API di registrazione Java, vedere Panoramica sulla registrazione Java
. Per ulteriori informazioni sul logger Java java.util.logging , vedere java.util.logging
nella documentazione di Oracle.