Drools Dynamically Load
Load Drool File from location
Method to Dynamically Load the Drool File and create the Knowledge Base
public static KnowledgeBase readKnowledgeBase(ClassLoader loader) throws Exception {
KnowledgeBuilderConfiguration kBuilderConfiguration = KnowledgeBuilderFactory
.newKnowledgeBuilderConfiguration(null, loader);
System.out.println(kBuilderConfiguration);
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kBuilderConfiguration);
KieBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, loader);
// kbuilder.add(ResourceFactory.newByteArrayResource(getRule().getBytes()),
// ResourceType.DTABLE);
kbuilder.add(
ResourceFactory.newFileResource(
"C:\\Eligibledt.xls"),
ResourceType.DTABLE);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error : errors)
System.err.println(error);
throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConfig);
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
Refer the Decision table creation in the Previous Post
http://opensourceappexample.blogspot.ca/2017/06/drool-decision-table.html
Fire The Rules
Invoke the kBase we created in the above method and invoke the kSession to fire all the Rules
public Claims checkTransferEligibility(Cost cst) {
KnowledgeBase kBase;
kBase = readKnowledgeBase(TransferEligibilityRuleImpl.class.getClassLoader());
KieSession kSession = kBase.newKieSession();
kSession.insert(cst);
kSession.fireAllRules();
kSession.dispose();
return cst;
}
Comments
Post a Comment