@Test public void testIncrementalProcessCompilation() throws Exception { String invalidProcessDefinition = getResource( "/BPMN2-Incremental-Build-Invalid.bpmn2" ); String validProcessDefinition = getResource( "/BPMN2-Incremental-Build-Valid.bpmn2" ); KieServices ks = KieServices.Factory.get(); //This process file contains 4 errors KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/p1.bpmn2", invalidProcessDefinition ); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); Results results = kieBuilder.getResults(); assertEquals( 3, results.getMessages( org.kie.api.builder.Message.Level.ERROR ).size() ); //This process file has the errors fixed kfs.write("src/main/resources/p1.bpmn2", validProcessDefinition); IncrementalResults addResults = ((InternalKieBuilder)kieBuilder).createFileSet("src/main/resources/p1.bpmn2").build(); //I'd expect the 4 previous errors to be cleared assertEquals( 0, addResults.getAddedMessages().size() ); assertEquals( 3, addResults.getRemovedMessages().size() ); }
KieServices kieServices = KieServices.Factory.get(); KieResources kieResources = kieServices.getResources(); KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); if (!ConfigUtils.isEmptyCollection(scoreDrlList)) { ClassLoader actualClassLoader = configContext.determineActualClassLoader(); kieFileSystem.write(kieResources.newClassPathResource(scoreDrl, "UTF-8", actualClassLoader)); + ") does not exist."); kieFileSystem.write(kieResources.newFileSystemResource(scoreDrlFile, "UTF-8")); KieModuleModel kmodel = kieServices.newKieModuleModel() .setConfigurationProperty(PropertySpecificOption.PROPERTY_NAME, PropertySpecificOption.ALLOWED.toString()); kieFileSystem.writeKModuleXML(kmodel.toXML()); kieContainer = kieServices.newKieContainer(kieBuilder.getKieModule().getReleaseId()); KieBaseConfiguration kieBaseConfiguration = kieServices.newKieBaseConfiguration(); KieBase kieBase = kieContainer.newKieBase(kieBaseConfiguration); if (BooleanUtils.isTrue(generateDroolsTestOnError)) { return new TestGenLegacyDroolsScoreDirectorFactory<>(solutionDescriptor, kieBase, scoreDrlList, scoreDrlFileList);
protected InternalKieModule createKieJar(KieServices ks, ReleaseId releaseId, List<String> resources ) { KieFileSystem kfs = createKieFileSystemWithKProject(ks); kfs.writePomXML( getPom(releaseId) ); for (String resource : resources) { kfs.write("src/main/resources/rules/" + resource, ResourceFactory.newClassPathResource(resource)); } KieBuilder kieBuilder = ks.newKieBuilder(kfs); if (!kieBuilder.buildAll().getResults().getMessages().isEmpty()) { for (Message message : kieBuilder.buildAll().getResults().getMessages()) { logger.error("Error Message: ({}) {}", message.getPath(), message.getText()); } throw new RuntimeException( "There are errors builing the package, please check your knowledge assets!"); } return ( InternalKieModule ) kieBuilder.getKieModule(); }
@Test public void testHelloWorldWithPackages() throws Exception { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.kie", "hello-world", "1.0"); KieFileSystem kfs = ks.newKieFileSystem() .generateAndWritePomXML( releaseId ) .write( "src/main/resources/KBase1/org/pkg1/r1.drl", createDrl( "R1" ) ) .write( "src/main/resources/KBase1/org/pkg2/r2.drl", createDrl( "R2" ) ) .writeKModuleXML( createKieProjectWithPackages( ks, "org.pkg1" ).toXML() ); ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer(releaseId).newKieSession("KSession1"); ksession.insert(new Message("Hello World")); int count = ksession.fireAllRules(); assertEquals( 1, count ); }
@Test public void testWildcardImportForTypeField() throws Exception { // DROOLS-348 String drl = "import java.util.*\n" + "declare MyType\n" + " l : List\n" + "end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession(); }
@Test public void testAutomaticallySwitchFromReteOOToPhreak() { String str = "rule R when then end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( "src/main/resources/rule.drl", str ); KieBuilder kbuilder = ks.newKieBuilder( kfs ); kbuilder.buildAll(); assertEquals( 0, kbuilder.getResults().getMessages().size() ); KieBase kbase = ks.newKieContainer( kbuilder.getKieModule().getReleaseId() ).getKieBase(); KieSession ksession = kbase.newKieSession(); ksession.fireAllRules(); }
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(); } }
KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = kieServices.newKieFileSystem(); FileInputStream fis = new FileInputStream( pathToSomeDrl ); kfs.write( "src/main/resources/simple.drl", kieServices.getResources().newInputStreamResource( fis ) ); KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll(); Results results = kieBuilder.getResults(); if( results.hasMessages( Message.Level.ERROR ) ){ System.out.println( results.getMessages() ); throw new IllegalStateException( "### errors ###" ); } KieContainer kieContainer = kieServices.newKieContainer( kieServices.getRepository().getDefaultReleaseId() ); KieBase kieBase = kieContainer.getKieBase(); KieSession kieSession = kieContainer.newKieSession();
@Test public void testGetKieBaseAfterKieSessionCreation() { final String KBASE_NAME = "kieBase"; final String KSESSION_NAME = "kieSession"; final String drl = "declare TestEvent\n" + " @role( event )\n" + " name : String\n" + "end\n" + "\n" + "declare window DeclaredTimeWindow\n" + " TestEvent ( name == \"timeDec\" ) over window:time( 50ms ) from entry-point EventStream\n" + "end"; final KieServices ks = KieServices.Factory.get(); final KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( "src/main/resources/window.drl", drl ); final KieModuleModel kmoduleModel = ks.newKieModuleModel(); kmoduleModel.newKieBaseModel( KBASE_NAME ) .addPackage( "*" ) .newKieSessionModel( KSESSION_NAME ) .setDefault( true ) .setClockType( ClockTypeOption.get( "pseudo" ) ); kfs.writeKModuleXML( kmoduleModel.toXML() ); final KieBuilder builder = ks.newKieBuilder( kfs ).buildAll(); assertEquals( 0, builder.getResults().getMessages().size() ); ks.getRepository().addKieModule( builder.getKieModule() ); final KieSession kieSession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession( KSESSION_NAME ); assertNotNull( kieSession ); final KieBase kieBase = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).getKieBase( KBASE_NAME ); assertNotNull( kieBase ); }
KieServices ks = KieServices.Factory.get(); ReleaseId releaseId1 = ks.newReleaseId("org.kie", "rules-1", "1.0.0"); ReleaseId releaseId2 = ks.newReleaseId("org.kie", "rules-2", "1.0.0"); KieFileSystem kfs2 = ks.newKieFileSystem() .generateAndWritePomXML(releaseId2) .write("src/main/resources/rules/rules.drl", drl2) .writeKModuleXML(kmoduleContent2); ks.newKieBuilder(kfs2).buildAll(); KieFileSystem kfs1 = ks.newKieFileSystem() .writePomXML(pomContent1) .write("src/main/resources/rules/rules.drl", drl1) .writeKModuleXML(kmoduleContent1); ks.newKieBuilder(kfs1).buildAll(); KieContainer kc = ks.newKieContainer(releaseId1); KieBase kieBase = kc.getKieBase();
KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.generateAndWritePomXML( ks.newReleaseId( "test", "foo", "1.0" ) ); KieModuleModel km = ks.newKieModuleModel(); km.newKieBaseModel( "rules" ) .addPackage( "org.drools.compiler.test2" ) .addPackage( "org.drools.compiler.test1" ); kfs.writeKModuleXML( km.toXML() ); KieResources kr = ks.getResources(); .setSourcePath( "org/drools/compiler/test2/p2.drl" ); kfs.write( r1 ); kfs.write( r2 ); KieBuilder builder = ks.newKieBuilder( kfs ); builder.buildAll(); assertEquals( Collections.emptyList(), builder.getResults().getMessages( Message.Level.ERROR ) ); KieContainer kc = ks.newKieContainer(builder.getKieModule().getReleaseId()); FactType ft = kc.getKieBase( "rules" ).getFactType( "org.drools.compiler.test2", "Child" );
private void testInvalid(final String drl) { final KieServices ks = KieServices.Factory.get(); final KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); final Results results = ks.newKieBuilder( kfs ).buildAll().getResults(); assertTrue( results.hasMessages( Message.Level.ERROR ) ); }
@Bean public KieContainer kieShippingDecisionContainer() { KieServices kieServices = KieServices.Factory.get(); KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); kieFileSystem.write(ResourceFactory.newClassPathResource(SHIPPING_DECISION)); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); kieBuilder.buildAll(); KieModule kieModule = kieBuilder.getKieModule(); return kieServices.newKieContainer(kieModule.getReleaseId()); }
public static byte[] createJar(KieServices ks, String kmoduleContent, Predicate<String> classFilter, ReleaseId releaseId, Resource... resources) { KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML(releaseId).writeKModuleXML(kmoduleContent); for (int i = 0; i < resources.length; i++) { if (resources[i] != null) { kfs.write(resources[i]); } } KieBuilder kieBuilder = ks.newKieBuilder(kfs); ((InternalKieBuilder) kieBuilder).buildAll(classFilter); Results results = kieBuilder.getResults(); if (results.hasMessages(Message.Level.ERROR)) { throw new IllegalStateException(results.getMessages(Message.Level.ERROR).toString()); } InternalKieModule kieModule = (InternalKieModule) ks.getRepository() .getKieModule(releaseId); byte[] jar = kieModule.getBytes(); return jar; }
"}"; final KieServices ks = KieServices.Factory.get(); final ReleaseId kjarReleaseId = ks.newReleaseId("org.kie.dmn.core.classloader", "testClassloaderFunctionInvocation", UUID.randomUUID().toString()); final ReleaseId commonsMathGAV = ks.newReleaseId("org.apache.commons", "commons-math3", "3.6.1"); final KieFileSystem kfs = ks.newKieFileSystem(); kfs.write("src/main/java/com/acme/functions/StandardDeviation.java", javaSource); kfs.write(ks.getResources().newClassPathResource("Standard Deviation.dmn", this.getClass())); kfs.writePomXML(getPom(kjarReleaseId, commonsMathGAV)); final KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll(); assertTrue(kieBuilder.getResults().getMessages().toString(), kieBuilder.getResults().getMessages().isEmpty()); final KieContainer container = ks.newKieContainer(kjarReleaseId); final DMNRuntime runtime = container.newKieSession().getKieRuntime(DMNRuntime.class); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_48c4b6e2-25da-44bc-97b2-1e842ff28c71", "Standard Deviation"); assertThat(dmnModel, notNullValue());
@Test(expected = IllegalStateException.class) public void testAPIUsageSnippetForDocumentation() { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.kie", "dmn-test-" + UUID.randomUUID(), "1.0"); Resource dmnResource = ks.getResources().newClassPathResource("incomplete_expression.dmn", this.getClass()); KieFileSystem kfs = ks.newKieFileSystem() .generateAndWritePomXML(releaseId) .write(dmnResource); KieBuilder kieBuilder = ks.newKieBuilder(kfs) .buildAll(); Results results = kieBuilder.getResults(); if (results.hasMessages(Message.Level.ERROR)) { throw new IllegalStateException(results.getMessages(Message.Level.ERROR).toString()); } } }
public static byte[] createKJar(KieServices ks, ReleaseId releaseId, Resource pom, Resource... resources) { KieFileSystem kfs = ks.newKieFileSystem(); if (pom != null) { kfs.write(pom); } else { kfs.generateAndWritePomXML(releaseId); } for (int i = 0; i < resources.length; i++) { if (resources[i] != null) { kfs.write(resources[i]); } } ks.newKieBuilder(kfs).buildAll(); InternalKieModule kieModule = (InternalKieModule) ks.getRepository() .getKieModule(releaseId); byte[] jar = kieModule.getBytes(); return jar; }
@Test public void testSerializationUntrustedMvelConsequence() { String drl = "package org.foo.bar\n" + "rule R1 dialect \"mvel\" when\n" + "then\n" + " System.exit(0);" + "end\n"; try { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write(ResourceFactory.newByteArrayResource(drl.getBytes()) .setSourcePath("org/foo/bar/r1.drl")); ks.newKieBuilder(kfs).buildAll(); ReleaseId releaseId = ks.getRepository().getDefaultReleaseId(); KieContainer kc = ks.newKieContainer(releaseId); KieBase kbase = kc.getKieBase(); kbase = SerializationHelper.serializeObject( kbase ); } catch (Exception e) { e.printStackTrace(); Assert.fail(e.toString()); // test succeeded. the policy in place prevented the rule from executing the System.exit(). } }
@Test public void testClassLoaderStore() throws Exception { // DROOLS-1766 String drl = "package org; declare Person name : String end"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); ks.newKieBuilder( kfs ).buildAll(); KieContainer kcontainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()); KieProject kieProject = (( KieContainerImpl ) kcontainer).getKieProject(); ResultsImpl messages = kieProject.verify(); assertSame( kieProject.getClassLoader(), kcontainer.getClassLoader() ); ProjectClassLoader pcl = (( ProjectClassLoader ) kieProject.getClassLoader()); assertNotNull( pcl.getStore().get("org/Person.class") ); }
@Test public void testVeyifyNotExistingKieBase() throws Exception { // DROOLS-2757 KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", createDrl( "R1" ) ); ks.newKieBuilder( kfs ).buildAll(); KieContainer kieContainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()); try { kieContainer.verify( "notexistingKB" ); fail("Verifying a not existing KieBase should throw a RuntimeException"); } catch (RuntimeException e) { assertTrue( e.getMessage().contains( "notexistingKB" ) ); } }