/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.notidiots; import org.drools.KnowledgeBase; import org.drools.agent.KnowledgeAgent; import org.drools.agent.KnowledgeAgentFactory; import org.drools.definition.type.FactType; import org.drools.io.ResourceFactory; import org.drools.runtime.StatefulKnowledgeSession; public class MortgageApplicationTest { /** * Entry point demonstrating use of KnowledgeAgent and changesets retrieving * a rule package from a running instance of Guvnor. * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { StatefulKnowledgeSession ksession = null; try { // load up the knowledge base KnowledgeBase kbase = readKnowledgeBase(); //Dynamic fact creation as the model was declared in the DRL FactType appType = kbase .getFactType( "mortgages", "LoanApplication" ); Object application = appType.newInstance(); appType.set( application, "amount", 25000 ); appType.set( application, "deposit", 1500 ); appType.set( application, "lengthYears", 20 ); FactType incomeType = kbase .getFactType( "mortgages", "IncomeSource" ); Object income = incomeType.newInstance(); incomeType.set( income, "type", "Job" ); incomeType.set( income, "amount", 65000 ); //Invoke the magic ksession = kbase.newStatefulKnowledgeSession(); ksession.insert( application ); ksession.insert( income ); ksession.fireAllRules(); //Voila! System.out.println( application ); } catch ( Throwable t ) { t.printStackTrace(); } finally { if ( ksession != null ) { ksession.dispose(); } } } /** * Load KnowledgeBase using KnowledgeAgent configured with accompanying changeset.xml * * @return A KnowledgeBase * @throws Exception */ private static KnowledgeBase readKnowledgeBase() throws Exception { KnowledgeAgent kagent = KnowledgeAgentFactory .newKnowledgeAgent( "MortgageAgent" ); kagent.applyChangeSet( ResourceFactory .newClassPathResource( "changeset.xml" ) ); KnowledgeBase kbase = kagent.getKnowledgeBase(); kagent.dispose(); return kbase; } }