[jboss-jira] [JBoss JIRA] (DROOLS-528) MVEL naked method calls are not enabled when using pre-compiled knowledge packages
Ravi Sanwal (JIRA)
issues at jboss.org
Tue Jun 17 19:31:24 EDT 2014
Ravi Sanwal created DROOLS-528:
----------------------------------
Summary: MVEL naked method calls are not enabled when using pre-compiled knowledge packages
Key: DROOLS-528
URL: https://issues.jboss.org/browse/DROOLS-528
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: 6.1.0.CR1, 6.0.1.Final, 5.6.0.Final
Reporter: Ravi Sanwal
Assignee: Mark Proctor
We have a huge set of rules that we want to pre-compile. For this we create a knowledge packages with rule text and serialize it to a binary file. This happens initially when rules are authored.
Later on for runtime use this binary file is used to re-create knowledge packages.
Some of our rules have expressions like Number(intValue > 4), this doesn't work with the loaded knowledge packages and fails with error like
{code}
[Error: could not access: intValue; in class: java.lang.Long]
[Near : {... intValue > 1 ....}]
^
[Line: 1, Column: 1]
{code}
With a stacktrace as below:
{code}
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:683)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanPropertyAO(ReflectiveAccessorOptimizer.java:465)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:370)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:140)
at org.mvel2.ast.ASTNode.optimize(ASTNode.java:159)
at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115)
at org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:114)
at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:42)
at org.mvel2.MVEL.executeExpression(MVEL.java:930)
at org.drools.core.rule.constraint.MvelConditionEvaluator.evaluate(MvelConditionEvaluator.java:67)
at org.drools.core.rule.constraint.MvelConditionEvaluator.evaluate(MvelConditionEvaluator.java:52)
at org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:217)
at org.drools.core.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:174)
at org.drools.core.phreak.PhreakAccumulateNode.evaluateResultConstraints(PhreakAccumulateNode.java:700)
at org.drools.core.phreak.PhreakAccumulateNode.doNode(PhreakAccumulateNode.java:89)
at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:562)
at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:533)
at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:334)
at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:161)
at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:116)
at org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:200)
at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:67)
at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:935)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1200)
at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:957)
at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:931)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:256)
at org.drools.core.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:402)
{code}
Further investigation reveals that the mvel compiler property org.mvel2.MVEL.COMPILER_OPT_ALLOW_NAKED_METH_CALL (mvel2.compiler.allow_naked_meth_calls) is not enabled, which is enabled otherwise if the knowledge base is created straight from DRL.
We need this pre-compilation of knowledge packages to reduce startup times which is significant (of the order of 20 seconds for 3k rules, vs. 4 seconds for precompiled knowledge packages)
As a workaround we manually set the org.mvel2.MVEL.COMPILER_OPT_ALLOW_NAKED_METH_CALL property to true.
--
This message was sent by Atlassian JIRA
(v6.2.6#6264)
More information about the jboss-jira
mailing list