NPE during usage after serialize/deserialize
--------------------------------------------
Key: JBRULES-2381
URL:
https://jira.jboss.org/jira/browse/JBRULES-2381
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-core
Affects Versions: 5.0.1.FINAL
Environment: Windows XP / Server 2003, JDK 1.6
Reporter: Justin Waugh
Assignee: Mark Proctor
Attachments: test.zip
In our application we are often removing and adding new rules. We also have a requirement
to serialize state so that we can continue across restarts. We've seen a few problems
related to the state of the knowledgebase after serializing/deserializing related to
removing rules. Both are NPE's, and from debugging into Drools, both seem to be a
case of a deserialized transient value not being wired up correctly. In one case the
reader field of ClassFieldReader is not wired, so the InternalReadAccessor is null, and in
the other the expression field of EvalCondition is left null. I have not been able to
reproduce in a simple test case the first problem, though it is easily reproduceable in
our live system, but I was able to reproduce the second, and I've attached a test case
to demonstrate it. Both only happen with the combination of removing rules and
serialization/deserialization. If the rules are never removed, the problems do not
exhibit themselves. Here are the 2 stack traces:
java.lang.NullPointerException
at org.drools.base.ClassFieldReader.getValueType(ClassFieldReader.java:96)
at
org.drools.reteoo.CompositeObjectSinkAdapter.addObjectSink(CompositeObjectSinkAdapter.java:98)
at org.drools.reteoo.ObjectSource.addObjectSink(ObjectSource.java:143)
at org.drools.reteoo.AlphaNode.attach(AlphaNode.java:116)
at org.drools.reteoo.AlphaNode.attach(AlphaNode.java:120)
at org.drools.reteoo.builder.BuildUtils.attachNode(BuildUtils.java:160)
at org.drools.reteoo.builder.PatternBuilder.attachAlphaNodes(PatternBuilder.java:295)
at org.drools.reteoo.builder.PatternBuilder.attachPattern(PatternBuilder.java:117)
at org.drools.reteoo.builder.PatternBuilder.build(PatternBuilder.java:70)
at
org.drools.reteoo.builder.GroupElementBuilder$AndBuilder.build(GroupElementBuilder.java:126)
at org.drools.reteoo.builder.GroupElementBuilder.build(GroupElementBuilder.java:73)
at org.drools.reteoo.builder.ReteooRuleBuilder.addSubRule(ReteooRuleBuilder.java:153)
at org.drools.reteoo.builder.ReteooRuleBuilder.addRule(ReteooRuleBuilder.java:126)
at org.drools.reteoo.ReteooBuilder.addRule(ReteooBuilder.java:118)
at org.drools.reteoo.ReteooRuleBase.addRule(ReteooRuleBase.java:362)
at org.drools.common.AbstractRuleBase.addRule(AbstractRuleBase.java:618)
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:662)
at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:290)
at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:488)
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:25)
java.lang.NullPointerException
at org.drools.rule.EvalCondition.createContext(EvalCondition.java:110)
at org.drools.reteoo.EvalConditionNode.createMemory(EvalConditionNode.java:231)
at
org.drools.common.ConcurrentNodeMemories.createNodeMemory(ConcurrentNodeMemories.java:96)
at
org.drools.common.ConcurrentNodeMemories.getNodeMemory(ConcurrentNodeMemories.java:75)
at
org.drools.common.AbstractWorkingMemory.getNodeMemory(AbstractWorkingMemory.java:1534)
at org.drools.reteoo.EvalConditionNode.doRemove(EvalConditionNode.java:263)
at org.drools.common.BaseNode.remove(BaseNode.java:95)
at org.drools.reteoo.RuleTerminalNode.doRemove(RuleTerminalNode.java:360)
at org.drools.common.BaseNode.remove(BaseNode.java:95)
at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:248)
at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:366)
at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:712)
at org.drools.common.AbstractRuleBase.removePackage(AbstractRuleBase.java:640)
at org.drools.impl.KnowledgeBaseImpl.removeKnowledgePackage(KnowledgeBaseImpl.java:166)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira