[rules-users] streams and equality assertion behavior

Edson Tirelli tirelli at post.com
Wed Jul 1 08:49:40 EDT 2009


     Jarowslaw,

     Could you please open a JIRA for this. I need to investigate.
     Thanks,

     Edson

2009/7/1 Jaroslaw Kijanowski <kijanowski at gmail.com>

> Hi,
>  I've configured my knowledge base to use the EQUALITY assertion behaviour.
> When I insert two equal facts into the session, only one gets processed
> (objects and their fact handles are equal).
> 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?
>
> Here's my rule and test class:
>
> package com.sample
> import com.sample.Message;
> declare Message
>  @role( event )
>  @timestamp( time )
> end
>
> rule "r"
> when
>  Message( $i:i) //from entry-point "myStream"
> then
>  System.out.println( $i );
> end
>
> +++++++++++++++++++++++++++++++++++++++++
>
> public class Message {
>
>        private int i;
>        private Date time;
> //getters, setters, hashcode, equals, constructor
> }
>
> +++++++++++++++++++++++++++++++++++++++++
>
> public class DroolsTest {
>  public static final void main(String[] args) {
>    try {
>      KnowledgeBase kbase = readKnowledgeBase();
>      StatefulKnowledgeSession ksession =
> kbase.newStatefulKnowledgeSession();
>
>      //WorkingMemoryEntryPoint stream =
> ksession.getWorkingMemoryEntryPoint("myStream");
>
>      Date d = new Date();
>      Message message1 = new Message(1,d);
>      FactHandle fh1 = ksession.insert(message1);
>      //FactHandle fh1 = stream.insert(message1);
>      Message message2 = new Message(1,d);
>      FactHandle fh2 = ksession.insert(message2);
>      //FactHandle fh2 = stream.insert(message2);
>
>      if (message1.equals(message2) && fh1.equals(fh2)){
>        System.out.println("equal");
>      }
>      ksession.fireAllRules();
>    } catch (Throwable t) {
>      t.printStackTrace();
>    }
>  }
>
>  private static KnowledgeBase readKnowledgeBase() throws Exception {
>    KnowledgeBuilder kbuilder =
> KnowledgeBuilderFactory.newKnowledgeBuilder();
>    kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"),
> ResourceType.DRL);
>    if (kbuilder.getErrors().size() > 0) {
>      throw new IllegalArgumentException("Could not parse knowledge.");
>    }
>    KnowledgeBaseConfiguration kbaseConfig =
> KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
>    kbaseConfig.setOption(AssertBehaviorOption.EQUALITY);
>    kbaseConfig.setOption(EventProcessingOption.STREAM);
>    kbaseConfig.setOption(RemoveIdentitiesOption.YES);
>
>    KnowledgeBase kbase =
> KnowledgeBaseFactory.newKnowledgeBase(kbaseConfig);
>    kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
>    return kbase;
>  }
> }
>
> +++++++++++++++++++++++++++++++++++++++++
>
> Thanks,
>  Jarek
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
 Edson Tirelli
 JBoss Drools Core Development
 JBoss by Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090701/c97211ce/attachment.html 


More information about the rules-users mailing list