[
https://issues.jboss.org/browse/JBRULES-3237?page=com.atlassian.jira.plug...
]
Marco Rietveld commented on JBRULES-3237:
-----------------------------------------
Also: the act of inserting a Fact into the KnowledgeSession is what creates the
InitialFact ObjectTypeNode.
See the following stack:
{code}
EntryPointNode.addObjectSink(ObjectSink) line: 347
ObjectTypeNode.attach() line: 360
ObjectTypeNode.attach(InternalWorkingMemory[]) line: 364
PatternBuilder.attachObjectTypeNode(BuildContext, ObjectType) line: 268
ClassObjectTypeConf.<init>(EntryPoint, Class<?>, InternalRuleBase) line: 93
ObjectTypeConfigurationRegistry.getObjectTypeConf(EntryPoint, Object) line: 71
Rete.assertObject(InternalFactHandle, PropagationContext, InternalWorkingMemory) line:
105
ReteooRuleBase.assertObject(FactHandle, Object, PropagationContext, InternalWorkingMemory)
line: 284
ReteooWorkingMemory$WorkingMemoryReteAssertAction.execute(InternalWorkingMemory) line:
404
ReteooStatefulSession(AbstractWorkingMemory).executeQueuedActions() line: 975
NamedEntryPoint.insert(InternalFactHandle, Object, Rule, Activation, ObjectTypeConf) line:
315
NamedEntryPoint.insert(Object, boolean, boolean, Rule, Activation) line: 291
ReteooStatefulSession(AbstractWorkingMemory).insert(Object, boolean, boolean, Rule,
Activation) line: 886
ReteooStatefulSession(AbstractWorkingMemory).insert(Object) line: 845
StatefulKnowledgeSessionImpl.insert(Object) line: 255
UnmarshallingTest.testMarshallWithNot() line: 46
{code}
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)
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/0a3575e8073f2abc035b13e113814...
{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/jav...
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