[rules-users] Boolean global issue

Mark Proctor mproctor at codehaus.org
Mon Jun 15 18:54:03 EDT 2009


Dan Seaver wrote:
> So, I'd like to have a ruleset that returns true or false. The way I set that
> up in one of the version 5 candidate releases is to use a Boolean global and
> use drools.getWorkingMemory().setGlobal("result", new Boolean(false)) to
> change the value of the global. I could then access the updated value in the
> code by using the old style getGlobal.
>
> However in version 5 Final release, the global value changes fine within the
> ruleset, but is not updated when I access it via ExecResults. I imagine the
> reason for this is that immutable variables are handled differently in the
> final release than in the candidate release, but need to know whether this
> is by design.
>   
There is the command GetGlobal, that you can execute at the end, it 
takes an out identifier. That should solve your prolbem.

Mark
> Here is the RuleSet I'm using:
> package BooleanTest
>
> global Boolean result
>
> rule "Initialize"
> salience -1
> 	when
> 	then 
> 	drools.getWorkingMemory().setGlobal("result", new Boolean(false));
> 	System.out.println("Initialized result to false");		
> end
>
> rule "Display result"
> salience -2
> when
> then
> 	System.out.println("result is " + result);
> end
>
>
> Here is the pertinent code:
> 			cmds.add(CommandFactory.newSetGlobal("result", null, true));
>
> 			ExecutionResults execResults = ksession.execute(CommandFactory
> 					.newBatchExecution(cmds));
>
> 			for (String identifier : execResults.getIdentifiers()) {
> 				System.out.format(String.format("Identifier: %s, Value: %s \n",
> 						identifier, execResults.getValue(identifier)));
> 			}
>
> Here is the output:
> Initialized result to false
> result is false
> Identifier: result, Value: null
>
>   





More information about the rules-users mailing list