[rules-users] Apply role to whole class hierarchy

Joerg Henne hennejg+nabble at googlemail.com
Fri Jul 27 03:01:30 EDT 2012


Thanks for your help, Edson!

We are using drools 5.4.0.Final via maven. 

Maybe I am missing something, so here's a quick overview of what we do. We
have a model class ButtonEvent which is derived like this: 
ButtonEvent -> ZonedEvent -> VSCPEvent

Then there's a rulebase with something like this:

import test.vscp.VSCPEvent;
import test.vscp.information.ButtonEvent;

declare VSCPEvent
    @role( event )
    @timestamp( timestamp )
    @expires( 1h )
end
declare ButtonEvent
    @role( event )
    @timestamp( timestamp )
    @expires( 1h )
end

rule "Button long pressed"
    when
        b : ButtonEvent( action == Action.PRESSED )
        not( ButtonEvent( action == Action.RELEASED, this after[0s,1s] b ) )
    then
        ...
end

What I would have expected is that the second 'declare' statement to be
unnecessary. However, if I take it away, this is what I get:

java.lang.ClassCastException: org.drools.common.DefaultFactHandle
	at
org.drools.base.evaluators.AfterEvaluatorDefinition$AfterEvaluator.evaluateCachedRight(AfterEvaluatorDefinition.java:316)
	at
org.drools.rule.constraint.EvaluatorConstraint.isAllowedCachedRight(EvaluatorConstraint.java:80)
	at
org.drools.common.SingleBetaConstraints.isAllowedCachedRight(SingleBetaConstraints.java:139)
	at org.drools.reteoo.NotNode.assertObject(NotNode.java:133)
	at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
	at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141)
	at
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)
	at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:382)
	at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:235)
	at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:240)
	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:337)
	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:298)
	at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:888)
	at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:847)
	at
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:269)
	...

Thanks
Joerg





--
View this message in context: http://drools.46999.n3.nabble.com/Apply-role-to-whole-class-hierarchy-tp4018930p4018942.html
Sent from the Drools: User forum mailing list archive at Nabble.com.


More information about the rules-users mailing list