Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Fedorenko2011-04-12 16:48:21 +0000
committerIgor Fedorenko2011-04-12 17:06:21 +0000
commitfb4e41a5a1801aed779885935d8e950614588aa8 (patch)
tree8bb0effa05e4b16a56914b24c1a048c86f4c49cf
parent62c0596af8dcbe241df2fc371bb4816ba1a159bb (diff)
downloadm2e-core-fb4e41a5a1801aed779885935d8e950614588aa8.tar.gz
m2e-core-fb4e41a5a1801aed779885935d8e950614588aa8.tar.xz
m2e-core-fb4e41a5a1801aed779885935d8e950614588aa8.zip
341033 plugged classloader leak during m2e extension discovery
Changed mavn import wizard to properly release MavenProject extensions realms. Also removed deprecated IMaven.xxxRemoveExtensionRealm API method and introduced non-API MavenImpl.releaseExtensionsRealm. Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/MavenPlugin.java2
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMaven.java7
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java7
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java11
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java4
5 files changed, 16 insertions, 15 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/MavenPlugin.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/MavenPlugin.java
index 711f764e..de98de72 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/MavenPlugin.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/MavenPlugin.java
@@ -37,7 +37,7 @@ public final class MavenPlugin {
return INSTANCE;
}
- public IMaven getMaven() {
+ public static IMaven getMaven() {
return MavenPluginActivator.getDefault().getMaven();
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMaven.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMaven.java
index 090b6783..122d963c 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMaven.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMaven.java
@@ -177,13 +177,6 @@ public interface IMaven {
public Server decryptPassword(Server server) throws CoreException;
- /**
- * Temporary solution/workaround for http://jira.codehaus.org/browse/MNG-4194. Extensions realm is created each time
- * MavenProject instance is built, so we have to remove unused extensions realms to avoid OOME.
- */
- @Deprecated
- public void xxxRemoveExtensionsRealm(MavenProject project);
-
/** @provisional */
public void addLocalRepositoryListener(ILocalRepositoryListener listener);
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java
index d9a5cac7..6807db51 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java
@@ -828,8 +828,11 @@ public class MavenImpl implements IMaven, IMavenConfigurationChangeListener {
}
}
- @SuppressWarnings("deprecation")
- public void xxxRemoveExtensionsRealm(MavenProject project) {
+ /**
+ * Temporary solution/workaround for http://jira.codehaus.org/browse/MNG-4194. Extensions realm is created each time
+ * MavenProject instance is built, so we have to remove unused extensions realms to avoid OOME.
+ */
+ public void releaseExtensionsRealm(MavenProject project) {
ClassRealm realm = project.getClassRealm();
if(realm != null && realm != plexus.getContainerRealm()) {
ClassWorld world = ((MutablePlexusContainer) plexus).getClassWorld();
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java
index 2e1f8d37..61858d6f 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java
@@ -39,6 +39,7 @@ import org.apache.maven.properties.internal.EnvironmentUtils;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.IMaven;
+import org.eclipse.m2e.core.internal.embedder.MavenImpl;
import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingConfigurationException;
import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingFactory;
import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingResult;
@@ -261,13 +262,13 @@ public class LifecycleMappingConfiguration {
LifecycleMappingConfiguration result = new LifecycleMappingConfiguration();
List<MavenProjectInfo> nonErrorProjects = new ArrayList<MavenProjectInfo>();
- MavenPlugin mavenPlugin = MavenPlugin.getDefault();
- IMaven maven = mavenPlugin.getMaven();
+ IMaven maven = MavenPlugin.getMaven();
for(MavenProjectInfo projectInfo : projects) {
if(monitor.isCanceled()) {
throw new OperationCanceledException();
}
+ MavenProject mavenProject = null;
try {
SubMonitor subMmonitor = SubMonitor.convert(monitor, NLS.bind("Analysing {0}",projectInfo.getLabel()), 1);
MavenExecutionRequest request = maven.createExecutionRequest(subMmonitor);
@@ -285,7 +286,7 @@ public class LifecycleMappingConfiguration {
MavenExecutionResult executionResult = maven.readProject(request, subMmonitor);
- MavenProject mavenProject = executionResult.getProject();
+ mavenProject = executionResult.getProject();
if(monitor.isCanceled()) {
throw new OperationCanceledException();
@@ -390,6 +391,10 @@ public class LifecycleMappingConfiguration {
throw ex;
} catch (Throwable th) {
result.addError(projectInfo, th);
+ } finally {
+ if (mavenProject != null) {
+ ((MavenImpl)maven).releaseExtensionsRealm(mavenProject);
+ }
}
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java
index ec7e6240..ae854e39 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java
@@ -159,7 +159,7 @@ public class ProjectRegistryManager {
ResolverConfiguration configuration = ResolverConfigurationIO.readResolverConfiguration(pom.getProject());
//this used to just pass in 'true' for 'offline'. when the local repo was removed or
//corrupted, though, the project wouldn't load correctly
- IMavenConfiguration mavenConfiguration = MavenPlugin.getDefault().getMavenConfiguration();
+ IMavenConfiguration mavenConfiguration = MavenPlugin.getMavenConfiguration();
boolean isOffline = mavenConfiguration.isOffline();
MavenExecutionResult executionResult = readProjectWithDependencies(projectRegistry, pom, configuration, //
new MavenUpdateRequest(isOffline, false /* updateSnapshots */),
@@ -255,7 +255,7 @@ public class ProjectRegistryManager {
// can't really happen
}
if (project != null) {
- getMaven().xxxRemoveExtensionsRealm(project);
+ ((MavenImpl) getMaven()).releaseExtensionsRealm(project);
}
}

Back to the top