[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