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()); }
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(); } }
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; }
KnowledgeBuilderConfiguration kbuilderConf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null, cl); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kbuilderConf); kbuilder.add(ResourceFactory.newReaderResource(new StringReader(rule.getContent())), ResourceType.DRL); if (kbuilder.hasErrors()) { logger.error(kbuilder.getErrors().toString()); } else { KnowledgeBaseConfiguration kbaseConf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, cl); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConf); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); knowledgeBaseLookup.put(rule.getId(), kbase);
@Test public void testConsequenceException2() { // BZ-1077834 String str = "package foo.bar\n" + "rule R\n" + "when\n" + "then\n" + " throw new RuntimeException(\"foo\");" + "end"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes(Charset.forName("UTF-8"))), ResourceType.DRL); if (kbuilder.hasErrors()) { throw new RuntimeException("Drools compile errors: " + kbuilder.getErrors().toString()); } KnowledgeBase kbase = kbuilder.newKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); try { ksession.fireAllRules(); } catch (org.drools.runtime.rule.ConsequenceException e) { // this is correct, succeeds } catch (Exception other) { fail("Wrong exception raised = " + other.getClass().getCanonicalName()); } }
@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; }
private void addProcessesFromConsoleDirectory(KnowledgeBase kbase, Properties consoleProperties) { String directory = System.getProperty("jbpm.console.directory") == null ? consoleProperties.getProperty("jbpm.console.directory") : System.getProperty("jbpm.console.directory"); if (directory == null || directory.length() < 1 ) { logger.info("jbpm.console.directory property not found - processes from local file system will not be loaded"); } else { File file = new File(directory); if (!file.exists()) { throw new IllegalArgumentException("Could not find " + directory); } if (!file.isDirectory()) { throw new IllegalArgumentException(directory + " is not a directory"); } ProcessBuilderFactory.setProcessBuilderFactoryService(new ProcessBuilderFactoryServiceImpl()); ProcessMarshallerFactory.setProcessMarshallerFactoryService(new ProcessMarshallerFactoryServiceImpl()); ProcessRuntimeFactory.setProcessRuntimeFactoryService(new ProcessRuntimeFactoryServiceImpl()); BPMN2ProcessFactory.setBPMN2ProcessProvider(new BPMN2ProcessProviderImpl()); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); for (File subfile: file.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".bpmn") || name.endsWith("bpmn2"); }})) { logger.info("Loading process from file system: " + subfile.getName()); kbuilder.add(ResourceFactory.newFileResource(subfile), ResourceType.BPMN2); } kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); } }
@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()); } }
builder.add(ResourceFactory.newUrlResource(dslPath), ResourceType.DSL); logger.log(Level.INFO, dslPath.getPath() + " loaded"); builder.add(ResourceFactory.newUrlResource(drlPath), ResourceType.DRL); logger.log(Level.INFO, drlPath.getPath() + " loaded"); while(drlXmlPaths.hasMoreElements()) { URL drlXmlPath = (URL) drlXmlPaths.nextElement(); builder.add(ResourceFactory.newUrlResource(drlXmlPath), ResourceType.XDRL); logger.log(Level.INFO, drlXmlPath.getPath() + " loaded"); Collection<KnowledgePackage> packages = builder.getKnowledgePackages(); ruleBase.addKnowledgePackages(packages);
@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() ); }
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); CompositeKnowledgeBuilder ckbuilder = kbuilder.batch(); for ( String file : files ) { if ( file.endsWith(".drl" ) ) { ckbuilder.add( ResourceFactory.newUrlResource( cls.getResource("/" + file.trim()) ), ResourceType.DRL ); if ( kbuilder.hasErrors() ) { throw new RuntimeException( "Unable to compile " + kBaseQualifiers[0].getName() + ":\n" + kbuilder.getErrors() ); kconf.setOption( equalsBehaviour ); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kconf); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); return kbase;
@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("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 void deploy(DeploymentEntity deployment, Map<String, Object> deploymentSettings) { log.debug("Processing deployment {}", deployment.getName()); KnowledgeBuilder knowledgeBuilder = null; DeploymentManager deploymentManager = Context.getProcessEngineConfiguration().getDeploymentManager(); Map<String, ResourceEntity> resources = deployment.getResources(); for (String resourceName : resources.keySet()) { log.info("Processing resource {}", resourceName); if (resourceName.endsWith(".drl")) { // is only parsing .drls sufficient? what about other rule dsl's? (@see ResourceType) if (knowledgeBuilder == null) { knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); } ResourceEntity resourceEntity = resources.get(resourceName); byte[] resourceBytes = resourceEntity.getBytes(); Resource droolsResource = ResourceFactory.newByteArrayResource(resourceBytes); knowledgeBuilder.add(droolsResource, ResourceType.DRL); } } if (knowledgeBuilder != null) { KnowledgeBase knowledgeBase = knowledgeBuilder.newKnowledgeBase(); deploymentManager.getKnowledgeBaseCache().add(deployment.getId(), knowledgeBase); } } }
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( this.builderConfiguration ); } else if ( this.isUseKBaseClassLoaderForCompiling() ) { kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( this.kbase ); } else { kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( entry.getValue().getBytes() ), ResourceType.DSL );
public void afterPropertiesSet() throws Exception { ResourceFactory.getResourceChangeScannerService().setInterval( this.interval ); if (enabled != null && enabled.equalsIgnoreCase("true")) { ResourceFactory.getResourceChangeNotifierService().start(); ResourceFactory.getResourceChangeScannerService().start(); } }
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; } } }
/** * A Service that can be started, to provide notifications of changed Resources. * * @return */ public static ResourceChangeNotifier getResourceChangeNotifierService() { return getFactoryService().getResourceChangeNotifierService(); }