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

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

      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.

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

                Created:
                Updated:
                Resolved:
                Archived: