use of org.drools.core.common.ProjectClassLoader in project drools by kiegroup.
the class StandaloneTest method init.
@Before
public void init() {
ProjectClassLoader loader = ProjectClassLoader.createProjectClassLoader();
factory = new StandaloneTraitFactory(loader);
}
use of org.drools.core.common.ProjectClassLoader in project drools by kiegroup.
the class KnowledgeBuilderConfigurationImpl method init.
private void init(Properties properties) {
this.chainedProperties = ChainedProperties.getChainedProperties(getClassLoader());
if (chainedProperties.getProperty("drools.dialect.java", null) == null) {
// if it couldn't find a conf for java dialect using the project class loader
// it means it could not load the conf file at all (very likely it is running in
// an osgi environement) so try with the class loader of this class
this.chainedProperties = ChainedProperties.getChainedProperties(getClass().getClassLoader());
if (this.classLoader instanceof ProjectClassLoader) {
((ProjectClassLoader) classLoader).setDroolsClassLoader(getClass().getClassLoader());
}
}
if (properties != null) {
this.chainedProperties.addProperties(properties);
}
setProperty(ClassLoaderCacheOption.PROPERTY_NAME, this.chainedProperties.getProperty(ClassLoaderCacheOption.PROPERTY_NAME, "true"));
setProperty(PropertySpecificOption.PROPERTY_NAME, this.chainedProperties.getProperty(PropertySpecificOption.PROPERTY_NAME, DEFAULT_PROP_SPEC_OPT.toString()));
setProperty(LanguageLevelOption.PROPERTY_NAME, this.chainedProperties.getProperty(LanguageLevelOption.PROPERTY_NAME, DrlParser.DEFAULT_LANGUAGE_LEVEL.toString()));
this.dialectConfigurations = new HashMap<String, DialectConfiguration>();
buildDialectConfigurationMap();
this.accumulateFunctions = AccumulateUtil.buildAccumulateFunctionsMap(chainedProperties, getClassLoader());
buildEvaluatorRegistry();
buildDumpDirectory();
buildSeverityMap();
setProperty(ProcessStringEscapesOption.PROPERTY_NAME, this.chainedProperties.getProperty(ProcessStringEscapesOption.PROPERTY_NAME, "true"));
setProperty(DefaultPackageNameOption.PROPERTY_NAME, this.chainedProperties.getProperty(DefaultPackageNameOption.PROPERTY_NAME, "defaultpkg"));
this.componentFactory = new DroolsCompilerComponentFactory();
this.classBuilderFactory = new ClassBuilderFactory();
}
use of org.drools.core.common.ProjectClassLoader in project drools by kiegroup.
the class KieHelloWorldTest method testClassLoaderStore.
@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"));
}
use of org.drools.core.common.ProjectClassLoader in project drools by kiegroup.
the class KieBuilderSetImpl method buildChanges.
private IncrementalResults buildChanges(Collection<String> filesToBuild) {
Map<String, Collection<KnowledgeBuilderError>> currentErrors = new HashMap<String, Collection<KnowledgeBuilderError>>();
InternalKieModule kieModule = (InternalKieModule) kieBuilder.getKieModuleIgnoringErrors();
for (KieBaseModel kBaseModel : kieModule.getKieModuleModel().getKieBaseModels().values()) {
KnowledgeBuilder kBuilder = kieModule.getKnowledgeBuilderForKieBase(kBaseModel.getName());
if (kBuilder == null) {
continue;
}
CompositeKnowledgeBuilder ckbuilder = kBuilder.batch();
KnowledgeBuilderImpl.ResourceRemovalResult removalResult = new KnowledgeBuilderImpl.ResourceRemovalResult();
KnowledgeBuilderImpl pkgBuilder = ((KnowledgeBuilderImpl) kBuilder);
Set<String> wrongResources = resourcesWithErrors.get(kBaseModel.getName());
for (String resourceName : wrongResources) {
removalResult.add(pkgBuilder.removeObjectsGeneratedFromResource(new DummyResource(resourceName)));
removalResult.mergeModified(addResource(ckbuilder, kBaseModel, kieModule, resourceName));
}
for (String file : filesToBuild) {
if (wrongResources.contains(file)) {
removalResult.mergeModified(true);
} else {
// remove the objects generated by the old Resource
removalResult.add(pkgBuilder.removeObjectsGeneratedFromResource(new DummyResource(file)));
// add the modified Resource
removalResult.mergeModified(addResource(ckbuilder, kBaseModel, kieModule, file));
}
}
if (removalResult.isModified()) {
if (!removalResult.getRemovedTypes().isEmpty()) {
ProjectClassLoader projectClassLoader = (ProjectClassLoader) ((KnowledgeBuilderImpl) kBuilder).getRootClassLoader();
projectClassLoader.reinitTypes();
for (String removedType : removalResult.getRemovedTypes()) {
projectClassLoader.undefineClass(removedType);
}
}
ckbuilder.build();
resourcesWithErrors.put(kBaseModel.getName(), findResourcesWithErrors(kBuilder));
if (kBuilder.hasErrors()) {
currentErrors.put(kBaseModel.getName(), kBuilder.getErrors());
kBuilder.undo();
} else {
KieServices.Factory.get().getRepository().addKieModule(kieModule);
kieBuilder.updateKieModuleMetaInfo();
}
}
}
IncrementalResultsImpl results = getIncrementalResults(currentErrors);
previousErrors = currentErrors;
return results;
}
use of org.drools.core.common.ProjectClassLoader in project drools by kiegroup.
the class KieContainerImpl method reinitModifiedClasses.
private List<Class<?>> reinitModifiedClasses(InternalKieModule newKM, List<String> modifiedClasses, ClassLoader classLoader) {
List<Class<?>> classes = new ArrayList<Class<?>>();
if (!modifiedClasses.isEmpty()) {
if (classLoader instanceof ProjectClassLoader) {
ProjectClassLoader projectClassLoader = (ProjectClassLoader) classLoader;
projectClassLoader.reinitTypes();
for (String resourceName : modifiedClasses) {
String className = convertResourceToClassName(resourceName);
byte[] bytes = newKM.getBytes(resourceName);
Class<?> clazz = projectClassLoader.defineClass(className, resourceName, bytes);
classes.add(clazz);
}
}
}
return classes;
}
Aggregations