我正在開發一個爲促銷引擎系統運行Drools 5.5的項目。我在構建知識庫時嘗試瞭解編譯步驟時遇到了一些麻煩。這個drl應該編譯嗎?
這是這種情況:我有一個drl在條件大小> = int的列表上執行收集(LHS)。 生成drl的系統,做錯了,現在我有運行時異常。現在,我正試圖理解這種情況下編譯如何在drools上運行。
的事情是,在此收集,約束(大小> =的事情,這東西不是整數)不被Drools的5.5編譯器驗證,異常只會在運行時發生爆炸:
$COLLECT_ALL : ArrayList (size >= something)
from collect (Product (...))
但是,在drools 5.0.0上驗證了相同的代碼,並且我可以在創建知識庫之前刪除此規則。
我不知道這是一個錯誤還是隻是錯誤理解LHS上的流口水。
無論如何,這是我的工作
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add(ResourceFactory.newByteArrayResource(rule.getBytes()) , ResourceType.DRL);
if (builder.hasErrors()) {
createErrorMessage(builder);
}
從技術上講,它不是一個有效的Java語句。 「某事」確實是某種東西。我知道這聽起來很奇怪,但它只是文件中的一個詞。看起來像一個變量,但從未宣佈。例如:當COLLECT_ALL:ArrayList(size> = tag-xyz) from collect(Product(...))時,規則「XYZ」然後...' – VitorBtf
感謝您的澄清。 - 看起來和w.r.t有區別錯誤報告。 'Product'中的類似錯誤在編譯時被標記。我在Drools用戶名單上追求這一點。 – laune
請參閱我的答案的補充內容。 – laune