RuntimeException while building KieBase with BRMS 6.2.0
Environment
- Red Hat JBoss BRMS
- 6.2.0
Issue
We are trying to build the KieBase from rule files and loading into memory:
KieServices ks = KieServices.Factory.get();
KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML(releaseId);
kfs = listFiles(ruleFiles,kfs);
KieBuilder kBuilder = ks.newKieBuilder( kfs );
Results result = kBuilder.buildAll().getResults();
We are getting the following exception:
java.lang.RuntimeException
at org.drools.compiler.rule.builder.PatternBuilder.rewriteCompositeExpressions(PatternBuilder.java:924)
at org.drools.compiler.rule.builder.PatternBuilder.rewriteCompositeExpressions(PatternBuilder.java:919)
at org.drools.compiler.rule.builder.PatternBuilder.rewriteOrExpressions(PatternBuilder.java:893)
at org.drools.compiler.rule.builder.PatternBuilder.buildExpression(PatternBuilder.java:889)
at org.drools.compiler.rule.builder.PatternBuilder.buildCcdDescr(PatternBuilder.java:860)
at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:715)
at org.drools.compiler.rule.builder.PatternBuilder.processConstraintsAndBinds(PatternBuilder.java:580)
at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:182)
at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:146)
at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:127)
at org.drools.compiler.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:63)
at org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:97)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.addRule(KnowledgeBuilderImpl.java:1820)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileRules(KnowledgeBuilderImpl.java:1111)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileAllRules(KnowledgeBuilderImpl.java:989)
at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildRules(CompositeKnowledgeBuilderImpl.java:257)
at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:121)
at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105)
at org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:241)
at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)
I debugged the source code and found out that a rule similar to the following was causing the issue:
rule R when
$p : Person( name == null || (name in ("Alice", "Charlie", "David"))==false )
then
list.add($p.getName());
end
The same code and the same rule was working fine in BRMS 6.1.
Resolution
- Rewrite the conditional element to use valid DRL syntax with
not ininstead:
$p : Person( name == null || (name not in ("Alice", "Charlie", "David")) )
- Upgrade to BRMS 6.2.2 patch release (once available)
Root Cause
The reported syntax is not a valid DRL syntax. The only accepted syntaxes are
x in ("foo", "bar")
x not in ("foo", "bar")
The RuntimeException, however, is a bug in the BRMS 6.2.0 codebase1. The fix for this issue is planned to be included in BRMS 6.2.2 patch release.
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
