2011-12-06 1 views
0

지난 1 일 동안이 문제를 해결하기 위해 노력했지만 해결할 수 없었습니다.유형 만 가져올 수 있습니다. models.XYZ가 패키지로 해결됩니다.

Iam이 재생 모델에서 drools (규칙)를 실행합니다. 내 로컬 환경에서 완벽하게 작동합니다.

그러나 스피 다음과 같은 오류

Error = Unable to resolve ObjectType 'Tracker' : [Rule name='PM APPROVAL'] 
Unable to resolve ObjectType 'User' : [Rule name='SEND MAILS'] 
Unable to resolve ObjectType 'Tracker' : [Rule name='SEND MAILS'] 
Error importing : 'models.Tracker'Error importing : 'notifications.TrackerMails'Error importing : 'models.User'Rule Compilation error : [Rule name='SEND MAILS'] 
    drools/Rule_SEND_MAILS_0.java (2:23) : Only a type can be imported. notifications.TrackerMails resolves to a package 
    drools/Rule_SEND_MAILS_0.java (2:57) : Only a type can be imported. models.Tracker resolves to a package 
    drools/Rule_SEND_MAILS_0.java (2:95) : Only a type can be imported. models.User resolves to a package 
    drools/Rule_SEND_MAILS_0.java (8:422) : TrackerMails cannot be resolved 
    drools/Rule_SEND_MAILS_0.java (8:455) : $user cannot be resolved to a variable 
    drools/Rule_SEND_MAILS_0.java (8:461) : $tracker cannot be resolved to a variable 

drooolssession.I 내가 여전히 포럼에서 찾고 있지만 의해 변수 ClassLoader를 추가해야 얻을 수있는 예제 코드를 점점 솔라리스 상자 스피에 생산에 동일한 응용 프로그램을 배포 할 때 문제를 해결하지 못했습니다.

StatefulKnowledgeSession dsession = null;   
      ClassLoader classLoader = TrackerUtil.class.getClassLoader(); 

      KnowledgeBuilderConfiguration kBuilderConfiguration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null, classLoader); 
      KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(kBuilderConfiguration); 
      KnowledgeBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, classLoader); 
      ''''' 

      builder.add(ResourceFactory.newFileResource(new File(uri)),ResourceType.DRL); 

      '''' 
      builder.add(ResourceFactory.newFileResource(new File(uri)),ResourceType.DRF); 
      .......    

      KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConfig); 
      knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages()); 

      dsession = knowledgeBase.newStatefulKnowledgeSession(); 
      return dsession; 

누구든지이 문제를 어떻게 해결할 수 있습니까?

+0

클래스 로더에서 클래스를로드하려고 시도했습니다. 클래스를 제대로로드 할 수 있지만 여전히 콩을 해결할 수 있습니다. –

+0

kbase 및 ksession에서 동일한 클래스 로더를 사용하려고 시도 했습니까 – salaboy

+0

그래도 여전히 할 수 없었습니다. 결의. –

답변

0

마침내 나는 이틀 후에 노력했다.

Drools가 재생 모델을 해결할 수 없기 때문에 문제가 발생합니다. Eclipse에서 클래스/클래스를 추가 할 때 Eclipse에서 일식이 잘 작동하지만 '실행 실행'을 실행하면 drools에서 해당 재생을 찾을 수 없습니다. .models.So 이것을 극복하기 위해 "tmp/classes"를 classpath에 추가해야합니다. 여기

당신이 방법 데프 getClasspath 이동 설치 디렉토리 폴더 안에 이동 >> 프레임 워크 >> PYM >> 재생

  • 열기 application.py
  • 플레이에 우리가

    1. 이동을 추가하는 방법입니다 (자동) : 방법은
    2. 이 라인 classpath.append을 찾아 (os.path.normpath (os.path.join (self.path, 'conf의'))) 줄 아래에 다음 줄을 추가

      ,536,

      classpath.append(os.path.normpath(os.path.join(os.path.join(self.path, 'tmp'),'classes')))

    3. 이제 drools가 재생 모델을 찾을 수 있습니다. 모든 것이 정상적으로 보입니다.

    해결 방법 2는 명령 플레이 클래스 경로를 실행하여

    java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Dplay.debug=yes -Dplay.id= -Dapplication.path=/home/przemek/pn -Djava.endorsed.dirs=/opt/play/framework/endorsed -javaagent:/opt/play/framework/play-1.2.4.jar -Dfile.encoding=UTF-8 -classpath "Play computed classpath" and path to tmp classes Play.server.Server 
    

    에도 위의 작품 아래 fine.You는 플레이 계산 얻을 수있는 클래스 패스와 같은 플레이 서버를 호출 할 수 있습니다

    입니다. classpath의 경우 리눅스의 구분 기호는 ":"이지만 창에서는 ";"입니다.

    위의 해결 방법은 작동하지만 실제로 왜 부분을 이해하지 못했습니까? drools이 동일한 모델을 해결할 수없는 경우 어떻게 재생할 수 있습니까?

    위의 답변을 알고 있다면 알려주십시오.

  • 관련 문제