<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Shah, Malay wrote:
<blockquote
 cite="mid:58A2A0069BCCBD4EA2F204631427BB9D01AFA4D6@NYWEXMBX2130.msad.ms.com"
 type="cite">
  <meta content="text/html; charset=us-ascii" http-equiv="Content-Type">
  <meta content="text/html; charset=us-ascii" http-equiv="Content-Type">
  <meta content="MSHTML 6.00.6000.16915" name="GENERATOR">
  <div>
  <div dir="ltr" align="left"><span class="484345317-02122009"><font
 color="#0000ff" face="Verdana" size="2">Mark,</font></span></div>
  <div dir="ltr" align="left"><span class="484345317-02122009"></span>&nbsp;</div>
  <div dir="ltr" align="left"><span class="484345317-02122009"><font
 color="#0000ff" face="Verdana" size="2">In this case, the object types
that are bound don't have "not"/"or" conditions surrounding them
(ExecutionOrderHist_core0 and ExecutionHist_core0). So, these objects
would always be there when the rule is fired. Why would it still not
identify and populate the variables of the objects, and instead try to
cast one object to another?</font></span></div>
  </div>
</blockquote>
We generate one eval or one consequence, drools and java is type safe
so in that generated piece of code we have ot assume a type. We
generate the code using the type as specified in the binding. If the
binding ends up with different object types that are not castable, then
it's going to fail. Sure we could add more intelligence to the build
process to generate an eval or a consequence that takes care of the
different non-castable object types, but currently we don't and
probably won't add that, unless it's a user contribution.<br>
<br>
Mark<br>
<blockquote
 cite="mid:58A2A0069BCCBD4EA2F204631427BB9D01AFA4D6@NYWEXMBX2130.msad.ms.com"
 type="cite">
  <div>
  <div>&nbsp;</div>
  <div><span class="484345317-02122009"><font color="#0000ff"
 face="Verdana" size="2">Thanks</font></span></div>
  <div><span class="484345317-02122009"></span>&nbsp;</div>
  <div style="color: black; font-family: arial;"><span
 style="font-size: 10pt;">Malay Shah<br>
  </span></div>
  <div><span class="484345317-02122009"><font color="#0000ff"
 face="Verdana" size="2">&nbsp;</font></span></div>
  <div><span class="484345317-02122009">&nbsp;</span></div>
  <div>
  <hr tabindex="-1"></div>
  <div><font face="Tahoma" size="2"><b>From:</b>
<a class="moz-txt-link-abbreviated" href="mailto:rules-users-bounces@lists.jboss.org">rules-users-bounces@lists.jboss.org</a>
[<a class="moz-txt-link-freetext" href="mailto:rules-users-bounces@lists.jboss.org">mailto:rules-users-bounces@lists.jboss.org</a>] <b>On Behalf Of </b>Mark
Proctor<br>
  <b>Sent:</b> Wednesday, December 02, 2009 12:44 PM<br>
  <b>To:</b> Rules Users List<br>
  <b>Subject:</b> Re: [rules-users] Drool Rule Error with "or not"
condition<br>
  </font><br>
  </div>
when using 'or' the bindings and the object types for those bindings
must balance for each logical outcome.<br>
  <br>
Mark<br>
Shah, Malay wrote:
  <blockquote
 cite="mid:58A2A0069BCCBD4EA2F204631427BB9D01AFA4CF@NYWEXMBX2130.msad.ms.com"
 type="cite">
    <meta content="MSHTML 6.00.6000.16915" name="GENERATOR">
    <div>
    <div dir="ltr" align="left"><span class="756320616-02122009"><font
 color="#0000ff" face="Verdana" size="2">Thanks W. </font></span></div>
    <div dir="ltr" align="left"><span class="756320616-02122009"></span>&nbsp;</div>
    <div dir="ltr" align="left"><span class="756320616-02122009"><font
 color="#0000ff" face="Verdana" size="2">I removed the binding of
