[rules-users] Initialize Global

Waruzjan Shahbazian wshahbazian at xiam.nl
Tue Oct 30 05:31:21 EDT 2007


Thanks, that sounds logical to me. I guess I just have to "trust" that 
the rule where the array gets initialised activates earlier than the 
rule where I need the array. That shouldn't be a problem since I use 
salience and to avoid nullpoint exceptions I can use the if(objectList 
!= null)  in the "Then" part of the rule where I need the array.

Maybe an idea for the drools developers to create an "update" function 
for the globals so we can eval on them too...in the future.

vdelbart schreef:
> It's normal.
>
> Globally, the rule engine works in two steps :
>  - first : the activation (the "when" statement)
>  - second : the execution (the "then" statement) with salience, ruleflow ...
>
> In your test, you have in the first step objectList = null and in the second
> step objectList = [1, 2].
>
> If you want to re-activate your rule, you have to do an update/insert/remove
> action... But you can't do that with globals. So you need to use the WM
> facts.
>
>
>
> Waruzjan Shahbazian-2 wrote:
>   
>> I have the same "problem", but eval(objectList == null) doesn't work. If 
>> I don't execute "drools.getWorkingMemory().setGlobal()" it "works fine", 
>> as if the rule activates and the object is null.
>>
>> global List objectList;
>>
>> rule "Start"
>>     salience 101
>>     when
>>         #conditions
>>     then
>>         objectList = new ArrayList() ;
>>         objectList.add("1");
>>         objectList.add("2");   
>>         System.out.println("Start objectList:"+objectList); 
>>         //drools.getWorkingMemory().setGlobal("objectList", objectList);
>> end
>>
>> rule "end"
>>     salience 97
>>     when
>>         eval (objectList == null)
>>     then
>>         System.out.println("End objectList: "+objectList);
>> end
>>        
>> gives:
>>    
>>     Start objectList:[1, 2]
>>     End objectList: null
>>
>> Next I uncomment the "drools.getWorkingMemory().setGlobal("objectList", 
>> objectList);" and run the rule again an get:
>>
>>     Start objectList:[1, 2]
>>     End objectList: [1, 2]
>>
>> so the objectList isn't null, but the rule still activates...
>>
>> Kris Verlaenen schreef:
>>     
>>>> That initialized my global but the rule still runs every execution.  
>>>> Can I
>>>> disable the rule after the first execution?
>>>>         
>>> What do you mean by "every execution".  A rule should only be executed 
>>> once, unless it gets reactivated (which should not be the case in this 
>>> situation).
>>>
>>>       
>>>> I would like to use (if (objectList==null)).  My list is not 
>>>> immutable. Can
>>>> I make a similar rule for the LHS?
>>>>         
>>> You can test whether the global is null using eval( objectList == null 
>>> )  in the LHS of the rule.
>>>
>>> Kris
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>       
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>     
>
>   




More information about the rules-users mailing list