diff --git a/jetty-overlay-deployer/pom.xml b/jetty-overlay-deployer/pom.xml
deleted file mode 100644
index 9f0a73b98c5..00000000000
--- a/jetty-overlay-deployer/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
- org.eclipse.jetty
- jetty-project
- 9.1.0-SNAPSHOT
-
- 4.0.0
- jetty-overlay-deployer
- Jetty :: Overlay Deployer
- Overlayed deployer
- http://www.eclipse.org/jetty
-
- ${project.groupId}.overlays
-
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
-
-
- package
-
- single
-
-
-
- ${basedir}/src/main/assembly/config.xml
-
-
-
-
-
-
-
-
-
- org.eclipse.jetty
- jetty-deploy
- ${project.version}
-
-
- org.eclipse.jetty
- jetty-server
- ${project.version}
-
-
- org.eclipse.jetty
- jetty-plus
- ${project.version}
-
-
- javax.transaction
- javax.transaction-api
- test
-
-
- org.eclipse.jetty.toolchain
- jetty-test-helper
- test
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/main/assembly/config.xml b/jetty-overlay-deployer/src/main/assembly/config.xml
deleted file mode 100644
index b9b398e630e..00000000000
--- a/jetty-overlay-deployer/src/main/assembly/config.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
- config
- false
-
- jar
-
-
-
- src/main/config
-
-
- etc/**
- overlays/**
-
-
-
-
diff --git a/jetty-overlay-deployer/src/main/config/etc/jetty-overlay.xml b/jetty-overlay-deployer/src/main/config/etc/jetty-overlay.xml
deleted file mode 100644
index 60f23d677cb..00000000000
--- a/jetty-overlay-deployer/src/main/config/etc/jetty-overlay.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- [
-
-
-
- /overlays
-
- 1
-
-
-
- ]
-
diff --git a/jetty-overlay-deployer/src/main/config/modules/overlay.mod b/jetty-overlay-deployer/src/main/config/modules/overlay.mod
deleted file mode 100644
index 8522e997103..00000000000
--- a/jetty-overlay-deployer/src/main/config/modules/overlay.mod
+++ /dev/null
@@ -1,14 +0,0 @@
-DO NOT EDIT - See: https://www.eclipse.org/jetty/documentation/current/startup-modules.html
-
-[description]
-Enable the jetty overlay deployer that allows
-webapplications to be dynamically composed of layers.
-
-[depend]
-deploy
-
-[lib]
-lib/jetty-overlay-deployer-${jetty.version}.jar
-
-[xml]
-etc/jetty-overlay.xml
diff --git a/jetty-overlay-deployer/src/main/config/overlays/instances/README.TXT b/jetty-overlay-deployer/src/main/config/overlays/instances/README.TXT
deleted file mode 100644
index 5dda0e30496..00000000000
--- a/jetty-overlay-deployer/src/main/config/overlays/instances/README.TXT
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-Cloudtide instance
-===================
-
-This directory contains overlays (as directories or jars) that
-are define instances of templates to be deployed.
-
-An instance filename consists of a template name, the '=' character (or '--' string)
-and then an instance identifier. For example:
-
- mytemplate=redInstance
-
-This defines a instance called redInstance using the template called mytemplate.
-
-An overlay is structed as a WAR, but also may contain:
- * WEB-INF/lib-overlay directory, which can contain jar files made available to
- the overlay.xml configuration (unlike any overlayed WEB-INF/lib jars).
-
- * A WEB-INF/overlay.xml file, which is an XmlConfiguration format file used to
- inject the ContextHandler instance.
-
- * A WEB-INF/web-overlay.xml fragment that is applied as an override descriptor
-
- * Static content that overlays the static content of the webapp, node and template.
-
- * WEB-INF/classes and WEB-INF/lib that overlays the code of the webapp, node and template.
diff --git a/jetty-overlay-deployer/src/main/config/overlays/nodes/README.TXT b/jetty-overlay-deployer/src/main/config/overlays/nodes/README.TXT
deleted file mode 100644
index d6e8595a06b..00000000000
--- a/jetty-overlay-deployer/src/main/config/overlays/nodes/README.TXT
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-Cloudtide nodes
-===============
-
-This directory contains overlays (as directories or jars) that
-are applied to all instances for a given node.
-
-An overlay is structed as a WAR, but also may contain:
- * WEB-INF/lib-overlay directory, which can contain jar files made available to
- the overlay.xml configuration (unlike any overlayed WEB-INF/lib jars).
-
- * A WEB-INF/overlay.xml file, which is an XmlConfiguration format file used to
- inject the ContextHandler instance.
-
- * A WEB-INF/web-overlay.xml fragment that is applied as an override descriptor
-
- * Static content that overlays the static content of the webapp, node and template.
-
- * WEB-INF/classes and WEB-INF/lib that overlays the code of the webapp, node and template.
diff --git a/jetty-overlay-deployer/src/main/config/overlays/templates/README.TXT b/jetty-overlay-deployer/src/main/config/overlays/templates/README.TXT
deleted file mode 100644
index 52ed0d236ed..00000000000
--- a/jetty-overlay-deployer/src/main/config/overlays/templates/README.TXT
+++ /dev/null
@@ -1,32 +0,0 @@
-
-Cloudtide templates
-===================
-
-This directory contains overlays (as directories or jars) that
-are applied to webapps to create templates. Templates are not directly
-deployed, but are used by overlays in the instances directory.
-
-A Template filename consists of a template name, the '=' character and
-then the webapp name. For example:
-
- mytemplate=mywebapp-1.2.3
-
-This defines a template called mytemplate that overlays either the mywebapp-1.2.3.war
-file or the mywebapp-1.2.3 directory in cloudtide/webapps.
-
-An overlay is structed as a WAR, and may contain:
- * WEB-INF/template.xml a XmlConfiguration formatted file that is applied to a shared
- instance of TemplateContext to provide the common classloader and resource cache to
- all instances of the template.
-
- * WEB-INF/lib-overlay directory, which can contain jar files made available to
- the overlay.xml configuration (unlike any overlayed WEB-INF/lib jars).
-
- * A WEB-INF/overlay.xml file, which is an XmlConfiguration format file used to
- inject the ContextHandler instance.
-
- * A WEB-INF/web-overlay.xml fragment that is applied as an override descriptor
-
- * Static content that overlays the static content of the webapp, node and template.
-
- * WEB-INF/classes and WEB-INF/lib that overlays the code of the webapp, node and template.
diff --git a/jetty-overlay-deployer/src/main/config/overlays/webapps/README.TXT b/jetty-overlay-deployer/src/main/config/overlays/webapps/README.TXT
deleted file mode 100644
index f709dce94d7..00000000000
--- a/jetty-overlay-deployer/src/main/config/overlays/webapps/README.TXT
+++ /dev/null
@@ -1,6 +0,0 @@
-
-Cloudtide webapplication
-------------------------
-
-This directory contains webapplication directories or war files that are used by the
-cloudtide templates
diff --git a/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/OverlayedAppProvider.java b/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/OverlayedAppProvider.java
deleted file mode 100644
index dc2d0c2ae7a..00000000000
--- a/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/OverlayedAppProvider.java
+++ /dev/null
@@ -1,1523 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.overlays;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Timer;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.eclipse.jetty.deploy.App;
-import org.eclipse.jetty.deploy.AppProvider;
-import org.eclipse.jetty.deploy.ConfigurationManager;
-import org.eclipse.jetty.deploy.DeploymentManager;
-import org.eclipse.jetty.jndi.java.javaRootURLContext;
-import org.eclipse.jetty.jndi.local.localContextRoot;
-import org.eclipse.jetty.server.ResourceCache;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.ContextHandler;
-import org.eclipse.jetty.servlet.Holder;
-import org.eclipse.jetty.servlet.ServletHandler;
-import org.eclipse.jetty.util.IO;
-import org.eclipse.jetty.util.Scanner;
-import org.eclipse.jetty.util.component.AbstractLifeCycle;
-import org.eclipse.jetty.util.log.Logger;
-import org.eclipse.jetty.util.resource.JarResource;
-import org.eclipse.jetty.util.resource.Resource;
-import org.eclipse.jetty.util.resource.ResourceCollection;
-import org.eclipse.jetty.webapp.JettyWebXmlConfiguration;
-import org.eclipse.jetty.webapp.WebAppClassLoader;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.eclipse.jetty.xml.XmlConfiguration;
-import org.xml.sax.SAXException;
-
-/**
- * Overlayed AppProvider
- *
- * This {@link AppProvider} implementation can deploy either {@link WebAppContext}s or plain
- * {@link ContextHandler}s that are assembled from a series of overlays:
- *
- * - webapp
- The webapp overlay is a WAR file or docroot directory. The intent is that
- * the WAR should be deployed to this AppProvider unchanged from how it was delivered. All configuration
- * and extension should be able to be done in an overlay.
- * - template
- A template overlay is applied to a WAR file to configure it for all instances of
- * the webapp to be deployed in the server(s)
- * - node
- A node overlay is applied to a template to configure it all instances of the template
- * with node specific information (eg IP address, DB servers etc.).
- * - instance
- An instance overlay is applied to a node and/or template to configure it
- * for a specific instance of the template (eg per tenant configuration).
- *
- *
- * Each overlays may provide the following files and subdirectories:
- * - WEB-INF/lib-overlay
- * - The lib-overlay directory can contain jars that are applied to a {@link URLClassLoader} that is
- * available before any overlay.xml files are executed, so that classes from these jars may be used by the
- * overlay.xml.
- *
- * - WEB-INF/overlay.xml
- * - This {@link XmlConfiguration} formatted file must exist in the WEB-INF directory of an overlay and is
- * used to configure a {@link ContextHandler} or {@link WebAppContext}. The overlay.xml from the template
- * overlay can be used to instantiate the ContextHandler instance, so a derived class maybe used.
- *
- * - WEB-INF/template.xml
- * - This {@link XmlConfiguration} formatted file if it exists in a template or node overlay, is applied to a shared instance of {@link TemplateContext}.
- * Any ID's created in a template are available as ID's in overlay.xml for an instance.
- *
- * - WEB-INF/webdefault.xml
- * - If present in an overlay, then the most specific version is passed to
- * {@link WebAppContext#setDefaultsDescriptor(String)}. Typically this is set in the template overlay.
- *
- * - WEB-INF/web-overlay.xml
- * - The web-overlay.xml file of an overlay is applied to a web application as
- * with {@link WebAppContext#addOverrideDescriptor(String)}. This allows incremental changes to web.xml without
- * totally replacing it (see webapp). Typically this is used to set init parameters.
- *
- * - .
- * - This root directory contains static content that overlays the static content of the webapp
- * or earlier overlays. Using this directory, files like index.html or logo.png can be added or replaced. It can
- * also be used to replace files within WEB-INF including web.xml classes and libs.
- *
- *
- * Any init parameters set on the context, filters or servlets may have parameterized values, with the parameters
- * including:
- *
- * - ${overlays.dir}
- * - the root overlay scan directory as a canonical file name.
- * - ${overlay.webapp}
- * - the webapp name, same as {@link Webapp#getName()}.
- * - ${overlay.template}
- * - the template name, as {@link Template#getName()}.
- * - ${overlay.template.name}
- * - the template classifier, as {@link Template#getTemplateName()}.
- * - ${overlay.template.classifier}
- * - the template classifier, as {@link Template#getClassifier()()}.
- * - ${overlay.node}
- * - the node name, as {@link Node#getName()}.
- * - ${overlay.instance}
- * - the instance name, {@link Instance#getName()}.
- * - ${overlay.instance.classifier}
- * - the instance name, {@link Instance#getClassifier()()}.
- * - ${*}
- * - Any properties obtained via {@link #getConfigurationManager()}.{@link ConfigurationManager#getProperties()}
- *
- *
- *
- * The OverlayedAppProvider will scan the "webapps", "templates", "nodes" and "instances" subdirectories of
- * the directory configured with {@link #setScanDir(File)}. New webapps and overlays and modified files within
- * the overlays will trigger hot deployment, redeployment or undeployment. The scan for modified files is
- * restricted to only top level files (eg overlay.xml) and the files matching WEB-INF/*.xml WEB-INF/lib/*
- * and WEB-INF/classes/*. The webapps/overlays may be directory structures or war/jar archives.
- *
- * The filenames of the templates and instances are used to match them together and with a webapplication.
- * A webapp may be named anyway, but it is good practise to include a version number (eg webapps/foo-1.2.3.war
- * or webapps/foo-1.2.3/). A template for that webapplication must have a name that includes the template name
- * and the war name separated by '=' (eg templates/myFoo=foo-1.2.3.jar or templates/myFoo=foo-1.2.3/).
- * An instance overlay is named with the template name and an arbitrary instance name separated by '='
- * (eg instances/myFoo=instance1.jar instances/myFoo=instance2/ etc.).
- *
- * If a template name does not include a webapp name, then the template is created as a ContextHandler
- * instead of a WebAppContext (with the exact type being determined by overlay.xml).
- */
-public class OverlayedAppProvider extends AbstractLifeCycle implements AppProvider
-{
- private final static Logger __log=org.eclipse.jetty.util.log.Log.getLogger("OverlayedAppProvider");
- /**
- * Property set for overlay.xml and template.xml files that gives the root overlay scan directory as a canonical file name.
- */
- public final static String OVERLAYS_DIR="overlays.dir";
- /**
- * Property set for overlay.xml and template.xml files that gives the current webapp name, as {@link Webapp#getName()}.
- */
- public final static String OVERLAY_WEBAPP="overlay.webapp";
- /**
- * Property set for overlay.xml and template.xml files that gives the current template full name, as {@link Template#getName()}.
- */
- public final static String OVERLAY_TEMPLATE="overlay.template";
- /**
- * Property set for overlay.xml and template.xml files that gives the current template name, as {@link Template#getTemplateName()}.
- */
- public final static String OVERLAY_TEMPLATE_NAME="overlay.template.name";
- /**
- * Property set for overlay.xml and template.xml files that gives the current template classifier, as {@link Template#getClassifier()}.
- */
- public final static String OVERLAY_TEMPLATE_CLASSIFIER="overlay.template.classifier";
- /**
- * Property set for overlay.xml and template.xml files that gives the current node name, as {@link Node#getName()}.
- */
- public final static String OVERLAY_NODE="overlay.node";
- /**
- * Property set for overlay.xml and template.xml files that gives the current instance name, {@link Instance#getName()}.
- */
- public final static String OVERLAY_INSTANCE="overlay.instance";
- /**
- * Property set for overlay.xml and template.xml files that gives the current instance clasifier, {@link Instance#getClassifier()}.
- */
- public final static String OVERLAY_INSTANCE_CLASSIFIER="overlay.instance.classifier";
-
- public final static String WEBAPPS="webapps";
- public final static String TEMPLATES="templates";
- public final static String NODES="nodes";
- public final static String INSTANCES="instances";
-
- public final static String LIB="WEB-INF/lib-overlay";
- public final static String WEBAPP=".";
- public final static String OVERLAY_XML="WEB-INF/overlay.xml";
- public final static String TEMPLATE_XML="WEB-INF/template.xml";
- public final static String WEB_DEFAULT_XML="WEB-INF/web-default.xml";
- public final static String WEB_FRAGMENT_XML="WEB-INF/web-overlay.xml";
-
- enum Monitor { WEBAPPS,TEMPLATES,NODES,INSTANCES} ;
-
- public final static List __scanPatterns = new ArrayList();
-
- static
- {
- List regexes = new ArrayList();
-
- for (String s:new String[] {".war",".jar","/WEB-INF/syslib/[^/]*","/WEB-INF/lib/[^/]*","/WEB-INF/classes/[^/]*","/WEB-INF/[^/]*\\.xml",})
- {
- regexes.add(WEBAPPS+"/[^/]*"+s);
- regexes.add(TEMPLATES+"/[^/]*"+s);
- regexes.add(NODES+"/[^/]*"+s);
- regexes.add(INSTANCES+"/[^/]*"+s);
- }
-
- for (String s: regexes)
- __scanPatterns.add(Pattern.compile(s,Pattern.CASE_INSENSITIVE));
- };
-
- private String _nodeName;
- private File _scanDir;
- private File _tmpDir;
- private String _scanDirURI;
- private long _loading;
- private Node _node;
- private final Map _webapps = new HashMap();
- private final Map _templates = new HashMap();
- private final Map _instances = new HashMap();
- private final Map _deployed = new HashMap();
- private final Map _shared = new HashMap();
- private boolean _copydir=false;
- private DeploymentManager _deploymentManager;
- private ConfigurationManager _configurationManager;
- private String _serverID="Server";
- private final Set _removedLayers = new HashSet();
- private Timer _sessionScavenger = new Timer();
-
- private final Scanner _scanner = new Scanner();
- private final Scanner.BulkListener _listener = new Scanner.BulkListener()
- {
- public void filesChanged(List filenames) throws Exception
- {
- __log.debug("Changed {}",filenames);
-
- Set changes = new HashSet();
- for (String filename:filenames)
- {
-
- File file=new File(filename);
- if (file.getName().startsWith(".") || file.getName().endsWith(".swp"))
- continue;
-
- String relname=file.toURI().getPath().substring(_scanDirURI.length());
-
- File rel = new File(relname);
-
- String dir=null;
- String name=null;
- String parent=rel.getParent();
- while (parent!=null)
- {
- name=rel.getName();
- dir=parent;
- rel=rel.getParentFile();
- parent=rel.getParent();
- }
-
- String uri=dir+"/"+name;
-
- for (Pattern p : __scanPatterns)
- {
- if (p.matcher(relname).matches())
- {
- __log.debug("{} == {}",relname,p.pattern());
- changes.add(uri);
- }
- else
- __log.debug("{} != {}",relname,p.pattern());
- }
- }
-
- if (changes.size()>0)
- OverlayedAppProvider.this.updateLayers(changes);
- }
- };
-
-
- /* ------------------------------------------------------------ */
- public OverlayedAppProvider()
- {
- try
- {
- _nodeName=InetAddress.getLocalHost().getHostName();
- }
- catch(UnknownHostException e)
- {
- __log.debug(e);
- _nodeName="unknown";
- }
- }
-
-
-
- /* ------------------------------------------------------------ */
- public void setDeploymentManager(DeploymentManager deploymentManager)
- {
- _deploymentManager=deploymentManager;
- }
-
- /* ------------------------------------------------------------ */
- public DeploymentManager getDeploymentManager()
- {
- return _deploymentManager;
- }
-
- /* ------------------------------------------------------------ */
- public ConfigurationManager getConfigurationManager()
- {
- return _configurationManager;
- }
-
- /* ------------------------------------------------------------ */
- /** Set the configurationManager.
- * @param configurationManager the configurationManager to set
- */
- public void setConfigurationManager(ConfigurationManager configurationManager)
- {
- _configurationManager = configurationManager;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @return The name in {@link XmlConfiguration#getIdMap()} of the {@link Server} instance. Default "Server".
- */
- public String getServerID()
- {
- return _serverID;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @param serverID The name in {@link XmlConfiguration#getIdMap()} of the {@link Server} instance.
- */
- public void setServerID(String serverID)
- {
- _serverID = serverID;
- }
-
-
- /**
- * Create Context Handler.
- *
- * Callback from the deployment manager to create a context handler instance.
- * @see org.eclipse.jetty.deploy.AppProvider#createContextHandler(org.eclipse.jetty.deploy.App)
- */
- public synchronized ContextHandler createContextHandler(App app) throws Exception
- {
- final OverlayedApp overlayed = (OverlayedApp)app;
- final String origin = overlayed.getOriginId();
- final Instance instance = overlayed.getInstance();
- final Template template = instance.getTemplate();
- final Webapp webapp = template.getWebapp();
- final Node node = _node;
-
- // remember the original loader
- ClassLoader orig_loader = Thread.currentThread().getContextClassLoader();
- try
- {
- // Look for existing shared resources
- String key=(node==null?"":node.getLoadedKey())+template.getLoadedKey()+(webapp==null?"":webapp.getLoadedKey());
- instance.setSharedKey(key);
-
- TemplateContext shared=_shared.get(key);
- // Create shared resourced
- if (shared==null)
- shared=createTemplateContext(key,webapp,template,node,orig_loader);
-
- // Build the instance lib loader
- ClassLoader shared_loader = shared.getWebappLoader()!=null?shared.getWebappLoader():(shared.getLibLoader()!=null?shared.getLibLoader():orig_loader);
- ClassLoader loader = shared_loader;
- Resource instance_lib = instance.getResource(LIB);
- if (instance_lib.exists())
- {
- List libs = new ArrayList();
- for (String jar :instance_lib.list())
- {
- if (!jar.toLowerCase(Locale.ENGLISH).endsWith(".jar"))
- continue;
- libs.add(instance_lib.addPath(jar).getURL());
- }
-
- __log.debug("{}: libs={}",origin,libs);
- loader = URLClassLoader.newInstance(libs.toArray(new URL[]{}),loader);
- }
-
- // set the thread loader
- Thread.currentThread().setContextClassLoader(loader);
-
- // Create properties to be shared by overlay.xmls
- Map idMap = new HashMap();
- idMap.putAll(shared.getIdMap());
- idMap.put(_serverID,getDeploymentManager().getServer());
-
- // Create the instance context for the template
- ContextHandler context=null;
-
- Resource template_context_xml = template.getResource(OVERLAY_XML);
- if (template_context_xml.exists())
- {
- __log.debug("{}: overlay.xml={}",origin,template_context_xml);
- XmlConfiguration xmlc = newXmlConfiguration(template_context_xml.getURL(),idMap,template,instance);
- context=(ContextHandler)xmlc.configure();
- idMap=xmlc.getIdMap();
- }
- else if (webapp==null)
- // If there is no webapp, this is a plain context
- context=new ContextHandler();
- else
- // It is a webapp context
- context=new WebAppContext();
-
- // Set the resource base
- final Resource instance_webapp = instance.getResource(WEBAPP);
- if (instance_webapp.exists())
- {
- context.setBaseResource(new ResourceCollection(instance_webapp,shared.getBaseResource()));
-
- // Create the resource cache
- ResourceCache cache = new ResourceCache(shared.getResourceCache(),instance_webapp,context.getMimeTypes(),false,false);
- context.setAttribute(ResourceCache.class.getCanonicalName(),cache);
- }
- else
- {
- context.setBaseResource(shared.getBaseResource());
- context.setAttribute(ResourceCache.class.getCanonicalName(),shared.getResourceCache());
- }
- __log.debug("{}: baseResource={}",origin,context.getResourceBase());
-
- // Set the shared session scavenger timer
- context.setAttribute("org.eclipse.jetty.server.session.timer", _sessionScavenger);
-
- // Apply any node or instance overlay.xml
- for (Resource context_xml : getLayeredResources(OVERLAY_XML,node,instance))
- {
- __log.debug("{}: overlay.xml={}",origin,context_xml);
- XmlConfiguration xmlc = newXmlConfiguration(context_xml.getURL(),idMap,template,instance);
- xmlc.getIdMap().put("Cache",context.getAttribute(ResourceCache.class.getCanonicalName()));
- xmlc.configure(context);
- idMap=xmlc.getIdMap();
- }
-
- // Is it a webapp?
- if (context instanceof WebAppContext)
- {
- final WebAppContext webappcontext = (WebAppContext)context;
-
- if (Arrays.asList(((WebAppContext)context).getServerClasses()).toString().equals(Arrays.asList(WebAppContext.__dftServerClasses).toString()))
- {
- __log.debug("clear server classes");
- webappcontext.setServerClasses(null);
- }
-
- // set classloader
- webappcontext.setCopyWebDir(false);
- webappcontext.setCopyWebInf(false);
- webappcontext.setExtractWAR(false);
-
- if (instance_webapp.exists())
- {
- final Resource classes=instance_webapp.addPath("WEB-INF/classes");
- final Resource lib=instance_webapp.addPath("WEB-INF/lib");
-
- if (classes.exists()||lib.exists())
- {
- final AtomicBoolean locked =new AtomicBoolean(false);
-
- WebAppClassLoader webapp_loader=new WebAppClassLoader(loader,webappcontext)
- {
- @Override
- public void addClassPath(Resource resource) throws IOException
- {
- if (!locked.get())
- super.addClassPath(resource);
- }
-
- @Override
- public void addClassPath(String classPath) throws IOException
- {
- if (!locked.get())
- super.addClassPath(classPath);
- }
-
- @Override
- public void addJars(Resource lib)
- {
- if (!locked.get())
- super.addJars(lib);
- }
- };
-
- if (classes.exists())
- webapp_loader.addClassPath(classes);
- if (lib.exists())
- webapp_loader.addJars(lib);
- locked.set(true);
-
- loader=webapp_loader;
- }
- }
-
- // Make sure loader is unique for JNDI
- if (loader==shared_loader)
- loader = new URLClassLoader(new URL[]{},shared_loader);
-
- // add default descriptor
- List webdefaults=getLayeredResources(WEB_DEFAULT_XML,instance,node,template);
- if (webdefaults.size()>0)
- {
- Resource webdefault = webdefaults.get(0);
- __log.debug("{}: defaultweb={}",origin,webdefault);
- webappcontext.setDefaultsDescriptor(webdefault.toString());
- }
-
- // add overlay descriptors
- for (Resource override : getLayeredResources(WEB_FRAGMENT_XML,template,node,instance))
- {
- __log.debug("{}: web override={}",origin,override);
- webappcontext.addOverrideDescriptor(override.toString());
- }
- }
-
- context.setClassLoader(loader);
-
- __log.debug("{}: baseResource={}",origin,context.getBaseResource());
-
- Resource jetty_web_xml = context.getResource("/WEB-INF/"+JettyWebXmlConfiguration.JETTY_WEB_XML);
- if (jetty_web_xml!=null && jetty_web_xml.exists())
- context.setAttribute(JettyWebXmlConfiguration.XML_CONFIGURATION,newXmlConfiguration(jetty_web_xml.getURL(),idMap,template,instance));
-
- // Add listener to expand parameters from descriptors before other listeners execute
- Map params = new HashMap();
- populateParameters(params,template,instance);
- context.addEventListener(new ParameterExpander(params,context));
-
- System.err.println("created:\n"+context.dump());
-
- return context;
- }
- finally
- {
- Thread.currentThread().setContextClassLoader(orig_loader);
- }
- }
-
- /* ------------------------------------------------------------ */
- private XmlConfiguration newXmlConfiguration(URL url, Map idMap, Template template, Instance instance) throws SAXException, IOException
- {
- XmlConfiguration xmlc = new XmlConfiguration(url);
- populateParameters(xmlc.getProperties(),template,instance);
- xmlc.getIdMap().putAll(idMap);
-
- return xmlc;
- }
-
- /* ------------------------------------------------------------ */
- private void populateParameters(Map params,Template template, Instance instance)
- {
- try
- {
- params.put(OVERLAYS_DIR,_scanDir.getCanonicalPath());
- if (template!=null)
- {
- params.put(OVERLAY_TEMPLATE,template.getName());
- params.put(OVERLAY_TEMPLATE_NAME,template.getTemplateName());
- params.put(OVERLAY_TEMPLATE_CLASSIFIER,template.getClassifier());
- params.put(OVERLAY_WEBAPP,template.getWebapp()==null?null:template.getWebapp().getName());
- }
- if (_node!=null)
- params.put(OVERLAY_NODE,_node.getName());
- if (instance!=null)
- {
- params.put(OVERLAY_INSTANCE,instance.getName());
- params.put(OVERLAY_INSTANCE_CLASSIFIER,instance.getClassifier());
- }
- if (getConfigurationManager()!=null)
- params.putAll(getConfigurationManager().getProperties());
- }
- catch(Exception e)
- {
- throw new RuntimeException(e);
- }
- }
-
-
- /* ------------------------------------------------------------ */
- private TemplateContext createTemplateContext(final String key, Webapp webapp, Template template, Node node, ClassLoader parent) throws Exception
- {
- __log.info("created {}",key);
-
- // look for libs
- // If we have libs directories, create classloader and make it available to
- // the XMLconfiguration
- List libs = new ArrayList();
- for (Resource lib : getLayeredResources(LIB,node,template))
- {
- for (String jar :lib.list())
- {
- if (!jar.toLowerCase(Locale.ENGLISH).endsWith(".jar"))
- continue;
- libs.add(lib.addPath(jar).getURL());
- }
- }
- final ClassLoader libLoader;
- if (libs.size()>0)
- {
- __log.debug("{}: libs={}",key,libs);
- libLoader=new URLClassLoader(libs.toArray(new URL[]{}),parent)
- {
- public String toString() {return "libLoader@"+Long.toHexString(hashCode())+"-lib-"+key;}
- };
-
- }
- else
- libLoader=parent;
-
- Thread.currentThread().setContextClassLoader(libLoader);
-
-
- // Make the shared resourceBase
- List bases = new ArrayList();
- for (Resource wa : getLayers(node,template))
- bases.add(wa);
- if (webapp!=null)
- bases.add(webapp.getBaseResource());
- Resource baseResource = bases.size()==1?bases.get(0):new ResourceCollection(bases.toArray(new Resource[bases.size()]));
- __log.debug("{}: baseResource={}",key,baseResource);
-
-
- // Make the shared context
- TemplateContext shared = new TemplateContext(key,getDeploymentManager().getServer(),baseResource,libLoader);
- _shared.put(key,shared);
-
-
- // Create properties to be shared by overlay.xmls
- Map idMap = new HashMap();
- idMap.put(_serverID,getDeploymentManager().getServer());
-
-
- // Create the shared context for the template
- // This instance will never be start, but is used to capture the
- // shared results of running the template and node overlay.xml files.
- // If there is a template overlay.xml, give it the chance to create the ContextHandler instance
- // otherwise create an instance ourselves
- for (Resource template_xml : getLayeredResources(TEMPLATE_XML,template,node))
- {
- __log.debug("{}: template.xml={}",key,template_xml);
- XmlConfiguration xmlc = newXmlConfiguration(template_xml.getURL(),idMap,template,null);
- xmlc.getIdMap().putAll(idMap);
- xmlc.configure(shared);
- idMap=xmlc.getIdMap();
- }
-
- shared.setIdMap(idMap);
- shared.start();
-
- return shared;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @return The node name (defaults to hostname)
- */
- public String getNodeName()
- {
- return _nodeName;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @param nodeName Set the node name
- */
- public void setNodeName(String nodeName)
- {
- _nodeName = nodeName;
- }
-
- /* ------------------------------------------------------------ */
- /** Get the scanDir.
- * @return the scanDir
- */
- public File getScanDir()
- {
- return _scanDir;
- }
-
- /* ------------------------------------------------------------ */
- /** Set the scanDir.
- * @param scanDir the scanDir to set
- */
- public void setScanDir(File scanDir)
- {
- _scanDir = scanDir;
- }
-
- /* ------------------------------------------------------------ */
- /** Set the temporary directory.
- * @param tmpDir the directory for temporary files. If null, then getScanDir()+"/tmp" is used if it exists, else the system default is used.
- */
- public void setTmpDir(File tmpDir)
- {
- _tmpDir=tmpDir;
- }
-
- /* ------------------------------------------------------------ */
- /** Get the temporary directory.
- * return the tmpDir. If null, then getScanDir()+"/tmp" is used if it exists, else the system default is used.
- */
- public File getTmpDir()
- {
- return _tmpDir;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @return The scan interval
- * @see org.eclipse.jetty.util.Scanner#getScanInterval()
- */
- public int getScanInterval()
- {
- return _scanner.getScanInterval();
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @param scanInterval The scan interval
- * @see org.eclipse.jetty.util.Scanner#setScanInterval(int)
- */
- public void setScanInterval(int scanInterval)
- {
- _scanner.setScanInterval(scanInterval);
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @see org.eclipse.jetty.util.Scanner#scan()
- */
- public void scan()
- {
- _scanner.scan();
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @see org.eclipse.jetty.util.component.AbstractLifeCycle#doStart()
- */
- @Override
- protected void doStart() throws Exception
- {
- __log.info("Node={} Scan=",_nodeName,_scanDir);
- if (_scanDir==null || !_scanDir.exists())
- throw new IllegalStateException("!scandir");
-
- _scanDirURI=_scanDir.toURI().getPath();
- _scanner.setScanDepth(6); // enough for templates/name/webapps/WEB-INF/lib/foo.jar
- List dirs = Arrays.asList(new File[]
- {
- new File(_scanDir,WEBAPPS),
- new File(_scanDir,TEMPLATES),
- new File(_scanDir,NODES),
- new File(_scanDir,INSTANCES)
- });
- for (File file : dirs)
- {
- if (!file.exists() && !file.isDirectory())
- __log.warn("No directory: "+file.getAbsolutePath());
- }
- _scanner.setScanDirs(dirs);
- _scanner.addListener(_listener);
- _scanner.start();
-
- super.doStart();
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @see org.eclipse.jetty.util.component.AbstractLifeCycle#doStop()
- */
- @Override
- protected void doStop() throws Exception
- {
- _scanner.removeListener(_listener);
- _scanner.stop();
-
- if (_deploymentManager.isRunning())
- {
- for (App app: _deployed.values())
- _deploymentManager.removeApp(app);
- }
- _deployed.clear();
-
- for (Layer layer : _webapps.values())
- layer.release();
- _webapps.clear();
- for (Layer layer : _templates.values())
- layer.release();
- _templates.clear();
- if (_node!=null)
- _node.release();
- for (Layer layer : _instances.values())
- layer.release();
- _instances.clear();
-
- super.doStop();
- }
-
- /* ------------------------------------------------------------ */
- protected synchronized void updateLayers(Set layerURIs)
- {
- _loading=System.currentTimeMillis();
- for (String ruri: layerURIs)
- {
- try
- {
- // Decompose the name
- File directory;
- File archive;
- File origin = new File(new URI(_scanDir.toURI()+ruri));
- String name=origin.getName();
-
- Monitor monitor = Monitor.valueOf(origin.getParentFile().getName().toUpperCase(Locale.ENGLISH));
-
- String ext=".war";
-
- // check directory vs archive
- if (origin.isDirectory() || !origin.exists() && !ruri.toLowerCase(Locale.ENGLISH).endsWith(ext))
- {
- // directories have priority over archives
- directory=origin;
- archive=new File(directory.toString()+ext);
- }
- else
- {
- // check extension name
- if (!ruri.toLowerCase(Locale.ENGLISH).endsWith(ext))
- continue;
-
- name=name.substring(0,name.length()-4);
- archive=origin;
- directory=new File(new URI(_scanDir.toURI()+ruri.substring(0,ruri.length()-4)));
-
- // Look to see if directory exists
- if (directory.exists())
- {
- __log.info("Directory exists, ignoring change to {}",ruri);
- continue;
- }
- }
-
- Layer layer=null;
-
- switch(monitor)
- {
- case WEBAPPS:
- if (origin.exists())
- layer=loadWebapp(name,origin);
- else
- {
- removeWebapp(name);
- if (origin==directory && archive.exists())
- layer=loadWebapp(name,archive);
- }
-
- break;
-
- case TEMPLATES:
- if (origin.exists())
- layer=loadTemplate(name,origin);
- else
- {
- removeTemplate(name);
- if (origin==directory && archive.exists())
- layer=loadTemplate(name,archive);
- }
- break;
-
- case NODES:
- if (name.equalsIgnoreCase(_nodeName))
- {
- if (origin.exists())
- layer=loadNode(origin);
- else
- {
- removeNode();
- if (origin==directory && archive.exists())
- layer=loadNode(archive);
- }
- }
- break;
-
- case INSTANCES:
- if (origin.exists())
- layer=loadInstance(name,origin);
- else
- {
- removeInstance(name);
- if (origin==directory && archive.exists())
- layer=loadInstance(name,archive);
- }
- break;
-
- }
-
- if (layer!=null)
- __log.info("loaded {}",layer.getLoadedKey());
- }
- catch(Exception e)
- {
- __log.warn(e);
- }
- }
-
- redeploy();
-
- // Release removed layers
- for (Layer layer : _removedLayers)
- {
- if (layer!=null)
- {
- __log.info("unload {}",layer.getLoadedKey());
- layer.release();
- }
- }
- _removedLayers.clear();
-
- if (__log.isDebugEnabled())
- {
- System.err.println("updated:");
- System.err.println("java:"+javaRootURLContext.getRoot().dump());
- System.err.println("local:"+localContextRoot.getRoot().dump());
- if (getDeploymentManager()!=null && getDeploymentManager().getServer()!=null)
- System.err.println(getDeploymentManager().getServer().dump());
- }
- }
-
- /* ------------------------------------------------------------ */
- protected File tmpdir(String name,String suffix) throws IOException
- {
- File dir=_tmpDir;
- if (dir==null || !dir.isDirectory() || !dir.canWrite())
- {
- dir=new File(_scanDir,"tmp");
- if (!dir.isDirectory() || !dir.canWrite())
- dir=null;
- }
-
- File tmp = File.createTempFile(name+"_","."+suffix,dir);
- tmp=tmp.getCanonicalFile();
- if (tmp.exists())
- IO.delete(tmp);
- tmp.mkdir();
- tmp.deleteOnExit();
- return tmp;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * Walks the defined webapps, templates, nodes and instances to
- * determine what should be deployed, then adjust reality to match.
- */
- protected void redeploy()
- {
- Map templates = new ConcurrentHashMap();
-
- // Check for duplicate templates
- for (Template template : _templates.values())
- {
- Template other=templates.get(template.getTemplateName());
- if (other!=null)
- {
- __log.warn("Multiple Templates: {} & {}",template.getName(),other.getName());
- if (other.getName().compareToIgnoreCase(template.getName())<=0)
- continue;
- }
- templates.put(template.getTemplateName(),template);
- }
-
- // Match webapps to templates
- for (Template template : templates.values())
- {
- String webappname=template.getClassifier();
-
- if (webappname==null)
- continue;
-
- Webapp webapp = _webapps.get(webappname);
-
- if (webapp==null)
- {
- __log.warn("No webapp found for template: {}",template.getName());
- templates.remove(template.getTemplateName());
- }
- else
- {
- template.setWebapp(webapp);
- }
- }
-
- // Match instance to templates and check if what needs to be deployed or undeployed.
- Set deployed = new HashSet();
- List deploy = new ArrayList();
-
- for (Instance instance : _instances.values())
- {
- Template template=templates.get(instance.getTemplateName());
- instance.setTemplate(template);
- if (template!=null)
- {
- String key=instance.getInstanceKey();
- App app = _deployed.get(key);
- if (app==null)
- deploy.add(instance);
- else
- deployed.add(key);
- }
- }
-
- // Look for deployed apps that need to be undeployed
- List undeploy = new ArrayList();
- for (String key : _deployed.keySet())
- {
- if (!deployed.contains(key))
- undeploy.add(key);
- }
-
- // Do the undeploys
- for (String key : undeploy)
- {
- App app = _deployed.remove(key);
- if (app!=null)
- {
- __log.info("Undeploy {}",key);
- _deploymentManager.removeApp(app);
- }
- }
-
- // ready the deploys
- for (Instance instance : deploy)
- {
- String key=instance.getInstanceKey();
- OverlayedApp app = new OverlayedApp(_deploymentManager,this,key,instance);
- _deployed.put(key,app);
- }
-
- // Remove unused Shared stuff
- Set sharedKeys = new HashSet(_shared.keySet());
- for (OverlayedApp app : _deployed.values())
- {
- Instance instance = app.getInstance();
- sharedKeys.remove(instance.getSharedKey());
- }
- for (String sharedKey: sharedKeys)
- {
- __log.debug("Remove "+sharedKey);
- TemplateContext shared=_shared.remove(sharedKey);
- if (shared!=null)
- {
- try
- {
- shared.stop();
- }
- catch(Exception e)
- {
- __log.warn(e);
- }
- shared.destroy();
- }
- }
-
- // Do the deploys
- for (Instance instance : deploy)
- {
- String key=instance.getInstanceKey();
- OverlayedApp app = _deployed.get(key);
- __log.info("Deploy {}",key);
- _deploymentManager.addApp(app);
- }
-
-
- }
-
- /* ------------------------------------------------------------ */
- protected void removeInstance(String name)
- {
- _removedLayers.add(_instances.remove(name));
- }
-
- /* ------------------------------------------------------------ */
- protected Instance loadInstance(String name, File origin)
- throws IOException
- {
- Instance instance=new Instance(name,origin);
- _removedLayers.add(_instances.put(name,instance));
- return instance;
- }
-
- /* ------------------------------------------------------------ */
- protected void removeNode()
- {
- if (_node!=null)
- _removedLayers.add(_node);
- _node=null;
- }
-
- /* ------------------------------------------------------------ */
- protected Node loadNode(File origin)
- throws IOException
- {
- if (_node!=null)
- _removedLayers.add(_node);
- _node=new Node(_nodeName,origin);
- return _node;
- }
-
- /* ------------------------------------------------------------ */
- protected void removeTemplate(String name)
- {
- _removedLayers.add(_templates.remove(name));
- }
-
- /* ------------------------------------------------------------ */
- protected Template loadTemplate(String name, File origin)
- throws IOException
- {
- Template template=new Template(name,origin);
- _removedLayers.add(_templates.put(name,template));
- return template;
- }
-
- protected void removeWebapp(String name)
- {
- _removedLayers.add(_webapps.remove(name));
- }
-
- /* ------------------------------------------------------------ */
- protected Webapp loadWebapp(String name, File origin)
- throws IOException
- {
- Webapp webapp = new Webapp(name,origin);
- _removedLayers.add(_webapps.put(name,webapp));
- return webapp;
- }
-
- /* ------------------------------------------------------------ */
- private static List getLayers(Layer... layers)
- {
- List resources = new ArrayList();
- for (Layer layer: layers)
- {
- if (layer==null)
- continue;
- Resource resource = layer.getBaseResource();
- if (resource.exists())
- resources.add(resource);
- }
- return resources;
- }
-
- /* ------------------------------------------------------------ */
- private static List getLayeredResources(String path, Layer... layers)
- {
- List resources = new ArrayList();
- for (Layer layer: layers)
- {
- if (layer==null)
- continue;
- Resource resource = layer.getResource(path);
- if (resource.exists())
- resources.add(resource);
- }
- return resources;
- }
-
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- class Layer
- {
- private final String _name;
- private final File _origin;
- private final long _loaded=_loading;
- private final Resource _resourceBase;
- private final boolean _resourceBaseIsCopy;
-
- public Layer(String name, File origin)
- throws IOException
- {
- super();
- _name = name;
- _origin = origin;
-
- Resource resource = Resource.newResource(origin.toURI());
-
- if (resource.isDirectory())
- {
- if (_copydir)
- {
- File tmp=tmpdir(name,"extract");
- __log.info("Extract {} to {}",origin,tmp);
- IO.copyDir(origin,tmp);
- _resourceBase=Resource.newResource(tmp.toURI());
- _resourceBaseIsCopy=true;
- }
- else
- {
- _resourceBase=resource;
- _resourceBaseIsCopy=false;
- }
- }
- else
- {
- Resource jar = JarResource.newJarResource(resource);
- File tmp=tmpdir(name,"extract");
- __log.info("Extract {} to {}",jar,tmp);
- jar.copyTo(tmp);
- _resourceBase=Resource.newResource(tmp.toURI());
- _resourceBaseIsCopy=true;
- }
- }
-
- public String getName()
- {
- return _name;
- }
-
- public File getOrigin()
- {
- return _origin;
- }
-
- public long getLoaded()
- {
- return _loaded;
- }
-
- public Resource getBaseResource()
- {
- return _resourceBase;
- }
-
- public Resource getResource(String path)
- {
- try
- {
- return getBaseResource().addPath(path);
- }
- catch(Exception e)
- {
- __log.warn(e);
- }
- return null;
- }
-
- public String getLoadedKey()
- {
- return _name+"@"+_loaded;
- }
-
- public void release()
- {
- if (_resourceBaseIsCopy)
- {
- try
- {
- File file = _resourceBase.getFile();
- if (file!=null)
- IO.delete(file);
- }
- catch(Exception e)
- {
- __log.warn(e);
- }
- }
- }
-
- public String toString()
- {
- return getLoadedKey();
- }
- }
-
- class Webapp extends Layer
- {
- public Webapp(String name, File origin) throws IOException
- {
- super(name,origin);
- }
- }
-
- class Overlay extends Layer
- {
- public Overlay(String name, File origin) throws IOException
- {
- super(name,origin);
- }
-
- public Resource getContext()
- {
- return getResource(OVERLAY_XML);
- }
- }
-
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- class Node extends Overlay
- {
- public Node(String name, File origin) throws IOException
- {
- super(name,origin);
- }
- }
-
-
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- class ClassifiedOverlay extends Overlay
- {
- private final String _templateName;
- private final String _classifier;
-
- public ClassifiedOverlay(String name, File origin) throws IOException
- {
- super(name,origin);
-
- int l=1;
- int e=name.indexOf('=');
- if (e<0)
- {
- l=2;
- e=name.indexOf("--");
- }
- _templateName=e>=0?name.substring(0,e):name;
- _classifier=e>=0?name.substring(e+l):null;
- }
-
- public String getTemplateName()
- {
- return _templateName;
- }
-
- public String getClassifier()
- {
- return _classifier;
- }
- }
-
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- class Template extends ClassifiedOverlay
- {
- private Webapp _webapp;
-
- public Webapp getWebapp()
- {
- return _webapp;
- }
-
- public void setWebapp(Webapp webapp)
- {
- _webapp = webapp;
- }
-
- public Template(String name, File origin) throws IOException
- {
- super(name,origin);
- }
- }
-
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- class Instance extends ClassifiedOverlay
- {
- Template _template;
- String _sharedKey;
-
- public Instance(String name, File origin) throws IOException
- {
- super(name,origin);
- if (getClassifier()==null)
- throw new IllegalArgumentException("Instance without '=':"+name);
- }
-
- public void setSharedKey(String key)
- {
- _sharedKey=key;
- }
-
- public String getSharedKey()
- {
- return _sharedKey;
- }
-
- public void setTemplate(Template template)
- {
- _template=template;
- }
-
- public Template getTemplate()
- {
- return _template;
- }
-
- public String getInstanceKey()
- {
- return
- (_template.getWebapp()==null?"":_template.getWebapp().getLoadedKey())+"|"+
- _template.getLoadedKey()+"|"+
- (_node==null?"":_node.getLoadedKey())+"|"+
- getLoadedKey();
- }
- }
-
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- static class OverlayedApp extends App
- {
- final Instance _instance;
-
- public OverlayedApp(DeploymentManager manager, AppProvider provider, String originId, Instance instance)
- {
- super(manager,provider,originId);
- _instance=instance;
- }
-
- public Instance getInstance()
- {
- return _instance;
- }
- }
-
-
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- private final class ParameterExpander implements ServletContextListener
- {
- private final Map _params;
- private final ContextHandler _ctx;
-
- private ParameterExpander(Map params, ContextHandler ctx)
- {
- _params = params;
- _ctx = ctx;
- }
-
- public void contextInitialized(ServletContextEvent sce)
- {
- Enumeration e=_ctx.getInitParameterNames();
- while (e.hasMoreElements())
- {
- String name = e.nextElement();
- _ctx.setInitParameter(name,expandParameter(_ctx.getInitParameter(name)));
- }
-
- ServletHandler servletHandler = _ctx.getChildHandlerByClass(ServletHandler.class);
- if (servletHandler!=null)
- {
- List> holders = new ArrayList>();
- if (servletHandler.getFilters()!=null)
- holders.addAll(Arrays.asList(servletHandler.getFilters()));
- if (servletHandler.getHandler()!=null)
- holders.addAll(Arrays.asList(servletHandler.getServlets()));
- for (Holder> holder: holders)
- {
- e=holder.getInitParameterNames();
- while (e.hasMoreElements())
- {
- String name = e.nextElement();
- holder.setInitParameter(name,expandParameter(holder.getInitParameter(name)));
- }
- }
- }
- }
-
- private String expandParameter(String value)
- {
- int i=0;
- while (true)
- {
- int open=value.indexOf("${",i);
- if (open<0)
- return value;
- int close=value.indexOf("}",open);
- if (close<0)
- return value;
-
- String param = value.substring(open+2,close);
- if (_params.containsKey(param))
- {
- String tmp=value.substring(0,open)+_params.get(param);
- i=tmp.length();
- value=tmp+value.substring(close+1);
- }
- else
- i=close+1;
- }
- }
-
- public void contextDestroyed(ServletContextEvent sce)
- {
- }
- }
-}
diff --git a/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/TemplateContext.java b/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/TemplateContext.java
deleted file mode 100644
index 788b1b68fce..00000000000
--- a/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/TemplateContext.java
+++ /dev/null
@@ -1,290 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.overlays;
-
-import java.io.IOException;
-import java.security.PermissionCollection;
-import java.util.Map;
-
-import org.eclipse.jetty.http.MimeTypes;
-import org.eclipse.jetty.server.ResourceCache;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.util.component.ContainerLifeCycle;
-import org.eclipse.jetty.util.component.Destroyable;
-import org.eclipse.jetty.util.resource.Resource;
-import org.eclipse.jetty.webapp.ClassMatcher;
-import org.eclipse.jetty.webapp.WebAppClassLoader;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.eclipse.jetty.xml.XmlConfiguration;
-
-/**
- * A Cloudtide template context.
- *
- * This class is configured by the template.xml files and is used to control the
- * shared resource cache and classloader.
- *
- * This class is an AggregateLifeCycle, so dependent beans may be added to the template and will be started, stopped and destroyed with the template.
- * The template is started after the template.xml file have been applied. It is stopped and destroyed after the last instance using the template is undeployed.
- */
-public class TemplateContext extends ContainerLifeCycle implements WebAppClassLoader.Context, Destroyable
-{
- private final ClassLoader _libLoader;
-
- private final Resource _baseResource;
- private final ResourceCache _resourceCache;
- private final Server _server;
- private final MimeTypes _mimeTypes;
- private final WebAppClassLoader _webappLoader;
-
- private ClassMatcher _systemClasses;
- private ClassMatcher _serverClasses;
- private PermissionCollection _permissions;
-
- private boolean _parentLoaderPriority;
-
- private String _extraClasspath;
-
- private Map _idMap;
-
-
- public ClassLoader getLibLoader()
- {
- return _libLoader;
- }
-
- public TemplateContext()
- {
- _server=null;
- _baseResource=null;
- _mimeTypes=new MimeTypes();
- _resourceCache=null;
- _webappLoader=null;
- _libLoader=null;
- }
-
- public TemplateContext(String key, Server server,Resource baseResource, ClassLoader libLoader) throws IOException
- {
- _server=server;
- _baseResource=baseResource;
- _mimeTypes=new MimeTypes();
- _resourceCache=new ResourceCache(null,baseResource,_mimeTypes,false,false);
-
- String[] patterns = (String[])_server.getAttribute(WebAppContext.SERVER_SRV_CLASSES);
- _serverClasses=new ClassMatcher(patterns==null?WebAppContext.__dftServerClasses:patterns);
- patterns = (String[])_server.getAttribute(WebAppContext.SERVER_SYS_CLASSES);
- _systemClasses=new ClassMatcher(patterns==null?WebAppContext.__dftSystemClasses:patterns);
- _libLoader=libLoader;
-
-
- // Is this a webapp or a normal context
- Resource classes=getBaseResource().addPath("WEB-INF/classes/");
- Resource lib=getBaseResource().addPath("WEB-INF/lib/");
- if (classes.exists() && classes.isDirectory() || lib.exists() && lib.isDirectory())
- {
- _webappLoader=new WebAppClassLoader(_libLoader,this);
- _webappLoader.setName(key);
- if (classes.exists())
- _webappLoader.addClassPath(classes);
- if (lib.exists())
- _webappLoader.addJars(lib);
- }
- else
- _webappLoader=null;
-
- }
-
- /* ------------------------------------------------------------ */
- public Resource getBaseResource()
- {
- return _baseResource;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @return Comma or semicolon separated path of filenames or URLs
- * pointing to directories or jar files. Directories should end
- * with '/'.
- */
- public String getExtraClasspath()
- {
- return _extraClasspath;
- }
-
- /* ------------------------------------------------------------ */
- public MimeTypes getMimeTypes()
- {
- return _mimeTypes;
- }
-
-
- /* ------------------------------------------------------------ */
- public PermissionCollection getPermissions()
- {
- return _permissions;
- }
-
- /* ------------------------------------------------------------ */
- public ResourceCache getResourceCache()
- {
- return _resourceCache;
- }
-
- /* ------------------------------------------------------------ */
- public Server getServer()
- {
- return _server;
- }
-
- /* ------------------------------------------------------------ */
- WebAppClassLoader getWebappLoader()
- {
- return _webappLoader;
- }
-
- /* ------------------------------------------------------------ */
- public boolean isParentLoaderPriority()
- {
- return _parentLoaderPriority;
- }
-
- /* ------------------------------------------------------------ */
- public boolean isServerClass(String clazz)
- {
- return _serverClasses.match(clazz);
- }
-
- /* ------------------------------------------------------------ */
- public boolean isSystemClass(String clazz)
- {
- return _systemClasses.match(clazz);
- }
-
- /* ------------------------------------------------------------ */
- public Resource newResource(String urlOrPath) throws IOException
- {
- return Resource.newResource(urlOrPath);
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @param extraClasspath Comma or semicolon separated path of filenames or URLs
- * pointing to directories or jar files. Directories should end
- * with '/'.
- */
- public void setExtraClasspath(String extraClasspath)
- {
- _extraClasspath=extraClasspath;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @param java2compliant The java2compliant to set.
- */
- public void setParentLoaderPriority(boolean java2compliant)
- {
- _parentLoaderPriority = java2compliant;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * @param permissions The permissions to set.
- */
- public void setPermissions(PermissionCollection permissions)
- {
- _permissions = permissions;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * Set the server classes patterns.
- *
- * Server classes/packages are classes used to implement the server and are hidden
- * from the context. If the context needs to load these classes, it must have its
- * own copy of them in WEB-INF/lib or WEB-INF/classes.
- * A class pattern is a string of one of the forms:
- * - org.package.Classname
- Match a specific class
- * - org.package.
- Match a specific package hierarchy
- * - -org.package.Classname
- Exclude a specific class
- * - -org.package.
- Exclude a specific package hierarchy
- *
- * @param serverClasses The serverClasses to set.
- */
- public void setServerClasses(String[] serverClasses)
- {
- _serverClasses = new ClassMatcher(serverClasses);
- }
-
- /* ------------------------------------------------------------ */
- /**
- * Set the system classes patterns.
- *
- * System classes/packages are classes provided by the JVM and that
- * cannot be replaced by classes of the same name from WEB-INF,
- * regardless of the value of {@link #setParentLoaderPriority(boolean)}.
- * A class pattern is a string of one of the forms:
- * - org.package.Classname
- Match a specific class
- * - org.package.
- Match a specific package hierarchy
- * - -org.package.Classname
- Exclude a specific class
- * - -org.package.
- Exclude a specific package hierarchy
- *
- * @param systemClasses The systemClasses to set.
- */
- public void setSystemClasses(String[] systemClasses)
- {
- _systemClasses = new ClassMatcher(systemClasses);
- }
-
- /* ------------------------------------------------------------ */
- public void addSystemClass(String classname)
- {
- _systemClasses.addPattern(classname);
- }
-
- /* ------------------------------------------------------------ */
- public void addServerClass(String classname)
- {
- _serverClasses.addPattern(classname);
- }
-
- /* ------------------------------------------------------------ */
- public void destroy()
- {
- if (_baseResource!=null)
- _baseResource.release();
- if (_resourceCache!=null)
- _resourceCache.flushCache();
- if(_idMap!=null)
- _idMap.clear();
- }
-
- /* ------------------------------------------------------------ */
- public void setIdMap(Map idMap)
- {
- _idMap=idMap;
- }
-
- /* ------------------------------------------------------------ */
- public Map getIdMap()
- {
- return _idMap;
- }
-
-
-
-}
diff --git a/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/package-info.java b/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/package-info.java
deleted file mode 100644
index dff63951e79..00000000000
--- a/jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-/**
- * Jetty Overlay : Overlay Deployment Provider
- */
-package org.eclipse.jetty.overlays;
-
diff --git a/jetty-overlay-deployer/src/test/java/org/eclipse/jetty/overlays/OverlayServer.java b/jetty-overlay-deployer/src/test/java/org/eclipse/jetty/overlays/OverlayServer.java
deleted file mode 100644
index 49acecfd3ce..00000000000
--- a/jetty-overlay-deployer/src/test/java/org/eclipse/jetty/overlays/OverlayServer.java
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.overlays;
-
-import java.io.File;
-
-import org.eclipse.jetty.deploy.DeploymentManager;
-import org.eclipse.jetty.jndi.NamingUtil;
-import org.eclipse.jetty.overlays.OverlayedAppProvider;
-import org.eclipse.jetty.server.Handler;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.ContextHandlerCollection;
-import org.eclipse.jetty.server.handler.DefaultHandler;
-import org.eclipse.jetty.server.handler.HandlerCollection;
-import org.eclipse.jetty.server.handler.RequestLogHandler;
-import org.eclipse.jetty.server.handler.StatisticsHandler;
-
-public class OverlayServer
-{
- public static void main(String[] args) throws Exception
- {
- // NamingUtil.__log.setDebugEnabled(true);
- String jetty_home = System.getProperty("jetty.home","target/test-classes/home");
- System.setProperty("jetty.home",jetty_home);
-
- Server server = new Server();
- server.setAttribute("org.eclipse.jetty.webapp.configuration",
- new String[]
- {
- org.eclipse.jetty.webapp.WebInfConfiguration.class.getCanonicalName(),
- org.eclipse.jetty.webapp.WebXmlConfiguration.class.getCanonicalName(),
- org.eclipse.jetty.webapp.MetaInfConfiguration.class.getCanonicalName(),
- org.eclipse.jetty.webapp.FragmentConfiguration.class.getCanonicalName(),
- org.eclipse.jetty.plus.webapp.EnvConfiguration.class.getCanonicalName(),
- org.eclipse.jetty.plus.webapp.PlusConfiguration.class.getCanonicalName(),
- org.eclipse.jetty.webapp.JettyWebXmlConfiguration.class.getCanonicalName(),
- }
- );
-
- // Setup Connectors
- ServerConnector connector = new ServerConnector(server);
- connector.setPort(8080);
- server.addConnector(connector);
-
- HandlerCollection handlers = new HandlerCollection();
- ContextHandlerCollection contexts = new ContextHandlerCollection();
- RequestLogHandler requestLogHandler = new RequestLogHandler();
- handlers.setHandlers(new Handler[]
- { contexts, new DefaultHandler(), requestLogHandler });
-
- StatisticsHandler stats = new StatisticsHandler();
- stats.setHandler(handlers);
-
- server.setHandler(stats);
-
- // Setup deployers
- DeploymentManager deployer = new DeploymentManager();
- deployer.setContexts(contexts);
- server.addBean(deployer);
-
- OverlayedAppProvider provider = new OverlayedAppProvider();
-
- provider.setNodeName("nodeA");
- provider.setScanDir(new File(jetty_home + "/overlays"));
- provider.setScanInterval(2);
-
- deployer.addAppProvider(provider);
-
- server.setStopAtShutdown(true);
- //server.setSendServerVersion(true);
-
- // Uncomment to work with JNDI examples
- // new org.eclipse.jetty.plus.jndi.Transaction(new com.atomikos.icatch.jta.UserTransactionImp());
-
-
-
-
- server.start();
- server.join();
- }
-
-}
diff --git a/jetty-overlay-deployer/src/test/java/org/eclipse/jetty/overlays/OverlayedAppProviderTest.java b/jetty-overlay-deployer/src/test/java/org/eclipse/jetty/overlays/OverlayedAppProviderTest.java
deleted file mode 100644
index 0ab984874d1..00000000000
--- a/jetty-overlay-deployer/src/test/java/org/eclipse/jetty/overlays/OverlayedAppProviderTest.java
+++ /dev/null
@@ -1,589 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.overlays;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-import org.eclipse.jetty.util.IO;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-
-public class OverlayedAppProviderTest
-{
- File _tmp;
- File _scan;
- File _webapps;
- File _templates;
- File _nodes;
- File _instances;
-
- @BeforeEach
- public void before() throws Exception
- {
- _tmp=File.createTempFile("OAPTest",null);
- if (_tmp.exists())
- IO.delete(_tmp);
- _tmp.mkdir();
-
- _scan = new File(_tmp,"scan").getCanonicalFile();
- _webapps = new File(_scan,OverlayedAppProvider.WEBAPPS);
- _templates = new File(_scan,OverlayedAppProvider.TEMPLATES);
- _nodes = new File(_scan,OverlayedAppProvider.NODES);
- _instances = new File(_scan,OverlayedAppProvider.INSTANCES);
- _webapps.mkdirs();
- _templates.mkdir();
- _nodes.mkdir();
- _instances.mkdir();
- }
-
- @AfterEach
- public void after() throws Exception
- {
- if (_tmp.exists())
- IO.delete(_tmp);
- }
-
- @Test
- public void testScanForWars() throws Exception
- {
- final ConcurrentLinkedQueue> scanned = new ConcurrentLinkedQueue>();
- OverlayedAppProvider provider = new OverlayedAppProvider()
- {
- /* ------------------------------------------------------------ */
- /**
- * @see org.eclipse.jetty.overlays.OverlayedAppProvider#updateLayers(java.util.Set)
- */
- @Override
- protected void updateLayers(Set filenames)
- {
- scanned.offer(filenames);
- }
- };
- provider.setScanInterval(0);
-
-
- provider.setScanDir(_scan);
- provider.start();
- provider.scan();
- provider.scan();
-
- assertTrue(scanned.isEmpty());
-
-
- // Check scanning for archives
- File war = new File(_webapps,"foo-1.2.3.war");
- touch(war);
- File template = new File(_templates,"foo=foo-1.2.3.war");
- touch(template);
- File node = new File(_nodes,"nodeA.war");
- touch(node);
- File instance = new File(_instances,"foo=instance.war");
- touch(instance);
-
- provider.scan();
- provider.scan();
-
- Set results = scanned.poll();
- assertTrue(results!=null);
- assertEquals(4,results.size());
- assertThat(results, contains("webapps/foo-1.2.3.war"));
- assertThat(results, contains("templates/foo=foo-1.2.3.war"));
- assertThat(results, contains("nodes/nodeA.war"));
- assertThat(results, contains("instances/foo=instance.war"));
-
- provider.scan();
- provider.scan();
- assertTrue(scanned.isEmpty());
-
- IO.delete(war);
- IO.delete(template);
- IO.delete(node);
- IO.delete(instance);
-
- provider.scan();
- provider.scan();
- results = scanned.poll();
- assertTrue(results!=null);
- assertEquals(4,results.size());
- assertTrue(results.contains("webapps/foo-1.2.3.war"));
- assertTrue(results.contains("templates/foo=foo-1.2.3.war"));
- assertTrue(results.contains("nodes/nodeA.war"));
- assertTrue(results.contains("instances/foo=instance.war"));
-
- }
-
- @Test
- public void testScanForDirs() throws Exception
- {
- final ConcurrentLinkedQueue> scanned = new ConcurrentLinkedQueue>();
- OverlayedAppProvider provider = new OverlayedAppProvider()
- {
- /* ------------------------------------------------------------ */
- /**
- * @see org.eclipse.jetty.overlays.OverlayedAppProvider#updateLayers(java.util.Set)
- */
- @Override
- protected void updateLayers(Set filenames)
- {
- scanned.offer(filenames);
- }
- };
- provider.setScanInterval(0);
-
-
- provider.setScanDir(_scan);
- provider.start();
- provider.scan();
-
- assertTrue(scanned.isEmpty());
-
-
- // Check scanning for directories
- File war = new File(_webapps,"foo-1.2.3");
- war.mkdir();
- File template = new File(_templates,"foo=foo-1.2.3");
- template.mkdir();
- File node = new File(_nodes,"nodeA");
- node.mkdir();
- File instance = new File(_instances,"foo=instance");
- instance.mkdir();
- for (File f : new File[] { war,template,node,instance } )
- {
- File webinf = new File(f,"WEB-INF");
- webinf.mkdir();
- touch(webinf,"web.xml");
- }
-
- provider.scan();
- provider.scan();
-
- Set results = scanned.poll();
- assertTrue(results!=null);
- assertEquals(4,results.size());
- assertTrue(results.contains("webapps/foo-1.2.3"));
- assertTrue(results.contains("templates/foo=foo-1.2.3"));
- assertTrue(results.contains("nodes/nodeA"));
- assertTrue(results.contains("instances/foo=instance"));
-
- provider.scan();
- provider.scan();
- assertTrue(scanned.isEmpty());
-
-
- // Touch everything
- touch(war,"WEB-INF/web.xml");
- touch(war,"WEB-INF/spring.XML");
- touch(war,"WEB-INF/other");
- touch(war,"WEB-INF/lib/bar.jar");
- touch(war,"WEB-INF/classes/bar.class");
-
- for (File d : new File[]{template,node,instance})
- {
- touch(d,"WEB-INF/web-fragment.xml");
- touch(d,"WEB-INF/overlay.xml");
- touch(d,"WEB-INF/other");
- touch(d,"WEB-INF/lib/bar.jar");
- }
-
- provider.scan();
- provider.scan();
- results = scanned.poll();
- assertTrue(results!=null);
- assertEquals(4,results.size());
- assertTrue(results.contains("webapps/foo-1.2.3"));
- assertTrue(results.contains("templates/foo=foo-1.2.3"));
- assertTrue(results.contains("nodes/nodeA"));
- assertTrue(results.contains("instances/foo=instance"));
-
-
- // Touch xml
- Thread.sleep(1000); // needed so last modified is different
- for (File d : new File[]{war,template,node,instance})
- touch(d,"WEB-INF/web.xml");
- provider.scan();
- provider.scan();
- results = scanned.poll();
- assertTrue(results!=null);
- assertEquals(4,results.size());
- assertTrue(results.contains("webapps/foo-1.2.3"));
- assertTrue(results.contains("templates/foo=foo-1.2.3"));
- assertTrue(results.contains("nodes/nodeA"));
- assertTrue(results.contains("instances/foo=instance"));
-
- // Touch XML
- Thread.sleep(1000);
- for (File d : new File[]{war,template,node,instance})
- touch(d,"WEB-INF/spring.XML");
- provider.scan();
- provider.scan();
- results = scanned.poll();
- assertTrue(results!=null);
- assertEquals(4,results.size());
- assertTrue(results.contains("webapps/foo-1.2.3"));
- assertTrue(results.contains("templates/foo=foo-1.2.3"));
- assertTrue(results.contains("nodes/nodeA"));
- assertTrue(results.contains("instances/foo=instance"));
-
-
- // Touch unrelated
- for (File d : new File[]{war,template,node,instance})
- touch(d,"index.html");
- provider.scan();
- provider.scan();
- results = scanned.poll();
- assertEquals(null,results);
-
- // Touch jar
- Thread.sleep(1000);
- for (File d : new File[]{war,template,node,instance})
- touch(d,"WEB-INF/lib/bar.jar");
- provider.scan();
- provider.scan();
- results = scanned.poll();
- assertTrue(results!=null);
- assertEquals(4,results.size());
- assertTrue(results.contains("webapps/foo-1.2.3"));
- assertTrue(results.contains("templates/foo=foo-1.2.3"));
- assertTrue(results.contains("nodes/nodeA"));
- assertTrue(results.contains("instances/foo=instance"));
-
- // touch other class
- Thread.sleep(1000);
- for (File d : new File[]{war,template,node,instance})
- touch(d,"index.html");
- provider.scan();
- provider.scan();
- results = scanned.poll();
- assertTrue(scanned.isEmpty());
-
-
- // delete all
- IO.delete(war);
- IO.delete(template);
- IO.delete(node);
- IO.delete(instance);
-
- provider.scan();
- provider.scan();
- results = scanned.poll();
- assertTrue(results!=null);
- assertEquals(4,results.size());
- assertTrue(results.contains("webapps/foo-1.2.3"));
- assertTrue(results.contains("templates/foo=foo-1.2.3"));
- assertTrue(results.contains("nodes/nodeA"));
- assertTrue(results.contains("instances/foo=instance"));
-
- }
-
-
- @Test
- public void testTriageURI() throws Exception
- {
- final BlockingQueue scanned = new LinkedBlockingQueue();
- OverlayedAppProvider provider = new OverlayedAppProvider()
- {
- protected void removeInstance(String name)
- {
- scanned.add("removeInstance "+name);
- }
- protected Instance loadInstance(String name, File origin)
- {
- scanned.add("loadInstance "+name);
- scanned.add(origin.getAbsolutePath());
- return null;
- }
- protected void removeNode()
- {
- scanned.add("removeNode");
- }
- protected Node loadNode(File origin)
- {
- scanned.add("loadNode");
- scanned.add(origin.getAbsolutePath());
- return null;
- }
- protected void removeTemplate(String name)
- {
- scanned.add("removeTemplate "+name);
- }
- protected Template loadTemplate(String name, File origin)
- {
- scanned.add("loadTemplate "+name);
- scanned.add(origin.getAbsolutePath());
- return null;
- }
- protected void removeWebapp(String name)
- {
- scanned.add("removeWebapp "+name);
- }
- protected Webapp loadWebapp(String name, File origin)
- {
- scanned.add("loadWebapp "+name);
- scanned.add(origin.getAbsolutePath());
- return null;
- }
-
- protected void redeploy()
- {
- }
-
- };
- provider.setScanInterval(0);
- provider.setNodeName("nodeA");
-
-
- provider.setScanDir(_scan);
- provider.start();
- provider.scan();
-
- assertTrue(scanned.isEmpty());
-
- // Add a war
- File war = new File(_webapps,"foo-1.2.3.war");
- touch(war);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadWebapp foo-1.2.3");
- assertEquals(war.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
-
- // Add a template
- File template = new File(_templates,"foo=foo-1.2.3.war");
- touch(template);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadTemplate foo=foo-1.2.3");
- assertEquals(template.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Add a node
- File nodeA = new File(_nodes,"nodeA.war");
- touch(nodeA);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadNode");
- assertEquals(nodeA.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Add another node
- File nodeB = new File(_nodes,"nodeB.war");
- provider.scan();
- provider.scan();
- assertTrue(scanned.isEmpty());
-
- // Add an instance
- File instance = new File(_instances,"foo=instance.war");
- touch(instance);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadInstance foo=instance");
- assertEquals(instance.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
-
- // Add a war dir
- File warDir = new File(_webapps,"foo-1.2.3");
- warDir.mkdir();
- File warDirWI = new File(warDir,"WEB-INF");
- warDirWI.mkdir();
- touch(warDirWI,"web.xml");
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadWebapp foo-1.2.3");
- assertEquals(warDir.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Add a template dir
- File templateDir = new File(_templates,"foo=foo-1.2.3");
- templateDir.mkdir();
- File templateDirWI = new File(templateDir,"WEB-INF");
- templateDirWI.mkdir();
- touch(templateDirWI,"web.xml");
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadTemplate foo=foo-1.2.3");
- assertEquals(templateDir.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Add a node dir
- File nodeADir = new File(_nodes,"nodeA");
- nodeADir.mkdir();
- File nodeADirWI = new File(nodeADir,"WEB-INF");
- nodeADirWI.mkdir();
- touch(nodeADirWI,"web.xml");
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadNode");
- assertEquals(nodeADir.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Add another node dir
- File nodeBDir = new File(_nodes,"nodeB");
- nodeBDir.mkdir();
- File nodeBDirWI = new File(nodeBDir,"WEB-INF");
- nodeBDirWI.mkdir();
- touch(nodeBDirWI,"web.xml");
- provider.scan();
- provider.scan();
- assertTrue(scanned.isEmpty());
-
- // Add an instance dir
- File instanceDir = new File(_instances,"foo=instance");
- instanceDir.mkdir();
- File instanceDirWI = new File(instanceDir,"WEB-INF");
- instanceDirWI.mkdir();
- touch(instanceDirWI,"web.xml");
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadInstance foo=instance");
- assertEquals(instanceDir.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
-
- // touch archives will be ignored.
- Thread.sleep(1000);
- touch(war);
- touch(template);
- touch(nodeA);
- touch(nodeB);
- touch(instance);
- provider.scan();
- provider.scan();
- assertTrue(scanned.isEmpty());
-
- // Touch directories
- for (File d : new File[]{warDir,templateDir,nodeADir,nodeBDir,instanceDir})
- touch(d,"WEB-INF/web.xml");
- provider.scan();
- provider.scan();
- assertEquals(8,scanned.size());
- scanned.clear();
-
- // Remove web dir
- IO.delete(warDir);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "removeWebapp foo-1.2.3");
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadWebapp foo-1.2.3");
- assertEquals(war.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Remove template dir
- IO.delete(templateDir);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "removeTemplate foo=foo-1.2.3");
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadTemplate foo=foo-1.2.3");
- assertEquals(template.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Remove nodeA dir
- IO.delete(nodeADir);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "removeNode");
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadNode");
- assertEquals(nodeA.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Remove nodeB dir
- IO.delete(nodeBDir);
- provider.scan();
- provider.scan();
- assertTrue(scanned.isEmpty());
-
-
- // Remove instance dir
- IO.delete(instanceDir);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "removeInstance foo=instance");
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "loadInstance foo=instance");
- assertEquals(instance.getAbsolutePath(),scanned.poll(1,TimeUnit.SECONDS));
-
- // Remove web
- IO.delete(war);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "removeWebapp foo-1.2.3");
-
- // Remove template
- IO.delete(template);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "removeTemplate foo=foo-1.2.3");
-
- // Remove nodeA dir
- IO.delete(nodeA);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "removeNode");
-
- // Remove nodeB dir
- IO.delete(nodeB);
- provider.scan();
- provider.scan();
- assertTrue(scanned.isEmpty());
-
- // Remove instance dir
- IO.delete(instance);
- provider.scan();
- provider.scan();
- assertEquals(scanned.poll(1, TimeUnit.SECONDS), "removeInstance foo=instance");
-
- provider.scan();
- provider.scan();
- assertTrue(scanned.isEmpty());
-
- }
-
-
- private void touch(File base,String path)
- {
- try
- {
- File target = new File(new URI(base.toURI().toString()+path));
- target.getParentFile().mkdirs();
- touch(target);
- }
- catch (URISyntaxException e)
- {
- e.printStackTrace();
- }
- }
-
-
- private void touch(File file)
- {
- try
- {
- IO.delete(file);
- try (OutputStream out = new FileOutputStream(file,false))
- {
- out.write("Hello
".getBytes());
- }
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
-}
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 9c74ff39523..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=blue WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 9c74ff39523..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=blue WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/lib-overlay/resources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/lib-overlay/resources.jar
deleted file mode 100644
index a94e69bb0ea..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/lib-overlay/resources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/overlay.xml
deleted file mode 100644
index 8d29a8aea26..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/overlay.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- /blue
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/web-overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/web-overlay.xml
deleted file mode 100644
index 6eee674e02c..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/WEB-INF/web-overlay.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- Blue Test WebApp
-
-
- overlay
- instances/myfoo=blue/web.xml
-
-
- instance
- instances/myfoo=blue/web.xml
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/lib/META-INF/MANIFEST.MF b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/lib/META-INF/MANIFEST.MF
deleted file mode 100644
index e7374eeb7dc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/lib/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.6.0_20 (Sun Microsystems Inc.)
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/lib/resources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/lib/resources.jar
deleted file mode 100644
index a94e69bb0ea..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/lib/resources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/logo.png b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/logo.png
deleted file mode 100644
index 21e0d3024a4..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/logo.png and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 9c74ff39523..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=blue WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 9c74ff39523..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=blue WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/logo.png b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/logo.png
deleted file mode 100644
index 21e0d3024a4..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=blue/webapp/logo.png and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 4817b3f04de..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=green WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 4817b3f04de..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=green WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/lib-overlay/resources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/lib-overlay/resources.jar
deleted file mode 100644
index bfce59a00ba..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/lib-overlay/resources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/overlay.xml
deleted file mode 100644
index 7a15e73af24..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/overlay.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- /green
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/web-overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/web-overlay.xml
deleted file mode 100644
index 92ed7290d78..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/WEB-INF/web-overlay.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- Green Test WebApp
-
-
- overlay
- instances/myfoo=green/web.xml
-
-
- instance
- instances/myfoo=green/web.xml
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/lib/META-INF/MANIFEST.MF b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/lib/META-INF/MANIFEST.MF
deleted file mode 100644
index e7374eeb7dc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/lib/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.6.0_20 (Sun Microsystems Inc.)
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/lib/resources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/lib/resources.jar
deleted file mode 100644
index bfce59a00ba..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/lib/resources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/logo.png b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/logo.png
deleted file mode 100644
index 67b04b96b80..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/logo.png and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 4817b3f04de..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=green WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 4817b3f04de..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=green WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/logo.png b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/logo.png
deleted file mode 100644
index 67b04b96b80..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=green/webapp/logo.png and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 47d45478c5d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=red WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 47d45478c5d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=red WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/lib-overlay/resources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/lib-overlay/resources.jar
deleted file mode 100644
index 994a698f899..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/lib-overlay/resources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/overlay.xml
deleted file mode 100644
index 90685db44fc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/overlay.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- /red
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/web-overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/web-overlay.xml
deleted file mode 100644
index c8d9dcb0a64..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/WEB-INF/web-overlay.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- Red Test WebApp
-
-
- overlay
- instances/myfoo=red/web.xml
-
-
- instance
- instances/myfoo=red/web.xml
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/lib/META-INF/MANIFEST.MF b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/lib/META-INF/MANIFEST.MF
deleted file mode 100644
index e7374eeb7dc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/lib/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.6.0_20 (Sun Microsystems Inc.)
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/lib/resources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/lib/resources.jar
deleted file mode 100644
index 994a698f899..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/lib/resources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/logo.png b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/logo.png
deleted file mode 100644
index a121e4a6c11..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/logo.png and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 47d45478c5d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=red WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 47d45478c5d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-instance myfoo=red WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/logo.png b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/logo.png
deleted file mode 100644
index a121e4a6c11..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/myfoo=red/webapp/logo.png and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/root=root/WEB-INF/overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/instances/root=root/WEB-INF/overlay.xml
deleted file mode 100644
index ca23e18bac3..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/instances/root=root/WEB-INF/overlay.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 170b5badf10..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-node WEB-INF lib
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 170b5badf10..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-node WEB-INF lib
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceC.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceC.txt
deleted file mode 100644
index 170b5badf10..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceC.txt
+++ /dev/null
@@ -1 +0,0 @@
-node WEB-INF lib
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceD.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceD.txt
deleted file mode 100644
index 170b5badf10..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/classes/resourceD.txt
+++ /dev/null
@@ -1 +0,0 @@
-node WEB-INF lib
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/lib-overlay/nodeResources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/lib-overlay/nodeResources.jar
deleted file mode 100644
index 61f42e6bba8..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/lib-overlay/nodeResources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/web-overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/web-overlay.xml
deleted file mode 100644
index e9f509aaf89..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/WEB-INF/web-overlay.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- overlay
- nodes/nodeA/web.xml
-
-
- node
- nodes/nodeA/web.xml
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/lib/META-INF/MANIFEST.MF b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/lib/META-INF/MANIFEST.MF
deleted file mode 100644
index e7374eeb7dc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/lib/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.6.0_20 (Sun Microsystems Inc.)
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/lib/nodeResources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/lib/nodeResources.jar
deleted file mode 100644
index 61f42e6bba8..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/lib/nodeResources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/META-INF/MANIFEST.MF b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/META-INF/MANIFEST.MF
deleted file mode 100644
index e7374eeb7dc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.6.0_20 (Sun Microsystems Inc.)
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 170b5badf10..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-node WEB-INF lib
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 170b5badf10..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-node WEB-INF lib
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceC.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceC.txt
deleted file mode 100644
index 170b5badf10..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceC.txt
+++ /dev/null
@@ -1 +0,0 @@
-node WEB-INF lib
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceD.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceD.txt
deleted file mode 100644
index 170b5badf10..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeA/webapp/WEB-INF/classes/resourceD.txt
+++ /dev/null
@@ -1 +0,0 @@
-node WEB-INF lib
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeB/WEB-INF/web.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeB/WEB-INF/web.xml
deleted file mode 100644
index 5cf803a5039..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/nodes/nodeB/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- overlay
- nodes/nodeB/web.xml
-
-
- node
- nodes/nodeB/web.xml
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceC.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceC.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceC.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceD.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceD.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceD.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceE.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceE.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceE.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceF.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceF.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/classes/resourceF.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/jetty-web.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/jetty-web.xml
deleted file mode 100644
index 4723bf73699..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/jetty-web.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
- Executing jetty-web.xml for
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/lib-overlay/templateResources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/lib-overlay/templateResources.jar
deleted file mode 100644
index 4fb379cb222..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/lib-overlay/templateResources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/template.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/template.xml
deleted file mode 100644
index fddd63b673a..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/template.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
- false
-
- true
- 10000000
- 1000
- 64000000
-
-
-
- bogus
- application/bogon
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/web-default.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/web-default.xml
deleted file mode 100644
index 7359db4d67f..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/web-default.xml
+++ /dev/null
@@ -1,534 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Default web.xml file.
- This file is applied to a Web application before its own WEB_INF/web.xml file
-
-
-
-
-
-
-
- org.eclipse.jetty.servlet.listener.ELContextCleaner
-
-
-
-
-
-
-
- org.eclipse.jetty.servlet.listener.IntrospectorCleaner
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- default
- org.eclipse.jetty.servlet.DefaultServlet
-
- aliases
- false
-
-
- acceptRanges
- true
-
-
- dirAllowed
- true
-
-
- welcomeServlets
- false
-
-
- redirectWelcome
- false
-
-
- maxCacheSize
- 256000000
-
-
- maxCachedFileSize
- 200000000
-
-
- maxCachedFiles
- 2048
-
-
- gzip
- false
-
-
- etags
- false
-
-
- useFileMappedBuffer
- true
-
-
-
- 0
-
-
-
- default
- /
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- jsp
- org.eclipse.jetty.jsp.JettyJspServlet
-
- logVerbosityLevel
- DEBUG
-
-
- fork
- false
-
-
- xpoweredBy
- false
-
-
- compilerTargetVM
- 1.7
-
-
- compilerSourceVM
- 1.7
-
-
- 0
-
-
-
- jsp
- *.jsp
- *.jspf
- *.jspx
- *.xsp
- *.JSP
- *.JSPF
- *.JSPX
- *.XSP
-
-
-
-
-
-
-
- 30
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- index.html
- index.htm
- index.jsp
-
-
-
-
-
-
-
- ar
- ISO-8859-6
-
-
- be
- ISO-8859-5
-
-
- bg
- ISO-8859-5
-
-
- ca
- ISO-8859-1
-
-
- cs
- ISO-8859-2
-
-
- da
- ISO-8859-1
-
-
- de
- ISO-8859-1
-
-
- el
- ISO-8859-7
-
-
- en
- ISO-8859-1
-
-
- es
- ISO-8859-1
-
-
- et
- ISO-8859-1
-
-
- fi
- ISO-8859-1
-
-
- fr
- ISO-8859-1
-
-
- hr
- ISO-8859-2
-
-
- hu
- ISO-8859-2
-
-
- is
- ISO-8859-1
-
-
- it
- ISO-8859-1
-
-
- iw
- ISO-8859-8
-
-
- ja
- Shift_JIS
-
-
- ko
- EUC-KR
-
-
- lt
- ISO-8859-2
-
-
- lv
- ISO-8859-2
-
-
- mk
- ISO-8859-5
-
-
- nl
- ISO-8859-1
-
-
- no
- ISO-8859-1
-
-
- pl
- ISO-8859-2
-
-
- pt
- ISO-8859-1
-
-
- ro
- ISO-8859-2
-
-
- ru
- ISO-8859-5
-
-
- sh
- ISO-8859-5
-
-
- sk
- ISO-8859-2
-
-
- sl
- ISO-8859-2
-
-
- sq
- ISO-8859-2
-
-
- sr
- ISO-8859-5
-
-
- sv
- ISO-8859-1
-
-
- tr
- ISO-8859-9
-
-
- uk
- ISO-8859-5
-
-
- zh
- GB2312
-
-
- zh_TW
- Big5
-
-
-
-
-
-
-
-
- Disable TRACE
- /
- TRACE
-
-
-
-
-
- Enable everything but TRACE
- /
- TRACE
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/web-overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/web-overlay.xml
deleted file mode 100644
index a554231f4ff..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/WEB-INF/web-overlay.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
- Templated Test WebApp
-
-
- overlay
- templates/myfoo/web.xml
-
-
- template
- templates/myfoo/web.xml
-
-
- overlay.template
- ${overlay.template}
-
-
- overlay.template.name
- ${overlay.template.name}
-
-
- overlay.template.classifier
- ${overlay.template.classifier}
-
-
- overlay.instance.classifier
- ${overlay.instance.classifier}
-
-
- overlay.instance
- ${overlay.instance}
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/index.html b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/index.html
deleted file mode 100644
index afebff7ad8f..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-Template foo webapp
-
-
-Should see index.jsp instead of this!!!
-
-
-Red,
-Blue,
-Green
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/index.jsp b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/index.jsp
deleted file mode 100644
index 569338d2448..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/index.jsp
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<%@page import="java.io.BufferedReader"%>
-<%@page import="java.io.InputStreamReader"%>
-<%@page import="java.util.Enumeration"%>
-
<%=application.getServletContextName()%>
-
-
-
-Red,
-Blue,
-Green
-
-
-
Overlays
-webapp=<%=application.getInitParameter("webapp")%>
-template=<%=application.getInitParameter("template")%>
-node=<%=application.getInitParameter("node")%>
-instance=<%=application.getInitParameter("instance")%>
-
-Init Parameters
-<%
-Enumeration e=application.getInitParameterNames();
-while (e.hasMoreElements())
-{
- String name=e.nextElement().toString();
- String value=application.getInitParameter(name);
- out.println(name+": "+value+"
");
-}
-%>
-Attributes
-<%
-e=application.getAttributeNames();
-while (e.hasMoreElements())
-{
- String name=e.nextElement().toString();
- String value=String.valueOf(application.getAttribute(name));
- out.println(name+": "+value+"
");
-}
-%>
-Resources
-<%
-ClassLoader loader = Thread.currentThread().getContextClassLoader();
-%>
-resourceA.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceA.txt").openStream())).readLine()%>
-resourceB.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceB.txt").openStream())).readLine()%>
-resourceC.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceC.txt").openStream())).readLine()%>
-resourceD.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceD.txt").openStream())).readLine()%>
-resourceE.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceE.txt").openStream())).readLine()%>
-resourceF.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceF.txt").openStream())).readLine()%>
-resourceG.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceG.txt").openStream())).readLine()%>
-resourceH.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceH.txt").openStream())).readLine()%>
-resourceI.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceI.txt").openStream())).readLine()%>
-resourceJ.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceJ.txt").openStream())).readLine()%>
-resourceK.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceK.txt").openStream())).readLine()%>
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/lib/META-INF/MANIFEST.MF b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/lib/META-INF/MANIFEST.MF
deleted file mode 100644
index e7374eeb7dc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/lib/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.6.0_20 (Sun Microsystems Inc.)
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/lib/templateResources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/lib/templateResources.jar
deleted file mode 100644
index 4fb379cb222..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/lib/templateResources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/logo.png b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/logo.png
deleted file mode 100644
index b633447fff5..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/logo.png and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceC.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceC.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceC.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceD.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceD.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceD.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceE.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceE.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceE.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceF.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceF.txt
deleted file mode 100644
index 9e00184c94d..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/WEB-INF/classes/resourceF.txt
+++ /dev/null
@@ -1 +0,0 @@
-template WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/index.html b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/index.html
deleted file mode 100644
index afebff7ad8f..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-Template foo webapp
-
-
-Should see index.jsp instead of this!!!
-
-
-Red,
-Blue,
-Green
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/index.jsp b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/index.jsp
deleted file mode 100644
index 569338d2448..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/index.jsp
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<%@page import="java.io.BufferedReader"%>
-<%@page import="java.io.InputStreamReader"%>
-<%@page import="java.util.Enumeration"%>
-
<%=application.getServletContextName()%>
-
-
-
-Red,
-Blue,
-Green
-
-
-
Overlays
-webapp=<%=application.getInitParameter("webapp")%>
-template=<%=application.getInitParameter("template")%>
-node=<%=application.getInitParameter("node")%>
-instance=<%=application.getInitParameter("instance")%>
-
-Init Parameters
-<%
-Enumeration e=application.getInitParameterNames();
-while (e.hasMoreElements())
-{
- String name=e.nextElement().toString();
- String value=application.getInitParameter(name);
- out.println(name+": "+value+"
");
-}
-%>
-Attributes
-<%
-e=application.getAttributeNames();
-while (e.hasMoreElements())
-{
- String name=e.nextElement().toString();
- String value=String.valueOf(application.getAttribute(name));
- out.println(name+": "+value+"
");
-}
-%>
-Resources
-<%
-ClassLoader loader = Thread.currentThread().getContextClassLoader();
-%>
-resourceA.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceA.txt").openStream())).readLine()%>
-resourceB.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceB.txt").openStream())).readLine()%>
-resourceC.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceC.txt").openStream())).readLine()%>
-resourceD.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceD.txt").openStream())).readLine()%>
-resourceE.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceE.txt").openStream())).readLine()%>
-resourceF.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceF.txt").openStream())).readLine()%>
-resourceG.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceG.txt").openStream())).readLine()%>
-resourceH.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceH.txt").openStream())).readLine()%>
-resourceI.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceI.txt").openStream())).readLine()%>
-resourceJ.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceJ.txt").openStream())).readLine()%>
-resourceK.txt=<%=new BufferedReader(new InputStreamReader(loader.getResource("resourceK.txt").openStream())).readLine()%>
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/logo.png b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/logo.png
deleted file mode 100644
index b633447fff5..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/myfoo=foo/webapp/logo.png and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/WEB-INF/overlay.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/WEB-INF/overlay.xml
deleted file mode 100644
index f3037a1b134..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/WEB-INF/overlay.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
- /
-
-
-
-
- - index.html
-
-
- max-age=3600,public
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/index.html b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/index.html
deleted file mode 100644
index 67ed39608fc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-Cloudtide Deployer Demo
-
-
-Red,
-Blue,
-Green
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/webapp/index.html b/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/webapp/index.html
deleted file mode 100644
index 67ed39608fc..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/templates/root/webapp/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
Cloudtide Deployer Demo
-
-
-Red,
-Blue,
-Green
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceA.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceA.txt
deleted file mode 100644
index c8ca259d738..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceA.txt
+++ /dev/null
@@ -1 +0,0 @@
-webapp WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceB.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceB.txt
deleted file mode 100644
index c8ca259d738..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceB.txt
+++ /dev/null
@@ -1 +0,0 @@
-webapp WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceC.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceC.txt
deleted file mode 100644
index c8ca259d738..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceC.txt
+++ /dev/null
@@ -1 +0,0 @@
-webapp WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceD.txt b/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceD.txt
deleted file mode 100644
index c8ca259d738..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/classes/resourceD.txt
+++ /dev/null
@@ -1 +0,0 @@
-webapp WEB-INF classes
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/lib/webappResources.jar b/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/lib/webappResources.jar
deleted file mode 100644
index 4c450a43e30..00000000000
Binary files a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/lib/webappResources.jar and /dev/null differ
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/web.xml b/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/web.xml
deleted file mode 100644
index b804a9d1b3f..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/WEB-INF/web.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- Test WebApp
-
-
- overlay
- webapps/foo/WEB-INF/web.xml
-
-
- webapp
- webapps/foo-INF/web.xml
-
-
-
-
-
diff --git a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/index.html b/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/index.html
deleted file mode 100644
index a98e28bfce9..00000000000
--- a/jetty-overlay-deployer/src/test/resources/home/overlays/webapps/foo/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
foo webapp
diff --git a/pom.xml b/pom.xml
index 5291dde8311..28661b25699 100644
--- a/pom.xml
+++ b/pom.xml
@@ -136,7 +136,6 @@
jetty-documentation
-