<br> Jarowslaw,<br><br> Could you please open a JIRA for this. I need to investigate.<br> Thanks,<br><br> Edson<br><br><div class="gmail_quote">2009/7/1 Jaroslaw Kijanowski <span dir="ltr"><<a href="mailto:kijanowski@gmail.com">kijanowski@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br>
I've configured my knowledge base to use the EQUALITY assertion behaviour.<br>
When I insert two equal facts into the session, only one gets processed (objects and their fact handles are equal).<br>
However when I insert two equal facts via streams, my rule fires twice (objects are equal, but their fact handles are not). Isn't equality assertion behaviour supported when using streams?<br>
<br>
Here's my rule and test class:<br>
<br>
package com.sample<br>
import com.sample.Message;<br>
declare Message<br>
@role( event )<br>
@timestamp( time )<br>
end<br>
<br>
rule "r"<br>
when<br>
Message( $i:i) //from entry-point "myStream"<br>
then<br>
System.out.println( $i );<br>
end<br>
<br>
+++++++++++++++++++++++++++++++++++++++++<br>
<br>
public class Message {<br>
<br>
private int i;<br>
private Date time;<br>
//getters, setters, hashcode, equals, constructor<br>
}<br>
<br>
+++++++++++++++++++++++++++++++++++++++++<br>
<br>
public class DroolsTest {<br>
public static final void main(String[] args) {<br>
try {<br>
KnowledgeBase kbase = readKnowledgeBase();<br>
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();<br>
<br>
//WorkingMemoryEntryPoint stream = ksession.getWorkingMemoryEntryPoint("myStream");<br>
<br>
Date d = new Date();<br>
Message message1 = new Message(1,d);<br>
FactHandle fh1 = ksession.insert(message1);<br>
//FactHandle fh1 = stream.insert(message1);<br>
Message message2 = new Message(1,d);<br>
FactHandle fh2 = ksession.insert(message2);<br>
//FactHandle fh2 = stream.insert(message2);<br>
<br>
if (message1.equals(message2) && fh1.equals(fh2)){<br>
System.out.println("equal");<br>
}<br>
ksession.fireAllRules();<br>
} catch (Throwable t) {<br>
t.printStackTrace();<br>
}<br>
}<br>
<br>
private static KnowledgeBase readKnowledgeBase() throws Exception {<br>
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();<br>
kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL);<br>
if (kbuilder.getErrors().size() > 0) {<br>
throw new IllegalArgumentException("Could not parse knowledge.");<br>
}<br>
KnowledgeBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();<br>
kbaseConfig.setOption(AssertBehaviorOption.EQUALITY);<br>
kbaseConfig.setOption(EventProcessingOption.STREAM);<br>
kbaseConfig.setOption(RemoveIdentitiesOption.YES);<br>
<br>
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConfig);<br>
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());<br>
return kbase;<br>
}<br>
}<br>
<br>
+++++++++++++++++++++++++++++++++++++++++<br>
<br>
Thanks,<br>
Jarek<br>
_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</blockquote></div><br><br clear="all"><br>-- <br> Edson Tirelli<br> JBoss Drools Core Development<br> JBoss by Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a><br>