public void initializeRules() { // To ensure the plugin classloader use for dependency resolution ClassLoader orig = Thread.currentThread().getContextClassLoader(); ClassLoader loader = getClass().getClassLoader(); Thread.currentThread().setContextClassLoader( loader ); Resource ruleSet = null; if ( ruleString != null ) { ruleSet = ResourceFactory.newReaderResource( new StringReader( ruleString ) ); } else { ruleSet = ResourceFactory.newFileResource( ruleFilePath ); } kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ruleSet, ResourceType.DRL ); if ( kbuilder.hasErrors() ) { System.out.println( kbuilder.getErrors().toString() ); throw new RuntimeException( BaseMessages.getString( PKG, "RulesData.Error.CompileDRL" ) ); } Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages(); kbase = KnowledgeBaseFactory.newKnowledgeBase(); // Cache the knowledge base as its creation is intensive kbase.addKnowledgePackages( pkgs ); // reset classloader back to original Thread.currentThread().setContextClassLoader( orig ); }
public void initializeRules() { // To ensure the plugin classloader use for dependency resolution ClassLoader orig = Thread.currentThread().getContextClassLoader(); ClassLoader loader = getClass().getClassLoader(); Thread.currentThread().setContextClassLoader( loader ); Resource ruleSet = null; if ( ruleString != null ) { ruleSet = ResourceFactory.newReaderResource( new StringReader( ruleString ) ); } else { ruleSet = ResourceFactory.newFileResource( ruleFilePath ); } kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ruleSet, ResourceType.DRL ); if ( kbuilder.hasErrors() ) { System.out.println( kbuilder.getErrors().toString() ); throw new RuntimeException( BaseMessages.getString( PKG, "RulesData.Error.CompileDRL" ) ); } Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages(); kbase = KnowledgeBaseFactory.newKnowledgeBase(); // Cache the knowledge base as its creation is intensive kbase.addKnowledgePackages( pkgs ); // reset classloader back to original Thread.currentThread().setContextClassLoader( orig ); }
private Collection<KnowledgePackage> compileDrlString(String content, Collection<String> flows) throws RuleBaseException { KnowledgeBuilder builder = getConfiguredBuilder(); builder.add(ResourceFactory.newReaderResource(new StringReader(content)), ResourceType.DRL); if (flows != null) { for (String drf : flows) { Resource resource = ResourceFactory.newReaderResource(new StringReader(drf)); builder.add(resource, ResourceType.DRF); } } if (builder.hasErrors()) { throw new RuleBaseException(builder.getErrors().toString()); } return builder.getKnowledgePackages(); }
/** * Add some knowledge packages into the provided {@link KnowledgeBase}, by using the * given {@link KnowledgeBuilder}. * * @param builder a knowledge builder * @param knowledgeBase a knowledge base */ public void addPackage(final KnowledgeBuilder builder, final KnowledgeBase knowledgeBase) { Reader drlFileReader = new StringReader(drlFile); builder.add(ResourceFactory.newReaderResource(drlFileReader), ResourceType.DRL); if (builder.hasErrors()) { logger.log(Level.WARNING, builder.getErrors().toString()); } logger.log(Level.INFO, "Drl file loaded"); knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages()); }
private Collection<KnowledgePackage> compileDrlString(String content, Collection<String> flows) throws RuleBaseException { KnowledgeBuilder builder = getConfiguredBuilder(); builder.add(ResourceFactory.newReaderResource(new StringReader(content)), ResourceType.DRL); if (flows != null) { for (String drf : flows) { Resource resource = ResourceFactory.newReaderResource(new StringReader(drf)); builder.add(resource, ResourceType.DRF); } } if (builder.hasErrors()) { throw new RuleBaseException(builder.getErrors().toString()); } return builder.getKnowledgePackages(); }
public static final void main(String[] args) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("ex02_helloRules.drl"), ResourceType.DRL); KnowledgeBase kbase = kbuilder.newKnowledgeBase(); StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession(); Hour hour = new Hour(new Random().nextInt(24)); ksession.execute(hour); } }
public static final void main(String[] args) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("ex03_greetings.bpmn"), ResourceType.BPMN2); kbuilder.add(ResourceFactory.newClassPathResource("ex03_greetings.drl"), ResourceType.DRL); KnowledgeBase kbase = kbuilder.newKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); //KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession); HashMap<String, Object> params = new HashMap<String, Object>(); params.put("hourOfDay", new Hour(new Random().nextInt(24))); ksession.startProcess("com.wordpress.salaboy.bpmn2.greetings",params); ksession.fireAllRules(); //logger.close(); ksession.dispose(); } }
private KnowledgeBase createKnowledgeBase(File[] files) throws MojoExecutionException { KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); builder.add(ResourceFactory.newClassPathResource("drools-globals.drl", getClass()), ResourceType.DRL); for (File file : files) { getLog().info("Parsing rule file " + file.getAbsolutePath()); builder.add(ResourceFactory.newFileResource(file), ResourceType.DRL); } if (builder.hasErrors()) { getLog().error("Rule errors:"); for (KnowledgeBuilderError error : builder.getErrors()) { getLog().error(error.toString()); } throw new MojoExecutionException("Unable to create rules. See log for details."); } KnowledgeBase base = KnowledgeBaseFactory.newKnowledgeBase(); base.addKnowledgePackages(builder.getKnowledgePackages()); return base; }
/** * Adds a SwitchYard Resource to a Drools KnowledgeBuilder. * @param switchyardResource the resource * @param kbuilder the builder * @param loader the ClassLoader to use */ public static void add(Resource switchyardResource, KnowledgeBuilder kbuilder, ClassLoader loader) { org.drools.io.Resource droolsResource = convert(switchyardResource, loader); if (droolsResource != null) { org.drools.builder.ResourceType droolsResourceType = convert(switchyardResource.getType()); if (droolsResourceType != null) { kbuilder.add(droolsResource, droolsResourceType); } } }
private StatelessKnowledgeSession createStatelessSession(){ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource("good_old_patterns/car-ranking-rules.drl"), ResourceType.DRL); if (kbuilder.hasErrors()) { for (KnowledgeBuilderError error : kbuilder.getErrors()) { System.out.println(">>> Error:" + error.getMessage()); } throw new IllegalStateException(">>> Knowledge couldn't be parsed! "); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase.newStatelessKnowledgeSession(); }
private static StatelessKnowledgeSession createStatelessSession(String rules){ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource(rules), ResourceType.DRL); if (kbuilder.hasErrors()) { for (KnowledgeBuilderError error : kbuilder.getErrors()) { System.out.println(">>> Error:" + error.getMessage()); } throw new IllegalStateException(">>> Knowledge couldn't be parsed! "); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase.newStatelessKnowledgeSession(); }
private StatelessKnowledgeSession createStatelessSession(){ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource("good_old_patterns/car-pricing-rules.drl"), ResourceType.DRL); if (kbuilder.hasErrors()) { for (KnowledgeBuilderError error : kbuilder.getErrors()) { System.out.println(">>> Error:" + error.getMessage()); } throw new IllegalStateException(">>> Knowledge couldn't be parsed! "); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase.newStatelessKnowledgeSession(); }
@Test public void testErrorReporting() { String str = "global java.util.List list\n" + "\n" + "rule R\n" + "when\n" + " $i : Intege( ) from list\n" + "then\n" + "end"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL ); assertTrue(kbuilder.hasErrors()); assertTrue(kbuilder.getErrors().toString().contains("Intege")); }
public static final void main(String[] args) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("ex01_helloBPM.bpmn"), ResourceType.BPMN2); KnowledgeBase kbase = kbuilder.newKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); ksession.startProcess("com.wordpress.salaboy.bpmn2.hello"); ksession.dispose(); } }
@Test public void testDecisionTableXls() { DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration(); dtconf.setInputType(DecisionTableInputType.XLS); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("sample.xls", getClass()), ResourceType.DTABLE, dtconf); if (kbuilder.hasErrors()) { throw new RuntimeException("Drools compile errors: " + kbuilder.getErrors().toString()); } }
@Test public void testDecisionTableCsv() { DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration(); dtconf.setInputType(DecisionTableInputType.CSV); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("sample.csv", getClass()), ResourceType.DTABLE, dtconf); if (kbuilder.hasErrors()) { throw new RuntimeException("Drools compile errors: " + kbuilder.getErrors().toString()); } }
private StatefulKnowledgeSession createKnowledgeSession(){ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource("simpleEventAnalysis.drl"), ResourceType.DRL); if (kbuilder.hasErrors()) { for (KnowledgeBuilderError error : kbuilder.getErrors()) { System.out.println(" >>> Error:" + error.getMessage()+"\n"); } throw new IllegalStateException(">>> Knowledge couldn't be parsed! "); } KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); config.setOption(EventProcessingOption.STREAM); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(config); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); KnowledgeSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(); sessionConfig.setOption( ClockTypeOption.get("realtime") ); return kbase.newStatefulKnowledgeSession(sessionConfig, null); }
@Test public void testBrl() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource( "BrlRule.package", getClass() ), ResourceType.DRL ); kbuilder.add( ResourceFactory.newClassPathResource( "BrlRule.brl", getClass() ), ResourceType.BRL ); // the compiled package KnowledgeBase kbase = kbuilder.newKnowledgeBase(); kbase = SerializationHelper.serializeObject( kbase ); StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(); session.insert( new Person( "Bob" ) ); assertEquals( 1, session.getObjects().size() ); session.fireAllRules(); // should have fired assertEquals( 0, session.getObjects().size() ); }
protected KnowledgeBase loadKnowledgeBaseFromString(KnowledgeBuilderConfiguration config, KnowledgeBaseConfiguration kBaseConfig, String... drlContentStrings) { KnowledgeBuilder kbuilder = config == null ? KnowledgeBuilderFactory.newKnowledgeBuilder() : KnowledgeBuilderFactory.newKnowledgeBuilder( config ); for ( String drlContentString : drlContentStrings ) { kbuilder.add( ResourceFactory.newByteArrayResource(drlContentString.getBytes()), ResourceType.DRL ); } if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); } if ( kBaseConfig == null ) { kBaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kBaseConfig ); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); return kbase; }