[
https://issues.jboss.org/browse/DROOLS-1158?page=com.atlassian.jira.plugi...
]
ti swei commented on DROOLS-1158:
---------------------------------
Hi Matteo Mortari, I met same problem with Juan Carlos Garcia. My drools version is 6.5.0
Final. I tried to solve the problem, but I didn't succeed. Matteo Mortari, can you
give me some help, the following is my exception message:
java.lang.NullPointerException: null
at org.drools.core.rule.constraint.MvelConstraint.equals(MvelConstraint.java:617)
at org.drools.core.reteoo.AlphaNode.internalEquals(AlphaNode.java:200)
at org.drools.core.common.BaseNode.thisNodeEquals(BaseNode.java:193)
at
org.drools.core.reteoo.SingleObjectSinkAdapter.getMatchingNode(SingleObjectSinkAdapter.java:136)
at org.drools.core.reteoo.builder.BuildUtils.attachNode(BuildUtils.java:120)
at
org.drools.core.reteoo.builder.PatternBuilder.buildAlphaNodeChain(PatternBuilder.java:331)
at
org.drools.core.reteoo.builder.PatternBuilder.attachAlphaNodes(PatternBuilder.java:312)
at org.drools.core.reteoo.builder.PatternBuilder.attachPattern(PatternBuilder.java:129)
at org.drools.core.reteoo.builder.PatternBuilder.build(PatternBuilder.java:77)
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:1586)
at org.drools.core.impl.KnowledgeBaseImpl.addRule(KnowledgeBaseImpl.java:1566)
at
org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileAllRules(KnowledgeBuilderImpl.java:1004)
at
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildRules(CompositeKnowledgeBuilderImpl.java:264)
at
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:122)
at
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.rebuildAll(KieContainerImpl.java:449)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.updateKBase(KieContainerImpl.java:311)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.access$000(KieContainerImpl.java:88)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl$1.run(KieContainerImpl.java:255)
at
org.drools.core.impl.KnowledgeBaseImpl.enqueueModification(KnowledgeBaseImpl.java:735)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.update(KieContainerImpl.java:252)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.updateToVersion(KieContainerImpl.java:196)
at
com.zte.vmaster.correlation.engine.manager.DroolsEngine.deployRule(DroolsEngine.java:274)
my code is as follows :
{code:java}
public class DroolsEngineCode {
private KieBase kieBase;
private KieSession kieSession;
private KieContainer kieContainer;
private KieFileSystem kfs;
private KieServices ks;
private KieResources resources;
private KieBuilder kieBuilder;
private KieRepository kieRepository;
private ReleaseId releaseId;
@PreDestroy
private void stop() {
this.kieSession.dispose();
}
@PostConstruct
private void initEngineParameter() throws Exception {
this.ks = KieServices.Factory.get();
this.resources = ks.getResources();
this.kieRepository = ks.getRepository();
this.releaseId = kieRepository.getDefaultReleaseId();
this.kfs = createKieFileSystemWithKProject(ks);
this.kieBuilder = ks.newKieBuilder(kfs).buildAll();
this.kieContainer = ks.newKieContainer(this.releaseId);
this.kieBase = kieContainer.getKieBase();
this.kieSession = kieContainer.newKieSession();
}
public synchronized void deployRule(String ruleContent) throws Exception {
if (JudgeNullUtil.isEmpty(ruleContent)) {
throw new NullPointerException();
}
StringReader reader = new StringReader(ruleContent);
KieModule kieModule = createKieJar(ks, this.resources.newReaderResource(reader,
"UTF-8")
.setResourceType(ResourceType.DRL));
kieRepository.addKieModule(kieModule);
kieContainer.updateToVersion(releaseId);
kieSession.fireAllRules();
}
public synchronized void undeployRule(String packageName, Locale locale)
throws CorrelationException {
kieBase.removeKiePackage(packageName);
}
private KieFileSystem createKieFileSystemWithKProject(KieServices ks) {
KieModuleModel kieModuleModel = ks.newKieModuleModel();
KieBaseModel kieBaseModel = kieModuleModel.newKieBaseModel("KBase")
.addPackage("rules")
.setDefault(true)
.setEqualsBehavior(EqualityBehaviorOption.EQUALITY)
.setEventProcessingMode(EventProcessingOption.STREAM);
kieBaseModel.newKieSessionModel("KSession")
.setDefault( true )
.setType( KieSessionModel.KieSessionType.STATEFUL )
.setClockType( ClockTypeOption.get("realtime") );
KieFileSystem kfs = ks.newKieFileSystem();
kfs.writeKModuleXML(kieModuleModel.toXML());
return kfs;
}
private KieModule createKieJar(KieServices ks, Resource resource) throws Exception {
kfs.write("src/main/resources/rules/rule.drl", resource);
kieBuilder = ks.newKieBuilder(kfs);
if (kieBuilder.getResults().hasMessages(Message.Level.ERROR)) {
throw new Exception();
}
return kieBuilder.getKieModule();
}
}
{code}
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
(v7.5.0#75005)