package com.sample; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderError; import org.drools.builder.KnowledgeBuilderErrors; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.definition.type.FactType; import org.drools.io.ResourceFactory; import org.drools.logger.KnowledgeRuntimeLogger; import org.drools.logger.KnowledgeRuntimeLoggerFactory; import org.drools.runtime.StatefulKnowledgeSession; /** * This is a sample class to launch a rule. */ public class DroolsTest { public static final void main(String[] args) throws Exception { // load up the knowledge base KnowledgeBase kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); // go ! FactType rateType = kbase.getFactType( "com.sample", "Rate" ); FactType saleType = kbase.getFactType( "com.sample", "Sale" ); { Object rate = rateType.newInstance(); rateType.set( rate, "minUnits", 0 ); rateType.set( rate, "maxUnits", 1000 ); rateType.set( rate, "revenuePercent", 10 ); ksession.insert(rate); } { Object rate = rateType.newInstance(); rateType.set( rate, "minUnits", 1001 ); rateType.set( rate, "maxUnits", 2000 ); rateType.set( rate, "revenuePercent", 20 ); ksession.insert(rate); } { Object sale = saleType.newInstance(); saleType.set( sale, "units", 500 ); ksession.insert(sale); } { Object sale = saleType.newInstance(); saleType.set( sale, "units", 1500 ); ksession.insert(sale); } ksession.fireAllRules(); } private static KnowledgeBase readKnowledgeBase() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL); 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(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; } }