Uploaded image for project: 'JBRULES'
  1. JBRULES
  2. JBRULES-3237

Unmarshalling a marshalled session fails when using a newly initialized knowledgebase

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
    • 5.4.0.Beta1
    • 5.3.0.CR1
    • None
    • None

    Description

      A marshalled ReteooStatefulSession can not be unmarshalled if it contains an InitialFactHandle node and if the knowledge base has been reinitialized.

      This bug started appearing because of this change:
      https://github.com/droolsjbpm/drools/commit/0a3575e8073f2abc035b13e11381464e5ac17306#diff-4

      -    public static final ClassObjectType InitialFact_ObjectType = new ClassObjectType( InitialFact.class );
      +    public static final ClassObjectType InitialFact_ObjectType = new ClassObjectType( InitialFactImpl.class );
      

      As far as I can tell, the above change caused the following:

      1. The OutputMarshaller now marshalls the InitialFactnode: the following line now returns a non-null object, which causes the subsequent if clause to run (which wasn't happening before).

      Approximately here:

      2. When the InputMarshaller tries to unmarshall a marshalled session and it's using a (new) ruleBase that doesn't contain an ObjectTypeNode that descibes the InitialFact_ObjectType, then a NPE is thrown.

      • This is caused because the sinks that are given to the MarshallerReaderContext (used in InputMarshaller.readSession) do not contain the InitialFact_ObjectType.
      • These sinks:
        • come from KnowledgeBaseImpl.ruleBase which
          • contains a .rete attribute which
            • contains .entrypoints (Map<EntryPoint, EntryPointNode> which
              • contains EntryPointNode's which
                • contains objectTypeNodes (Map<ObjectType, ObjectTypeNode>) which
                  • contain objectTypeNodes
                    • which should contain a ObjectTypeNode describing the InitialFactNode.

      I can't figure out where to add this information when initializing the KnowledgeSession or KnowledgeBase for unmarshalling – or whether the unmarshalling process should take care of this.

      The NPE is thrown here (the node variable at line 65 is null):

      ConcurrentNodeMemories.getNodeMemory(NodeMemory) line: 65	
      ReteooStatefulSession(AbstractWorkingMemory).getNodeMemory(NodeMemory) line: 1018	
      InputMarshaller.readSession(ReteooStatefulSession, DefaultAgenda, long, boolean, MarshallerReaderContext) line: 237	
      InputMarshaller.readSession(MarshallerReaderContext, int, ExecutorService, Environment, SessionConfiguration) line: 209	
      

      Attachments

        Issue Links

          Activity

            People

              etirelli@redhat.com Edson Tirelli
              marco.rietveld Marco Rietveld (Inactive)
              Archiver:
              rhn-support-ceverson Clark Everson

              Dates

                Created:
                Updated:
                Resolved:
                Archived:

                PagerDuty