CompositeClassLoader cl = indexedParts.getClassLoader(); // the most clone the CL, as each builder and rbase populates it
PackageBuilderConfiguration pconf = new PackageBuilderConfiguration( null,
cl.clone() );
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( pconf );
CompositeKnowledgeBuilder ckbuilder = kbuilder.batch();
Set<String> includes = kBaseModel.getIncludes();
if ( includes != null && !includes.isEmpty() ) {
for ( String include : includes ) {
if ( StringUtils.isEmpty( include ) ) {
continue;
}
InternalKieModule includeModule = indexedParts.getKieModuleForKBase( include );
if ( includeModule == null ) {
log.error( "Unable to build KieBase, could not find include: " + include );
return null;
}
addFiles( ckbuilder,
indexedParts.getKieBaseModel( include ),
includeModule );
}
}
InternalKieModule kModule = indexedParts.getKieModuleForKBase( kBaseModel.getName() );
addFiles( ckbuilder,
kBaseModel,
kModule );
ckbuilder.build();
if ( kbuilder.hasErrors() ) {
for ( KnowledgeBuilderError error : kbuilder.getErrors() ) {
messages.addMessage( error );
}
log.error( "Unable to build KieBaseModel:" + kBaseModel.getName() + "\n" + kbuilder.getErrors().toString() );
} else {
// no errors, so cache the packages
kModule.getKnowledgePackageCache().put( kBaseModel.getName(),
kbuilder.getKnowledgePackages() );
}
// always cache results
kModule.getKnowledgeResultsCache().put( kBaseModel.getName(),
messages );