2017-07-26 27 views
0

dsl.DefaultExpanderdsl.DefaultExpanderResolver。設計和javadoc給出了一個想法,我可以將自定義擴展器添加到流程中。但我沒有發現這樣做的可能性。你看我怎麼能實現DSL解析與我的自定義擴展器?Drools DSL定製擴展器

+0

一些擴展是關於DSL到DRL翻譯所需的全部內容。所以,如果你願意編寫自己的擴展器,則不需要其他任何東西。你的擴展器創建DRL,並將它們傳遞給DRL編譯器:就是這樣。 – laune

+0

我們應該與Business Centrall集成,用戶應該在DSL中有規則,因此BC的擴展器工作。如果有鍵(像幾個現有的調試鍵)來更改擴展器的實現,那將會很不錯。 –

回答

1

那麼,在KnowledgeBuilderImpl我看到了下面的方法(用於編譯DRL/DSL類):

public DefaultExpander getDslExpander() { 
    DefaultExpander expander = new DefaultExpander(); 
    if (this.dslFiles == null || this.dslFiles.isEmpty()) { 
     return null; 
    } 
    for (DSLMappingFile file : this.dslFiles) { 
     expander.addDSLMapping(file.getMapping()); 
    } 
    return expander; 
} 

正如你所看到的,DefaultExpander在有硬編碼的,所以我想有沒有辦法指定任何其他實現。

同樣的事情發生在DrlParser.getDefaultResolver()其中一個DefaultExpanderResolver總是實例化無關緊要。

在我看來,唯一的辦法是根據自己的語義預先生成DRL(在Drools之外),然後將生成的DRL提供給Drools。

希望它有幫助,

+0

感謝您的回覆,我看到了這個片段。希望這可以克服。 –