2013-02-14 1 views
0

으로 기본 Drools 프레임 워크를 설정했습니다. 규칙은 반 기술들에 의해 작성 및CYCLIC_DEPENDENCY 및 OOM의 결과로 나온 DOL 규칙의 NPE

어제 (범위에 관계없이 :)를 기록 누가이 항상), 사람이 NullPoiterException을 던지기 시작하지만 잠꼬대 CYCLIC_DEPENDENCY_ERROR에이 예외를 포장 나타나고 규칙을 작성 오류의 범위가된다 같은 것을 보여줍니다.

또한이 문제가 발생한 직후 (3-4 분) OOM java.lang.OutOfMemoryError: Java heap space으로 끝났습니다. 자세한 내용은

스택 트레이스 :

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로 결과는 무엇입니까? 다른 문제가있을 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.

고마워,

+0

나는 순환 의존성이 거의 항상 원인이 끝날 것이라고 확신 당신이 사용하고있는 Drools가/우두머리의 버전을 알리는만한 가치 움 error.It의. 나는 이것이 당신의 특정 버전에 대한 의존성 문제일지도 모른다고 생각한다. – Steve

+0

우리는 Drools-5.3을 사용하고 있습니다. 문제가 있으면 알려주십시오. – instanceOfObject

답변

0

나는이 규칙 사이의주기적인 의존성이라고 생각한다. 한 규칙의 RHS가 다른 규칙을 활성화하게 만들고, 다시 RHS가 발생하여 첫 번째 규칙이 활성화됩니다. 따라서 규칙 활성화의 무한 루프가 있습니다.

규칙 자체는 보지 않고 어떤 규칙이 실행되는지 기록하기 위해 일정 목록 수신기를 설정하는 것이 좋습니다. 그렇게하면 2 가지 규칙이이 방식으로 활성화되는지 확인할 수 있습니다. 예 로깅 리스너는 여기에 있습니다 :

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