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 execute() throws Exception { if ( kbase != null ) { StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(); for ( Row row : rowList ) { session.insert( row ); } session.fireAllRules(); Collection<Object> oList = session.getObjects( new ObjectFilter() { @Override public boolean accept( Object o ) { if ( o instanceof Row && !( (Row) o ).isExternalSource() ) { return true; } return false; } } ); for ( Object o : oList ) { resultList.add( (Row) o ); } session.dispose(); } }
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(); }
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null, Thread.currentThread().getContextClassLoader())); kbuilder.add(ResourceFactory.newInputStreamResource(is), ResourceType.DRL); if (kbuilder.hasErrors()) throw new ConfigurationException(MessageFactory.createStaticMessage("Errors while parsing ruleset defined in file " + rulesFile + " : " + kbuilder.getErrors().toString())); KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, Thread.currentThread().getContextClassLoader()); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(conf); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(); KnowledgeRuntimeLogger droolsLogger = new WorkingMemorySLF4JLogger(session, logger); session.setGlobal("mule", messageService); session.fireAllRules();
public static KnowledgeBase createKnowledgeBase(GridNode node,String resource,String resourcetype){ if ( node == null ) { node = new GridNodeImpl(); } //kbase configuration PackageBuilderConfiguration kconf = (PackageBuilderConfiguration) KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null,DroolsBlueprintBean.class.getClassLoader()); //kbuilder KnowledgeBuilder kbuilder = node.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder( kconf); kbuilder.add(parseResource(resource),ResourceType.getResourceType(resourcetype)); // error handling KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( !errors.isEmpty() ) { throw new RuntimeException( errors.toString() ); } //KnowledgeBase KnowledgeBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, DroolsBlueprintBean.class.getClassLoader()); KnowledgeBase kbase = node.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase(kbaseConfig); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); return kbase; }
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); }
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 StatefulKnowledgeSession createSession() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource("rules/SimpleRulesAndTask.drl"), ResourceType.DRL); KnowledgeBuilderErrors errors = kbuilder.getErrors(); KnowledgeBaseConfiguration kbaseConf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kbaseConf.setOption(EventProcessingOption.STREAM); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConf); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); StatefulKnowledgeSession myksession = kbase.newStatefulKnowledgeSession(); HornetQHTWorkItemHandler hornetQHTWorkItemHandler = new HornetQHTWorkItemHandler(myksession); myksession.getWorkItemManager().registerWorkItemHandler("Human Task", hornetQHTWorkItemHandler); KnowledgeRuntimeLoggerFactory.newConsoleLogger(myksession); myksession.addEventListener(new DebugAgendaEventListener());
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);
+ " end"; kbuilder.add( new ByteArrayResource( rule.getBytes() ), ResourceType.DRL ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( errors != null && errors.size() > 0 ) { for ( KnowledgeBuilderError error : errors ) { kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(); session.setGlobal("myGlobalObj", new MyObject("myGlobalObj")); FactHandle handle = session.insert( new MyObject("myObj1") ); Assert.assertNotNull( handle ); int fired = session.fireAllRules(); Assert.assertEquals( 1, fired );
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; }
@Inject public void init() { KnowledgeBuilderConfiguration config = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(); KnowledgeBaseConfiguration kBaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(config); InputStream rules = securityRules != null ? securityRules : webInfSecurityRules; if (rules != null) { org.drools.io.Resource resource = ResourceFactory.newInputStreamResource(rules); kbuilder.add(resource, ResourceType.DRL); KnowledgeBuilderErrors kbuildererrors = kbuilder.getErrors(); if (kbuildererrors.size() > 0) { for (KnowledgeBuilderError kbuildererror : kbuildererrors) { log.error(kbuildererror.getMessage()); } } kbase = KnowledgeBaseFactory.newKnowledgeBase(kBaseConfig); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); } else { log.warn("No security rules configured - rule base permissions will be unavailable."); } } }
System.out.println("Process = "+process); kbuilder.add( new ByteArrayResource( header.getBytes() ), ResourceType.DRL ); kbuilder.add( new ByteArrayResource( process.getBytes() ), ResourceType.BPMN2 ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( errors != null && errors.size() > 0 ) { for ( KnowledgeBuilderError error : errors ) { kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+ " end"; kbuilder.add( new ByteArrayResource( rule.getBytes() ), ResourceType.DRL ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( errors != null && errors.size() > 0 ) { for ( KnowledgeBuilderError error : errors ) { kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(); FactHandle handle = session.insert( new MyObject("myObj1") ); Assert.assertNotNull( handle ); int i = session.fireAllRules(); Assert.assertEquals( 1, i );
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() ); KnowledgeBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kconf.setOption( eventProcessingMode); kconf.setOption( equalsBehaviour ); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kconf); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); return 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() ); }
@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() ); }
kbase = KnowledgeBaseFactory.newKnowledgeBase(); 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"); }})) { kbuilder.add(ResourceFactory.newFileResource(subfile), ResourceType.BPMN2); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); Process process = kbase.getProcess(processId); if (process == null) {
/** * 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()); }