EtsExecutionOrderXref_core00, and it looked good. But I am getting
ClassCastException when adding new facts and conditions. I now have a
new fact (EtsExecutionHist_core0) and an eval statement to check if the
rule has already been fired for a unique key that is determined by
variables in EtsExecutionHist_core0 fact. </font></span></div>
    <div dir="ltr" align="left"><span class="756320616-02122009"></span>&nbsp;</div>
    <div dir="ltr" align="left"><span class="756320616-02122009"><font
 color="#0000ff" size="2">Exception in thread "main"
org.drools.RuntimeDroolsException:
!(violations.containsKey("S-50_EtsExecutionHist_core" + "_entityOID_" +
EtsExecutionHist_core0_entityOID<br>
+ "_entityVID_" + EtsExecutionHist_core0_entityVID<br>
)) : </font><strong><font color="#ff0000"><font size="2">[Error:
com.ms.ieddata.etsdb.model.EtsExecutionOrderHist_core cannot be cast to
com.ms.ieddata.etsdb.model.EtsExecutionHist_core]</font><br>
    </font></strong></span></div>
    <div dir="ltr" align="left"><span class="756320616-02122009"><font
 color="#0000ff" face="Verdana" size="2">When I don't have the eval
statement, the rule works perfectly well. Also, I checked that if I
flip the order of defining facts in the rule (i.e. having
EtsExecutionHist_core0 fact before EtsExecutionOrderHist_core0), the
rule works fine. </font></span></div>
    <div dir="ltr" align="left"><span class="756320616-02122009"></span>&nbsp;</div>
    <div dir="ltr" align="left"><span class="756320616-02122009"><font
 color="#0000ff" face="Verdana" size="2">Below is the drool code and
the error:</font></span></div>
    <div dir="ltr" align="left"><span class="756320616-02122009"></span>&nbsp;</div>
    <div dir="ltr" align="left"><span class="756320616-02122009"><font
 color="#008000" face="Verdana" size="2"><strong>Drool Rule:</strong></font></span></div>
    <div dir="ltr" align="left"><span class="756320616-02122009"></span>&nbsp;</div>
    <div dir="ltr" align="left"><span class="756320616-02122009"><font
 color="#0000ff" size="2">package S_50 </font></span></div>
    <div>&nbsp;</div>
    <div dir="ltr" align="left"><span class="756320616-02122009"><font
 color="#0000ff" size="2">import
com.ms.ieddata.dataQuality.violation.Violation;<br>
import com.ms.ieddata.etsdb.model.EtsExecutionOrderHist_core;<br>
import com.ms.ieddata.etsdb.model.EtsExecutionHist_core;<br>
import com.ms.ieddata.etsdb.model.EtsExecutionOrderXref_core;</font></span></div>
    <div><span class="756320616-02122009"><font color="#0000ff" size="2">global
java.util.HashMap violations;</font></span></div>
    <div><span class="756320616-02122009"><font color="#0000ff" size="2">dialect
"mvel"<br>
rule "Legacy ETSDB Rule"<br>
when<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EtsExecutionOrderHist_core0:EtsExecutionOrderHist_core<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; customerOrFirm != "0"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EtsExecutionHist_core0:EtsExecutionHist_core<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentOID == EtsExecutionOrderHist_core0.entityOID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastCapacity == "1",<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; application != "MMETL",<br>
    <strong><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
