2014-02-22 27 views
0

我有設置,我使用Drools Spring KnowledgeAgent從外部路徑加載規則。此時路徑中包含DRL文件,因此規則即時編譯。出於某種原因,我無法通過規則來檢測我的事實,無論他們在哪裏宣佈。我用下面的方法,並不斷獲取ClassNotFoundException/NoClassDefFoundException如何獲得Drools KnowledgeAgent檢測事實?

  1. 外部事實模型,即Java類包含的事實聲明的同DRL內
  2. 事實作爲規則
  3. 外部DRL文件

我需要得到所有上述案件的工作。

爲KnowledgeAgent我的春天配置是一樣

<!-- For scanning the changes --> 
<drools:resource-change-scanner id="scanner" interval="10" /> 

<drools:kagent id="ruleAgent" kbase="ruleKBase" new-instance="true" > 
    <drools:resources> 
    <drools:resource source="file://external/path/rules/> 
    </drools:resources> 
</drools:kagent> 

<!-- For starting the resource scanner --> 
<bean id="starter" class="study.ResourceChangeScannerStarter" depends-on="ruleAgent" /> 

包含我的日間行車燈規則和事實都在路徑//external/path/rules。如果我刪除了所有對事實的引用並且有一個沒有LHS條件的規則,我可以在控制檯上獲得簡單的打印輸出,因此我可以驗證規則是否正確加載。

我正在使用Drools 5.5.0

+0

這是一個Windows文件共享到一個叫做'external'的遠程服務器嗎? – Steve

+0

btw - 如果您的事實模型在Java類中,那麼它需要位於類路徑中。 – Steve

+0

@Steve,在這種情況下,它是一個Windows文件共享。當知識代理從我的應用程序中引用規則並即時完成編譯時,我會假設應用程序內的事實模型將位於類路徑中。此外,即使在同一個DRL文件中聲明瞭事實,我也會得到相同的異常。但是我會說你的假​​設是正確的,給出的例外是classpath中找不到的類的一個問題。 – kaskelotti

回答

0

好的。通過使用KnowledgeBuilder從規則創建一個包(ResourceType.PKG)並將其用作KnowledgeAgent的URL資源,我可以更好地工作。然而,整個設置有太多問題,所以我結束了自己的實現。

基本上我有一類是

  1. 會在外部路徑文件
  2. 將所有規則文件作爲資源KnowledgeBuilder
  3. 從Builder將知識包上的知識庫
  4. 創建來自知識庫的新無狀態會話

我在春天唯一擁有的東西無花果是kBase,我與春天得到很好的我的自定義類

<drools:kbase id="ruleKnowledgeBase"> 
</drools:kbase> 

標記我自己的問題回答爲我的情況下被關閉。

相關問題