protected KieBase createKnowledgeBaseFromResources(Resource... cases) throws Exception { KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); if (cases.length > 0) { KieFileSystem kfs = ks.newKieFileSystem(); for (Resource c : cases) { kfs.write(c); } KieBuilder kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository // if successfully built. if (kb.getResults().hasMessages(Level.ERROR)) { throw new RuntimeException("Build Errors:\n" + kb.getResults().toString()); } } KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); return kContainer.getKieBase(); } }
@Test public void testSignalStartDynamic() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SignalStart.bpmn2"); ksession = createKnowledgeSession(kbase); // create KieContainer after session was created to make sure no runtime data // will be used during serialization (deep clone) KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); kContainer.getKieBase(); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void beforeProcessStarted(ProcessStartedEvent event) { logger.info("{}", event.getProcessInstance().getId()); list.add(event.getProcessInstance().getId()); } }); ksession.signalEvent("MySignal", "NewValue"); assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); // now remove the process from kbase to make sure runtime based listeners are removed from signal manager kbase.removeProcess("Minimal"); assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> { ksession.signalEvent("MySignal", "NewValue"); }) .withMessageContaining("Unknown process ID: Minimal"); // must be still one as the process was removed assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); }
KieMavenRepository repository = KieMavenRepository.getKieMavenRepository(); repository.resolveArtifact(releaseId.toExternalForm()); KieServices ks = KieServices.Factory.get(); KieContainer kieContainer = ks.newKieContainer(releaseId); throw new IllegalStateException("Cannot find kbase, either it does not exist or there are multiple default kbases in kmodule.xml"); KieBase kbase = kieContainer.getKieBase(kbaseName);
@Test public void testEventOffset() throws Exception { String drl = "package org.drools.compiler.test\n" + "end"; KieServices ks = KieServices.Factory.get(); createKJar( ks, kproj, releaseId1, null, drl ); KieContainer kc = ks.newKieContainer( releaseId1 ); KieBase kiebase = kc.getKieBase( KBASE1 ); MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer(); assertEquals( 10001, ((Number) expOffset).longValue() );
@Test public void testKieClasspathMBeans() throws Exception { MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer(); KieServices ks = KieServices.Factory.get(); DroolsManagementAgent.createObjectNameBy("myID"), KieContainerMonitorMXBean.class); KieBase kb = kc.getKieBase("org.kie.monitoring.kbase1"); KieSession statefulKieSession = kc.newKieSession("org.kie.monitoring.kbase1.ksession1"); StatelessKieSession statelessKieSession = kc.newStatelessKieSession("org.kie.monitoring.kbase1.ksession2"); StatelessKieSessionMonitoringMXBean.class); assertEquals("myID", c1Monitor.getContainerId() ); assertTrue(c1Monitor.getConfiguredReleaseId().sameGAVof(KieContainerMonitorMXBean.CLASSPATH_KIECONTAINER_RELEASEID)); assertTrue(c1Monitor.getResolvedReleaseId().sameGAVof(KieContainerMonitorMXBean.CLASSPATH_KIECONTAINER_RELEASEID)); assertEquals("org.kie.monitoring.kbase1.ksession1", statefulKieSessionMonitor.getKieSessionName()); assertEquals("org.kie.monitoring.kbase1", statefulKieSessionMonitor.getKieBaseId()); assertEquals("org.kie.monitoring.kbase1.ksession1", statelessKieSessionMonitor.getKieSessionName()); assertEquals("org.kie.monitoring.kbase1", statelessKieSessionMonitor.getKieBaseId()); DroolsManagementAgent.createObjectNameBy("myID2"), KieContainerMonitorMXBean.class); KieBase kb2 = kc2.getKieBase("org.kie.monitoring.kbase1"); KieSession statefulKieSession2 = kc2.newKieSession("org.kie.monitoring.kbase1.ksession1"); StatelessKieSession statelessKieSession2 = kc2.newStatelessKieSession("org.kie.monitoring.kbase1.ksession2");
@Test public void testXSDResourceNotBreakingCompilation() { final KieContainer kcontainer = KieServices.Factory.get().getKieClasspathContainer(); final KieBase kieBase = kcontainer.getKieBase("xsdKieBase"); Assertions.assertThat(kieBase).as("Created KieBase with XSD should not be null").isNotNull(); }
public void createAndTestKieContainer(ReleaseId releaseId, KieBuilder kb, String kBaseName) throws IOException, ClassNotFoundException, InterruptedException { KieServices ks = KieServices.Factory.get(); kb.buildAll(); if ( kb.getResults().hasMessages(Level.ERROR) ) { fail("Unable to build KieModule\n" + kb.getResults( ).toString() ); } KieRepository kr = ks.getRepository(); KieModule kJar = kr.getKieModule(releaseId); assertNotNull( kJar ); KieContainer kContainer = ks.newKieContainer(releaseId); KieBase kBase = kBaseName != null ? kContainer.getKieBase( kBaseName ) : kContainer.getKieBase(); KieSession kSession = kBase.newKieSession(); List list = new ArrayList(); kSession.setGlobal( "list", list ); kSession.fireAllRules(); assertEquals( 1, list.size() ); assertEquals( "org.kie.test.Message", list.get(0).getClass().getName() ); }
} else { //inject knowledge base from classpath container if (classpathContainer == null) { ks = KieServices.Factory.get(); classpathContainer = ks.getKieClasspathContainer(); knowledgeBase = classpathContainer.getKieBase(annotation.value());
protected KieBase createKnowledgeBaseFromResources(Resource... process) throws Exception { KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); if (process.length > 0) { KieFileSystem kfs = ks.newKieFileSystem(); for (Resource p : process) { kfs.write(p); } KieBuilder kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository // if successfully built. if (kb.getResults().hasMessages(Level.ERROR)) { throw new RuntimeException("Build Errors:\n" + kb.getResults().toString()); } } KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); return kContainer.getKieBase(); }
@Test public void testPositionalArguments() throws InstantiationException, IllegalAccessException { String drl = "package org.test;\n" + "global java.util.List names;\n" + "declare Person\n" + " name : String\n" + " age : int\n" + "end\n" + "rule R when \n" + " $p : Person( \"Mark\", 37; )\n" + "then\n" + " names.add( $p.getName() );\n" + "end\n"; KieBuilder kieBuilder = build(drl); assertFalse(kieBuilder.getResults().hasMessages(Message.Level.ERROR)); KieBase kieBase = KieServices.Factory.get().newKieContainer( kieBuilder.getKieModule().getReleaseId() ).getKieBase(); FactType factType = kieBase.getFactType( "org.test", "Person" ); Object instance = factType.newInstance(); factType.set(instance, "name", "Mark"); factType.set(instance, "age", 37); List<String> names = new ArrayList<String>(); KieSession ksession = kieBase.newKieSession(); ksession.setGlobal("names", names); ksession.insert(instance); ksession.fireAllRules(); assertEquals( 1, names.size() ); assertEquals( "Mark", names.get( 0 ) ); }
@Test public void testPreserveAllSetBitMask() { KieBase kieBase = helper.addContent( drl, ResourceType.DRL ).getKieContainer().getKieBase(); assertFalse( e.hasTrait( "t.x.E" ) ); assertFalse( e.hasTrait( "t.x.F" ) ); assertEquals( 0, ( (List) e._getDynamicProperties().get( "objProp" ) ).size() ); } else if ( e.getId().equals( "Y" ) ) { assertTrue( e.hasTrait( "t.x.F" ) );
@Test( expected = UnsupportedOperationException.class ) public void testPreventReflectionAPIsOnJavaClasses() { String drl = "package org.test; " + // existing java class "declare org.drools.compiler.Person " + " @role(event) " + "end \n" + ""; KieBuilder kieBuilder = build(drl); assertFalse( kieBuilder.getResults().hasMessages( Message.Level.ERROR ) ); KieBase kieBase = KieServices.Factory.get().newKieContainer( kieBuilder.getKieModule().getReleaseId() ).getKieBase(); FactType type = kieBase.getFactType( "org.drools.compiler", "Person" ); }
@Test public void createMultpleJarAndFileResources() throws IOException, ClassNotFoundException, KieModuleModel kProjModel4 = createKieModule( "fol4", false ); ReleaseId releaseId1 = KieServices.Factory.get().newReleaseId("jar1", "art1", "1.0-SNAPSHOT"); ReleaseId releaseId2 = KieServices.Factory.get().newReleaseId("jar2", "art1", "1.0-SNAPSHOT"); ReleaseId releaseId3 = KieServices.Factory.get().newReleaseId("jar3", "art1", "1.0-SNAPSHOT"); null ); KieBase kBase = kContainer.getKieBase( "jar1.KBase1" ); ClassLoader cl = ((KnowledgeBaseImpl) kBase).getRootClassLoader();
protected Object getResourceToInject(Object target, String requestingBeanName) { if (StringUtils.isEmpty(name)) { //check for default KieBase in the current KieContainer KieContainer kieContainer = kieContainerMap.get(getReleaseId()); if ( kieContainer == null){ kieContainer = KieServices.Factory.get().newKieContainer(getReleaseId()); kieContainerMap.put(releaseId, kieContainer); } return kieContainer.getKieBase(); } if( getReleaseId().equals(AnnotationsPostProcessor.this.getReleaseId())) { return beanFactory.getBean(name); } else { KieContainer kieContainer = kieContainerMap.get(getReleaseId()); if ( kieContainer == null){ kieContainer = KieServices.Factory.get().newKieContainer(getReleaseId()); kieContainerMap.put(releaseId, kieContainer); } return kieContainer.getKieBase(name); } }
KieServices ks = KieServices.Factory.get(); KieContainer kc = ks.newKieClasspathContainer(); Results messages = kc.verify(); KieBase kb = kc.getKieBase(kbase); getLog().info("Writing KBase: " + kbase); File file = new File(outputFolder, kbase.replace('.', '_').toLowerCase());
protected KieBase createKnowledgeBaseFromDisc(String process) throws Exception { KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write(res); KieBuilder kb = ks.newKieBuilder(kfs); KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); KieBase kbase = kContainer.getKieBase(); kfs.write(ResourceFactory.newFileResource(packageFile)); kb = ks.newKieBuilder(kfs); kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); kbase = kContainer.getKieBase();
@Test public void testKieModuleDependencies() throws ClassNotFoundException, InterruptedException, IOException { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId1 = KieServices.Factory.get().newReleaseId(namespace1, "memory", "1.0"); KieModuleModel kProj1 = createKieProject(namespace1); KieFileSystem kfs1 = KieServices.Factory.get().newKieFileSystem(); generateAll(kfs1, namespace1, releaseId1, kProj1); kieBase2.addInclude( namespace1 ); KieFileSystem kfs2 = KieServices.Factory.get().newKieFileSystem(); generateAll(kfs2, namespace2, releaseId2, kProj2); assertNotNull( kModule2); KieContainer kContainer = ks.newKieContainer(releaseId2); KieBase kBase = kContainer.getKieBase( namespace2 ); kSession.fireAllRules(); assertEquals( 2, list.size() ); if ("org.kie.test1.Message".equals(list.get(0).getClass().getName())) { assertEquals( "org.kie.test2.Message", list.get(1).getClass().getName() ); } else { assertEquals( "org.kie.test2.Message", list.get(0).getClass().getName() ); assertEquals( "org.kie.test1.Message", list.get(1).getClass().getName() );
@Test public void testUnknownField() throws InstantiationException, IllegalAccessException { // DROOLS-546 String drl = "package org.test; " + "declare Pet" + " " + "end \n"; KieBuilder kieBuilder = build(drl); assertFalse( kieBuilder.getResults().hasMessages( Message.Level.ERROR ) ); KieBase kieBase = KieServices.Factory.get().newKieContainer( kieBuilder.getKieModule().getReleaseId() ).getKieBase(); FactType factType = kieBase.getFactType("org.test", "Pet"); Object instance = factType.newInstance(); factType.get(instance, "unknownField"); factType.set(instance, "unknownField", "myValue"); }
protected Object getResourceToInject(Object target, String requestingBeanName) { if (StringUtils.isEmpty(name)) { //check for default KieBase in the current KieContainer KieContainer kieContainer = kieContainerMap.get(getReleaseId()); if ( kieContainer == null){ kieContainer = KieServices.Factory.get().newKieContainer(getReleaseId()); kieContainerMap.put(releaseId, kieContainer); } return kieContainer.getKieBase(); } if( getReleaseId().equals(AnnotationsPostProcessor.this.getReleaseId())) { return beanFactory.getBean(name); } else { KieContainer kieContainer = kieContainerMap.get(getReleaseId()); if ( kieContainer == null){ kieContainer = KieServices.Factory.get().newKieContainer(getReleaseId()); kieContainerMap.put(releaseId, kieContainer); } return kieContainer.getKieBase(name); } }
KieServices ks = KieServices.Factory.get(); KieContainer kc = ks.newKieClasspathContainer(); Results messages = kc.verify(); KieBase kb = kc.getKieBase(kbase); getLog().info("Writing KBase: " + kbase); File file = new File(outputFolder, kbase.replace('.', '_').toLowerCase());