मैं सफलतापूर्वक ड्रोल धाराप्रवाह एपीआई का उपयोग करके ड्रोल फ़ाइल को गतिशील रूप से उत्पन्न करने में सक्षम था। लेकिन मेरी समस्या यह है कि मैं इस फ़ाइल को किफाइल सिस्टम एपीआई का उपयोग करके मेमोरी क्षेत्र में लिखने में सक्षम नहीं हूं। इसके परिणामस्वरूप रनटाइम अपवाद केई मॉड्यूल नहीं मिल सकता है। नीचे वही है

पैकेज कॉम.नगरो;

वैश्विक तथ्य। आउटपुटडेटा आउटपुट;

नियम "नियम 1" कब GenericEvent(लागत>500)
फिर output.setDiscount(10) समाप्त

थ्रेड में अपवाद "मुख्य" java.lang.RuntimeException: KieModule नहीं ढूँढ सकता: org.default: artifact: 1.0.0-SNAPSHOT org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:97) पर main.Launcher.evaluate (Launcher.java:67) पर main.Launcher.main (Launcher.java:58) पर

मैंने ड्रोल सत्यापनकर्ता का उपयोग करके डीआरएल फ़ाइल की संरचना को पहले ही मान्य कर दिया है।

नीचे वह कोड है जिसका मैं उसी के लिए उपयोग कर रहा हूं।

public class Launcher {

    public static void main(final String[] args) throws Exception {

     /*   PackageDescr pkg = DescrFactory.newPackage()
            .name("org.drools.example").newImport().target("java.util.ArrayList").end()  
            .newImport().target("java.util.ArrayList").end()
            .newImport().target("java.util.Vector").end()
            .newRule().name("alert")
            .lhs()
                .and()
                    .pattern("Foo").id( "$foo", false ).constraint("bar==baz").constraint("x>y").end()
                    .not().pattern("Bar").constraint("a+b==c").end().end()
                .end()
            .end()
            .rhs("System.out.println;"+"/n"+"System.out.println;").end()
            .getDescr();*/
         PackageDescr desc2 = DescrFactory
             .newPackage()
             .name("com.nagarro;")
             .newGlobal().type("fact.OutputData").identifier("output;")
             .end()
             .newRule().name("rule1")
                 .lhs()
                 .pattern("GenericEvent").constraint("cost>500")
                 .end()
                 .end()
                 .rhs("    output.setDiscount(10)")
                 .end()
             .getDescr();
         DrlDumper dumper=new DrlDumper();
         String drl=dumper.dump(desc2);
         System.out.print(drl);
      //   verify(drl);
         evaluate(drl, new OrderEvent());
    }

    static private void evaluate(final String drl, final Event event) throws Exception {
        KieServices kieServices = KieServices.Factory.get();
        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
        kieFileSystem.write("src/main/resources/rule.drl", drl);
        kieServices.newKieBuilder(kieFileSystem).buildAll();

        KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
        StatelessKieSession statelessKieSession = kieContainer.getKieBase().newStatelessKieSession();
        //HashMap<String,Object> outputMap = new HashMap<>();
        OutputData outData = new OutputData();
        statelessKieSession.getGlobals().set("output", outData);
        HashMap<String, Object> inputMap = new HashMap<>();
        inputMap.put("price", 1000);
        GenericEvent evt = new GenericEvent();
        evt.setInputmap(inputMap);
        evt.setCost(1000);
        statelessKieSession.execute(evt);
        System.out.println(outData.getDiscount());

    }

    public static void verify(final String drl) {
     // Create verifier builder [1]
        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();


        // Create verifier [2]
        Verifier verifier = vBuilder.newVerifier();


        // Add Resources you want to verify [3]  
        verifier.addResourcesToVerify(new ClassPathResource("generic.drl",Launcher.class),
                                       ResourceType.DRL );


        // Run the verification rules [4]
        verifier.fireAnalysis();


        // Get the result object [5]
        VerifierReport result = verifier.getResult();
        System.out.println(result);
        // Print the the errors [6]
        for(VerifierMessageBase base: result.getBySeverity( Severity.ERROR ) ){
            System.out.println( base );
        }
    }

}
0
Manuj Sangwan 29 अक्टूबर 2018, 07:26

1 उत्तर

सबसे बढ़िया उत्तर

फ़ाइल उपयोग के रूप में डीआरएल लिखने के लिए:

kieFileSystem.write("src/main/resources/rule2.drl", kieServices.getResources().newReaderResource(
            new StringReader(drl)));

डीआरएल को मान्य करने के लिए

KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll();

// check there have been no errors for rule setup
Results results = kieBuilder.getResults();
if (results.hasMessages(Message.Level.ERROR)) {
    System.out.println(results.getMessages());
    throw new IllegalStateException("### errors ###");
}

KieContainer kieContainer = kieServices.newKieContainer( kieBuilder.getKieModule().getReleaseId());


KieSession kieSession = kieContainer.newKieSession();

नियमों का मूल्यांकन करने के लिए:

kieSession.insert(inputData);
kieSession.setGlobal("output", outData);
kieSession.fireAllRules();
kieSession.dispose();
0
Swaraj Pal 29 अक्टूबर 2018, 05:40