Problem with DSL and Business Rules creation in Drools

孤街醉人 提交于 2021-01-29 21:20:27

问题


I am using Eclipse with the Drools plugin to create rules. I want to create business rules and main aim is to try and provide the user a set of options which he can use to create rules. For eg:If an Apple can have only 3 colors: I want to provide an option like a drop down so that the user can know before hand which are the options he can use in his rules. Is it possible? I am creating a dsl but unable to still provide the above functionality for a business rule. I am having an error implementing a basic dsl also. The code to add the dsl is as follows in my RuleRunner class()

InputStream ruleSource = RuleRunner.class.getClassLoader().getResourceAsStream("/Rule1.dslr");

InputStream dslSource = RuleRunner.class.getClassLoader().getResourceAsStream("/sample-dsl.dsl");

//Load the rules , using DSL

addRulesToThisPackage.addPackageFromDrl( new InputStreamReader(ruleSource),new InputStreamReader(dslSource));

I have both the sample-dsl .dsl and Rule1.dslr in my working directory.

Error encountered at adding the dsl to the package (last line)

Error stack:

Exception in thread "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)

my dsl file has basic mapping as per the online documentations.

The dsl rule I created is:

expander sample-dsl.dsl

rule "A status changes B status"

  when

        There is an A

           -        has an address

         There is a B

             - has name

  then

        - print updated A and Aaddress

End

I have created DSL in eclipse.

Is the code I added for it to be loaded to my package correct?? Or am I missing something????

It seems like my program is unable to find the dsl?

Please help. Can you point me towards the right direction to create a user friendly business rule ??

Thanks.

J


回答1:


I am not quite familiar with the method you are trying to use to create a knowledge session, but I will show a example of what's used in my applications.

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() );

Now as far as giving your users the ability to author rule files, with built in constraints, have you looked at Drools Guvnor?(http://downloads.jboss.com/drools/docs/5.0.1.26597.FINAL/drools-guvnor/html_single/index.html) I have not incorporated it into my project yet, but have researched it a bit. I think it may provide the functionality your seeking for allowing your users to create and edit rule files. Good luck!



来源:https://stackoverflow.com/questions/3058735/problem-with-dsl-and-business-rules-creation-in-drools

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!