首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >drools规则中的NPE导致CYCLIC_DEPENDENCY和OOM

drools规则中的NPE导致CYCLIC_DEPENDENCY和OOM
EN

Stack Overflow用户
提问于 2013-02-14 21:06:51
回答 1查看 524关注 0票数 0

我们已经用Guvnor UI建立了一个基本的Drools框架。规则是由半技术人员编写的,并且有错误的范围(无论是谁编写的,范围总是存在的:)

昨天,有人写了一条规则,开始抛出NullPoiterException,但Drool似乎将这个异常包装到CYCLIC_DEPENDENCY_ERROR中,并显示相同的异常。

此外,我们在这个问题之后立即(3-4分钟)结束了OOM java.lang.OutOfMemoryError: Java heap space

Stacktrace获取详细信息:

代码语言:javascript
复制
Feb 2013 08:06:55,447 [ERROR]  (SWF Activity  DroolsActivityTaskList-2.2 229) com.amazon.mobius.csi.workers.droolsengine.DroolsEngineActivitiesImpl:runRules:220 [CYCLIC_DEPENDENCY_ERROR]: Error
 while executing Rules, Please validate all rules against any cyclic dependency
Exception executing consequence for rule "final NON EC" in com.amazon.mobius.csi.workers.droolsengine: java.lang.NullPointerException
        at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
        at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1101)
        at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1029)
        at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1251)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:708)
        at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:672)
        at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
        at org.drools.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:295)
        at com.amazon.mobius.csi.workers.droolsengine.DroolsEngineActivitiesImpl.runRules(DroolsEngineActivitiesImpl.java:216)
        at com.amazon.mobius.csi.workers.droolsengine.DroolsEngineActivitiesImpl.executeRules(DroolsEngineActivitiesImpl.java:145)
        at sun.reflect.GeneratedMethodAccessor173.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.amazonaws.services.simpleworkflow.flow.pojo.POJOActivityImplementation.execute(POJOActivityImplementation.java:63)
        at com.amazonaws.services.simpleworkflow.flow.generic.ActivityImplementationBase.execute(ActivityImplementationBase.java:46)
        at com.amazonaws.services.simpleworkflow.flow.worker.SynchronousActivityTaskPoller.execute(SynchronousActivityTaskPoller.java:214)
        at com.amazonaws.services.simpleworkflow.flow.worker.ActivityTaskPoller$2.run(ActivityTaskPoller.java:95)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
        at com.amazon.mobius.csi.workers.droolsengine.Rule_final_NON_EC.defaultConsequence(Unknown Source)
        at com.amazon.mobius.csi.workers.droolsengine.Rule_final_NON_ECDefaultConsequenceInvoker.evaluate(Unknown Source)
        at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1091)
        ... 18 more

为什么Drools将其视为CYCLIC_DEPENDENCY并导致OOM?我们可以有其他的问题吗?任何帮助都将不胜感激。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2013-03-22 21:45:08

我相信这是规则之间的循环依赖。一条规则的RHS会导致另一条规则被激活,而另一条规则的RHS又会导致第一条规则被激活。因此,存在规则激活的无限循环。

在看不到规则本身的情况下,我建议设置一个议程事件侦听器来记录正在触发的规则。这样,您应该能够看到以这种方式激活的是哪两个规则。下面是这样一个日志监听器的例子:

https://github.com/gratiartis/scattercode-drools-scenarios/blob/master/src/main/java/uk/co/scattercode/drools/util/TrackingAgendaEventListener.java

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14875551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档