2015-02-06 1 views
0

갑자기, 나는 내 프로젝트에 다시 모든 라이브러리를 넣어 Drools가 클래스 내가 Drools가 5.5.0-최종를 사용하고

이 예외가 평가자 정의를 찾을 수 없습니다,하지만 결과는 동일

입니다
org.drools.RuntimeDroolsException: Class not found for evaluator definition: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at org.drools.base.evaluators.EvaluatorRegistry.addEvaluatorDefinition(EvaluatorRegistry.java:136) 
    at org.drools.compiler.PackageBuilderConfiguration.buildEvaluatorRegistry(PackageBuilderConfiguration.java:550) 
    at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:196) 
    at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:170) 
    at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:300) 
    at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:228) 
    at org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl.newKnowledgeBuilder(KnowledgeBuilderFactoryServiceImpl.java:34) 
    at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.java:46) 
    at com.drools.optimizer.AppExpertSystem.readKnowledgeBase(AppExpertSystem.java:130) 
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:115) 
    at com.drools.optimizer.AppExpertSystem.<init>(AppExpertSystem.java:46) 
    at eventlauncher.OptimizerLauncher.NuevoEscenario(OptimizerLauncher.java:57) 
    at eventlauncher.DemoPruebas.main(DemoPruebas.java:18) 
Caused by: java.lang.ClassNotFoundException: Unable to load class: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at org.drools.util.CompositeClassLoader.loadClass(CompositeClassLoader.java:92) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at org.drools.base.evaluators.EvaluatorRegistry.addEvaluatorDefinition(EvaluatorRegistry.java:132) 
    ... 12 more 
Exception in thread "main" java.lang.RuntimeException: org.drools.RuntimeDroolsException: Class not found for evaluator definition: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:122) 
    at com.drools.optimizer.AppExpertSystem.<init>(AppExpertSystem.java:46) 
    at eventlauncher.OptimizerLauncher.NuevoEscenario(OptimizerLauncher.java:57) 
    at eventlauncher.DemoPruebas.main(DemoPruebas.java:18) 
Caused by: org.drools.RuntimeDroolsException: Class not found for evaluator definition: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at org.drools.base.evaluators.EvaluatorRegistry.addEvaluatorDefinition(EvaluatorRegistry.java:136) 
    at org.drools.compiler.PackageBuilderConfiguration.buildEvaluatorRegistry(PackageBuilderConfiguration.java:550) 
    at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:196) 
    at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:170) 
    at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:300) 
    at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:228) 
    at org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl.newKnowledgeBuilder(KnowledgeBuilderFaorg.drools.RuntimeDroolsException: Class not found for evaluator definition: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at org.drools.base.evaluators.EvaluatorRegistry.addEvaluatorDefinition(EvaluatorRegistry.java:136) 
    at org.drools.compiler.PackageBuilderConfiguration.buildEvaluatorRegistry(PackageBuilderConfiguration.java:550) 
    at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:196) 
    at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:170) 
    at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:300) 
    at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:228) 
    at org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl.newKnowledgeBuilder(KnowledgeBuilderFactoryServiceImpl.java:34) 
    at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.java:46) 
    at com.drools.optimizer.AppExpertSystem.readKnowledgeBase(AppExpertSystem.java:130) 
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:115) 
    at com.drools.optimizer.AppExpertSystem.<init>(AppExpertSystem.java:46) 
    at eventlauncher.OptimizerLauncher.NuevoEscenario(OptimizerLauncher.java:57) 
    at eventlauncher.DemoPruebas.main(DemoPruebas.java:18) 
Caused by: java.lang.ClassNotFoundException: Unable to load class: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at org.drools.util.CompositeClassLoader.loadClass(CompositeClassLoader.java:92) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at org.drools.base.evaluators.EvaluatorRegistry.addEvaluatorDefinition(EvaluatorRegistry.java:132) 
    ... 12 more 
Exception in thread "main" java.lang.RuntimeException: org.drools.RuntimeDroolsException: Class not found for evaluator definition: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:122) 
    at com.drools.optimizer.AppExpertSystem.<init>(AppExpertSystem.java:46) 
    at eventlauncher.OptimizerLauncher.NuevoEscenario(OptimizerLauncher.java:57) 
    at eventlauncher.DemoPruebas.main(DemoPruebas.java:18) 
Caused by: org.drools.RuntimeDroolsException: Class not found for evaluator definition: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at org.drools.base.evaluators.EvaluatorRegistry.addEvaluatorDefinition(EvaluatorRegistry.java:136) 
    at org.drools.compiler.PackageBuilderConfiguration.buildEvaluatorRegistry(PackageBuilderConfiguration.java:550) 
    at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:196) 
    at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:170) 
    at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:300) 
    at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:228) 
    at org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl.newKnowledgeBuilder(KnowledgeBuilderFactoryServiceImpl.java:34) 
    at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.java:46) 
    at com.drools.optimizer.AppExpertSystem.readKnowledgeBase(AppExpertSystem.java:130) 
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:115) 
    ... 3 more 
Caused by: java.lang.ClassNotFoundException: Unable to load class: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at org.drools.util.CompositeClassLoader.loadClass(CompositeClassLoader.java:92) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at org.drools.base.evaluators.EvaluatorRegistry.addEvaluatorDefinition(EvaluatorRegistry.java:132) 
    ... 12 morectoryServiceImpl.java:34) 
    at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.java:46) 
    at com.drools.optimizer.AppExpertSystem.readKnowledgeBase(AppExpertSystem.java:130) 
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:115) 
    ... 3 more 