EtsExecutionHist_core0_entityOID:entityOID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EtsExecutionHist_core0_entityVID:entityVID</font></strong><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EtsExecutionOrderXref_core<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityOID == EtsExecutionOrderHist_core0.entityOID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityRID == EtsExecutionOrderHist_core0.entityRID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityVID == EtsExecutionOrderHist_core0.entityVID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; referenceID != "2" &amp;&amp; referenceIDType ==
"orderSubCapacity"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not(EtsExecutionOrderXref_core<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityOID == EtsExecutionOrderHist_core0.entityOID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityRID == EtsExecutionOrderHist_core0.entityRID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityVID == EtsExecutionOrderHist_core0.entityVID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; referenceIDType == "orderSubCapacity"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>
    <font color="#ff0000"><strong>eval(!(violations.containsKey("S-50_EtsExecutionHist_core"
+ "_entityOID_" + EtsExecutionHist_core0_entityOID + "_entityVID_" +
EtsExecutionHist_core0_entityVID)))</strong></font><br>
then<br>
&nbsp;&nbsp;&nbsp; System.out.println("Rule Fired");<br>
end</font></span></div>
    <div>&nbsp;</div>
    <div><span class="756320616-02122009"><font color="#008000"
 face="Verdana" size="2"><strong>Exception:</strong></font></span></div>
    <div>&nbsp;</div>
    <div><font color="#0000ff" size="2">Exception in thread "main"
org.drools.RuntimeDroolsException:
!(violations.containsKey("S-50_EtsExecutionHist_core" + "_entityOID_" +
EtsExecutionHist_core0_entityOID<br>
+ "_entityVID_" + EtsExecutionHist_core0_entityVID<br>
)) : <font color="#ff0000"><strong>[Error:
com.ms.ieddata.etsdb.model.EtsExecutionOrderHist_core cannot be cast to
com.ms.ieddata.etsdb.model.EtsExecutionHist_core]<br>
    </strong></font>[Near : {... Unknown ....}]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^<br>
[Line: 1, Column: 0]<br>
&nbsp;at org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:122)<br>
&nbsp;at
org.drools.reteoo.EvalConditionNode.assertLeftTuple(EvalConditionNode.java:180)<br>
&nbsp;at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:117)<br>
&nbsp;at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:34)<br>
&nbsp;at org.drools.reteoo.NotNode.assertLeftTuple(NotNode.java:123)<br>
&nbsp;at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:145)<br>
&nbsp;at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:39)<br>
&nbsp;at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:116)<br>
&nbsp;at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:117)<br>
&nbsp;at
org.drools.reteoo.SingleLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:78)<br>
&nbsp;at
org.drools.reteoo.LIANodePropagation.doPropagation(LIANodePropagation.java:47)<br>
&nbsp;at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:649)<br>
&nbsp;at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:637)<br>
&nbsp;at
org.drools.reteoo.ReteooStatelessSession.execute(ReteooStatelessSession.java:203)<br>
&nbsp;at com.ms.ruleutils.RuleProcessor.process(RuleProcessor.java:142)<br>
&nbsp;at com.ms.ruleutils.RuleProcessor.process(RuleProcessor.java:73)<br>
&nbsp;at
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.performDQ(DQCommandLineMain.java:291)<br>
&nbsp;at
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.runEngine(DQCommandLineMain.java:196)<br>
&nbsp;at
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.main(DQCommandLineMain.java:170)<br>
Caused by: [Error:
com.ms.ieddata.etsdb.model.EtsExecutionOrderHist_core cannot be cast to
com.ms.ieddata.etsdb.model.EtsExecutionHist_core]<br>
[Near : {... Unknown ....}]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^<br>
[Line: 1, Column: 0]<br>
&nbsp;at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:388)<br>
&nbsp;at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:138)<br>
&nbsp;at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:133)<br>
&nbsp;at
org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:102)<br>
&nbsp;at
org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:37)<br>
&nbsp;at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:833)<br>
&nbsp;at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:315)<br>
&nbsp;at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:138)<br>
&nbsp;at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:133)<br>
&nbsp;at
org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:37)<br>
&nbsp;at
org.mvel2.ast.Substatement.getReducedValueAccelerated(Substatement.java:40)<br>
&nbsp;at
org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:37)<br>
&nbsp;at org.mvel2.ast.Negation.getReducedValueAccelerated(Negation.java:44)<br>
&nbsp;at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)<br>
&nbsp;at
org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:104)<br>
&nbsp;at org.mvel2.MVEL.executeExpression(MVEL.java:978)<br>
&nbsp;at
org.drools.base.mvel.MVELEvalExpression.evaluate(MVELEvalExpression.java:83)<br>
&nbsp;at org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:117)<br>
&nbsp;... 18 more<br>
Caused by: java.lang.ClassCastException:
com.ms.ieddata.etsdb.model.EtsExecutionOrderHist_core cannot be cast to
com.ms.ieddata.etsdb.model.EtsExecutionHist_core<br>
&nbsp;at
org.drools.base.com.ms.ieddata.etsdb.model.EtsExecutionHist_core32580467$getEntityVID.getValue(Unknown
Source)<br>
&nbsp;at org.drools.base.ClassFieldReader.getValue(ClassFieldReader.java:91)<br>
&nbsp;at org.drools.rule.Declaration.getValue(Declaration.java:244)<br>
&nbsp;at
org.drools.base.mvel.DroolsMVELPreviousDeclarationVariable.getValue(DroolsMVELPreviousDeclarationVariable.java:67)<br>
&nbsp;at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:446)<br>
&nbsp;at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:312)<br>
&nbsp;... 35 more</font></div>
    <div>&nbsp;</div>
    <div><span class="756320616-02122009"><font color="#0000ff"
 face="Verdana" size="2">Am I missing something here? I think this is a
