diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginClassLoader.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginClassLoader.java index bf3d7911eb635cf3755bc99e98a05259b3830456..d8416880d1ddbabbdd4f90cb2d5f90e7167394e5 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginClassLoader.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginClassLoader.java @@ -27,8 +27,6 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import kieker.analysis.AnalysisController; import kieker.analysis.model.analysisMetaModel.MIDependency; @@ -53,7 +51,7 @@ public final class PluginClassLoader extends ClassLoader { */ private static PluginClassLoader instance; - private final List<URL> list = new ArrayList<URL>(); + private final List<URL> urlList = new ArrayList<URL>(); private URLClassLoader classLoader = null; @@ -61,7 +59,7 @@ public final class PluginClassLoader extends ClassLoader { * The default constructor of this class. During the creation all available libraries will be added to the class loader. */ private PluginClassLoader() { - this.classLoader = new URLClassLoader(new URL[]{}, AnalysisController.class.getClassLoader()); + this.classLoader = new URLClassLoader(new URL[] {}, AnalysisController.class.getClassLoader()); /* Make sure that all libs are loaded. */ final List<MIDependency> libs = FileManager.getInstance().loadAllDependencies(); for (final MIDependency lib : libs) { @@ -80,9 +78,15 @@ public final class PluginClassLoader extends ClassLoader { * The URL of the dependency to be added. */ public void addURL(final URL url) { - this.list.add(url); + this.urlList.add(url); - this.classLoader = new URLClassLoader(this.list.toArray(new URL[this.list.size()]), AnalysisController.class.getClassLoader()); + this.classLoader = (URLClassLoader) AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Object run() { + return new URLClassLoader(PluginClassLoader.this.urlList.toArray(new URL[PluginClassLoader.this.urlList.size()]), AnalysisController.class + .getClassLoader()); + } + }); } /** @@ -92,9 +96,15 @@ public final class PluginClassLoader extends ClassLoader { * The URL of the dependency to be added. */ public void removeURL(final URL url) { - this.list.remove(url); + this.urlList.remove(url); - this.classLoader = new URLClassLoader(this.list.toArray(new URL[this.list.size()]), AnalysisController.class.getClassLoader()); + this.classLoader = (URLClassLoader) AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Object run() { + return new URLClassLoader(PluginClassLoader.this.urlList.toArray(new URL[PluginClassLoader.this.urlList.size()]), AnalysisController.class + .getClassLoader()); + } + }); } /** diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java index 5ec6c8550ea46d1201f56ccc8f1fa427366f1b7f..5d3619c2b4d258f44b7d2b554be6396eebf7edbf 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java @@ -66,7 +66,7 @@ public final class PluginFinder { */ public static List<Class<AbstractRepository>> getAllRepositoriesWithinJar(final URL url) { // TODO: Merge this with the other method - final List<Class<AbstractRepository>> repositoryClasses = (List<Class<AbstractRepository>>) REPOSITORY_CACHE.get(url); + final List<Class<AbstractRepository>> repositoryClasses = (List<Class<AbstractRepository>>) PluginFinder.REPOSITORY_CACHE.get(url); if (repositoryClasses != null) { return repositoryClasses; } @@ -96,7 +96,7 @@ public final class PluginFinder { } } jarFile.close(); - REPOSITORY_CACHE.put(url, result); + PluginFinder.REPOSITORY_CACHE.put(url, result); return result; } catch (final IOException ex) { ex.printStackTrace(); @@ -113,7 +113,7 @@ public final class PluginFinder { * @return A list containing all available plugin-classes or null, if an exception occurred. */ public static List<Class<AbstractPlugin>> getAllPluginsWithinJar(final URL url) { - final List<Class<AbstractPlugin>> pluginClasses = (List<Class<AbstractPlugin>>) PLUGIN_CACHE.get(url); + final List<Class<AbstractPlugin>> pluginClasses = (List<Class<AbstractPlugin>>) PluginFinder.PLUGIN_CACHE.get(url); if (pluginClasses != null) { return pluginClasses; } @@ -146,7 +146,7 @@ public final class PluginFinder { } } jarFile.close(); - PLUGIN_CACHE.put(url, result); + PluginFinder.PLUGIN_CACHE.put(url, result); return result; } catch (final IOException ex) { ex.printStackTrace();