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 ); }
/** * 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(); }
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 synchronized void syncPackages() { try { GuvnorConnectionUtils guvnorUtils = new GuvnorConnectionUtils(); if(guvnorUtils.guvnorExists()) { if (kagent == null) { kagent = buildKnowledgeAgent(guvnorUtils); } List<String> guvnorPackages = guvnorUtils.getBuiltPackageNames(); guvnorPackages.removeAll(knownPackages); if (guvnorPackages.size() > 0 && kagent != null) { kagent.applyChangeSet(ResourceFactory.newReaderResource(guvnorUtils.createChangeSet(guvnorPackages))); knownPackages.addAll(guvnorPackages); } } } catch (Exception e) { logger.error("Error while checking packages from Guvnor", e); } }
protected KnowledgeAgent buildKnowledgeAgent(GuvnorConnectionUtils guvnorUtils) { try { ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration(); sconf.setProperty( "drools.resource.scanner.interval", "10" ); ResourceFactory.getResourceChangeScannerService().configure( sconf ); ResourceFactory.getResourceChangeScannerService().start(); ResourceFactory.getResourceChangeNotifierService().start(); KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration(); aconf.setProperty("drools.agent.newInstance", "false"); KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("Guvnor default", aconf); kagent.applyChangeSet(ResourceFactory.newReaderResource(guvnorUtils.createChangeSet())); return kagent; } catch (Throwable t) { logger.error("Could not load processes from Guvnor: " + t.getMessage(), t); return null; } } }
kbuilder.add(ResourceFactory.newReaderResource(new StringReader(rule.getContent())), ResourceType.DRL); if (kbuilder.hasErrors()) { logger.error(kbuilder.getErrors().toString());
@Test public void testSimplePackageAttributesSingleDrl() throws Exception { String drl1 = "package test\nno-loop true\ndeclare Album\n genre: String \n end\nrule \"rule1\"\nwhen Album() \n then \nAlbum a = new Album(); \n end"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newReaderResource( new StringReader( drl1 ) ), ResourceType.DRL ); KnowledgeBase kbase = kbuilder.newKnowledgeBase(); assertEquals( 1, kbase.getKnowledgePackages().size() ); KnowledgePackage kp1 = kbase.getKnowledgePackages().iterator().next(); KnowledgePackageImp kpImpl1 = (KnowledgePackageImp) kp1; assertEquals( "test", kp1.getName() ); assertEquals( 1, kp1.getRules().size() ); Rule r1 = kp1.getRules().iterator().next(); String rName = r1.getName(); assertEquals( "rule1", rName ); org.drools.rule.Rule rr1 = (org.drools.rule.Rule) kpImpl1.getRule( rName ); assertEquals( true, rr1.isNoLoop() ); }
String drl2 = "package test\nno-loop false\ndeclare Album\n genre: String \n end\nrule \"rule2\"\nwhen Album() \n then \nAlbum a = new Album(); \n end"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newReaderResource( new StringReader( drl1 ) ), ResourceType.DRL ); kbuilder.add( ResourceFactory.newReaderResource( new StringReader( drl2 ) ), ResourceType.DRL ); KnowledgeBase kbase = kbuilder.newKnowledgeBase();
String drl2 = "package test\nagenda-group \"test\"\ndeclare Album\n genre: String \n end\nrule \"rule2\"\nwhen Album() \n then \nAlbum a = new Album(); \n end"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newReaderResource( new StringReader( drl1 ) ), ResourceType.DRL ); kbuilder.add( ResourceFactory.newReaderResource( new StringReader( drl2 ) ), ResourceType.DRL ); KnowledgeBase kbase = kbuilder.newKnowledgeBase();