[jboss-jira] [JBoss JIRA] Created: (JBRULES-2436) Inheritance of events does not work as one would expect when using working memory entry-points

Jerome Bernard (JIRA) jira-events at lists.jboss.org
Sat Feb 20 16:47:10 EST 2010


Inheritance of events does not work as one would expect when using working memory entry-points
----------------------------------------------------------------------------------------------

                 Key: JBRULES-2436
                 URL: https://jira.jboss.org/jira/browse/JBRULES-2436
             Project: Drools
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: drools-core (fusion)
            Reporter: Jerome Bernard
            Assignee: Mark Proctor


When using working memory entry-points, I have a different behaviour than when I use the session.
Here is a test illustrating this:
package org.drools.test;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.conf.EventProcessingOption;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.WorkingMemoryEntryPoint;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.StringReader;

public class DroolsFusionInheritanceBugsTest {
    private StatefulKnowledgeSession session;
    private WorkingMemoryEntryPoint stream;
    private final static String drl = "package org.drools.test;\n" +
            "declare A\n" +
            "  @role(event)\n" +
            "end\n" +
            "\n" +
            "rule \"myrule\"\n" +
            "when\n" +
            "  $a : A() from entry-point \"mystream\"\n" +
            "then\n" +
            "  System.out.println(\"fired!\");\n" +
            "end\n";

    @Test
    public void testOkWithEventsInheritance() {
        session.insert(new A());
        session.insert(new B());
        session.fireAllRules();
    }

    @Test
    public void testFailsWithEventsInheritanceThroughWorkingMemoryEntryPoint() {
        stream.insert(new A());
        stream.insert(new B());
        session.fireAllRules();
    }

    @Before
    public void setupDrools() {
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        System.out.println("DRL is:\n" + drl);
        kbuilder.add(ResourceFactory.newReaderResource(new StringReader(drl)), ResourceType.DRL);
        KnowledgeBaseConfiguration conf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
        conf.setOption(EventProcessingOption.STREAM);
        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(conf);
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
        session = kbase.newStatefulKnowledgeSession();
        assert session != null;
        KnowledgeRuntimeLoggerFactory.newConsoleLogger(session);
        stream = session.getWorkingMemoryEntryPoint("mystream");
        assert stream != null : "Could not find working memory entry-point 'mystream'";
    }

    @After
    public void releaseDroolsSession() {
        if (session != null)
            session.dispose();
    }

}

class A {}

class B extends A { }




When using working memory entry-points, the insert of a B instances fails with a:
java.lang.ClassCastException: org.drools.common.DefaultFactHandle cannot be cast to org.drools.common.EventFactHandle

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list