perfectly valid rule, where eval statement is needed to make sure we
don't fire the rule multiple times. I don't have the entire consequence
section in the drool code above, but we perform multiple actions if
rules are fired. I am trying to get to the bottom of this, because we
generate these Drool Rule Code on the fly, and I can't determine the
order in which facts (and their variables) would be defined.</font></span></div>
    <div><span class="756320616-02122009"></span>&nbsp;</div>
    <div><span class="756320616-02122009"><font color="#0000ff"
 face="Verdana" size="2">Any kind of help here would be much
appreciated.</font></span></div>
    <div><span class="756320616-02122009"></span>&nbsp;</div>
    <div><span class="756320616-02122009"><font color="#0000ff"
 face="Verdana" size="2">Thanks</font></span></div>
    <div>&nbsp;</div>
    <div style="color: black; font-family: arial;"><span
 style="font-size: 10pt;">Malay Shah<br>
    </span><span style="font-weight: normal; font-size: 7.5pt;"><br>
    </span></div>
    <div>&nbsp;</div>
    <br>
    <div class="OutlookMessageHeader" dir="ltr" align="left"
 lang="en-us">
    <hr tabindex="-1"> <font face="Tahoma" size="2"><b>From:</b> <a
 moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-users-bounces@lists.jboss.org">rules-users-bounces@lists.jboss.org</a>
[<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="mailto:rules-users-bounces@lists.jboss.org">mailto:rules-users-bounces@lists.jboss.org</a>]
    <b>On Behalf Of </b>Wolfgang Laun<br>
    <b>Sent:</b> Wednesday, December 02, 2009 1:47 AM<br>
    <b>To:</b> Rules Users List<br>
    <b>Subject:</b> Re: [rules-users] Drool Rule Error with "or not"
condition<br>
    </font><br>
    </div>
    <span><font size="-0"><font color="#0000ff" face="Verdana" size="2">Binding
