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

ClassCastException after segment split during incremental compilation

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 6.4.0.Beta1
    • None
    • None
    • None
    • NEW
    • NEW

    Description

      A segment split during an incremental compilation as in the following test case

          @Test
          public void testSegmentSplitOnIncrementalCompilation() throws Exception {
              String drl =
                      "import " + Person.class.getCanonicalName() + "\n" +
                      "rule R1 when\n" +
                      "  $s : String()" +
                      "  Person( name == $s ) \n" +
                      "then\n" +
                      "  System.out.println(\"Triggered: R1\");\n" +
                      "end\n" +
                      "rule R2 when\n" +
                      "  $s : String()" +
                      "  Person( name == $s ) \n" +
                      "then\n" +
                      "  System.out.println(\"Triggered: R2\");\n" +
                      "end\n" +
                      "rule R3 when\n" +
                      "  $s : String()" +
                      "  Person( name != $s ) \n" +
                      "then\n" +
                      "  System.out.println(\"Triggered: R3\");\n" +
                      "end\n";
      
              KieServices ks = KieServices.Factory.get();
      
              ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.1");
              KieModule km = createAndDeployJar(ks, releaseId1);
      
              KieContainer kc = ks.newKieContainer(km.getReleaseId());
              KieSession ksession = kc.newKieSession();
      
              kc.updateToVersion(releaseId1);
              ksession.insert(new Person("John", 26));
              ksession.insert( "John" );
              ksession.fireAllRules();
      
              ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.2");
              km = createAndDeployJar(ks, releaseId2, drl);
      
              kc.updateToVersion(releaseId2);
              ksession.fireAllRules();
          }
      

      may cause the following ClassCastException during the subsequent network evaluation

      java.lang.ClassCastException: org.drools.core.reteoo.RuleTerminalNode cannot be cast to org.drools.core.reteoo.LeftInputAdapterNode
      	at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:99)
      	at org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:194)
      	at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:73)
      	at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:978)
      	at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1292)
      	at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1294)
      	at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1281)
      	at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1260)
      	at org.drools.compiler.integrationtests.IncrementalCompilationTest.testSegmentSplit(IncrementalCompilationTest.java:2001)
      

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: