CompositeClassLoader cl = ( CompositeClassLoader ) 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() );
}
RuleBaseConfiguration rconf = new RuleBaseConfiguration( null,
cl );
InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase( rconf );
kBase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
return kBase;
}