a variable to a fact in a branch of an 'or' (as you are doing with
EtsExecutionOrderXref_core00) is not useful, since you cannot use this
binding in the consequence. (The rule might just as well fire due to
the 2nd term (the "or not...") being true, and then the variable would
not be bound, causing NPE.<br>
    <br>
If you do need this binding to access the fact in the consequence, you
should splt the rule.<br>
    <br>
-W<br>
    </font></font></span><br>
    <div class="gmail_quote">2009/12/2 Shah, Malay <span dir="ltr">&lt;<a
 href="mailto:Malay.Shah@morganstanley.com" moz-do-not-send="true">Malay.Shah@morganstanley.com</a>&gt;</span><br>
    <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
      <div>
      <div>
      <div dir="ltr" align="left"><span><font color="#0000ff"
 face="Verdana" size="2">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. </font></span></div>
      <div dir="ltr" align="left"><span><font color="#0000ff"
 face="Verdana" size="2">Here is the updated Drool rule:</font></span></div>
      <div dir="ltr" align="left"><span></span>&nbsp;</div>
      <div dir="ltr" align="left"><span><font color="#0000ff"
 face="Verdana" size="2">
      <div class="im">dialect "mvel"<br>
rule "Legacy ETSDB Rule"<br>
when<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
EtsExecutionOrderHist_core0:EtsExecutionOrderHist_core(customerOrFirm
!= "0")<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EtsExecutionOrderXref_core00:EtsExecutionOrderXref_core<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityOID == EtsExecutionOrderHist_core0.entityOID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityRID == EtsExecutionOrderHist_core0.entityRID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityVID == EtsExecutionOrderHist_core0.entityVID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; referenceID != "2" &amp;&amp; referenceIDType ==
"orderSubCapacity"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not(EtsExecutionOrderXref_core<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityOID == EtsExecutionOrderHist_core0.entityOID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityRID == EtsExecutionOrderHist_core0.entityRID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entityVID == EtsExecutionOrderHist_core0.entityVID,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; referenceIDType == "orderSubCapacity"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>
then<br>
      </div>
&nbsp;&nbsp;&nbsp; System.out.println("Rule fired");<br>
end</font></span></div>
      <div dir="ltr" align="left"><span></span>&nbsp;</div>
      <div dir="ltr" align="left"><span><font color="#0000ff"
 face="Verdana" size="2">and here is the stack trace:</font></span></div>
      <div dir="ltr" align="left"><span></span>&nbsp;</div>
      <div dir="ltr" align="left"><span><font color="#ff0000" size="2">Exception
in thread "main" org.drools.runtime.rule.ConsequenceException:
java.lang.NullPointerException<br>
&nbsp;at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:23)<br>
&nbsp;at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:943)<br>
&nbsp;at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:885)<br>
&nbsp;at
org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1086)<br>
&nbsp;at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:660)<br>
&nbsp;at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:637)<br>
&nbsp;at
org.drools.reteoo.ReteooStatelessSession.execute(ReteooStatelessSession.java:203)<br>
&nbsp;at com.ms.ruleutils.RuleProcessor.process(RuleProcessor.java:142)<br>
&nbsp;at com.ms.ruleutils.RuleProcessor.process(RuleProcessor.java:73)<br>
&nbsp;at
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.performDQ(DQCommandLineMain.java:291)<br>
&nbsp;at
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.runEngine(DQCommandLineMain.java:196)<br>
&nbsp;at
com.ms.ieddata.dataQuality.dqWithRR.DQCommandLineMain.main(DQCommandLineMain.java:170)<br>
Caused by: java.lang.NullPointerException<br>
&nbsp;at
org.drools.base.mvel.DroolsMVELFactory.getTupleObjectFor(DroolsMVELFactory.java:182)<br>
&nbsp;at
org.drools.base.mvel.DroolsMVELFactory.setContext(DroolsMVELFactory.java:176)<br>
&nbsp;at
org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:57)<br>
&nbsp;at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:934)<br>
&nbsp;... 10 more</font></span></div>
      <div>&nbsp;</div>
      <div><span><font color="#0000ff" face="Verdana" size="2">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?</font></span><span></span></div>
      <div><span><font color="#0000ff" face="Verdana" size="2">Thanks</font></span></div>
      <div><span></span>&nbsp;</div>
      <div style="color: black; font-family: arial;"><span
 style="font-size: 10pt;">Malay Shah</span></div>
      <div style="color: black; font-family: arial;"><span
 style="font-size: 10pt;"><br>
&nbsp;</span></div>
      <div>
      <hr> <font face="Tahoma" size="2"><b>From:</b> <a
 href="mailto:rules-users-bounces@lists.jboss.org"
 moz-do-not-send="true" target="_blank">rules-users-bounces@lists.jboss.org</a>
[mailto:<a href="mailto:rules-users-bounces@lists.jboss.org"
 moz-do-not-send="true" target="_blank">rules-users-bounces@lists.jboss.org</a>]
      <b>On Behalf Of </b>Mark Proctor<br>
      <b>Sent:</b> Tuesday, December 01, 2009 6:56 PM<br>
      <b>To:</b> Rules Users List<br>
      <b>Subject:</b> Re: [rules-users] Drool Rule Error with "or not"
condition<br>
      </font><br>
      </div>
      <div>
      <div class="h5">You are binding the result of the 'or' to <font
 face="Verdana"><font size="2"><font color="#0000ff">EtsExecutionOrderXref_core00
      </font></font></font>as the second part is a 'not' which returns
nothing, how would it be bound to?<br>
      <br>
Shah, Malay wrote:
      <blockquote type="cite">
        <div>
        <div><span><font face="Verdana" size="2">Hi All,</font></span></div>
        <div>&nbsp;</div>
        <div><span><font face="Verdana" size="2">I have the following
drool rule that has "or not" under Entity Block. Basically, the rule
tries to check if&nbsp;there either exists an entity object
EtsExecutionOrderXref_core00 with&nbsp;the&nbsp;given conditions, or the entity
does not exist at all with some other conditions.&nbsp;</font></span></div>
        <div><span></span>&nbsp;</div>
        <div><span></span><font face="Verdana"><font size="2"><font
 color="#0000ff">dialect "mvel"<br>
rule "Legacy ETSDB Rule"<br>
when<br>
EtsExecutionOrderHist_core0:EtsExecutionOrderHist_core(customerOrFirm
!= "0")<br>
EtsExecutionOrderXref_core00:<br>
(<br>
&nbsp;EtsExecutionOrderXref_core<br>
&nbsp;(<br>
&nbsp;&nbsp;entityOID == EtsExecutionOrderHist_core0.entityOID , entityRID ==
EtsExecutionOrderHist_core0.entityRID , entityVID ==
EtsExecutionOrderHist_core0.entityVID , referenceID != "2" &amp;&amp;
referenceIDType == "orderSubCapacity"<br>
&nbsp;)<br>
&nbsp;or not(EtsExecutionOrderXref_core<br>
&nbsp;(<br>
&nbsp;&nbsp;entityOID == EtsExecutionOrderHist_core0.entityOID , entityRID ==
EtsExecutionOrderHist_core0.entityRID , entityVID ==
EtsExecutionOrderHist_core0.entityVID , referenceIDType ==
"orderSubCapacity"<br>
&nbsp;))<br>
)<br>
        </font>then<br>
end</font></font></div>
        <div>&nbsp;</div>
        <div><font color="#0000ff" face="Verdana" size="2">But, while
compiling the rule, I am getting the following errors:</font></div>
        <div>&nbsp;</div>
        <div><font face="Verdana" size="2"><font size="2">org.drools.compiler.DroolsParserException:
[ERR 101] Line 22:16 no viable alternative at input </font><font
 color="#2a00ff" size="2"><font color="#2a00ff" size="2">'entityOID'</font></font><font
 size="2"> in rule "Legacy ETSDB Rule" in pattern not, </font></font></div>
        <div>
        <p><font face="Verdana" size="2"><font size="2">org.drools.compiler.DroolsParserException:
[ERR 102] Line 22:68 mismatched input </font><font color="#2a00ff"
 size="2"><font color="#2a00ff" size="2">','</font></font><font size="2">
expecting </font><font color="#2a00ff" size="2"><font color="#2a00ff"
 size="2">'('</font></font><font size="2"> in rule "Legacy ETSDB Rule"
in pattern EtsExecutionOrderHist_core0.entityOID, </font></font></p>
        <p><font face="Verdana" size="2"><font size="2">org.drools.compiler.DroolsParserException:
[ERR 102] Line 22:122 mismatched input </font><font color="#2a00ff"
 size="2"><font color="#2a00ff" size="2">','</font></font><font size="2">
