Skip to content

Commit

Permalink
[BZ-1007055] use kieproject classloader also to compile java classes
Browse files Browse the repository at this point in the history
  • Loading branch information
mariofusco committed Sep 17, 2013
1 parent fa78007 commit 12724f6
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 22 deletions.
Expand Up @@ -5,12 +5,10 @@

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
Expand Down Expand Up @@ -65,8 +63,6 @@ public abstract class AbstractKieModule

private Map<ReleaseId, InternalKieModule> kieDependencies;

private List<ReleaseId> jarDependencies;

// this is a { KBASE_NAME -> DIALECT -> ( RESOURCE, BYTECODE ) } cache
protected Map<String, Map<String, Map<String, byte[]>>> compilationCache = new HashMap<String, Map<String, Map<String, byte[]>>>();

Expand Down Expand Up @@ -94,11 +90,11 @@ public void addKieDependency(InternalKieModule dependency) {
kieDependencies.put(dependency.getReleaseId(), dependency);
}

public List<ReleaseId> getJarDependencies() {
public Collection<ReleaseId> getJarDependencies() {
if( pomModel == null ) {
getPomModel();
}
List<ReleaseId> deps = null;
Collection<ReleaseId> deps = null;
if( pomModel != null ) {
deps = pomModel.getDependencies();
}
Expand Down Expand Up @@ -242,7 +238,6 @@ private static void getTransitiveIncludes(KieProject kieProject, KieBaseModelImp
private static void addFiles(Map<String, InternalKieModule> assets,
KieBaseModel kieBaseModel,
InternalKieModule kieModule) {
int fileCount = 0;
for (String fileName : kieModule.getFileNames()) {
if (filterFileInKBase(kieBaseModel, fileName) && !fileName.endsWith(".properties")) {
assets.put(fileName, kieModule);
Expand Down Expand Up @@ -343,6 +338,10 @@ public PomModel getPomModel() {
return pomModel;
}

public void setPomModel(PomModel pomModel) {
this.pomModel = pomModel;
}

private void validatePomModel(PomModel pomModel) {
ReleaseId pomReleaseId = pomModel.getReleaseId();
if (StringUtils.isEmpty(pomReleaseId.getGroupId()) || StringUtils.isEmpty(pomReleaseId.getArtifactId()) || StringUtils.isEmpty(pomReleaseId.getVersion())) {
Expand Down
Expand Up @@ -35,7 +35,7 @@ public interface InternalKieModule extends KieModule {

void addKieDependency(InternalKieModule dependency);

List<ReleaseId> getJarDependencies();
Collection<ReleaseId> getJarDependencies();

boolean isAvailable( final String pResourceName );

Expand Down
Expand Up @@ -45,6 +45,7 @@
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.api.builder.Message;
import org.kie.api.builder.Message.Level;
import org.kie.api.builder.ReleaseId;
import org.kie.api.builder.Results;
Expand Down Expand Up @@ -165,8 +166,6 @@ public KieBuilder buildAll() {
if ( !isBuilt() && kModuleModel != null ) {
trgMfs = new MemoryFileSystem();
writePomAndKModule();

compileJavaClasses();
addKBasesFilesToTrg();

kModule = new MemoryKieModule( releaseId,
Expand All @@ -178,8 +177,14 @@ public KieBuilder buildAll() {
kModule.addKieDependency( (InternalKieModule) kieModule );
}
}
if (pomModel != null) {
kModule.setPomModel(pomModel);
}

KieModuleKieProject kProject = new KieModuleKieProject( kModule );
compileJavaClasses(kProject.getClassLoader());

if ( buildKieModule( kModule, results ) ) {
if ( buildKieProject( kModule, results, kProject ) ) {
writeKieModuleMetaInfo( generateKieModuleMetaInfo() );
}
}
Expand Down Expand Up @@ -292,12 +297,15 @@ private void writeKieModuleMetaInfo(KieModuleMetaInfo info) {

public static boolean buildKieModule(InternalKieModule kModule,
ResultsImpl messages ) {
KieModuleKieProject kProject = new KieModuleKieProject( kModule );
return buildKieProject(kModule, messages, new KieModuleKieProject( kModule ));
}

private static boolean buildKieProject(InternalKieModule kModule, ResultsImpl messages, KieModuleKieProject kProject) {
kProject.init();
kProject.verify( messages );
kProject.verify(messages);

if ( messages.filterMessages( Level.ERROR ).isEmpty() ) {
KieServices.Factory.get().getRepository().addKieModule( kModule );
KieServices.Factory.get().getRepository().addKieModule(kModule);
return true;
}
return false;
Expand Down Expand Up @@ -541,7 +549,7 @@ public static String generatePomProperties(ReleaseId releaseId) {
return sBuilder.toString();
}

private void compileJavaClasses() {
private void compileJavaClasses(ClassLoader classLoader) {
List<String> classFiles = new ArrayList<String>();
for ( String fileName : srcMfs.getFileNames() ) {
if ( fileName.endsWith( ".class" ) ) {
Expand Down Expand Up @@ -569,7 +577,8 @@ private void compileJavaClasses() {
EclipseJavaCompiler compiler = createCompiler( "src/main/java/" );
CompilationResult res = compiler.compile( sourceFiles,
srcMfs,
trgMfs );
trgMfs,
classLoader );

for ( CompilationProblem problem : res.getErrors() ) {
results.addMessage( problem );
Expand Down
Expand Up @@ -2,14 +2,15 @@

import org.kie.api.builder.ReleaseId;

import java.util.ArrayList;
import java.util.List;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

public class PomModel {

private ReleaseId releaseId;
private ReleaseId parentReleaseId;
private List<ReleaseId> dependencies = new ArrayList<ReleaseId>();
private Set<ReleaseId> dependencies = new HashSet<ReleaseId>();


public ReleaseId getReleaseId() {
Expand All @@ -28,7 +29,7 @@ public void setParentReleaseId(ReleaseId parentReleaseId) {
this.parentReleaseId = parentReleaseId;
}

public List<ReleaseId> getDependencies() {
public Collection<ReleaseId> getDependencies() {
return dependencies;
}

Expand Down
Expand Up @@ -27,7 +27,7 @@ public void parsePom() {
assertEquals( "parentVersion", pomModel.getParentReleaseId().getVersion() );

assertEquals( 1, pomModel.getDependencies().size() );
ReleaseId dep = pomModel.getDependencies().get(0);
ReleaseId dep = pomModel.getDependencies().iterator().next();
assertEquals( "dep1GroupId", dep.getGroupId() );
assertEquals( "dep1ArtifactId", dep.getArtifactId() );
assertEquals( "dep1Version", dep.getVersion() );
Expand Down
Expand Up @@ -7,6 +7,7 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
import java.util.Collection;
import java.util.List;

import org.drools.compiler.kie.builder.impl.InternalKieModule;
Expand Down Expand Up @@ -43,7 +44,7 @@ public ClassLoader getClassLoader(KieModule kmodule) {
parent = MavenClassLoaderResolver.class.getClassLoader();
}

List<ReleaseId> jarDependencies = ((InternalKieModule)kmodule).getJarDependencies();
Collection<ReleaseId> jarDependencies = ((InternalKieModule)kmodule).getJarDependencies();
ArtifactResolver resolver = ArtifactResolver.getResolverFor(kmodule.getReleaseId(),true);

URL[] urls = new URL[jarDependencies.size()];
Expand Down

0 comments on commit 12724f6

Please sign in to comment.