start implementation of isolated classloaders

This commit is contained in:
Sebastian Sdorra
2014-06-06 08:57:41 +02:00
parent 18c5c3ec97
commit 1d6db4424b
41 changed files with 1391 additions and 2430 deletions

View File

@@ -30,6 +30,7 @@
*/
package sonia.scm.resources;
//~--- non-JDK imports --------------------------------------------------------
@@ -37,7 +38,7 @@ package sonia.scm.resources;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.boot.BootstrapUtil;
import sonia.scm.plugin.PluginLoader;
import sonia.scm.util.IOUtil;
import sonia.scm.util.Util;
@@ -72,14 +73,16 @@ public abstract class AbstractResource implements Resource
*
*
* @param servletContext
* @param pluginLoader
* @param resources
* @param resourceHandlers
*/
public AbstractResource(ServletContext servletContext,
List<String> resources,
List<ResourceHandler> resourceHandlers)
PluginLoader pluginLoader, List<String> resources,
List<ResourceHandler> resourceHandlers)
{
this.servletContext = servletContext;
this.pluginLoader = pluginLoader;
this.resources = resources;
this.resourceHandlers = resourceHandlers;
}
@@ -128,7 +131,7 @@ public abstract class AbstractResource implements Resource
* @throws IOException
*/
private void appendResource(OutputStream stream, String resource)
throws IOException
throws IOException
{
InputStream input = getResourceAsStream(resource);
@@ -152,7 +155,7 @@ public abstract class AbstractResource implements Resource
* @throws IOException
*/
private void appendResource(InputStream input, OutputStream stream)
throws IOException
throws IOException
{
if (input != null)
{
@@ -180,7 +183,7 @@ public abstract class AbstractResource implements Resource
private InputStream getResourceAsStream(String resource)
{
InputStream input = null;
ClassLoader classLoader = BootstrapUtil.getClassLoader(servletContext);
ClassLoader classLoader = pluginLoader.getUberClassLoader();
if (classLoader != null)
{
@@ -204,6 +207,9 @@ public abstract class AbstractResource implements Resource
//~--- fields ---------------------------------------------------------------
/** Field description */
private final PluginLoader pluginLoader;
/** Field description */
protected List<ResourceHandler> resourceHandlers;

View File

@@ -46,6 +46,7 @@ import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletContext;
import sonia.scm.plugin.PluginLoader;
/**
*
@@ -65,12 +66,12 @@ public class DefaultResource extends AbstractResource
*
* @throws IOException
*/
public DefaultResource(ServletContext servletContext, List<String> resources,
public DefaultResource(ServletContext servletContext, PluginLoader pluginLoader, List<String> resources,
List<ResourceHandler> resourceHandlers,
ResourceType type)
throws IOException
{
super(servletContext, resources, resourceHandlers);
super(servletContext, pluginLoader, resources, resourceHandlers);
this.type = type;
ByteArrayOutputStream baos = new ByteArrayOutputStream();

View File

@@ -30,10 +30,12 @@
*/
package sonia.scm.resources;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -46,7 +48,6 @@ import sonia.scm.plugin.PluginLoader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -79,8 +80,7 @@ public class DefaultResourceManager extends AbstractResourceManager
*/
@Inject
public DefaultResourceManager(ServletContext servletContext,
PluginLoader pluginLoader,
Set<ResourceHandler> resourceHandlers)
PluginLoader pluginLoader, Set<ResourceHandler> resourceHandlers)
{
super(servletContext, pluginLoader, resourceHandlers);
}
@@ -100,12 +100,12 @@ public class DefaultResourceManager extends AbstractResourceManager
try
{
Resource resource = new DefaultResource(servletContext, resources,
new ArrayList<ResourceHandler>(resourceHandlers),
Resource resource = new DefaultResource(servletContext, pluginLoader,
resources, Lists.newArrayList(resourceHandlers),
ResourceType.SCRIPT);
resourceMap.put(new ResourceKey(resource.getName(), ResourceType.SCRIPT),
resource);
resource);
}
catch (IOException ex)
{

View File

@@ -30,10 +30,12 @@
*/
package sonia.scm.resources;
//~--- non-JDK imports --------------------------------------------------------
import sonia.scm.plugin.PluginLoader;
import sonia.scm.util.HttpUtil;
//~--- JDK imports ------------------------------------------------------------
@@ -58,17 +60,17 @@ public class DevelopmentResource extends AbstractResource
*
*
* @param servletContext
* @param pluginLoader
* @param resources
* @param resourceHandlers
* @param name
* @param type
*/
public DevelopmentResource(ServletContext servletContext,
List<String> resources,
List<ResourceHandler> resourceHandlers,
String name, ResourceType type)
PluginLoader pluginLoader, List<String> resources,
List<ResourceHandler> resourceHandlers, String name, ResourceType type)
{
super(servletContext, resources, resourceHandlers);
super(servletContext, pluginLoader, resources, resourceHandlers);
this.type = type;
if (name.startsWith(HttpUtil.SEPARATOR_PATH))

View File

@@ -30,6 +30,7 @@
*/
package sonia.scm.resources;
//~--- non-JDK imports --------------------------------------------------------
@@ -72,8 +73,7 @@ public class DevelopmentResourceManager extends AbstractResourceManager
*/
@Inject
public DevelopmentResourceManager(ServletContext servletContext,
PluginLoader pluginLoader,
Set<ResourceHandler> resourceHandlers)
PluginLoader pluginLoader, Set<ResourceHandler> resourceHandlers)
{
super(servletContext, pluginLoader, resourceHandlers);
}
@@ -94,12 +94,12 @@ public class DevelopmentResourceManager extends AbstractResourceManager
for (String script : scripts)
{
Resource resource = new DevelopmentResource(servletContext,
Resource resource = new DevelopmentResource(servletContext, pluginLoader,
Arrays.asList(script), Collections.EMPTY_LIST,
script, ResourceType.SCRIPT);
resourceMap.put(new ResourceKey(resource.getName(), ResourceType.SCRIPT),
resource);
resource);
}
for (ResourceHandler handler : resourceHandlers)
@@ -113,9 +113,9 @@ public class DevelopmentResourceManager extends AbstractResourceManager
name = PREFIX_HANDLER.concat(name);
resourceMap.put(new ResourceKey(name, ResourceType.SCRIPT),
new DevelopmentResource(servletContext,
Collections.EMPTY_LIST, Arrays.asList(handler), name,
ResourceType.SCRIPT));
new DevelopmentResource(servletContext, pluginLoader,
Collections.EMPTY_LIST, Arrays.asList(handler), name,
ResourceType.SCRIPT));
}
}
}