diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBean.java index b438bf9431f4c06973757c4ff04406cf2fed1bb9..81371c948b660275751a20edd41dd71dc98dadc4 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBean.java @@ -395,7 +395,7 @@ public final class CurrentAnalysisEditorBean { private void reloadClassLoader() throws ProjectLoadException { synchronized (this) { try { - this.classLoader = this.projectService.getClassLoader(this.projectName); // NOPMD (ClassLoader) + this.classLoader = this.projectService.getClassLoader(this.projectName, this); // NOPMD (ClassLoader) } catch (final NullPointerException ex) { throw new ProjectLoadException("Invalid class loader.", ex); } catch (final IOException ex) { diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitBean.java index 9367932e9dd0324381362cdb343134f1f1141517..2d9b158ac46d320f1d2c196efc834992e35b3415 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitBean.java @@ -122,7 +122,7 @@ public final class CurrentCockpitBean { this.project = this.projectsBean.openProject(this.projectName); if (this.project != null) { - final ClassLoader classLoader = this.projectService.getClassLoader(this.projectName); // NOPMD (ClassLoader) + final ClassLoader classLoader = this.projectService.getClassLoader(this.projectName, this); // NOPMD (ClassLoader) this.classAndMethodContainer = new ClassAndMethodContainer(classLoader); } } diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitEditorBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitEditorBean.java index 18b5fee8d5be0c686cbbe009e97f9dcf84ca9308..678242c146fc1d76e8701316d44d45c44198c469 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitEditorBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitEditorBean.java @@ -227,7 +227,7 @@ public final class CurrentCockpitEditorBean { private void reloadClassLoader() throws ProjectLoadException { synchronized (this) { try { - this.classLoader = this.projectService.getClassLoader(this.projectName); // NOPMD (ClassLoader) + this.classLoader = this.projectService.getClassLoader(this.projectName, this); // NOPMD (ClassLoader) } catch (final NullPointerException ex) { throw new ProjectLoadException("Invalid class loader.", ex); } catch (final IOException ex) { diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentControllerBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentControllerBean.java index b9301ad137a20fbb2247809bd28109b62acaee0c..2245572dc5f60fb0e8551724b9544e21ec22e476 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentControllerBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentControllerBean.java @@ -147,7 +147,7 @@ public final class CurrentControllerBean { synchronized (this) { this.addLogEntry("Instantiating Analysis for project '" + this.projectName + "'"); try { - this.projectService.initializeAnalysis(this.projectName, this.projectService.getClassLoader(this.projectName)); // NOPMD (ClassLoader) + this.projectService.initializeAnalysis(this.projectName, this.projectService.getClassLoader(this.projectName, this)); // NOPMD (ClassLoader) } catch (final AnalysisStateException ex) { CurrentControllerBean.LOG.error("The analysis has already been instantiated.", ex); this.addLogEntry(ex); diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/domain/Project.java b/Kieker.WebGUI/src/main/java/kieker/webgui/domain/Project.java new file mode 100644 index 0000000000000000000000000000000000000000..2c5d9f064cd6f71439e5241a53843500a65a439a --- /dev/null +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/domain/Project.java @@ -0,0 +1,50 @@ +/*************************************************************************** + * Copyright 2012 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package kieker.webgui.domain; + +import kieker.analysis.model.analysisMetaModel.MIProject; + +/** + * @author Nils Christian Ehmke + */ +public class Project { + + private MIProject projectInstance; + + public Project(final MIProject projectInstace) { + this.projectInstance = projectInstace; + } + + /** + * Getter for the property {@link Project#projectInstance}. + * + * @return The current value of the property. + */ + public MIProject getProjectInstance() { + return this.projectInstance; + } + + /** + * Setter for the property {@link Project#projectInstance}. + * + * @param projectInstace + * The new value of the property. + */ + public void setProjectInstance(final MIProject projectInstance) { + this.projectInstance = projectInstance; + } + +} diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/domain/User.java b/Kieker.WebGUI/src/main/java/kieker/webgui/domain/User.java index 5056f1c20e996647ac7b32f97e58caa16c3959d5..e2a5a0b0137d8e4dedaca634819309e1650f6b27 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/domain/User.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/domain/User.java @@ -110,7 +110,7 @@ public class User { public static enum Role { - ROLE_USER(1), ROLE_ADMIN(2); + ROLE_GUEST(0), ROLE_USER(1), ROLE_ADMIN(2); private int id; @@ -126,7 +126,11 @@ public class User { if (id == 2) { return Role.ROLE_ADMIN; } else { - return Role.ROLE_USER; + if (id == 1) { + return Role.ROLE_USER; + } else { + return Role.ROLE_GUEST; + } } } } diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/IProjectDAO.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/IProjectDAO.java index 0453da31f092c68766448f9bd4104d7e8e63a448..bf55230f2588e68a094dbc23bdd8151bfd14afee 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/IProjectDAO.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/IProjectDAO.java @@ -53,7 +53,7 @@ public interface IProjectDAO { * @throws IOException * If something went wrong during the creation of the project. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract void addProject(String projectName) throws ProjectAlreadyExistingException, IOException; @@ -72,7 +72,7 @@ public interface IProjectDAO { * @throws IOException * If something went wrong during the creation of the target-project or during the loading of the source-project. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract void copyProject(String originalProjectName, String newProjectName) throws ProjectNotExistingException, ProjectAlreadyExistingException, IOException; @@ -88,7 +88,7 @@ public interface IProjectDAO { * @throws IOException * If something went wrong during the opening of the project. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract MIProject openProject(String projectName) throws ProjectNotExistingException, IOException; @@ -107,7 +107,7 @@ public interface IProjectDAO { * @throws IOException * If something went wrong during the opening of the project. This can also mean that the given {@link ClassAndMethodContainer} is somehow invalid. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract Object openProject(String projectName, ClassAndMethodContainer classAndMethodContainer) throws ProjectNotExistingException, IOException; @@ -131,7 +131,7 @@ public interface IProjectDAO { * @throws NewerProjectException * If the project on the file system is newer and the overwriteNewerProject-flag has not been set. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract void saveProject(String projectName, MIProject project, long timeStamp, boolean overwriteNewerProject) throws ProjectNotExistingException, IOException, NewerProjectException; @@ -145,7 +145,7 @@ public interface IProjectDAO { * @throws ProjectNotExistingException * If a project with the given name does not exist. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract long getCurrTimeStamp(String projectName) throws ProjectNotExistingException; @@ -163,7 +163,7 @@ public interface IProjectDAO { * @throws LibraryAlreadyExistingException * If a library with the same name exists already. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract void uploadLibrary(UploadedFile file, String projectName) throws ProjectNotExistingException, IOException, LibraryAlreadyExistingException; @@ -178,9 +178,9 @@ public interface IProjectDAO { * @throws IOException * If something went wrong during the initialization of the class loader. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional - public abstract ClassLoader getClassLoader(String projectName) throws ProjectNotExistingException, IOException; + public ClassLoader getClassLoader(final String projectName, final Object requester) throws ProjectNotExistingException, IOException; /** * This method lists all available libraries of the given project. @@ -191,7 +191,7 @@ public interface IProjectDAO { * @throws ProjectNotExistingException * If a project with the given name does not exist. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract List<String> listAllLibraries(String projectName) throws ProjectNotExistingException; @@ -200,7 +200,7 @@ public interface IProjectDAO { * * @return A list containing all available project names. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract Collection<String> listAllProjects(); @@ -215,7 +215,7 @@ public interface IProjectDAO { * @throws MalformedURLException * If the URL is for some reason invalid. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract URL getURL(MIDependency lib, String project) throws MalformedURLException; @@ -224,7 +224,7 @@ public interface IProjectDAO { * * @return The kieker library. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract URL getKiekerURL(); @@ -235,7 +235,7 @@ public interface IProjectDAO { * The name of the project. * @return The kax-file of the project. */ - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("isAuthenticated()") @Transactional public abstract File getProjectFile(String projectName); diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/FSProjectDAOImpl.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/FSProjectDAOImpl.java index c7a475743dd43c919e28b4c28d996bde9cdee5f9..f7b3951797aec1e4031ecefa2a6b521c55fa3c31 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/FSProjectDAOImpl.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/FSProjectDAOImpl.java @@ -23,9 +23,9 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.lang.ref.WeakReference; import java.net.MalformedURLException; import java.net.URL; -import java.net.URLClassLoader; import java.nio.channels.ByteChannel; import java.nio.channels.FileChannel; import java.security.AccessController; @@ -33,6 +33,12 @@ import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; + +import org.springframework.util.WeakReferenceMonitor; +import org.springframework.util.WeakReferenceMonitor.ReleaseListener; import kieker.analysis.AnalysisController; import kieker.analysis.model.analysisMetaModel.MIAnalysisMetaModelFactory; @@ -47,13 +53,14 @@ import kieker.webgui.common.exception.NewerProjectException; import kieker.webgui.common.exception.ProjectAlreadyExistingException; import kieker.webgui.common.exception.ProjectNotExistingException; import kieker.webgui.persistence.IProjectDAO; +import kieker.webgui.persistence.impl.util.CloseableURLClassLoader; import org.primefaces.model.UploadedFile; /** * @author Nils Christian Ehmke */ -public class FSProjectDAOImpl implements IProjectDAO { +public class FSProjectDAOImpl implements IProjectDAO, ReleaseListener { private static final Log LOG = LogFactory.getLog(FSProjectDAOImpl.class); private static final String KAX_EXTENSION = "kax"; @@ -70,6 +77,7 @@ public class FSProjectDAOImpl implements IProjectDAO { private static final int BUF_SIZE_BYTES = 1024 * 1024; private final MIAnalysisMetaModelFactory factory = new MAnalysisMetaModelFactory(); + private final Map<CloseableURLClassLoader, WeakReference<Object>> classLoaders = new ConcurrentHashMap<CloseableURLClassLoader, WeakReference<Object>>(); /** * Default constructor. <b>Do not use this constructor. This bean is Spring managed.</b> @@ -333,7 +341,7 @@ public class FSProjectDAOImpl implements IProjectDAO { * @see kieker.webgui.persistence.IProjectDAO#getClassLoader(java.lang.String) */ @Override - public ClassLoader getClassLoader(final String projectName) throws ProjectNotExistingException, IOException { + public ClassLoader getClassLoader(final String projectName, final Object requester) throws ProjectNotExistingException, IOException { // Check whether the project exists if (!this.projectExists(projectName)) { throw new ProjectNotExistingException("A project with the name '" + projectName + "' does not exist."); @@ -363,7 +371,13 @@ public class FSProjectDAOImpl implements IProjectDAO { // Now assemble the URL class loader final PrivilegedClassLoaderAction action = new PrivilegedClassLoaderAction(libs); - return AccessController.doPrivileged(action); + final CloseableURLClassLoader classLoader = AccessController.doPrivileged(action); + + // Remember the requester + this.classLoaders.put(classLoader, new WeakReference<Object>(requester)); + WeakReferenceMonitor.monitor(requester, this); + + return classLoader; } /* @@ -572,7 +586,7 @@ public class FSProjectDAOImpl implements IProjectDAO { * @author Nils Christian Ehmke * @version 1.0 */ - private static class PrivilegedClassLoaderAction implements PrivilegedAction<URLClassLoader> { + private static class PrivilegedClassLoaderAction implements PrivilegedAction<CloseableURLClassLoader> { /** * The list of libraries used to create the class loader. */ @@ -594,9 +608,41 @@ public class FSProjectDAOImpl implements IProjectDAO { * @return The class loader. */ @Override - public URLClassLoader run() { + public CloseableURLClassLoader run() { // We use "null" as an explicit parent to make sure that the class loader is completely independent from the web gui class loader. - return new URLClassLoader(this.libs.toArray(new URL[this.libs.size()]), null); + return new CloseableURLClassLoader(this.libs.toArray(new URL[this.libs.size()]), null); + } + } + + /* + * (non-Javadoc) + * + * @see org.springframework.util.WeakReferenceMonitor.ReleaseListener#released() + */ + @Override + public void released() { + synchronized (this.classLoaders) { + int open = 0; + + final List<CloseableURLClassLoader> toBeRemoved = new ArrayList<CloseableURLClassLoader>(); + // Run through the class loaders and check which of them can be closed + for (final Entry<CloseableURLClassLoader, WeakReference<Object>> entry : this.classLoaders.entrySet()) { + if (entry.getValue().get() == null) { + toBeRemoved.add(entry.getKey()); + } else { + open++; + } + } + for (final CloseableURLClassLoader classLoader : toBeRemoved) { + try { + classLoader.close(); + this.classLoaders.remove(classLoader); + FSProjectDAOImpl.LOG.info("Closed classloader (" + classLoader + ")"); + } catch (final IOException ex) { + FSProjectDAOImpl.LOG.error("Could not close classloader (" + classLoader + ")"); + } + } + FSProjectDAOImpl.LOG.info(open + " classloaders still open."); } } diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/CloseableURLClassLoader.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/CloseableURLClassLoader.java new file mode 100644 index 0000000000000000000000000000000000000000..0b75d894667054f10fecc9548cf747b3857f663c --- /dev/null +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/CloseableURLClassLoader.java @@ -0,0 +1,73 @@ +/*************************************************************************** + * Copyright 2012 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package kieker.webgui.persistence.impl.util; + +import java.io.Closeable; +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Collection; + +/** + * A class loader which extends the {@link URLClassLoader} with a close-method using a hack. This will probably only work for a Sun VM. + * + * @author Nils Christian Ehmke + */ +public class CloseableURLClassLoader extends URLClassLoader implements Closeable { + + /* + * (non-Javadoc) + * + * @see URLClassLoader#URLClassLoader(URL[], ClassLoader) + */ + public CloseableURLClassLoader(final URL[] urls, final ClassLoader parent) { + super(urls, parent); + } + + /* + * (non-Javadoc) + * + * @see java.io.Closeable#close() + */ + @Override + public void close() throws IOException { + try { + final Class<URLClassLoader> clazz = URLClassLoader.class; + final java.lang.reflect.Field ucp = clazz.getDeclaredField("ucp"); + ucp.setAccessible(true); + + final Object sun_misc_URLClassPath = ucp.get(this); + final java.lang.reflect.Field loaders = sun_misc_URLClassPath.getClass().getDeclaredField("loaders"); + loaders.setAccessible(true); + + final Object java_util_Collection = loaders.get(sun_misc_URLClassPath); + for (final Object sun_misc_URLClassPath_JarLoader : ((Collection<?>) java_util_Collection).toArray()) { + try { + final java.lang.reflect.Field loader = sun_misc_URLClassPath_JarLoader.getClass().getDeclaredField("jar"); + loader.setAccessible(true); + final Object java_util_jar_JarFile = loader.get(sun_misc_URLClassPath_JarLoader); + ((java.util.jar.JarFile) java_util_jar_JarFile).close(); + } catch (final Throwable t) { + // if we got this far, this is probably not a JAR loader so skip it + } + } + } catch (final Throwable ex) { + // probably not a SUN VM + throw new IOException("Not a Sun VM.", ex); + } + } + +} diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java index 92ca6832c3913d5a03a9096ef755412e49fb9add..e47fae9d0e178e76739b9a5b707df5325659e1bb 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java @@ -168,7 +168,7 @@ public interface IProjectService { * @throws IOException * If something went wrong during the initialization of the class loader. */ - public ClassLoader getClassLoader(final String projectName) throws ProjectNotExistingException, IOException; + public ClassLoader getClassLoader(final String projectName, final Object requester) throws ProjectNotExistingException, IOException; /** * This method lists all available libraries of the given project. diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/ProjectServiceImpl.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/ProjectServiceImpl.java index 9b3b79470afe5df7297637fb3dd8786514da4930..0f81448fc9ee8533579783187f325fadfc29243c 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/ProjectServiceImpl.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/ProjectServiceImpl.java @@ -36,10 +36,10 @@ import kieker.webgui.common.exception.LibraryLoadException; import kieker.webgui.common.exception.NewerProjectException; import kieker.webgui.common.exception.ProjectAlreadyExistingException; import kieker.webgui.common.exception.ProjectNotExistingException; -import kieker.webgui.common.util.ACManager; -import kieker.webgui.common.util.PluginFinder; import kieker.webgui.persistence.IProjectDAO; import kieker.webgui.service.IProjectService; +import kieker.webgui.service.impl.util.ACManager; +import kieker.webgui.service.impl.util.PluginFinder; import org.primefaces.model.UploadedFile; @@ -173,11 +173,11 @@ public final class ProjectServiceImpl implements IProjectService { } @Override - public ClassLoader getClassLoader(final String projectName) throws ProjectNotExistingException, IOException { + public ClassLoader getClassLoader(final String projectName, final Object requester) throws ProjectNotExistingException, IOException { final Object projectLock = this.getLock(projectName, this.fileSystemLocks); synchronized (projectLock) { - return this.projectDAO.getClassLoader(projectName); // NOPMD (ClassLoader) + return this.projectDAO.getClassLoader(projectName, requester); // NOPMD (ClassLoader) } } diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/util/ACManager.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/ACManager.java similarity index 99% rename from Kieker.WebGUI/src/main/java/kieker/webgui/common/util/ACManager.java rename to Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/ACManager.java index 11c315314cb410e3da824647ffc154ed5effa20a..0471b9895cf3d7685f0e3203a80260e120b868ad 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/util/ACManager.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/ACManager.java @@ -14,7 +14,7 @@ * limitations under the License. ***************************************************************************/ -package kieker.webgui.common.util; +package kieker.webgui.service.impl.util; import java.util.concurrent.ConcurrentHashMap; diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/util/Analysis.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/Analysis.java similarity index 99% rename from Kieker.WebGUI/src/main/java/kieker/webgui/common/util/Analysis.java rename to Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/Analysis.java index 74180ef306d141f8c85ae3f615a218fcd8da9b65..bf72d284ba58ad230aa1b15efe00cb9342111d4b 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/util/Analysis.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/Analysis.java @@ -14,7 +14,7 @@ * limitations under the License. ***************************************************************************/ -package kieker.webgui.common.util; +package kieker.webgui.service.impl.util; import java.io.File; import java.lang.reflect.InvocationTargetException; diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/util/PluginFinder.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/PluginFinder.java similarity index 99% rename from Kieker.WebGUI/src/main/java/kieker/webgui/common/util/PluginFinder.java rename to Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/PluginFinder.java index 8e414cb19c262ad82e9706a1d60eb4ea92777a13..177c5afb7f0ee66203dbe731d5ee0954333e5c2b 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/util/PluginFinder.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/PluginFinder.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. ***************************************************************************/ -package kieker.webgui.common.util; +package kieker.webgui.service.impl.util; import java.io.IOException; import java.net.URL; diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/package-info.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..9ee712888aaf6dc7ee3545e92a6d676dfd75e2d6 --- /dev/null +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/package-info.java @@ -0,0 +1,20 @@ +/*************************************************************************** + * Copyright 2012 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ + +/** + * @author Nils Christian Ehmke + */ +package kieker.webgui.service.impl.util; \ No newline at end of file diff --git a/Kieker.WebGUI/src/main/webapp/WEB-INF/spring-bean-config.xml b/Kieker.WebGUI/src/main/webapp/WEB-INF/spring-bean-config.xml index a612d99579f2e316bce4fb2e1a5d10d93f032d21..4cd740b51d111d333276bd9e0827e9dd3c01ea23 100644 --- a/Kieker.WebGUI/src/main/webapp/WEB-INF/spring-bean-config.xml +++ b/Kieker.WebGUI/src/main/webapp/WEB-INF/spring-bean-config.xml @@ -7,13 +7,13 @@ <!-- The singleton scoped beans. --> <bean id="projectDAO" class="kieker.webgui.persistence.impl.FSProjectDAOImpl" init-method="initialize"/> - <bean id="pluginFinder" class="kieker.webgui.common.util.PluginFinder" /> + <bean id="pluginFinder" class="kieker.webgui.service.impl.util.PluginFinder" /> <bean id="projectService" class="kieker.webgui.service.impl.ProjectServiceImpl"> <property name="projectDAO" ref="projectDAO" /> <property name="acManager" ref="acManager" /> <property name="pluginFinder" ref="pluginFinder" /> </bean> - <bean id="acManager" class="kieker.webgui.common.util.ACManager"> + <bean id="acManager" class="kieker.webgui.service.impl.util.ACManager"> <property name="projectDAO" ref="projectDAO" /> </bean> <bean id="projectsBean" lazy-init="true" class="kieker.webgui.beans.application.ProjectsBean" init-method="initialize">