[rules-users] Shadow facts

J Michael Dean mdean77 at comcast.net
Wed Feb 11 21:07:05 EST 2009


I think I was not clear in my note.  I used dynamic facts with Drools  
4.07 but am migrating to Drools 5, where there is no longer a second  
argument to the insert method.  My POJOs do have property change  
listeners.

Here is an example rule that activates but never apparently fires:

rule "Detect insulin on"
dialect "java"
	when
		decision : GlucoseDecision(currentInsulinDripRate > 0)
		decisionState : GlucoseDecisionState( insulinOn == false )
	then
		decisionState.setInsulinOn(true);
end

The relevant method that is called on the RHS:

	public void setInsulinOn(boolean insulinOn) {
		boolean oldValue = this.isInsulinOn();
		this.insulinOn = insulinOn;
		firePropertyChange("insulinOn", oldValue, insulinOn);
	}

The eventual call is to fireRules which then calls executeRules in a  
callback.  Previously, I had a Boolean argument to the insert
statements and all the code worked with the old RuleBase, RuleAgent  
objects.  But since changing to KnowledgeSession, the rules
do not appear to fire.  Here are the relevant methods:

	public void executeRules(WorkingEnvironmentCallback callback) {
		StatefulKnowledgeSession ksession =  
kbase.newStatefulKnowledgeSession();
		callback.initEnvironment(ksession);
		ksession.fireAllRules();
		ksession.dispose();
	}

	public void fireRules(final GlucoseDecision glucoseDecision, final  
GlucoseDecisionState decisionState) {
		rulesEngine.executeRules(new WorkingEnvironmentCallback() {
			public void initEnvironment(StatefulKnowledgeSession workingMemory) {
				workingMemory.insert(glucoseDecision);
				workingMemory.insert(decisionState);
			}
		});
	}
>
> Message: 2
> Date: Wed, 11 Feb 2009 10:26:06 -0500
> From: Edson Tirelli <tirelli at post.com>
> Subject: Re: [rules-users] Shadow facts
> To: Rules Users List <rules-users at lists.jboss.org>
> Message-ID:
> 	<e6dd5ba30902110726t2b09ee9dtdc7e85ed4217f80a at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
>   Dean,
>
>   There are two unrelated things in here... the boolean flag for  
> dynamic
> facts means your fact supports the property change listeners and you  
> don't
> need to call modify() when you change an attribute. ShadowFacts are a
> complete different thing that should be mostly transparent to users.
>   If you can provide an example, it will be easier to help you.
>
>    []s
>    Edson
>
> 2009/2/11 J Michael Dean <mdean77 at comcast.net>
>
>> I am migrating from 4.07 to 5 and my previous DRL file does not  
>> function
>> correctly;  I previousliy inserted facts with the dynamic Boolean  
>> set true.
>> I understand that this is no longer done because shadow facts are  
>> "not
>> needed" in Drools 5, but is it necessary to do anything different  
>> in the RHS
>> when modifying facts?  My fact POJOs have a method for adding text to
>> themselves.  I believe my rules are not working properly because  
>> nothing is
>> being modified - only the initial activation set fires and then  
>> nothing
>> happens.
>>
>> Restated, the documentation talks about how to "avoid" shadow facts  
>> in
>> Drools 4.07 - are the restrictions in this part of the docs  
>> necessary in
>> Drools 5?
>>
>> Thanks.
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090211/b1a7276a/attachment.html 


More information about the rules-users mailing list