Caused by: java.lang.ClassNotFoundException: Unable to load class: org.drools.base.evaluators.EqualityEvaluatorsDefinition 
    at org.drools.util.CompositeClassLoader.loadClass(CompositeClassLoader.java:92) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at org.drools.base.evaluators.EvaluatorRegistry.addEvaluatorDefinition(EvaluatorRegistry.java:132) 
    ... 12 more 

내 코드는 다음과 같습니다

import com.answare.backendconnection.RESTConnection; 
import com.answare.dataModel.ActionANS; 
import com.answare.dataModel.CrisisContextANS; 
import com.answare.db.QueriesDB; 
import com.answare.settings.CTES; 
import com.drools.utils.Event; 
import org.drools.KnowledgeBase; 
import org.drools.KnowledgeBaseConfiguration; 
import org.drools.KnowledgeBaseFactory; 
import org.drools.builder.*; 
import org.drools.conf.EventProcessingOption; 
import org.drools.io.ResourceFactory; 
import org.drools.runtime.StatefulKnowledgeSession; 
import java.sql.SQLException; 



/** 
* This is the class that launch Expert System. 
*/ 

public class AppExpertSystem { 

    StatefulKnowledgeSession ksession; 
    DSS_ANS optimizerDSS_ANS; 
    Event event; 
    RESTConnection restConnection; 


    public AppExpertSystem() { 
     loadKnowledgeBase(); 
     optimizerDSS_ANS = new DSS_ANS(ksession); 
     event = new Event(); 
     event.setNewEvent(true); 
    } 
    public AppExpertSystem(RESTConnection restConnection){ 
     loadKnowledgeBase();  
     event = new Event(); 
     event.setNewEvent(true); 
     this.restConnection = restConnection; 
    } 



    private void loadKnowledgeBase() { 
     // load up the knowledge base 
     KnowledgeBase kbase; 
     try { 
      kbase = readKnowledgeBase(); 
      ksession = kbase.newStatefulKnowledgeSession(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      throw new RuntimeException(e); 
     } 
    } 


    private static KnowledgeBase readKnowledgeBase() throws Exception { 

     KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 
     kbuilder.add(ResourceFactory.newClassPathResource(CTES.RULES), 
       ResourceType.DRL); 
     KnowledgeBuilderErrors errors = kbuilder.getErrors(); 

     if (errors.size() > 0) { 
      for (KnowledgeBuilderError error : errors) { 
       System.err.println(error); 
      } 
      throw new IllegalArgumentException("Could not parse knowledge."); 
     } 
     KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); 
     kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); 
     KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); 
     config.setOption(EventProcessingOption.STREAM); 

     return kbase; 
    } 


    public String executeMessage(CrisisContextANS crisisContext) { 
     try { 
      storeInDatabaseCrisis(crisisContext,true); 
      ksession.setGlobal("optimizerDSS", optimizerDSS_ANS); 
      ksession.insert(crisisContext); 
      this.event.setType("CrisisContextANS"); 
      ksession.insert(this.event); 
      int num = ksession.fireAllRules(); 
      if (num != 0) { 
       this.event.setNewEvent(false); 
       return ("Run OK from Expert System"); 
      } 
      return (""); 
     } catch (Throwable t) { 
      t.printStackTrace(); 
      return ("Run NOT OK Expert System"); 
     } 
    } 
} 

그리고 예외 라인, 방법 readKnowledgeBase()

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 내가 뭘

있는 유일한 방법은 AppExpertSystem 생성자에 전화 :( 에게 어떤 생각입니까?

감사합니다!이 클래스는 5.5.0.Final 배포에서 사라

+0

JAR을 CLASSPATH에 제대로 추가하지 않았거나 버전이 잘못되어 메소드 서명을 더 이상 사용할 수 없습니다. – duffymo

+0

@duffymo 메서드 서명? 어떤 방법? – laune

답변

1

. 그것은

org.drools.base 및 ... 평가자는 5.3 및 5.4의 안정적인 API의 일부가 아니 었습니다 (5.3.1 및 5.4.0 (jar : drools-core.jar)에 있음). , 그래서 그것을 사용하는 것은 위험했다.

코드가 해당 클래스를 어떻게 사용하고 있는지 게시하려면 s.o. 이 사고를 해결할 수있는 방법이 생길 수도 있습니다.

클래스 org.drools.base.evaluators.EqualityEvaluatorsDefinition는 일반적으로 작업 디렉토리에 라인에게 파일 "drools.packagebuilder.conf"에서

drools.evaluator.equality = org.drools.base.evaluators.EqualityEvaluatorsDefinition 

을 포함하여 빌더로 구성된 홈 디렉토리 또는 일부 jar의 META-INF drools.default.packagebuilder.conf 또는 "drools.packagebuilder.conf"시스템 속성이 가리키는 파일에 있습니다.

+0

그럼, 내가 뭘해야합니까? drools-core.jar을 삭제 하시겠습니까? – jjmartinez

+0

이것은 도움이되지 않습니다. 코드에 더 이상 존재하지 않는 패키지에 대한 참조가 있습니다. – laune

+0

자,이 코드 조각을 추가 할 예정입니다. – jjmartinez

관련 문제