[jboss-jira] [JBoss JIRA] (JBRULES-3237) Unmarshalling a marshalled session fails when using a newly initialized knowledgebase

Marco Rietveld (Commented) (JIRA) jira-events at lists.jboss.org
Fri Nov 4 11:02:45 EDT 2011


    [ https://issues.jboss.org/browse/JBRULES-3237?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12640114#comment-12640114 ] 

Marco Rietveld commented on JBRULES-3237:
-----------------------------------------

I've been playing with having the ReteooRuleBase.setupRete() method do the following: 
- create an ObjectTypeNode of type  ClassObjectType.InitialFact_ObjectType 
- attach said node

However, this messes up working memory stuff. And the more I learn about the ReteOO algorithm implementation in Drools, the more it seems like this is not a good idea. 

The thought occurs to me that maybe the marshaller should make sure to create a InitialFact_ObjectType ObjectTypeNode when it's unmarshalling the saved rete network. 
                
> Unmarshalling a marshalled session fails when using a newly initialized knowledgebase
> -------------------------------------------------------------------------------------
>
>                 Key: JBRULES-3237
>                 URL: https://issues.jboss.org/browse/JBRULES-3237
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 5.3.0.CR1
>            Reporter: Marco Rietveld
>            Assignee: Marco Rietveld
>         Attachments: UnmarshallingTest.java
>
>
> A marshalled ReteooStatefulSession can not be unmarshalled if it contains an InitialFactHandle node. 
> This bug started appearing because of this change: 
> https://github.com/droolsjbpm/drools/commit/0a3575e8073f2abc035b13e11381464e5ac17306#diff-4
> {code}
> -    public static final ClassObjectType InitialFact_ObjectType = new ClassObjectType( InitialFact.class );
> +    public static final ClassObjectType InitialFact_ObjectType = new ClassObjectType( InitialFactImpl.class );
> {code}
> 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). 
> - https://github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java#L465
> 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):  
> {code}
> 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	
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list