Advantage: You don't have to code a handler in each and every consequence.
A very simple strategy to keep on firing, in spite of exceptions:
import org.drools.runtime.rule.ConsequenceException;
while( true ){
try {
kSession.fireAllRules();
break;
} catch( ConsequenceException e ){
System.err.println( "### Runtime exception ###" );
e.printStackTrace( System.err );
}
}
If your set of rules depends on normal completion of all consequences,
this may fail to produce expected results or worse, depending on where
in the aborted consequence the exception was thrown.
-W
2010/10/13 sumatheja <sumatheja(a)gmail.com>
Hi Wolfgang,
Whats the advantage of option 2 over 1? Can you give sample code for option
2??
2010/10/13 Wolfgang Laun <wolfgang.laun(a)gmail.com>
> In drl, you could use
> dialect "java"
> at outermost level, but one never does, because that's the default.
>
> I'd use option (2).
>
>
> -W
>
> 2010/10/13 sumatheja <sumatheja(a)gmail.com>
>
>> Hi Wolfgang,
>> I am actually writing all the rules in a .drl and
>> importing them into a guvnor. I didn't mention the dialect explicitly
>> anywhere in the code. Is the default dialect MVEL. Is there a way to make
>> one time declaration of dialect in my case instead of declaring it for all
>> the rules.
>>
>> 2010/10/13 Wolfgang Laun <wolfgang.laun(a)gmail.com>
>>
>> I'd say you are using
>>> dialect "mvel"
>>> There is no try/catch statement in MVEL. You have the options:
>>>
>>> (1) Use Java, not MVEL.
>>>
>>> (2) Surround the fireAllRules() with try/catch and put it in a loop
>>> that's terminated
>>> if there is no exception.
>>>
>>> -W
>>>
>>>
>>> 2010/10/13 sumatheja <sumatheja(a)gmail.com>
>>>
>>>> Hi All,
>>>> I have a set of rules. After firing the rules if an exception
>>>> occurs in a rule the following rules are not getting evaluated. So i
tried
>>>> writing a try catch block inside the consequence part of the rule, but
then
>>>> i get an error saying "'unable to build the
consequence.[Error:was expecting
>>>> type: java.lang.Object but found type:null]"
>>>>
>>>> Here follows my code
>>>>
>>>>
>>>> *rule 'Test rule'
>>>> ruleflow-group "Test Ruleflow"
>>>> no-loop
>>>> when
>>>> $c:Car()
>>>> Driver()
>>>>
>>>> then
>>>> try{
>>>> $c.getModel()
>>>> } catch (Exception Ee) {
>>>> System.out.println("caught an exception:
"+Ee.toString());
>>>> }
>>>> end*
>>>>
>>>> However if i remove the try catch block it buils fine.
>>>>
>>>> Can anyone let me know if i'm missing something here.
>>>>
>>>> Thanks in advance :)
>>>> --
>>>> cheers
>>>> Sumatheja
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users(a)lists.jboss.org
>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>>
>> --
>> cheers
>> Sumatheja Dasararaju
>>
>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
--
cheers
Sumatheja Dasararaju
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users