Search in sources :

Example 6 with ProjectClassLoader

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);
}
Also used : ProjectClassLoader(org.drools.core.common.ProjectClassLoader) StandaloneTraitFactory(org.drools.core.util.StandaloneTraitFactory) Before(org.junit.Before)

Example 7 with ProjectClassLoader

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();
}
Also used : ProjectClassLoader(org.drools.core.common.ProjectClassLoader) DroolsCompilerComponentFactory(org.drools.compiler.rule.builder.DroolsCompilerComponentFactory) DialectConfiguration(org.drools.compiler.compiler.DialectConfiguration) ClassBuilderFactory(org.drools.core.factmodel.ClassBuilderFactory)

Example 8 with ProjectClassLoader

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"));
}
Also used : ProjectClassLoader(org.drools.core.common.ProjectClassLoader) KieFileSystem(org.kie.api.builder.KieFileSystem) KieProject(org.drools.compiler.kie.builder.impl.KieProject) KieContainerImpl(org.drools.compiler.kie.builder.impl.KieContainerImpl) KieServices(org.kie.api.KieServices) ResultsImpl(org.drools.compiler.kie.builder.impl.ResultsImpl) KieContainer(org.kie.api.runtime.KieContainer) Test(org.junit.Test)

Example 9 with ProjectClassLoader

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;
}
Also used : ProjectClassLoader(org.drools.core.common.ProjectClassLoader) KnowledgeBuilderError(org.kie.internal.builder.KnowledgeBuilderError) CompositeKnowledgeBuilder(org.kie.internal.builder.CompositeKnowledgeBuilder) HashMap(java.util.HashMap) KieBaseModel(org.kie.api.builder.model.KieBaseModel) CompositeKnowledgeBuilder(org.kie.internal.builder.CompositeKnowledgeBuilder) KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) KnowledgeBuilderImpl(org.drools.compiler.builder.impl.KnowledgeBuilderImpl) Collection(java.util.Collection)

Example 10 with ProjectClassLoader

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;
}
Also used : ProjectClassLoader(org.drools.core.common.ProjectClassLoader) ArrayList(java.util.ArrayList)

Aggregations

ProjectClassLoader (org.drools.core.common.ProjectClassLoader)17 ArrayList (java.util.ArrayList)3 JavaDialectRuntimeData (org.drools.core.rule.JavaDialectRuntimeData)3 Before (org.junit.Before)3 KnowledgeBaseImpl (org.drools.core.impl.KnowledgeBaseImpl)2 ByteString (com.google.protobuf.ByteString)1 JCodeModel (com.sun.codemodel.JCodeModel)1 BadCommandLineException (com.sun.tools.xjc.BadCommandLineException)1 ErrorReceiver (com.sun.tools.xjc.ErrorReceiver)1 Model (com.sun.tools.xjc.model.Model)1 XStream (com.thoughtworks.xstream.XStream)1 ExplicitTypePermission (com.thoughtworks.xstream.security.ExplicitTypePermission)1 IOException (java.io.IOException)1 ObjectInput (java.io.ObjectInput)1 ObjectOutput (java.io.ObjectOutput)1 URL (java.net.URL)1 URLClassLoader (java.net.URLClassLoader)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1