[jboss-jira] [JBoss JIRA] (DROOLS-2224) Inconsistent values returned by AccessorKey.hashCode causes NullPointerException during binary deserialization
Martin Weiler (JIRA)
issues at jboss.org
Tue Jan 9 08:38:00 EST 2018
Martin Weiler created DROOLS-2224:
-------------------------------------
Summary: Inconsistent values returned by AccessorKey.hashCode causes NullPointerException during binary deserialization
Key: DROOLS-2224
URL: https://issues.jboss.org/browse/DROOLS-2224
Project: Drools
Issue Type: Bug
Components: core engine
Affects Versions: 7.5.0.Final
Reporter: Martin Weiler
Assignee: Mario Fusco
Consider the following sequence of events:
# serialize a set of text rule files
# create a binary file for the serialized rule files
# deserialize the binary file created in the step 2.
When each step is executed in different JVM runs, step 3 fails with a NullPointerException:
{noformat}
java.lang.NullPointerException: null
at org.drools.core.reteoo.CompositeObjectSinkAdapter.isHashable(CompositeObjectSinkAdapter.java:158)
at org.drools.core.reteoo.CompositeObjectSinkAdapter.getHashableAccessor(CompositeObjectSinkAdapter.java:149)
at org.drools.core.reteoo.CompositeObjectSinkAdapter.addObjectSink(CompositeObjectSinkAdapter.java:108)
at org.drools.core.reteoo.SingleObjectSinkAdapter.addObjectSink(SingleObjectSinkAdapter.java:55)
at org.drools.core.reteoo.ObjectSource.addObjectSink(ObjectSource.java:216)
at org.drools.core.reteoo.LeftInputAdapterNode.attach(LeftInputAdapterNode.java:155)
at org.drools.core.reteoo.builder.BuildUtils.attachNode(BuildUtils.java:141)
at org.drools.core.reteoo.builder.GroupElementBuilder$AndBuilder.buildTupleSource(GroupElementBuilder.java:126)
at org.drools.core.reteoo.builder.GroupElementBuilder$AndBuilder.build(GroupElementBuilder.java:109)
at org.drools.core.reteoo.builder.GroupElementBuilder.build(GroupElementBuilder.java:68)
at org.drools.core.reteoo.builder.ReteooRuleBuilder.addSubRule(ReteooRuleBuilder.java:161)
at org.drools.core.reteoo.builder.ReteooRuleBuilder.addRule(ReteooRuleBuilder.java:133)
at org.drools.core.reteoo.ReteooBuilder.addRule(ReteooBuilder.java:110)
at org.drools.core.impl.KnowledgeBaseImpl.internalAddRule(KnowledgeBaseImpl.java:1526)
at org.drools.core.impl.KnowledgeBaseImpl.internalAddPackages(KnowledgeBaseImpl.java:915)
at org.drools.core.impl.KnowledgeBaseImpl.lambda$addPackages$1(KnowledgeBaseImpl.java:717)
at org.drools.core.impl.KnowledgeBaseImpl.enqueueModification(KnowledgeBaseImpl.java:734)
at org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:717)
at org.drools.compiler.integrationtests.SerializedPackageMergeTwoSteps2Test.testBuildAndSerializePackagesInTwoSteps2(SerializedPackageMergeTwoSteps2Test.java:88)
{noformat}
If making one single run for all 3 steps, everything works fine.
The problem are inconsistent hashCode values for the AccessorKey object when the JVM is restarted, due to the usage of Enum.hashCode:
https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/base/AccessorKey.java#L48
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
More information about the jboss-jira
mailing list