[jboss-jira] [JBoss JIRA] (JBRULES-2381) NPE during usage after rule removal and serialize/deserialize
Andrew Collins (JIRA)
issues at jboss.org
Thu Nov 12 17:31:00 EST 2015
[ https://issues.jboss.org/browse/JBRULES-2381?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Collins updated JBRULES-2381:
------------------------------------
Attachment: jbrules-2381.zip
Attaching test case proving NPE when two rule resources sharing the same package name are read in unique KnowledgeBuilder instances and KnowledgeBase is serialized and deserialized.
For anyone else who may come across this issue, I found it was exists in 5.3.5.Final (and all BRMS5.3.1 patched releases), but was fixed in community 5.4.0.Final (demonstrated in the POM of the attached test project.
> NPE during usage after rule removal and serialize/deserialize
> -------------------------------------------------------------
>
> Key: JBRULES-2381
> URL: https://issues.jboss.org/browse/JBRULES-2381
> Project: JBRULES
> Issue Type: Bug
> Components: drools-core
> Affects Versions: 5.0.1.FINAL
> Environment: Windows XP / Server 2003, JDK 1.6
> Reporter: Justin Waugh
> Assignee: Mark Proctor
> Fix For: 6.0.0.Alpha1
>
> Attachments: jbrules-2381.zip, 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 was sent by Atlassian JIRA
(v6.4.11#64026)
More information about the jboss-jira
mailing list