<br>&nbsp;&nbsp;&nbsp; Arjun<br><br>&nbsp;&nbsp;&nbsp; It is a bug since a more friendly message should be raised at compile time stating that your &quot;contact&quot; declaration is not available in one of your logical branches. <br>&nbsp;&nbsp;&nbsp; Having said that, what you want to do is make your OR take priority over the implicit AND and as such, you need to add () around the OR:
<br><br>When<br> contact:Contact (initialized==true)<br> exr: ( Relation( contact==cntct,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; active:active==$1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relationName==&quot;Old&quot;)<br>or Relation( contact==cntct,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; active:active==$1,
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relationName==null) )<br>Then<br>&nbsp;&nbsp;&nbsp; contact.getStatus().setStatus(true); <br>&nbsp;&nbsp;&nbsp; contact.getStatus().addToReasonTrace(drools.getRule().getName());<br>end<br><br>&nbsp;&nbsp; Having said that, better yet for you would not to use the OR CE, but to use restriction connectives. This would be the most efficient (and clean) way of writing your rule:
<br><br>When<br>
 contact:Contact (initialized==true)<br>
 exr: Relation( contact==cntct,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; active:active==$1,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relationName ==&quot;Old&quot; || == null )<br>Then<br>
&nbsp;&nbsp;&nbsp; contact.getStatus().setStatus(true); <br>
&nbsp;&nbsp;&nbsp; contact.getStatus().addToReasonTrace(drools.getRule().getName());<br>
end<br>
<br>&nbsp;&nbsp; As a syntax sugar, you could also write:<br><br>
 exr: Relation( contact==cntct,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; active:active==$1,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relationName in ( &quot;Old&quot;, null ) )<br>
<br>&nbsp;&nbsp; Can you please open a JIRA with your test case for the bug? <br>&nbsp;&nbsp; Thank you,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Edson<br>&nbsp;<br><div><span class="gmail_quote">2007/7/30, Arjun Dhar &lt;<a href="mailto:dhar_ar@yahoo.com">dhar_ar@yahoo.com</a>
&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">When I define a rule:<br><br>When<br> cntct:Contact (initialized==true)<br> exr:Relation( contact==cntct,
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; active:active==$1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relationName==&quot;Old&quot;)<br>Then<br> contact.getStatus().setStatus(true);<br> contact.getStatus().addToReasonTrace(drools.getRule().getName());<br>end<br><br>..The bove works.
<br><br>BUT, when I do the following:<br><br>When<br> cntct:Contact (initialized==true)<br> exr:Relation( contact==cntct,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; active:active==$1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relationName==&quot;Old&quot;)<br> || Relation( contact==cntct,
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; active:active==$1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relationName==null)<br>Then<br> contact.getStatus().setStatus(true);<br> contact.getStatus().addToReasonTrace(drools.getRule().getName());<br>end<br>... The script compiles anda stateless Session is created successfully, but at
<br>runtime/execution it fails with the exception:<br>java.lang.ClassCastException: com.arjun.brms.businessObjects.Contact<br>org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:75)<br>org.drools.reteoo.EvalConditionNode.assertTuple
(EvalConditionNode.java:141)<br>org.drools.reteoo.SingleTupleSinkAdapter.propagateAssertTuple<br>(SingleTupleSinkAdapter.java:20)<br>org.drools.reteoo.JoinNode.assertTuple(JoinNode.java:120)<br>org.drools.reteoo.SingleTupleSinkAdapter.propagateAssertTuple
<br>(SingleTupleSinkAdapter.java:20)<br>org.drools.reteoo.JoinNode.assertObject(JoinNode.java:162)<br>org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject<br>(CompositeObjectSinkAdapter.java:317)<br>org.drools.reteoo.AlphaNode.assertObject
(AlphaNode.java:130)<br>org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject<br>(CompositeObjectSinkAdapter.java:308)<br>org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:130)<br>org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject
<br>(CompositeObjectSinkAdapter.java:308)<br>org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:168)<br>org.drools.reteoo.Rete.assertObject(Rete.java:168)<br>org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java
:190)<br>org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:70)<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:848)<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java
:822)<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:623)<br><br>Class diagram:<br>~~~~~~~~~~~~~~~~<br>Contact&lt;-- bi-directional association --&gt;List&lt;Relation&gt;<br><br>Please advise! is this a bug?
<br><br>thanks,<br>Arjun<br><br>_______________________________________________<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users">
https://lists.jboss.org/mailman/listinfo/rules-users</a><br></blockquote></div><br><br clear="all"><br>-- <br>&nbsp;&nbsp;Edson Tirelli<br>&nbsp;&nbsp;Software Engineer - JBoss Rules Core Developer<br>&nbsp;&nbsp;Office: +55 11 3529-6000<br>&nbsp;&nbsp;Mobile: +55 11 9287-5646
<br>&nbsp;&nbsp;JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a>