aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server/src
diff options
context:
space:
mode:
authorGodin <mandrikov@gmail.com>2010-10-16 22:18:26 +0000
committerGodin <mandrikov@gmail.com>2010-10-16 22:18:26 +0000
commit6636cf363ef274e817efec8885a183cf6e0fc3e2 (patch)
tree73e52b7b7a2ec9dff38d8fd6a510225a152db39a /sonar-server/src
parent300f7336934c36d0624190985434a60ebbcc21d0 (diff)
downloadsonarqube-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')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/plugins/PluginClassLoaders.java6
-rw-r--r--sonar-server/src/main/java/org/sonar/server/plugins/PluginMetadata.java14
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/db/migrate/142_add_plugins_child_first_classloader_column.rb27
-rw-r--r--sonar-server/src/test/java/org/sonar/server/plugins/PluginClassLoadersTest.java13
-rw-r--r--sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java10
-rw-r--r--sonar-server/src/test/java/org/sonar/server/plugins/PluginMetadataTest.java1
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));
}