expecting </font><font color="#2a00ff" size="2"><font color="#2a00ff"
 size="2">'('</font></font><font size="2"> in rule "Legacy ETSDB Rule"
in pattern EtsExecutionOrderHist_core0.entityOID in pattern
EtsExecutionOrderHist_core0.entityRID, </font></font></p>
        <p><font face="Verdana" size="2"><font size="2">org.drools.compiler.DroolsParserException:
[ERR 102] Line 22:176 mismatched input </font><font color="#2a00ff"
 size="2"><font color="#2a00ff" size="2">','</font></font><font size="2">
expecting </font><font color="#2a00ff" size="2"><font color="#2a00ff"
 size="2">'('</font></font><font size="2"> in rule "Legacy ETSDB Rule"
in pattern EtsExecutionOrderHist_core0.entityOID in pattern
EtsExecutionOrderHist_core0.entityRID in pattern
EtsExecutionOrderHist_core0.entityVID]</font></font></p>
        </div>
        <div><font face="Verdana" size="2"><span>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? </span></font></div>
        <div>&nbsp;</div>
        <div><span><font face="Verdana" size="2">Thanks</font></span></div>
        <div>&nbsp;</div>
        <div style="color: black; font-family: arial;"><span
 style="font-size: 10pt;">Malay Shah</span></div>
        </div>
        <div>
        <hr> </div>
        <p style="margin: 0in 0in 0pt; text-indent: 0in;"><span
 style="font-size: 8pt; color: gray;"><font color="gray" face="Arial"
 size="1">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.&nbsp;We<span
 style="font-size: 7.5pt; color: gray;"> may monitor and store emails
to the extent permitted by applicable law.</span></font></span></p>
        <pre><hr size="4" width="90%">
_______________________________________________
rules-users mailing list
<a href="mailto:rules-users@lists.jboss.org" moz-do-not-send="true"
 target="_blank">rules-users@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users"
 moz-do-not-send="true" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a>
  </pre>
      </blockquote>
      <br>
      </div>
      </div>
      </div>
      <div>
      <div class="h5">
      <div>
      <hr> </div>
      <p style="margin: 0in 0in 0pt; text-indent: 0in;"><span
 style="font-size: 8pt; color: gray;"><font color="gray" face="Arial"
 size="1">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.&nbsp;We<span
 style="font-size: 7.5pt; color: gray;"> may monitor and store emails
to the extent permitted by applicable law.</span></font></span></p>
      </div>
      </div>
      </div>
      <br>
_______________________________________________<br>
rules-users mailing list<br>
      <a href="mailto:rules-users@lists.jboss.org"
 moz-do-not-send="true">rules-users@lists.jboss.org</a><br>
      <a href="https://lists.jboss.org/mailman/listinfo/rules-users"
 moz-do-not-send="true" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
      <br>
    </blockquote>
    </div>
    <br>
    </div>
    <div>
    <hr> </div>
    <p class="BulletedList"
 style="margin: 0in 0in 0pt; text-indent: 0in;"><span
 style="font-size: 8pt; color: gray;"><font color="gray" face="Arial"
 size="1">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.&nbsp;We<span
 style="font-size: 7.5pt; color: gray; font-family: 'Arial','sans-serif';">
may monitor and store emails to the extent permitted by applicable law.</span></font></span></p>
    <pre wrap=""><hr size="4" width="90%">
_______________________________________________
rules-users mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a>
  </pre>
  </blockquote>
  <br>
  </div>
  <div>
  <hr></div>
  <p class="BulletedList" style="margin: 0in 0in 0pt; text-indent: 0in;"><span
 style="font-size: 8pt; color: gray;"><font color="gray" face="Arial"
 size="1">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.&nbsp;We<span
 style="font-size: 7.5pt; color: gray; font-family: 'Arial','sans-serif';">
may monitor and store emails to the extent permitted by applicable law.</span></font></span></p>
  <pre wrap="">
<hr size="4" width="90%">
_______________________________________________
rules-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a>
  </pre>
</blockquote>
<br>
</body>
</html>