2011-12-06 14 views
0

我一直在試圖解決過去1天的問題,但我無法解決。只能導入一個類型。 models.XYZ解析爲包

Iam從遊戲模型中觸發流水(規則)。它在我的本地環境中工作得非常好。

但是當IAM在Solaris箱IAM部署在生產同一個應用程序收到以下錯誤

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都看在一些論壇但我仍然添加變量的類加載器尚未解決問題。

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

甚至嘗試從Classloader加載類,它能夠正確加載類,但仍然能夠解決豆 –

+0

你嘗試在kbase和ksession中使用相同的類加載器 – salaboy

+0

是的,我仍然無法解決。 –

回答

0

最後,我在兩天的努力後解決了問題!

問題出在Drools無法解決播放模型。在Eclipse中,它可以正常工作,因爲它將Eclipse /類添加到類路徑中。但是無論何時運行「Play run」,drools都無法找到播放。爲了克服這個問題,我們需要將「tmp/classes」添加到類路徑中。

這裏是我們如何才能增加

  1. 轉到你玩的安裝目錄文件夾內的旅途>>框架>>平陽黴素>>玩
  2. 打開application.py
  3. 去的方法DEF getClasspath (個體):
  4. 在方法找到行classpath.append(os.path.normpath(os.path.join(self.path, 'CONF')))線下添加以下行

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

  5. 現在drools將能夠找到播放models.Everything看起來不錯。

溶液2

您可以通過運行該命令發揮classpath中調用遊戲服務器像下面

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,linux中的分隔符是「:」,而在Windows中則是「;」

上述解決方案的工作原理但我真的不明白爲什麼部分? 如何玩弄能夠解決的模型,因爲流口水不能解決相同的模型?

如果你知道上面的答案,請讓我知道。

相關問題