@Test(timeout = 10000L) public void testSequentialWithNoLoop() throws Exception { // BZ-1228098 String str = "package org.drools.compiler.test\n" + "import \n" + Message.class.getCanonicalName() + ";" + "rule R1 no-loop when\n" + " $s : String( )" + " $m : Message( )\n" + "then\n" + " modify($m) { setMessage($s) };\n" + "end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write("src/main/resources/r0.drl", str); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); Results results = kieBuilder.getResults(); if (results.hasMessages( org.kie.api.builder.Message.Level.ERROR)) { throw new RuntimeException(results.getMessages().toString()); } KieContainer kieContainer = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ); KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration(); kieBaseConf.setOption( SequentialOption.YES ); StatelessKieSession sequentialKsession = kieContainer.newKieBase( kieBaseConf ).newStatelessKieSession(); List result = (List) sequentialKsession.execute( CommandFactory.newInsertElements(Arrays.asList("test", new Message()))); assertEquals( 2, result.size() ); StatelessKieSession ksession = kieContainer.getKieBase().newStatelessKieSession(); result = (List) ksession.execute( CommandFactory.newInsertElements(Arrays.asList("test", new Message()))); assertEquals( 2, result.size() ); }
ksession.setGlobal( "list", list ); commands.add( CommandFactory.newInsert( student )); commands.add(CommandFactory.newFireAllRules()); ksession.execute(CommandFactory.newBatchExecution(commands));
@Override public Globals getGlobals() { return delegate.getGlobals(); }
@Test public void testRegisterAgendaEventListenerStateless() throws Exception { statelessKieSession.execute(KieServices.Factory.get().getCommands().newInsert("test")); checkThatListenerFired(statelessKieSession.getAgendaEventListeners()); }
@Test public void testRegisterRuleEventListenerStateless() throws Exception { statelessKieSession.execute(KieServices.Factory.get().getCommands().newInsert("test")); checkThatListenerFired(statelessKieSession.getRuleRuntimeEventListeners()); }
@Test public void testSimpleKSessions() throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("org/drools/container/spring/beans.xml"); List<String> list = new ArrayList<String>(); StatelessKieSession kstateless = (StatelessKieSession) context.getBean( "ksession1" ); kstateless.setGlobal( "list", list ); kstateless.execute( new Person( "Darth", "Cheddar", 50 ) ); assertEquals( 2, list.size() ); list = new ArrayList<String>(); KieSession kstateful = ((KieSession) context.getBean( "ksession2" )); kstateful.setGlobal( "list", list ); kstateful.insert( new Person( "Darth", "Cheddar", 50 ) ); kstateful.fireAllRules(); assertEquals( 2, list.size() ); }
KieServices ks = KieServices.Factory.get(); KieModuleModel kproj = ks.newKieModuleModel(); .setType( KieSessionModel.KieSessionType.STATELESS ); assertFalse( aggrMonitor.getStatsByRule().containsKey("ND2") ); checkStatsByRule(aggrMonitor,"ND2",1,0,1); assertFalse( aggrMonitor2.getStatsByRule().containsKey("ND2") ); stateless.execute("Ciao"); print(aggrMonitor2); checkAgendaTotals(aggrMonitor2, 2, 1, 1); checkStatsByRule(aggrMonitor2,"ND2",1,0,1); stateless.execute("Ciao"); print(aggrMonitor2); checkAgendaTotals(aggrMonitor2, 4, 2, 2); checkTotalSessions(aggrMonitor2, 2); stateless2.execute("Ciao"); print(aggrMonitor2); checkAgendaTotals(aggrMonitor2, 6, 3, 3);
@Test public void testDeclarativeKieConsoleLoggerStateless() throws Exception { String drl = "package org.drools.integrationtests\n" + "import org.drools.compiler.Message;\n" + "rule \"Hello World\"\n" + " when\n" + " m : Message( myMessage : message )\n" + " then\n" + "end"; KieServices ks = KieServices.Factory.get(); KieModuleModel kproj = ks.newKieModuleModel(); kproj.newKieBaseModel("KBase1") .newKieSessionModel("KSession1") .setType(KieSessionModel.KieSessionType.STATELESS) .setConsoleLogger("logger"); KieFileSystem kfs = ks.newKieFileSystem(); kfs.writeKModuleXML(kproj.toXML()); kfs.write("src/main/resources/KBase1/rule.drl", drl); KieModule kieModule = ks.newKieBuilder(kfs).buildAll().getKieModule(); KieContainer kieContainer = ks.newKieContainer(kieModule.getReleaseId()); StatelessKieSession ksession = kieContainer.newStatelessKieSession("KSession1"); ksession.execute( new Message("Hello World") ); KieRuntimeLogger logger = ksession.getLogger(); assertNotNull(logger); logger.close(); }
@Test public void zeroRulesFiredTest() { String str = ""; str += "package org.drools.compiler.integrationtests \n"; str += "import " + Cheese.class.getCanonicalName() + " \n"; str += "rule StringRule \n"; str += " when \n"; str += " $c : Cheese() \n"; str += " then \n"; str += " System.out.println($c); \n"; str += "end \n"; StatelessKieSession ksession = getSession(str); List<Command<?>> commands = new ArrayList<Command<?>>(); commands.add(CommandFactory.newInsert("not cheese")); commands.add(CommandFactory.newFireAllRules("num-rules-fired")); ExecutionResults results = ksession.execute(CommandFactory.newBatchExecution(commands)); int fired = Integer.parseInt(results.getValue("num-rules-fired").toString()); assertEquals(0, fired); }
"</kmodule>"; final KieServices ks = KieServices.Factory.get(); final ReleaseId releaseId1 = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" ); final Resource r1 = ResourceFactory.newByteArrayResource( drl1.getBytes() ).setResourceType( ResourceType.DRL ).setSourcePath( "kbase1/drl1.drl" ); final KieModule km = createAndDeployJar( ks, r1); KieContainer kieContainer = ks.newKieContainer( km.getReleaseId()); assertEquals(1, statelessKieSession.getChannels().size()); assertTrue(statelessKieSession.getChannels().keySet().contains("testChannel"));
@Override public void execute( Iterable objects ) { KieCommands kieCommands = KieServices.Factory.get().getCommands(); List<Command<?>> cmds = new ArrayList<Command<?>>(); cmds.addAll( commands ); for ( Object object : objects ) { cmds.add( kieCommands.newInsert( object ) ); } cmds.add( kieCommands.newFireAllRules() ); delegate.execute( CommandFactory.newBatchExecution( cmds ) ); } }
@Test public void tessDefaultDynamicKBase() throws IOException, ClassNotFoundException, InterruptedException { assertNotNull( defaultDynamicSKSession ); KieCommands cmds = KieServices.Factory.get().getCommands(); List<String> list = new ArrayList<String>(); defaultDynamicSKSession.setGlobal( "list", list ); defaultDynamicSKSession.execute( cmds.newFireAllRules() ); assertEquals( 2, list.size() ); assertTrue( list.get(0).endsWith( "1.0" ) ); assertTrue( list.get(1).endsWith( "1.0" ) ); }
cmds.add( CommandFactory.newInsert( stilton1 ) ); cmds.add( CommandFactory.newInsert( stilton2 ) ); cmds.add( CommandFactory.newInsert( stilton3 ) ); cmds.add( CommandFactory.newInsert( cheddar1 ) ); cmds.add( CommandFactory.newInsert( cheddar2 ) ); cmds.add( CommandFactory.newQuery( "cheeses", "cheeses" ) ); final ExecutionResults batchResult = (ExecutionResults) ksession.execute( CommandFactory.newBatchExecution( cmds ) ); final org.kie.api.runtime.rule.QueryResults results = ( org.kie.api.runtime.rule.QueryResults) batchResult.getValue( "cheeses" ); assertEquals( 3, results.size() ); assertEquals( 2, results.getIdentifiers().length );
@Test public void testKSessionLoggersFromGroupAndNested() throws Exception { StatelessKieSession statelessKnowledgeSession = (StatelessKieSession) context.getBean( "k1" ); StatelessKnowledgeSessionImpl impl = (StatelessKnowledgeSessionImpl)statelessKnowledgeSession; assertEquals(2, impl.mappedWorkingMemoryListeners.values().size()); List list = new ArrayList(); statelessKnowledgeSession.setGlobal("list", list); assertNotNull(statelessKnowledgeSession.getGlobals().get("list")); statelessKnowledgeSession.execute(new Person("Darth", "Cheddar", 50)); KnowledgeLoggerAdaptor adaptor = (KnowledgeLoggerAdaptor) context.getBean("k1_logger"); assertNotNull(adaptor); assertNotNull(adaptor.getRuntimeLogger()); adaptor.close(); adaptor = (KnowledgeLoggerAdaptor) context.getBean("k1_console_logger"); assertNotNull(adaptor); assertNotNull(adaptor.getRuntimeLogger()); }
@Test public void testStatelessWMEventListener() throws Exception { StatelessKieSession kstateless = (StatelessKieSession) context.getBean("statelessSession"); assertEquals(1, kstateless.getWorkingMemoryEventListeners().size()); assertTrue(kstateless.getWorkingMemoryEventListeners().toArray()[0] instanceof MockWorkingMemoryEventListener); kstateless.setGlobal("list", list); kstateless.execute(new Person()); //this assert to show that our listener was called X number of times. // once from agenda listener, and second from working memory event listener assertEquals(2, counterFromListener); }
ksession.setGlobal( "list", list ); ksession.execute( CommandFactory.newInsertElements(Arrays.asList(data))); System.out.println( "Time for " + message + ":" + (System.currentTimeMillis() - start) ); assertTrue( list.size() > 0 ); StatelessKieSession sess2 = createStatelessKnowledgeSession( kbase ); List list2 = new ArrayList(); sess2.setGlobal( "list", list2 ); sess2.execute( CommandFactory.newInsertElements(Arrays.asList(data)));
protected void handleStateless(WorkItem workItem, String kieSessionName, Map<String, Object> parameters, Map<String, Object> results) { logger.debug("Evaluating rules in stateless session with name {}", kieSessionName); StatelessKieSession kieSession = kieContainer.newStatelessKieSession(kieSessionName); List<Command<?>> commands = new ArrayList<Command<?>>(); for (Entry<String, Object> entry : parameters.entrySet()) { String inputKey = workItem.getId() + "_" + entry.getKey(); commands.add(commandsFactory.newInsert(entry.getValue(), inputKey, true, null)); } commands.add(commandsFactory.newFireAllRules("Fired")); BatchExecutionCommand executionCommand = commandsFactory.newBatchExecution(commands); ExecutionResults executionResults = kieSession.execute(executionCommand); logger.debug("{} rules fired", executionResults.getValue("Fired")); for (Entry<String, Object> entry : parameters.entrySet()) { String inputKey = workItem.getId() + "_" + entry.getKey(); String key = entry.getKey().replaceAll(workItem.getId() + "_", ""); results.put(key, executionResults.getValue(inputKey)); } }
@Override public <T> T execute( Command<T> command ) { KieCommands kieCommands = KieServices.Factory.get().getCommands(); List<Command<?>> cmds = new ArrayList<Command<?>>(); cmds.addAll( commands ); cmds.add( command ); return (T) delegate.execute( CommandFactory.newBatchExecution( cmds ) ); }