actionDescr.setText( "list.add( 'hello world' )" ); KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl( pkg ); DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry(); MVELDialect mvelDialect = ( MVELDialect ) dialectRegistry.getDialect( "mvel" ); context.init( pkgBuilder, pkg, null, dialectRegistry, mvelDialect, null); pkgBuilder.addPackageFromDrl( new StringReader("package pkg1;\nglobal java.util.List list;\n") ); actionNode ); final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( Arrays.asList(pkgBuilder.getPackages()) ); final KieSession wm = kbase.newKieSession(); wm.setGlobal( "list", list ); MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkgBuilder.getPackage("pkg1").getDialectRuntimeRegistry().getDialectData( "mvel");
knowledgeBuilder.addPackageFromDrl( new StringReader( rules ), resource ); } catch ( IOException e ) { PackageRegistry pkgRegistry = this.knowledgeBuilder.getOrCreatePackageRegistry(new PackageDescr(process.getPackageName())); if (pkgRegistry != null) { InternalKnowledgePackage p = pkgRegistry.getPackage(); ResourceTypePackageRegistry resourceTypePackages = p.getResourceTypePackages(); ProcessPackage rpkg = ProcessPackage.getOrCreate(resourceTypePackages); duplicatedResource.getSourcePath().equals(resource.getSourcePath())) { this.errors.add(new DuplicateProcess(process, this.knowledgeBuilder.getBuilderConfiguration())); } else { this.errors.add( new ParserError( resource, pkgRegistry.getDialectRuntimeRegistry().onBeforeExecute();
@Test public void testRuleFlow() throws Exception { InputStream in = this.getClass().getResourceAsStream( "/org/jbpm/integrationtests/ruleflow.rfm" ); assertNotNull( in ); builder.addPackage( new PackageDescr( "com.sample" ) ); builder.addRuleFlow( new InputStreamReader( in ) ); InternalKnowledgePackage pkg = builder.getPackage("com.sample"); assertNotNull( pkg ); Map<String, Process> flows = pkg.getRuleFlows(); assertNotNull( flows ); assertEquals( 1, flows.size() ); assertTrue( flows.containsKey( "0" ) ); Process p = (Process) flows.get( "0" ); assertTrue( p instanceof WorkflowProcessImpl ); //now serialization InternalKnowledgePackage pkg2 = (InternalKnowledgePackage) DroolsStreamUtils.streamIn( DroolsStreamUtils.streamOut( pkg ) ); assertNotNull( pkg2 ); flows = pkg2.getRuleFlows(); assertNotNull( flows ); assertEquals( 1, flows.size() ); assertTrue( flows.containsKey( "0" ) ); p = (Process) flows.get( "0" ); assertTrue( p instanceof WorkflowProcessImpl ); }
protected static KieBase createKnowledgeBase() { // create a builder KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); // load the process Reader source = new InputStreamReader(AbstractWorkingMemoryDbLoggerTest.class.getResourceAsStream("/ruleflow.rf")); builder.addProcessFromXml(source); source = new InputStreamReader(AbstractWorkingMemoryDbLoggerTest.class.getResourceAsStream("/ruleflow2.rf")); builder.addProcessFromXml(source); source = new InputStreamReader(AbstractWorkingMemoryDbLoggerTest.class.getResourceAsStream("/ruleflow3.rf")); builder.addProcessFromXml(source); // create the knowledge base InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(Arrays.asList(builder.getPackages())); return kbase; }
@Test public void testLoadingRuleFlowInPackage1() throws Exception { // adding ruleflow before adding package builder.addRuleFlow( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.rfm" ) ) ); builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.drl" ) ) ); builder.getPackages(); }
@Test public void testLoadingRuleFlowInPackage2() throws Exception { // only adding ruleflow builder.addRuleFlow( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.rfm" ) ) ); builder.getPackages(); }
@Test public void testProcessExceptionHandlerTriggerNode() { Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + "\n" + "</process>"); builder.addRuleFlow(source); KieSession session = createKieSession(builder.getPackages()); ProcessInstance processInstance = ( ProcessInstance ) session.startProcess("org.drools.exception"); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
@Test public void testInternalNodeSignalEvent() { Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + "\n" + "</process>"); builder.addRuleFlow(source); KieSession session = createKieSession(builder.getPackages()); ProcessInstance processInstance = session.startProcess("org.drools.core.event"); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); assertEquals("MyValue", ((VariableScopeInstance) ((org.jbpm.process.instance.ProcessInstance) processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE)).getVariable("MyVar"));
@Test public void testStartConstraintTrigger() throws Exception { Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + "\n" + "</process>"); builder.addRuleFlow(source); if (!builder.getErrors().isEmpty()) { for (DroolsError error: builder.getErrors().getErrors()) { logger.error(error.toString()); KieSession session = createKieSession(builder.getPackages()); session.setGlobal("myList", myList); session.insert(jack); session.fireAllRules(); assertEquals(2, myList.size()); assertEquals("Jack", myList.get(0));
@Test public void testMilestone() { Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + "\n" + "</process>"); builder.addRuleFlow(source); KieSession workingMemory = createKieSession(builder.getPackages()); ProcessInstance processInstance = ( ProcessInstance ) workingMemory.startProcess("org.drools.milestone"); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); workingMemory.insert(new Person("Jane Doe", 20)); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); workingMemory.insert(new Person("John Doe", 50)); workingMemory.fireAllRules(); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
private static KieBase readDynamicSubProcess() throws Exception { KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + "\n" + "</process>"); builder.addRuleFlow(source); source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + "\n" + "</process>"); builder.addRuleFlow(source); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(Arrays.asList(builder.getPackages())); return kbase;
@Test public void testIncorrectTimerNode() throws Exception { Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" + " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.timer\" package-name=\"org.drools\" version=\"1\" >\n" + "\n" + " <header>\n" + " </header>\n" + "\n" + " <nodes>\n" + " <start id=\"1\" name=\"Start\" />\n" + " <end id=\"2\" name=\"End\" />\n" + " <timerNode id=\"3\" name=\"Timer\" delay=\"800msdss\" period=\"200mssds\" />\n" + " </nodes>\n" + "\n" + " <connections>\n" + " <connection from=\"1\" to=\"3\" />\n" + " <connection from=\"3\" to=\"2\" />\n" + " </connections>\n" + "\n" + "</process>"); builder.addRuleFlow(source); assertEquals(2, builder.getErrors().size()); for (DroolsError error: builder.getErrors().getErrors()) { logger.error(error.toString()); } }
@Test public void testOnEntryTimerCancelled() throws Exception { Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + "\n" + "</process>"); builder.addRuleFlow(source); KieSession session = createKieSession(builder.getPackages()); session.setGlobal("myList", myList); session.startProcess("org.drools.timer"); assertEquals(0, myList.size()); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); assertEquals(1, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size()); session.insert(new Message()); session.fireAllRules(); assertEquals(0, myList.size());
@Test public void testMultipleTimers() throws Exception { Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + "\n" + "</process>"); builder.addRuleFlow(source); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(Arrays.asList(builder.getPackages())); session = kbase.newKieSession(conf, null); SessionPseudoClock clock = ( SessionPseudoClock) session.getSessionClock(); clock.advanceTime( 300, TimeUnit.MILLISECONDS ); session.setGlobal("myList", myList); ProcessInstance processInstance = ( ProcessInstance ) session.startProcess("org.drools.timer"); assertEquals(0, myList.size()); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); assertEquals(2, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size());
private static InternalKnowledgePackage generatePackage(int ruleCount) throws DroolsParserException { StringReader reader = new StringReader(generateRules(ruleCount)); System.out.println("Generating packages"); KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl(); try { pkgBuilder.addPackageFromDrl( reader ); } catch ( IOException e ) { fail( "Unable to parse rules\n" + e.getMessage()); } if ( pkgBuilder.hasErrors() ) { fail( pkgBuilder.getErrors().toString() ); } return pkgBuilder.getPackage("org.kie.test"); }
@Test public void testResetProblems() throws DroolsParserException, IOException { System.setProperty( "drools.kbuilder.severity." + DuplicateRule.KEY, "WARNING"); System.setProperty( "drools.kbuilder.severity." + DuplicateFunction.KEY, "ERROR"); final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr1 = createBasicPackageWithOneRule(11, 1); final PackageDescr packageDescr2 = createBasicPackageWithOneRule(22, 2); builder.addPackage(packageDescr1); builder.addPackage(packageDescr2); builder.addPackageFromDrl( new StringReader( "package foo \n rule ORB" ) ); builder.addPackageFromDrl( new StringReader( "package org.drools\n" + "function boolean testIt() {\n" + " return true;\n" + "}\n" ) ); builder.addPackageFromDrl( new StringReader( "package org.drools\n" + "function boolean testIt() {\n" + " return false;\n" + "}\n" ) ); assertTrue(builder.hasWarnings()); assertTrue(builder.hasErrors()); builder.resetProblems(); assertFalse(builder.hasWarnings()); assertFalse(builder.hasErrors()); }
@Test public void testPackageMerge() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); try { builder.addPackage( new PackageDescr( "org.drools" ) ); builder.addPackageFromDrl( new StringReader( "package org.drools\n" + "function boolean testIt() {\n" + " return true;\n" + "}\n" ) ); } catch ( RuntimeException e ) { fail( "Should not raise any exception: " + e.getMessage() ); } }
@Test public void testResetWarningsButNotErrors() throws DroolsParserException, IOException { System.setProperty( "drools.kbuilder.severity." + DuplicateRule.KEY, "WARNING"); System.setProperty( "drools.kbuilder.severity." + DuplicateFunction.KEY, "ERROR"); final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr1 = createBasicPackageWithOneRule(11, 1); final PackageDescr packageDescr2 = createBasicPackageWithOneRule(22, 2); builder.addPackage(packageDescr1); builder.addPackage(packageDescr2); builder.addPackageFromDrl( new StringReader( "package foo \n rule ORB" ) ); builder.addPackageFromDrl( new StringReader( "package org.drools\n" + "function boolean testIt() {\n" + " return true;\n" + "}\n" ) ); builder.addPackageFromDrl( new StringReader( "package org.drools\n" + "function boolean testIt() {\n" + " return false;\n" + "}\n" ) ); assertTrue(builder.hasWarnings()); assertTrue(builder.hasErrors()); builder.resetWarnings(); assertFalse(builder.hasWarnings()); assertTrue(builder.hasErrors()); }
@Test public void testRuleFlow() throws Exception { builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.drl" ) ) ); builder.addRuleFlow( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.rfm" ) ) ); KieSession workingMemory = createKieSession(true, builder.getPackages()); final List<String> list = new ArrayList<String>(); workingMemory.setGlobal( "list", list ); workingMemory.fireAllRules(); assertEquals( 0, list.size() ); final ProcessInstance processInstance = workingMemory.startProcess( "0" ); assertEquals( ProcessInstance.STATE_COMPLETED, processInstance.getState() ); assertEquals( 4, list.size() ); assertEquals( "Rule1", list.get( 0 ) ); list.subList(1,2).contains( "Rule2" ); list.subList(1,2).contains( "Rule3" ); assertEquals( "Rule4", list.get( 3 ) ); }
@Test public void testSerializable() throws Exception { final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); back.getName() ); builder.addPackage( packageDescr ); InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName()); final RuleImpl rule = pkg.getRule( "rule-1" ); builder.getErrors().getErrors() ); final RuleImpl newRule = newPkg.getRule( "rule-1" ); InternalKnowledgeBase kBase = (InternalKnowledgeBase)KnowledgeBaseFactory.newKnowledgeBase(); newPkg.getDialectRuntimeRegistry().onAdd( kBase.getRootClassLoader() ); newPkg.getDialectRuntimeRegistry().onBeforeExecute(); kBase.getGlobals().put( "map", Map.class ); final KieSession workingMemory = kBase.newKieSession(); workingMemory.setGlobal( "map", map ); knowledgeHelper.setActivation( activation );