[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