diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java index d7e0b3a81705654de7524c0249571b61c6252c74..a317bcda83ac28d24809472cf37493d6579f3e68 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java @@ -89,7 +89,7 @@ public class ProjectsBean { if (FileManager.getInstance().saveNewProject(project)) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", "New Project: " + projectName)); this.projects.add(project); - RequestContext.getCurrentInstance().addPartialUpdateTarget("projectsForm"); + RequestContext.getCurrentInstance().addPartialUpdateTarget("projectsForm"); } else { /* Inform the user about the fail. */ FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "A project with this name exists already.")); 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 9f99b5f39e429e73da87b1ed685755020b19e07a..5ec6c8550ea46d1201f56ccc8f1fa427366f1b7f 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java @@ -31,15 +31,25 @@ import java.util.jar.JarFile; import kieker.analysis.plugin.AbstractPlugin; import kieker.analysis.plugin.annotation.Plugin; import kieker.analysis.repository.AbstractRepository; +import sun.misc.Cache; /** * This tool class can be used to find all plugins and repositories within a given jar file - assuming that the <code>PluginClassLoader</code> knows these jars. * * @author Nils Christian Ehmke * @version 1.0 + * TODO Cache and observer update! */ public final class PluginFinder { + private static final Cache PLUGIN_CACHE; + private static final Cache REPOSITORY_CACHE; + + static { + PLUGIN_CACHE = new Cache(15); + REPOSITORY_CACHE = new Cache(15); + } + /** * Creates a new instance of this class. */ @@ -56,6 +66,10 @@ 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); + if (repositoryClasses != null) { + return repositoryClasses; + } try { /* * Open the jar file and run through all entries within this file. @@ -82,6 +96,7 @@ public final class PluginFinder { } } jarFile.close(); + REPOSITORY_CACHE.put(url, result); return result; } catch (final IOException ex) { ex.printStackTrace(); @@ -98,6 +113,10 @@ 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); + if (pluginClasses != null) { + return pluginClasses; + } try { /* * Open the jar file and run through all entries within this file. @@ -127,6 +146,7 @@ public final class PluginFinder { } } jarFile.close(); + PLUGIN_CACHE.put(url, result); return result; } catch (final IOException ex) { ex.printStackTrace();