@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() ); }
private void checkKModule( final String kmodule, final int expectedErrors ) { final KieServices ks = KieServices.Factory.get(); final ReleaseId releaseId = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" ); final KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML( releaseId ).writeKModuleXML( kmodule ); final KieBuilder kieBuilder = ks.newKieBuilder( kfs ); kieBuilder.buildAll(); final Results results = kieBuilder.getResults(); assertEquals( expectedErrors, results.getMessages( org.kie.api.builder.Message.Level.ERROR ).size() ); assertNotNull(((InternalKieBuilder) kieBuilder ).getKieModuleIgnoringErrors()); }
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; }
@Test public void testIncrementalBuilding() throws Exception { ReleaseId releaseId1 = KieServices.Factory.get().newReleaseId( "org.test", "test", "1.0.0-SNAPSHOT" ); KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); KieBuilder kb = ks.newKieBuilder( kfs ); kfs.generateAndWritePomXML( releaseId1 ); kfs.write( ResourceFactory.newClassPathResource( source1 ).setResourceType( ResourceType.PMML ) ); kb.buildAll(); KieContainer kc = ks.newKieContainer( releaseId1 ); KieSession kSession = kc.newKieSession(); setKbase( kSession.getKieBase() ); kSession.fireAllRules(); kfs.write( ResourceFactory.newClassPathResource( source2 ).setResourceType( ResourceType.PMML ) ); IncrementalResults results = (( InternalKieBuilder ) kb ).incrementalBuild(); kc.updateToVersion( releaseId1 ); kSession.fireAllRules(); assertEquals( 2, kSession.getObjects( new ClassObjectFilter( ModelMarker.class ) ).size() ); assertEquals( 11, kSession.getObjects( new ClassObjectFilter( kSession.getKieBase().getFactType( packageName, "Synapse" ).getFactClass() ) ).size() ); kSession.dispose(); checkGeneratedRules(); }
String xml1_2 = Helper.createGuidedScoreCardXML(false); KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( "pom.xml", Helper.getPom() ); kfs.write( "src/main/resources/META-INF/kmodule.xml", Helper.getKModule() ); kfs.write( "src/main/resources/sc1.scgd", xml1_1 ); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); final List<Message> messages = kieBuilder.getResults().getMessages(); Helper.dumpMessages( messages ); assertEquals( 0, kfs.write( "src/main/resources/sc1.scgd", xml1_2 ); IncrementalResults results = ( (InternalKieBuilder) kieBuilder ).incrementalBuild();
public static byte[] createJarIgnoringErrors(KieServices ks, ReleaseId releaseId, Resource... resources) { KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML(releaseId); for (int i = 0; i < resources.length; i++) { if (resources[i] != null) { kfs.write(resources[i]); } } KieBuilder kieBuilder = ks.newKieBuilder(kfs); ((InternalKieBuilder) kieBuilder).buildAll(o -> true); InternalKieModule kieModule = (InternalKieModule) ((InternalKieBuilder) kieBuilder).getKieModuleIgnoringErrors(); byte[] jar = kieModule.getBytes(); return jar; } }
final Results kieResults = ((InternalKieBuilder) kieBuilder).buildAll(classFilter).getResults(); results.addAllBuildMessages(convertMessages(kieResults.getMessages(), handles)); } catch (LinkageError e) {
public IncrementalBuildResults addResource( final Path resource ) { //Check a full build has been performed if ( !isBuilt() ) { throw new IllegalStateException( "A full build needs to be performed before any incremental operations." ); } //Add new resource final String destinationPath = resource.toUri().toString().substring( projectPrefix.length() + 1 ); final InputStream is = ioService.newInputStream( resource ); final BufferedInputStream bis = new BufferedInputStream( is ); kieFileSystem.write( destinationPath, KieServices.Factory.get().getResources().newInputStreamResource( bis ) ); handles.put( destinationPath, paths.convert( resource ) ); //Incremental build final IncrementalResults incrementalResults = ( (InternalKieBuilder) kieBuilder ).createFileSet( destinationPath ).build(); //Messages from incremental build final IncrementalBuildResults results = convertMessages( incrementalResults ); //Tidy-up removed message handles for ( Message message : incrementalResults.getRemovedMessages() ) { handles.remove( RESOURCE_PATH + "/" + message.getPath() ); } return results; }
public IncrementalBuildResults deleteResource( final Path resource ) { //Check a full build has been performed if ( !isBuilt() ) { throw new IllegalStateException( "A full build needs to be performed before any incremental operations." ); } //Delete resource final String destinationPath = resource.toUri().toString().substring( projectPrefix.length() + 1 ); kieFileSystem.delete( destinationPath ); //Incremental build final IncrementalResults incrementalResults = ( (InternalKieBuilder) kieBuilder ).createFileSet( destinationPath ).build(); //Messages from incremental build final IncrementalBuildResults results = convertMessages( incrementalResults ); //Tidy-up removed message handles for ( Message message : incrementalResults.getRemovedMessages() ) { handles.remove( RESOURCE_PATH + "/" + message.getPath() ); } return results; }
private void buildIncrementally(final IncrementalBuildResults results, final String... destinationPath) { try { final IncrementalResults incrementalResults = ((InternalKieBuilder) kieBuilder).createFileSet(destinationPath).build(); results.addAllAddedMessages(convertMessages(incrementalResults.getAddedMessages(), handles)); results.addAllRemovedMessages(convertMessages(incrementalResults.getRemovedMessages(), handles)); //Tidy-up removed message handles for (Message message : incrementalResults.getRemovedMessages()) { handles.remove(Handles.RESOURCE_PATH + "/" + getBaseFileName(message.getPath())); } } catch (LinkageError e) { final String msg = MessageFormat.format(ERROR_CLASS_NOT_FOUND, e.getLocalizedMessage()); logger.warn(msg); results.addAddedMessage(makeWarningMessage(msg)); } catch (Throwable e) { final String msg = e.getLocalizedMessage(); logger.error(msg, e); results.addAddedMessage(makeErrorMessage(msg)); } }
public KieModule getKieModuleIgnoringErrors() { return ( (InternalKieBuilder) kieBuilder ).getKieModuleIgnoringErrors(); }
@Test public void testIncrementalBuilding() throws Exception { ReleaseId releaseId1 = KieServices.Factory.get().newReleaseId( "org.test", "test", "1.0.0-SNAPSHOT" ); KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); KieBuilder kb = ks.newKieBuilder( kfs ); kfs.generateAndWritePomXML( releaseId1 ); kfs.write( ResourceFactory.newClassPathResource( source1 ).setResourceType( ResourceType.PMML ) ); kb.buildAll(); KieContainer kc = ks.newKieContainer( releaseId1 ); KieSession kSession = kc.newKieSession(); setKbase( kSession.getKieBase() ); kSession.fireAllRules(); kfs.write( ResourceFactory.newClassPathResource( source2 ).setResourceType( ResourceType.PMML ) ); IncrementalResults results = (( InternalKieBuilder ) kb ).incrementalBuild(); kc.updateToVersion( releaseId1 ); kSession.fireAllRules(); assertEquals( 1, kSession.getObjects( new ClassObjectFilter( ModelMarker.class ) ).size() ); assertEquals( 9, kSession.getObjects( new ClassObjectFilter( kSession.getKieBase().getFactType( packageName, "Synapse" ).getFactClass() ) ).size() ); kSession.dispose(); checkGeneratedRules(); }
String xml1_2 = Helper.createGuidedScoreCardXML(false); KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write("pom.xml", Helper.getPom()); kfs.write("src/main/resources/META-INF/kmodule.xml", Helper.getKModule()); kfs.write("src/main/java/org/drools/workbench/models/guided/scorecard/backend/test2/Applicant.java", Helper.getApplicant()); kfs.write("src/main/java/org/drools/workbench/models/guided/scorecard/backend/test2/ApplicantAttribute.java", KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll(); final List<Message> messages = kieBuilder.getResults().getMessages(); Helper.dumpMessages(messages); assertEquals(0, kfs.write("src/main/resources/sc1.scgd", xml1_2); IncrementalResults results = ((InternalKieBuilder) kieBuilder).incrementalBuild();
public org.kie.api.builder.KieModule getKieModuleIgnoringErrors() { //Kie classes are only available once built if (!isBuilt()) { build(); } synchronized (kieFileSystem) { return ((InternalKieBuilder) kieBuilder).getKieModuleIgnoringErrors(); } }
@Test public void testMessageWithIncrementalBuild() throws Exception { //Some suitably duff DSL to generate errors String dsl1 = "bananna\n"; //Some suitably valid DRL String drl1 = "import org.drools.compiler.Person;\n" + "rule R1\n" + "when\n" + "There is a Person\n" + "then\n" + "end\n"; //Some suitably valid DRL String drl2 = "rule R2\n" + "when\n" + "then\n" + "end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem() .write( "src/main/resources/dsl.dsl", dsl1 ) .write( "src/main/resources/drl.dslr", drl1 ); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); Results fullBuildResults = kieBuilder.getResults(); assertEquals( 3, fullBuildResults.getMessages().size() ); kfs.write( "src/main/resources/r2.drl", drl2 ); IncrementalResults incrementalBuildResults = ( (InternalKieBuilder) kieBuilder ).createFileSet( "src/main/resources/r2.drl" ).build(); assertEquals( 0, incrementalBuildResults.getAddedMessages().size() ); assertEquals( 0, incrementalBuildResults.getRemovedMessages().size() ); }
@Test public void testIncrementalCompilationDuplicateXLSResources() throws Exception { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( "src/main/resources/incrementalBuild1.dtable.xls", KieServices.Factory.get().getResources().newInputStreamResource( in1 ) ); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); assertEquals( 0, kieBuilder.getResults().getMessages( org.kie.api.builder.Message.Level.ERROR ).size() ); kfs.write( "src/main/resources/incrementalBuild2.dtable.xls", KieServices.Factory.get().getResources().newInputStreamResource( in2 ) ); IncrementalResults addResults = ( (InternalKieBuilder) kieBuilder ).createFileSet( "src/main/resources/incrementalBuild2.dtable.xls" ).build(); List<Message> messages = ks.newKieBuilder( kfs ).buildAll().getResults().getMessages(); assertFalse( messages.isEmpty() );
@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() ); }
"</rule>"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.template", drl1_1 ); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); List<Message> messages = kieBuilder.getResults().getMessages( org.kie.api.builder.Message.Level.ERROR ); assertEquals( 0, messages.size() ); kfs.write( "src/main/resources/r1.template", drl1_2 ); IncrementalResults addResults = ( (InternalKieBuilder) kieBuilder ).createFileSet( "src/main/resources/r1.template" ).build();
"</rule>"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.template", drl1_1 ); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); assertEquals( 1, kieBuilder.getResults().getMessages( org.kie.api.builder.Message.Level.ERROR ).size() ); kfs.write( "src/main/resources/r1.template", drl1_2 ); IncrementalResults addResults = ( (InternalKieBuilder) kieBuilder ).createFileSet( "src/main/resources/r1.template" ).build();
KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem() .write("src/main/resources/org/drools/test/personDrl.drl", typeDrl) .write("src/main/resources/dt1.gdst", brokenDrlGenerated); KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll(); Results buildResults = kieBuilder.getResults(); int errorsNr = buildResults.getMessages(Message.Level.ERROR).size(); Assert.assertTrue("Expected build failure", errorsNr > 0); kfs.write("src/main/resources/dt1.gdst", correctDrlGenerated); IncrementalResults results = ((InternalKieBuilder) kieBuilder).createFileSet("src/main/resources/dt1.gdst").build();