[rules-users] Create kieBase programmatically: WARN "No files found for KieBase defaultKieBase"?

Frank Langelage frank at lafr.de
Tue Dec 31 08:04:14 EST 2013


I'll answer myself:
it's mandatory to use "src/main/resources/" as the base folder inside 
KieFilesystem.
kieFileSystem.write( "src/main/resources/" + fileName,
	kieServices.getResources().newInputStreamResource( is ) );
with fileName = "etc/MailFilter.xls".

Now Apache POI breaks down processing my xls file which works with 
drools 5.5 / JExcelApi:
Caused by: java.lang.NullPointerException
         at 
org.apache.poi.poifs.property.PropertyTableBase.populatePropertyTree(PropertyTableBase.java:100) 
[poi.jar:3.9]
         at 
org.apache.poi.poifs.property.PropertyTableBase.<init>(PropertyTableBase.java:63) 
[poi.jar:3.9]
         at 
org.apache.poi.poifs.property.PropertyTable.<init>(PropertyTable.java:63) [poi.jar:3.9]
         at 
org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:159) 
[poi.jar:3.9]
         at 
org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:322) 
[poi.jar:3.9]
         at 
org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:303) 
[poi.jar:3.9]
         at 
org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:70) 
[poi-ooxml.jar:3.9]
         at 
org.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:81) 
[drools-decisiontables.jar:6.0.1.Final]
         at 
org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:93) 
[drools-decisiontables.jar:6.0.1.Final]
         at 
org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:72) 
[drools-decisiontables.jar:6.0.1.Final]
         at 
org.drools.decisiontable.DecisionTableProviderImpl.compileStream(DecisionTableProviderImpl.java:37) 
[drools-decisiontables.jar:6.0.1.Final]
         at 
org.drools.decisiontable.DecisionTableProviderImpl.loadFromInputStream(DecisionTableProviderImpl.java:20) 
[drools-decisiontables.jar:6.0.1.Final]
         at 
org.drools.compiler.compiler.DecisionTableFactory.loadFromInputStream(DecisionTableFactory.java:15) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.compiler.PackageBuilder.decisionTableToPackageDescr(PackageBuilder.java:474) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl$4.map(CompositeKnowledgeBuilderImpl.java:422) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildResource(CompositeKnowledgeBuilderImpl.java:329) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:319) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:96) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:87) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:204) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:39) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:323) 
[drools-compiler.jar:6.0.1.Final]
         at 
org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:193) 
[drools-compiler.jar:6.0.1.Final]
         at 
biz.mbisoftware.fn.ejb.session.common.RuleBuilder.buildKieBase(RuleBuilder.java:117) 
[ejb-session-common.jar:]


On 29.12.13 22:12, Frank Langelage wrote:
> Hello,
>
> I need your help!
> I'm trying to migrate from Drools 5.5.0 to 6.0.1, creating the
> KnowledgeBase programmatically.
>
> But buildAll gives me WARN "No files found for KieBase defaultKieBase".
> What's missing? My code is based on the example found in documentation.
> fileName is pointing to an xls file with decision table.
> Writing it to kieFileSystem seemed to work correct, as
> kieFileSystem.read( fileName ).length is showing the right number of bytes.
>
> Logging output:
> DEBUG [RuleBuilder#buildKieBase] Get kieServices
> DEBUG [RuleBuilder#buildKieBase] Get kieRepository
> DEBUG [RuleBuilder#buildKieBase] Get new kieFileSystem
> DEBUG [RuleBuilder#buildKieBase] Add
> /mbi/etc/MailFilter_hgm2e-langfr-sb2000-ipc.xls to kieFileSystem
> DEBUG [RuleBuilder#buildKieBase] Get new kieBuilder
> DEBUG [RuleBuilder#buildKieBase] 22016
> DEBUG [RuleBuilder#buildKieBase] Build all Rules
> WARN
> [org.drools.compiler.kie.builder.impl.AbstractKieModule#buildKnowledgePackages]
> No files found for KieBase defaultKieBase
> INFO
> [org.drools.compiler.kie.builder.impl.KieRepositoryImpl#addKieModule]
> KieModule was added:MemoryKieModule[
> ReleaseId=org.default:artifact:1.0.0-SNAPSHOT]
> DEBUG [RuleBuilder#buildKieBase] Get new kieContainer
> DEBUG [RuleBuilder#buildKieBase] Get kieBase
>
> Code:
> RuleBuilder.LOGGER.debug( "Get kieServices" );
> KieServices kieServices = KieServices.Factory.get();
>
> RuleBuilder.LOGGER.debug( "Get kieRepository" );
> KieRepository kieRepository = kieServices.getRepository();
>
> RuleBuilder.LOGGER.debug( "Get new kieFileSystem" );
> KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
>
> XADiskConnection connection = null;
> try {
>     connection = this.xaDisk.getConnection();
>     XAFileInputStream fis = connection.createXAFileInputStream( new File(
> fileName ) );
>     try ( InputStream is = new XAFileInputStreamWrapper( fis ) ) {
>       RuleBuilder.LOGGER.debug( "Add " + fileName + " to kieFileSystem" );
>       kieFileSystem.write( fileName,
> kieServices.getResources().newInputStreamResource( is ) );
>     } catch ( IOException e ) {
>       // ignore
>     }
>     fis.close();
> } catch ( FileNotExistsException e ) {
>     // Datei '%s' nicht gefunden
>     ServiceStringResponse ssr = this.mbiFxtxtFacade.getTranslation(
> Integer.valueOf( 215421 ), locales );
>     throw new MbiException( e, RuleBuilder.LOGGER, String.format(
> ssr.getValue(), fileName ) );
> } catch ( InsufficientPermissionOnFileException | LockingFailedException
> | NoTransactionAssociatedException e ) {
>     throw new MbiException( e, RuleBuilder.LOGGER );
> } catch ( ResourceException | InterruptedException e ) {
>     throw new MbiException( e, RuleBuilder.LOGGER );
> } finally {
>     if ( connection != null ) {
>       connection.close();
>     }
> }
>
> RuleBuilder.LOGGER.debug( "Get new kieBuilder" );
> KieBuilder kieBuilder = kieServices.newKieBuilder( kieFileSystem );
> RuleBuilder.LOGGER.debug( kieFileSystem.read( fileName ).length );
>
> RuleBuilder.LOGGER.debug( "Build all Rules" );
> kieBuilder.buildAll();
>
> RuleBuilder.LOGGER.debug( "Get new kieContainer" );
> KieContainer kieContainer = kieServices.newKieContainer(
> kieRepository.getDefaultReleaseId() );
>
> RuleBuilder.LOGGER.debug( "Get kieBase" );
> KieBase kieBase = kieContainer.getKieBase();
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



More information about the rules-users mailing list