我正在使用Eclipse和Drools插件来创建规则。 我想创建业务规则,主要目的是尝试为用户提供一组可用于创建规则的选项。 例如:如果Apple只能有3种颜色:我想提供一个选项,如下拉菜单,以便用户可以事先知道他可以在他的规则中使用哪些选项。 可能吗? 我正在创建一个dsl,但仍无法为业务规则提供上述功能。 我也在实现基本dsl时出错。 在我的RuleRunner类()
中添加dsl的代码如下所示InputStream ruleSource = RuleRunner.class.getClassLoader()。getResourceAsStream(“/ Rule1.dslr”);
InputStream dslSource = RuleRunner.class.getClassLoader()。getResourceAsStream(“/ sample-dsl.dsl”);
//使用DSL加载规则
addRulesToThisPackage.addPackageFromDrl( new InputStreamReader(ruleSource),new InputStreamReader(dslSource));
我的工作目录中有sample-dsl .dsl和Rule1.dslr。
将dsl添加到包(最后一行)时遇到错误
错误堆栈:
线程“main”中的异常java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at com.org.RuleRunner.loadRuleFile(RuleRunner.java:96)
at com.org.RuleRunner.loadRules(RuleRunner.java:48)
at com.org.RuleRunner.runStatelessRules(RuleRunner.java:109)
at com.org.RulesTest.main(RulesTest.java:41)
我的dsl文件具有基于在线文档的基本映射。
我创建的dsl规则是:
expandder sample-dsl.dsl
规则“状态更改B状态”
when
There is an A
- has an address
There is a B
- has name
then
- print updated A and Aaddress
结束
我在eclipse中创建了DSL。
我为其添加的代码是否正确加载到我的包中?或者我错过了什么????
好像我的程序无法找到dsl?
请帮忙。你能指出我正确的方向来创建一个用户友好的业务规则吗?
感谢。
Ĵ
答案 0 :(得分:1)
我不太熟悉您尝试用于创建知识会话的方法,但我将展示我的应用程序中使用的示例。
KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(<KnowledgeBaseConfiguration>);
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( "rules/myRuleFile.drl", getClass() ),
ResourceType.DRL );
kbuilder.add( ResourceFactory.newClassPathResource( "rules/myDslFile.dsl", getClass() ),
ResourceType.DSL );
if ( kbuilder.hasErrors() ) {
System.err.println( builder.getErrors().toString() );
}
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
现在,为了让您的用户能够创建具有内置约束的规则文件,您是否看过Drools Guvnor?(http://downloads.jboss.com/drools/docs/5.0.1.26597.FINAL/drools-guvnor/html_single/index.html)我还没有将它合并到我的项目中,但是已经研究过了一点点。我认为它可能会提供您希望用户创建和编辑规则文件的功能。祝你好运!