For folks using the spring framework, the following tips may be handy.
Consider taking a look at:
https://springmodules.dev.java.net/
https://springmodules.dev.java.net/docs/reference/0.5/html/
Or, feel free to use the following FactoryBean from Geoffrey De Smit:
package net.sf.tabudrool.evaluation; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.io.Resource; import org.springframework.util.Assert; import org.drools.RuleBase; import org.drools.RuleBaseFactory; import org.drools.compiler.PackageBuilder; import org.drools.compiler.PackageBuilderConfiguration; import java.util.List; import java.io.InputStreamReader; /** * @author Geoffrey De Smet */ public class RuleBaseBeanFactory implements FactoryBean, InitializingBean { private List<Resource> drlResourceList; private RuleBase ruleBase; private PackageBuilderConfiguration packageBuilderConfiguration; public void setDrlResourceList(List<Resource> drlResourceList) { this.drlResourceList = drlResourceList; } public void afterPropertiesSet() throws Exception { Assert.notEmpty(drlResourceList, "drlResourceList must not be empty"); PackageBuilder builder = (packageBuilderConfiguration != null ? new PackageBuilder(packageBuilderConfiguration) : new PackageBuilder()); for (Resource resource : drlResourceList) { builder.addPackageFromDrl(new InputStreamReader(resource.getInputStream())); // TODO will use default encoding which might not be wanted } ruleBase = RuleBaseFactory.newRuleBase(); ruleBase.addPackage(builder.getPackage()); } public RuleBase getObject() { return ruleBase; } public Class getObjectType() { return RuleBase.class; } public boolean isSingleton() { return true; } public void setPackageBuilderConfiguration(PackageBuilderConfiguration packageBuilderConfiguration) { this.packageBuilderConfiguration = packageBuilderConfiguration; } }
and the configuration:
<bean id="ruleBase" class="net.sf.tabudrool.evaluation.RuleBaseBeanFactory"> <property name="drlResourceList"> <list> <value type="org.springframework.core.io.Resource">classpath:/net/sf/tabudrool/evaluation/rules.drl</value> </list> </property> <property name="packageBuilderConfiguration"> <bean class="org.drools.compiler.PackageBuilderConfiguration"> <property name="javaLanguageLevel" value="1.5"></property> </bean> </property> </bean> <bean id="workflowFrame" class="net.sf.tabudrool.swingui.WorkflowFrame" singleton="false"> ... <property name="ruleBase" ref="ruleBase"></property> </bean>
And this is how you use it:
private void assertScheduleInWorkingMemory() { if (workingMemory != null) { workingMemory.dispose(); } workingMemory = ruleBase.newWorkingMemory(); Schedule schedule = schedulePanel.getSchedule(); for (Timeslot timeslot : schedule.getTimeslotList()) { workingMemory.assertObject(timeslot); } ... workingMemory.fireAllRules(); }
Comments