Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-1219

ClassObjectTypes are not all correctly rewired during a packages merge

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 7.0.0.Beta1
    • None
    • core engine
    • None
    • NEW
    • NEW

      As demonstrated by the following not all ClassObjectTypes are correctly rewired during a package merge. In that case R2 doesn't fire because the ClassObjectType used by the from pattern is not rewired to the new Class instance created by the second ProjectClassLoader.

          @Test
          public void testWiringClassOnPackageMerge() throws Exception {
              String drl_init =
                      "package init;\n" +
                      "import org.kie.test.TestObject\n" +
                      "rule RInit when\n" +
                      "then\n" +
                      "    TestObject obj1 = new TestObject();\n" +
                      "    TestObject obj2 = new TestObject();" +
                      "    obj1.add(obj2);" +
                      "    insert(obj1);\n" +
                      "end";
      
              String drl1 =
                      "package p1;\n" +
                      "import org.kie.test.TestObject\n" +
                      "global java.util.List list;\n" +
                      "rule R1 when\n" +
                      "    $obj : TestObject( $objs : objects )\n" +
                      "    $s : Object() from $objs\n" +
                      "then\n" +
                      "    list.add(\"R1\");\n" +
                      "end";
      
              String drl2 =
                      "package p2;\n" +
                      "import org.kie.test.TestObject\n" +
                      "global java.util.List list;\n" +
                      "rule R2 when\n" +
                      "    $obj : TestObject( $objs : objects )\n" +
                      "    $s : TestObject() from $objs\n" +
                      "then\n" +
                      "    list.add(\"R2\");\n" +
                      "end";
      
              String javaSrc =
                      "package org.kie.test;\n" +
                      "import java.util.*;\n" +
                      "\n" +
                      "public class TestObject {\n" +
                      "    private final List<TestObject> objects = new ArrayList<TestObject>();\n" +
                      "\n" +
                      "    public List<TestObject> getObjects() {\n" +
                      "        return objects;\n" +
                      "    }\n" +
                      "    public void add(TestObject obj) {\n" +
                      "        objects.add(obj);" +
                      "    }" +
                      "}\n";
      
              String path = "org/kie/test/MyRuleUnit";
      
              KieServices ks = KieServices.Factory.get();
              KieFileSystem kfs = ks.newKieFileSystem();
              kfs.writeKModuleXML(ks.newKieModuleModel().toXML())
                 .write("src/main/resources/a.drl", drl_init)
                 .write("src/main/resources/b.drl", drl1)
                 .write("src/main/resources/c.drl", drl2)
                 .write("src/main/java/org/kie/test/TestObject.java", javaSrc);
      
              ks.newKieBuilder( kfs ).buildAll();
              KieContainer kcontainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId());
              KieSession kSession = kcontainer.newKieSession();
      
              List<String> list = new ArrayList<String>();
              kSession.setGlobal( "list", list );
              kSession.fireAllRules();
      
              assertEquals( 2, list.size() );
              assertTrue( list.contains( "R1" ) );
              assertTrue( list.contains( "R2" ) );
          }
      

              mfusco@redhat.com Mario Fusco
              mfusco@redhat.com Mario Fusco
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: