0

Droolsで基本的なフレームワークを設定しましたGuvnor UI。ルールは半技術者によって書かれ、エラーの範囲があります (誰が書いたかに関係なく、範囲は常にそこにあります:))

昨日、誰かがスローを開始するルールを書きましたNullPoiterExceptionが、Drool はこの例外を CYCLIC_DEPENDENCY_ERROR にラップし、同じ結果を表示しているようです。

java.lang.OutOfMemoryError: Java heap spaceまた、この問題の直後 (3 ~ 4 分) にOOM が発生しました。

詳細のスタックトレース:

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 になるのはなぜですか? 他に何か問題がありますか?どんな助けでも大歓迎です。

ありがとう、

4

1 に答える 1

0

これは、ルール間の循環的な依存関係であると考えています。1 つのルールの RHS によって別のルールがアクティブになり、その RHS によって最初のルールがアクティブになります。したがって、ルールのアクティブ化の無限ループがあります。

ルール自体を確認せずに、実行中のルールをログに記録するアジェンダ イベント リスナーを設定することをお勧めします。そうすれば、どの 2 つのルールがこのようにアクティブ化されているかを確認できるはずです。このようなロギング リスナーの例を次に示します。

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

于 2013-03-22T13:45:07.770 に答える