diff options
author | Godin <mandrikov@gmail.com> | 2010-10-16 22:18:26 +0000 |
---|---|---|
committer | Godin <mandrikov@gmail.com> | 2010-10-16 22:18:26 +0000 |
commit | 6636cf363ef274e817efec8885a183cf6e0fc3e2 (patch) | |
tree | 73e52b7b7a2ec9dff38d8fd6a510225a152db39a /sonar-server/src | |
parent | 300f7336934c36d0624190985434a60ebbcc21d0 (diff) | |
download | sonarqube-6636cf363ef274e817efec8885a183cf6e0fc3e2.tar.gz sonarqube-6636cf363ef274e817efec8885a183cf6e0fc3e2.zip |
SONAR-1862:
* Upgrade to sonar-update-center-common 0.3-SNAPSHOT
* Add column 'child_first_classloader' to table 'plugins'
* Add possibility to use child-first classloader
Diffstat (limited to 'sonar-server/src')
6 files changed, 57 insertions, 14 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/plugins/PluginClassLoaders.java b/sonar-server/src/main/java/org/sonar/server/plugins/PluginClassLoaders.java index c819bc3a623..73f66de5618 100644 --- a/sonar-server/src/main/java/org/sonar/server/plugins/PluginClassLoaders.java +++ b/sonar-server/src/main/java/org/sonar/server/plugins/PluginClassLoaders.java @@ -36,16 +36,16 @@ public class PluginClassLoaders implements ServerComponent { private ClassLoadersCollection classLoaders = new ClassLoadersCollection(getClass().getClassLoader()); public ClassLoader create(PluginMetadata plugin) { - return create(plugin.getKey(), plugin.getDeployedFiles()); + return create(plugin.getKey(), plugin.getDeployedFiles(), plugin.isUseChildFirstClassLoader()); } - ClassLoader create(String pluginKey, Collection<File> classloaderFiles) { + ClassLoader create(String pluginKey, Collection<File> classloaderFiles, boolean useChildFirstClassLoader) { try { List<URL> urls = new ArrayList<URL>(); for (File file : classloaderFiles) { urls.add(toUrl(file)); } - return classLoaders.createClassLoader(pluginKey, urls); + return classLoaders.createClassLoader(pluginKey, urls, useChildFirstClassLoader); } catch (MalformedURLException e) { throw new RuntimeException("Fail to load the classloader of the plugin: " + pluginKey, e); } diff --git a/sonar-server/src/main/java/org/sonar/server/plugins/PluginMetadata.java b/sonar-server/src/main/java/org/sonar/server/plugins/PluginMetadata.java index 834e3a630b0..58410f2cbd8 100644 --- a/sonar-server/src/main/java/org/sonar/server/plugins/PluginMetadata.java +++ b/sonar-server/src/main/java/org/sonar/server/plugins/PluginMetadata.java @@ -46,6 +46,7 @@ public class PluginMetadata { private String license; private String homepage; private boolean core; + private boolean useChildFirstClassLoader; private String[] dependencyPaths = new String[0]; public List<File> deployedFiles = new ArrayList<File>(); @@ -158,6 +159,13 @@ public class PluginMetadata { return StringUtils.isNotBlank(mainClass); } + public void setUseChildFirstClassLoader(boolean use) { + this.useChildFirstClassLoader = use; + } + + public boolean isUseChildFirstClassLoader() { + return useChildFirstClassLoader; + } public void setDependencyPaths(String[] paths) { this.dependencyPaths = paths; @@ -181,7 +189,9 @@ public class PluginMetadata { @Override public boolean equals(Object o) { - if (this == o) return true; + if (this == o) { + return true; + } if (o == null || getClass() != o.getClass()) { return false; } @@ -218,6 +228,7 @@ public class PluginMetadata { metadata.setHomepage(manifest.getHomepage()); metadata.setDependencyPaths(manifest.getDependencies()); metadata.setCore(corePlugin); + metadata.setUseChildFirstClassLoader(manifest.isUseChildFirstClassLoader()); return metadata; } @@ -231,6 +242,7 @@ public class PluginMetadata { jpaPlugin.setVersion(getVersion()); jpaPlugin.setHomepage(getHomepage()); jpaPlugin.setCore(isCore()); + jpaPlugin.setUseChildFirstClassLoader(isUseChildFirstClassLoader()); jpaPlugin.removeFiles(); for (File file : getDeployedFiles()) { jpaPlugin.createFile(file.getName()); diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/142_add_plugins_child_first_classloader_column.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/142_add_plugins_child_first_classloader_column.rb new file mode 100644 index 00000000000..d14ca6faedf --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/db/migrate/142_add_plugins_child_first_classloader_column.rb @@ -0,0 +1,27 @@ +# +# Sonar, entreprise quality control tool. +# Copyright (C) 2009 SonarSource SA +# mailto:contact AT sonarsource DOT com +# +# Sonar is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3 of the License, or (at your option) any later version. +# +# Sonar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with Sonar; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 +# +class AddPluginsChildFirstClassloaderColumn < ActiveRecord::Migration + + def self.up + add_column 'plugins', 'child_first_classloader', :boolean, :null => true + Plugin.reset_column_information + end + +end diff --git a/sonar-server/src/test/java/org/sonar/server/plugins/PluginClassLoadersTest.java b/sonar-server/src/test/java/org/sonar/server/plugins/PluginClassLoadersTest.java index ed4021ad6d9..d673767c872 100644 --- a/sonar-server/src/test/java/org/sonar/server/plugins/PluginClassLoadersTest.java +++ b/sonar-server/src/test/java/org/sonar/server/plugins/PluginClassLoadersTest.java @@ -19,16 +19,17 @@ */ package org.sonar.server.plugins; -import com.google.common.collect.Lists; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertNull; + import org.junit.Test; import org.sonar.test.TestUtils; +import com.google.common.collect.Lists; + import java.io.File; import java.io.IOException; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertNull; - public class PluginClassLoadersTest { @Test @@ -38,7 +39,7 @@ public class PluginClassLoadersTest { File jar = getFile("foo-plugin.jar"); PluginMetadata metadata = PluginMetadata.createFromJar(jar, false); metadata.addDeployedFile(jar); - + assertNull(getClass().getClassLoader().getResource("foo.txt")); PluginClassLoaders classloaders = new PluginClassLoaders(); @@ -53,7 +54,7 @@ public class PluginClassLoadersTest { File jar = getFile("sonar-build-breaker-plugin-0.1.jar"); PluginClassLoaders classloaders = new PluginClassLoaders(); - classloaders.create("build-breaker", Lists.<File>newArrayList(jar)); + classloaders.create("build-breaker", Lists.<File> newArrayList(jar), false); assertNotNull(classloaders.getClass("build-breaker", "org.sonar.plugins.buildbreaker.BuildBreakerPlugin")); assertNull(classloaders.getClass("build-breaker", "org.sonar.plugins.buildbreaker.Unknown")); diff --git a/sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java b/sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java index 4087029435a..57ec82a5136 100644 --- a/sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java +++ b/sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java @@ -19,6 +19,10 @@ */ package org.sonar.server.plugins; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; + import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Rule; @@ -40,10 +44,6 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.List; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; - public class PluginDeployerTest extends AbstractDbUnitTestCase { private Server server; @@ -80,6 +80,7 @@ public class PluginDeployerTest extends AbstractDbUnitTestCase { assertThat(plugin.getName(), is("Foo")); assertThat(plugin.getFiles().size(), is(1)); assertThat(plugin.isCore(), is(false)); + assertThat(plugin.isUseChildFirstClassLoader(), is(false)); JpaPluginFile pluginFile = plugin.getFiles().get(0); assertThat(pluginFile.getFilename(), is("foo-plugin.jar")); assertThat(pluginFile.getPath(), is("foo/foo-plugin.jar")); @@ -106,6 +107,7 @@ public class PluginDeployerTest extends AbstractDbUnitTestCase { assertThat(plugin.getKey(), is("build-breaker")); assertThat(plugin.getFiles().size(), is(1)); assertThat(plugin.isCore(), is(false)); + assertThat(plugin.isUseChildFirstClassLoader(), is(false)); JpaPluginFile pluginFile = plugin.getFiles().get(0); assertThat(pluginFile.getFilename(), is("sonar-build-breaker-plugin-0.1.jar")); assertThat(pluginFile.getPath(), is("build-breaker/sonar-build-breaker-plugin-0.1.jar")); diff --git a/sonar-server/src/test/java/org/sonar/server/plugins/PluginMetadataTest.java b/sonar-server/src/test/java/org/sonar/server/plugins/PluginMetadataTest.java index b715fa0e207..c664d919f60 100644 --- a/sonar-server/src/test/java/org/sonar/server/plugins/PluginMetadataTest.java +++ b/sonar-server/src/test/java/org/sonar/server/plugins/PluginMetadataTest.java @@ -37,6 +37,7 @@ public class PluginMetadataTest { assertThat(metadata.getMainClass(), is("foo.Main")); assertThat(metadata.getVersion(), is("2.2-SNAPSHOT")); assertThat(metadata.getOrganization(), is("SonarSource")); + assertThat(metadata.isUseChildFirstClassLoader(), is(false)); assertThat(metadata.getDependencyPaths().length, is(0)); assertThat(metadata.isCore(), is(false)); } |