[jboss-jira] [JBoss JIRA] (DROOLS-1158) NullpointerException when trying to reuse KnowledgePackage into a new KnowledgeBase

Matteo Mortari (JIRA) issues at jboss.org
Mon Jul 18 11:55:00 EDT 2016


    [ https://issues.jboss.org/browse/DROOLS-1158?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13266946#comment-13266946 ] 

Matteo Mortari commented on DROOLS-1158:
----------------------------------------

Hello [~jcgarciam], thanks for the feedback. We've checked and the problem originates by the manual use of the internal API, internally invoked some deprecated code superseded already by the public Kie API. 

The thing about Java 8, turns out to be just a coincidence by the new way Iterators work on the Java Collection API. So really cannot be relied upon.
In details: at the second round of loading your packages, it is making reference to a package name which is not been loaded yet in the internalKnowledgeBase. Turns out switching to Java 8 would return package names in a different order, hence passes this check, but can't guarantee the actual behavior down the line is the expected one (ref. above)

We invite you to use the public Kie API to address your use-case, which is the only way to guarantee the internals will be working correctly as expected.

> NullpointerException when trying to reuse KnowledgePackage into a new KnowledgeBase
> -----------------------------------------------------------------------------------
>
>                 Key: DROOLS-1158
>                 URL: https://issues.jboss.org/browse/DROOLS-1158
>             Project: Drools
>          Issue Type: Bug
>    Affects Versions: 6.3.0.Final, 6.4.0.Final
>            Reporter: Juan Carlos Garcia
>            Assignee: Matteo Mortari
>         Attachments: drools-reusepackage.tar, screenshot-1.png
>
>
> Having a set of DecisionTables which KnowledgePackages are cached in our application, after we detect a change in any of those XLS files, we build a KnowledgePackages from it, and then try to create a new KnowledgeBase with the new KnowledgePackages + the rest of the cached one that that were not modified, but it fails with a NPE internally in Drools (6.3.0 and 6.4.0)
> This is not a problem for the drools version (6.0.1.Final) that we currently uses using in production.
> After debugging and putting a breakpoint into the *MvelConstraint.java:619*,  it shows that it is trying to look for a packageName which hasn't being loaded yet in the new kbase (but belong to others XLS).
> I have attached a project with a testcase that shows the problem, it has 2 DecisionTable which i had to cut down a little bit (from our real files) and removes some sensitive information (replacing some of text with FOO-BAR).
> {code}
> java.lang.NullPointerException
>         at org.drools.core.rule.constraint.MvelConstraint.equals(MvelConstraint.java:619)
>         at org.drools.core.reteoo.AlphaNode.internalEquals(AlphaNode.java:199)
>         at org.drools.core.common.BaseNode.thisNodeEquals(BaseNode.java:194)
>         at org.drools.core.reteoo.CompositeObjectSinkAdapter.getMatchingNode(CompositeObjectSinkAdapter.java:531)
>         at org.drools.core.reteoo.builder.BuildUtils.attachNode(BuildUtils.java:121)
>         at org.drools.core.reteoo.builder.PatternBuilder.buildAlphaNodeChain(PatternBuilder.java:332)
>         at org.drools.core.reteoo.builder.PatternBuilder.attachAlphaNodes(PatternBuilder.java:313)
>         at org.drools.core.reteoo.builder.PatternBuilder.attachPattern(PatternBuilder.java:130)
>         at org.drools.core.reteoo.builder.PatternBuilder.build(PatternBuilder.java:78)
>         at org.drools.core.reteoo.builder.GroupElementBuilder$AndBuilder.build(GroupElementBuilder.java:108)
>         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:106)
>         at org.drools.core.impl.KnowledgeBaseImpl.addRule(KnowledgeBaseImpl.java:1567)
>         at org.drools.core.impl.KnowledgeBaseImpl.addRule(KnowledgeBaseImpl.java:1547)
>         at org.drools.core.impl.KnowledgeBaseImpl.internalAddPackages(KnowledgeBaseImpl.java:920)
>         at org.drools.core.impl.KnowledgeBaseImpl.access$000(KnowledgeBaseImpl.java:117)
>         at org.drools.core.impl.KnowledgeBaseImpl$1.run(KnowledgeBaseImpl.java:708)
>         at org.drools.core.impl.KnowledgeBaseImpl.enqueueModification(KnowledgeBaseImpl.java:716)
>         at org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:705)
>         at org.drools.core.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:273)
>         at org.drools.impl.adapters.KnowledgeBaseAdapter.addKnowledgePackages(KnowledgeBaseAdapter.java:62)
>         at bug.demo.BugReloadableDecisionTableTest.addRuleSetToKnowledgeBase(BugReloadableDecisionTableTest.java:63)
>         at bug.demo.BugReloadableDecisionTableTest.testReuseKnowledgePackage(BugReloadableDecisionTableTest.java:53)
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jboss-jira mailing list