org.eclipse.jetty.deploy.WebAppDeployer Maven / Gradle / Ivy
//
// ========================================================================
// Copyright (c) 1995-2016 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.deploy;
import java.util.ArrayList;
import java.util.Locale;
import org.eclipse.jetty.deploy.providers.ScanningAppProvider;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.util.AttributesMap;
import org.eclipse.jetty.util.URIUtil;
import org.eclipse.jetty.util.component.AbstractLifeCycle;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.webapp.WebAppContext;
/**
* Legacy Web Application Deployer.
*
*
* Note: The WebAppDeployer is being phased out of Jetty in favor of the {@link DeploymentManager} and
* {@link org.eclipse.jetty.deploy.providers.WebAppProvider} implementation.
*
*
* The class searches a directory for and deploys standard web application. At startup, the directory specified by
* {@link #setWebAppDir(String)} is searched for subdirectories (excluding hidden and CVS) or files ending with ".zip"
* or "*.war". For each webapp discovered is passed to a new instance of {@link WebAppContext} (or a subclass specified
* by {@link #getContexts()}. {@link ContextHandlerCollection#getContextClass()}
*
*
* This deployer does not do hot deployment or undeployment. Nor does it support per web application configuration. For
* these features see {@link ContextDeployer}.
*
* @deprecated
* @see DeploymentManager
* @see ScanningAppProvider
* @see ContextDeployer
*/
@SuppressWarnings("unchecked")
public class WebAppDeployer extends AbstractLifeCycle
{
private static final Logger LOG = Log.getLogger(WebAppDeployer.class);
private HandlerCollection _contexts;
private String _webAppDir;
private String _defaultsDescriptor;
private String[] _configurationClasses;
private boolean _extract;
private boolean _parentLoaderPriority;
private boolean _allowDuplicates;
private ArrayList _deployed;
private AttributesMap _contextAttributes = new AttributesMap();
public WebAppDeployer()
{
LOG.warn("WebAppDeployer is deprecated. Use WebAppProvider");
}
public String[] getConfigurationClasses()
{
return _configurationClasses;
}
public void setConfigurationClasses(String[] configurationClasses)
{
_configurationClasses=configurationClasses;
}
public HandlerCollection getContexts()
{
return _contexts;
}
public void setContexts(HandlerCollection contexts)
{
_contexts=contexts;
}
public String getDefaultsDescriptor()
{
return _defaultsDescriptor;
}
public void setDefaultsDescriptor(String defaultsDescriptor)
{
_defaultsDescriptor=defaultsDescriptor;
}
public boolean isExtract()
{
return _extract;
}
public void setExtract(boolean extract)
{
_extract=extract;
}
public boolean isParentLoaderPriority()
{
return _parentLoaderPriority;
}
public void setParentLoaderPriority(boolean parentPriorityClassLoading)
{
_parentLoaderPriority=parentPriorityClassLoading;
}
public String getWebAppDir()
{
return _webAppDir;
}
public void setWebAppDir(String dir)
{
_webAppDir=dir;
}
public boolean getAllowDuplicates()
{
return _allowDuplicates;
}
/* ------------------------------------------------------------ */
/**
* @param allowDuplicates If false, do not deploy webapps that have already been deployed or duplicate context path
*/
public void setAllowDuplicates(boolean allowDuplicates)
{
_allowDuplicates=allowDuplicates;
}
/**
* Set a contextAttribute that will be set for every Context deployed by this deployer.
* @param name
* @param value
*/
public void setAttribute (String name, Object value)
{
_contextAttributes.setAttribute(name,value);
}
/**
* Get a contextAttribute that will be set for every Context deployed by this deployer.
* @param name
* @return the attribute value
*/
public Object getAttribute (String name)
{
return _contextAttributes.getAttribute(name);
}
/**
* Remove a contextAttribute that will be set for every Context deployed by this deployer.
* @param name
*/
public void removeAttribute(String name)
{
_contextAttributes.removeAttribute(name);
}
/* ------------------------------------------------------------ */
/**
* @throws Exception
*/
@Override
public void doStart() throws Exception
{
_deployed=new ArrayList();
scan();
}
/* ------------------------------------------------------------ */
/** Scan for webapplications.
*
* @throws Exception
*/
public void scan() throws Exception
{
if (_contexts==null)
throw new IllegalArgumentException("No HandlerContainer");
Resource r=Resource.newResource(_webAppDir);
if (!r.exists())
throw new IllegalArgumentException("No such webapps resource "+r);
if (!r.isDirectory())
throw new IllegalArgumentException("Not directory webapps resource "+r);
String[] files=r.list();
files: for (int f=0; files!=null&&f0)
context=context.substring(0,context.length()-1);
// Check the context path has not already been added or the webapp itself is not already deployed
if (!_allowDuplicates)
{
Handler[] installed=_contexts.getChildHandlersByClass(ContextHandler.class);
for (int i=0; i0;)
{
ContextHandler wac = (ContextHandler)_deployed.get(i);
wac.stop();// TODO Multi exception
}
}
}