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

Popular posts from this blog

Apache Karaf + Pax CDI OSGI Service

OSGI + PAX CDI + Drools + Karaf

Apache CXF CDI in Karaf (Using CXF and CDI 1.1 (JSR-346))