[rules-users] sequencing by business logic/ classcastexception in consequence

Joost de Vries drools at ziener.org
Fri Jan 12 06:39:21 EST 2007


Hi Michael,

The list is defined in terms of the superclass that both classes share. And
the previous and next methods both have the superclass as the return type.

So I'd expect
PreventieveInsluitingsTitel(previous==secondPosition [...]
to evaluate to
<instance of superclass> == <instance of subclass>
I'd expect this check to just fail when the objectreferences do not refer to
the same object. Not to cause a classcastexception.

But the exception is thrown in the consequence part of the rule during an
invocation of modify( ).....

So I'm not sure why this construction would be wrong and what would be the
right way to do it.

oh, by the way; sorry for the dutch classnames. That must make the problem
harder to understand. In fact it's about convictions and the subclasses are
types of convictions.

regards,

Joost

2007/1/12, Michael Neale <michael.neale at gmail.com>:
>
> In terms of your problem, it seems to be to do with:
> PreventieveInsluitingsTitel(previous==secondPosition
> the secondPosition is not a compatible class with previous?
>
> I don't have any specific thoughts on computing a sequence in rules,
> unfortunately... maybe someone else does ? ;)
>
>
>
>
> On 1/11/07, Joost de Vries < drools at ziener.org> wrote:
>
> > Hi,
> >
> > I'm new to jBoss Rules and I'm hitting a few snags. I appreciate your
> > insight.
> >
> > Among other things I want to use business rules to compute the right
> > sequence of actions that conforms to legal business rules.
> > The only way I could think of to implement this using rules is to use
> > rewriting production rules similar to:
> > input: ACCAAAC
> > rule:  CA -> AC
> >
> > My first question is: what other ways are there to compute a sequence
> > that conforms to sequencing business rules?
> >
> > My second question concerns the nullpointerexceptions and
> > classcastexceptions I'm encountering in my rules.
> > I've got a sequence of C's who are either B's or A's. I.e. C is the
> > common superclass. This superclass has the methods:
> >
> > public C getPrevious();
> > public C getNext();
> >
> > Actually it's in dutch so it's
> >
> > public class Straf extends InsluitingsTitel {}
> > and
> > public class PreventieveInsluitingsTitel extends InsluitingsTitel {}
> > and
> > public abstract class InsluitingsTitel{
> > public C getPrevious();
> > public C getNext();
> > }
> >
> > The rule is as follows:
> >
> > rule "WSV 68.1"
> >     when
> >         // any PreventieveInsluitingsTitel should precede all Straf
> >         secondPosition: Straf ( firstPosition: previous )
> >         thirdPosition:
> > PreventieveInsluitingsTitel(previous==secondPosition, fourthPosition:next)
> >     then
> >         System.out.println( "switching wsv 68.1 "+secondPosition+"
> > "+thirdPosition);
> >         thirdPosition.switchWithPrevious();
> >         if(firstPosition!=null){
> >             modify(firstPosition);
> >         }
> >         modify( secondPosition);
> >         modify( thirdPosition);
> >         if(fourthPosition!=null){
> >             //in the next statement a classcastexception is thrown
> >             modify(fourthPosition);
> >         }
> > end
> >
> > results in a classcastexception. The sequence is at that moment { Straf,
> > Straf, PreventieveInsluitingsTitel, Straf }  and the middle two items are
> > matched by the LHS secondPosition and thirdPosition.
> >
> > Here's the stacktrace.
> >
> > java.lang.ClassCastException: org.dji.domein.insgro.Straf
> >     at
> > org.drools.base.org.dji.domein.insgro.PreventieveInsluitingsTitel$getPrevious.getValue(Unknown
> > Source)
> >     at org.drools.base.ClassFieldExtractor.getValue (Unknown Source)
> >     at org.drools.rule.Declaration.getValue(Unknown Source)
> >     at com.sample.Rule_WSV_68_1_0ConsequenceInvoker.evaluate
> > (Rule_WSV_68_1_0ConsequenceInvoker.java:22)
> >     at org.drools.common.DefaultAgenda.fireActivation (Unknown Source)
> >     at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
> >     at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> > Source)
> >     at org.drools.common.AbstractWorkingMemory.fireAllRules (Unknown
> > Source)
> >     at org.dji.domein.insgro.VolgordeTest.main(VolgordeTest.java:32)
> > org.drools.spi.ConsequenceException: java.lang.ClassCastException:
> > org.dji.domein.insgro.Straf
> >     at org.drools.common.DefaultAgenda.fireActivation (Unknown Source)
> >     at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
> >     at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
> > Source)
> >     at org.drools.common.AbstractWorkingMemory.fireAllRules (Unknown
> > Source)
> >     at org.dji.domein.insgro.VolgordeTest.main(VolgordeTest.java:32)
> > Caused by: java.lang.ClassCastException: org.dji.domein.insgro.Straf
> >     at
> > org.drools.base.org.dji.domein.insgro.PreventieveInsluitingsTitel$getNext.getValue(Unknown Source)
> >     at org.drools.base.ClassFieldExtractor.getValue(Unknown Source)
> >     at org.drools.rule.Declaration.getValue(Unknown Source)
> >     at com.sample.Rule_WSV_68_1_0ConsequenceInvoker.evaluate(Rule_WSV_68_1_0ConsequenceInvoker.java:22)
> >
> >     ... 5 more
> >
> > Thanks in advance for your insight.
> >
> > Regards,
> >
> > --
> > Joost de Vries
> >
> >
> > _______________________________________________
> > 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
>
>
>


-- 
Joost de Vries
06 22375323
werk:  joost.de.vries at ordina.nl
privé:  joost at ziener.org

-- 
Joost de Vries
06 22375323
werk:  joost.de.vries at ordina.nl
privé:  joost at ziener.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070112/605d128d/attachment.html 


More information about the rules-users mailing list