Thanks Mark. I removed the binding and the rule is compiled now, but while 
firing the rule over set of objects, I get a Null pointer exception.
Here is the updated Drool rule:

dialect "mvel"
rule "Legacy ETSDB Rule"
when
        EtsExecutionOrderHist_core0:EtsExecutionOrderHist_core(customerOrFirm 
!= "0")
        EtsExecutionOrderXref_core00:EtsExecutionOrderXref_core
        (
            entityOID == EtsExecutionOrderHist_core0.entityOID,
            entityRID == EtsExecutionOrderHist_core0.entityRID,
            entityVID == EtsExecutionOrderHist_core0.entityVID,
            referenceID != "2" && referenceIDType == "orderSubCapacity"
        )
        or
        not(EtsExecutionOrderXref_core
                (
                    entityOID == EtsExecutionOrderHist_core0.entityOID,
                    entityRID == EtsExecutionOrderHist_core0.entityRID,
                    entityVID == EtsExecutionOrderHist_core0.entityVID,
                    referenceIDType == "orderSubCapacity"
                )
            )
then
    System.out.println("Rule fired");
end

and here is the stack trace:

Exception in thread "main" org.drools.runtime.rule.ConsequenceException: 
java.lang.NullPointerException
 at 
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:23)
 at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:943)
 at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:885)
 at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1086)
 at 
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:660)
 at 
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:637)
 at 
org.drools.reteoo.ReteooStatelessSession.execute(ReteooStatelessSession.java:203)
 at com.ms.ruleutils.RuleProcessor.process(RuleProcessor.java:142)
 at com.ms.ruleutils.RuleProcessor.process(RuleProcessor.java:73)
 at 
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.performDQ(DQCommandLineMain.java:291)
 at 
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.runEngine(DQCommandLineMain.java:196)
 at 
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.main(DQCommandLineMain.java:170)
Caused by: java.lang.NullPointerException
 at 
org.drools.base.mvel.DroolsMVELFactory.getTupleObjectFor(DroolsMVELFactory.java:182)
 at 
org.drools.base.mvel.DroolsMVELFactory.setContext(DroolsMVELFactory.java:176)
 at org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:57)
 at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:934)
 ... 10 more

After debugging through, DroolMVELFactory class object is looking for 
Declaration definition for "EtsExecutionOrderXref_core00", not finding it, and 
hence giving a null pointer exception. I am using Drools 5.0.1. Any idea about 
why this would happen? Does the rule seem right now?
Thanks

Malay Shah


________________________________
From: rules-users-boun...@lists.jboss.org 
[mailto:rules-users-boun...@lists.jboss.org] On Behalf Of Mark Proctor
Sent: Tuesday, December 01, 2009 6:56 PM
To: Rules Users List
Subject: Re: [rules-users] Drool Rule Error with "or not" condition

You are binding the result of the 'or' to EtsExecutionOrderXref_core00 as the 
second part is a 'not' which returns nothing, how would it be bound to?

Shah, Malay wrote:
Hi All,

I have the following drool rule that has "or not" under Entity Block. 
Basically, the rule tries to check if there either exists an entity object 
EtsExecutionOrderXref_core00 with the given conditions, or the entity does not 
exist at all with some other conditions.

dialect "mvel"
rule "Legacy ETSDB Rule"
when
EtsExecutionOrderHist_core0:EtsExecutionOrderHist_core(customerOrFirm != "0")
EtsExecutionOrderXref_core00:
(
 EtsExecutionOrderXref_core
 (
  entityOID == EtsExecutionOrderHist_core0.entityOID , entityRID == 
EtsExecutionOrderHist_core0.entityRID , entityVID == 
EtsExecutionOrderHist_core0.entityVID , referenceID != "2" && referenceIDType 
== "orderSubCapacity"
 )
 or not(EtsExecutionOrderXref_core
 (
  entityOID == EtsExecutionOrderHist_core0.entityOID , entityRID == 
EtsExecutionOrderHist_core0.entityRID , entityVID == 
EtsExecutionOrderHist_core0.entityVID , referenceIDType == "orderSubCapacity"
 ))
)
then
end

But, while compiling the rule, I am getting the following errors:

org.drools.compiler.DroolsParserException: [ERR 101] Line 22:16 no viable 
alternative at input 'entityOID' in rule "Legacy ETSDB Rule" in pattern not,

org.drools.compiler.DroolsParserException: [ERR 102] Line 22:68 mismatched 
input ',' expecting '(' in rule "Legacy ETSDB Rule" in pattern 
EtsExecutionOrderHist_core0.entityOID,

org.drools.compiler.DroolsParserException: [ERR 102] Line 22:122 mismatched 
input ',' expecting '(' in rule "Legacy ETSDB Rule" in pattern 
EtsExecutionOrderHist_core0.entityOID in pattern 
EtsExecutionOrderHist_core0.entityRID,

org.drools.compiler.DroolsParserException: [ERR 102] Line 22:176 mismatched 
input ',' expecting '(' in rule "Legacy ETSDB Rule" in pattern 
EtsExecutionOrderHist_core0.entityOID in pattern 
EtsExecutionOrderHist_core0.entityRID in pattern 
EtsExecutionOrderHist_core0.entityVID]

I think the rule is correct, but am not able to figure out these compilation 
errors. Could anybody please comment on why this would happen?

Thanks

Malay Shah
________________________________

NOTICE: If received in error, please destroy, and notify sender. Sender does 
not intend to waive confidentiality or privilege. Use of this email is 
prohibited when received in error. We may monitor and store emails to the 
extent permitted by applicable law.

________________________________

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org<mailto:rules-users@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users



--------------------------------------------------------------------------
NOTICE: If received in error, please destroy, and notify sender. Sender does 
not intend to waive confidentiality or privilege. Use of this email is 
prohibited when received in error. We may monitor and store emails to the 
extent permitted by applicable law.
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to