Uploaded image for project: 'JBoss BRMS Platform'
  1. JBoss BRMS Platform
  2. RHBRMS-2641

InternalFactHandle.isValid returns false but still evaluated when audit log is enabled.

This issue belongs to an archived project. You can view it, but you can't modify it. Learn more

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 6.4.0, 6.4.0.GA
    • 6.3.2.GA
    • BRE
    • None
    • CR1

    Description

      If setting a null value for an artifact in the right hand side in the rule, for example:
      $any.setTypeId(null);

      This is executed after the rule is evaluated and fired.

      When the audit log is enabled, the rule is evaluated again. However, the fact is already set as null which causes the NPE when accessing AnyType.getTypeId:

      org.jboss.brms.test.RetractionTest testRetraction
      SEVERE: java.lang.NullPointerException
      java.lang.NullPointerException
      at org.jboss.brms.test.RetractionTest$AnyType.getTypeId(RetractionTest.java:74)
      at org.drools.base.org.jboss.brms.test.RetractionTest$AnyType21207783$getTypeId.getValue(Unknown Source)
      at org.drools.core.base.ClassFieldReader.getValue(ClassFieldReader.java:91)
      at org.drools.core.rule.Declaration.getValue(Declaration.java:253)
      at org.drools.core.reteoo.RuleTerminalNodeLeftTuple.getDeclarationValue(RuleTerminalNodeLeftTuple.java:388)
      at org.drools.core.audit.WorkingMemoryLogger.extractDeclarations(WorkingMemoryLogger.java:332)
      at org.drools.core.audit.WorkingMemoryLogger.afterMatchFired(WorkingMemoryLogger.java:309)
      at org.drools.core.event.AgendaEventSupport.fireAfterActivationFired(AgendaEventSupport.java:98)
      at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1132)
      at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:121)
      at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:74)
      at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1008)
      at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1351)
      at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1289)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1336)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1327)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1308)
      at org.jboss.brms.test.RetractionTest.testRetraction(RetractionTest.java:164)
      ...

      A proposed fix could be:

      org.drools.core.reteoo.RuleTerminalNodeLeftTuple

      getDeclarationValue method

      from

      return decl.getValue(null, handle.getObject());

      To

      if(handle.isValid())
      return decl.getValue(null, handle.getObject());
      else
      return null;

      This has been tested and works fine.

      Attachments

        Activity

          People

            mfusco@redhat.com Mario Fusco
            rhn-support-ghu Gary Hu
            Archiver:
            rhn-support-ceverson Clark Everson
            Martin Cimbalek Martin Cimbalek
            Martin Cimbalek Martin Cimbalek

            Dates

              Created:
              Updated:
              Resolved:
              Archived:

              PagerDuty