[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