Methods Summary |
---|
public synchronized void | addServiced(java.lang.String name)Add a serviced application to the list.
serviced.add(name);
|
protected void | addWatchedResources(org.apache.catalina.startup.HostConfig$DeployedApplication app, java.lang.String docBase, org.apache.catalina.Context context)Add watched resources to the specified Context.
// FIXME: Feature idea. Add support for patterns (ex: WEB-INF/*, WEB-INF/*.xml), where
// we would only check if at least one resource is newer than app.timestamp
File docBaseFile = null;
if (docBase != null) {
docBaseFile = new File(docBase);
if (!docBaseFile.isAbsolute()) {
docBaseFile = new File(appBase(), docBase);
}
}
String[] watchedResources = context.findWatchedResources();
for (int i = 0; i < watchedResources.length; i++) {
File resource = new File(watchedResources[i]);
if (!resource.isAbsolute()) {
if (docBase != null) {
resource = new File(docBaseFile, watchedResources[i]);
} else {
continue;
}
}
app.reloadResources.put(resource.getAbsolutePath(),
new Long(resource.lastModified()));
}
|
protected java.io.File | appBase()Return a File object representing the "application root" directory
for our associated Host.
if (appBase != null) {
return appBase;
}
File file = new File(host.getAppBase());
if (!file.isAbsolute())
file = new File(System.getProperty("catalina.base"),
host.getAppBase());
try {
appBase = file.getCanonicalFile();
} catch (IOException e) {
appBase = file;
}
return (appBase);
|
protected void | check()Check status of all webapps.
if (host.getAutoDeploy()) {
// Check for resources modification to trigger redeployment
DeployedApplication[] apps =
(DeployedApplication[]) deployed.values().toArray(new DeployedApplication[0]);
for (int i = 0; i < apps.length; i++) {
if (!isServiced(apps[i].name))
checkResources(apps[i]);
}
// Hotdeploy applications
deployApps();
}
|
public void | check(java.lang.String name)Check status of a specific webapp, for use with stuff like management webapps.
DeployedApplication app = (DeployedApplication) deployed.get(name);
if (app != null) {
checkResources(app);
} else {
deployApps(name);
}
|
protected synchronized void | checkResources(org.apache.catalina.startup.HostConfig$DeployedApplication app)Check resources for redeployment and reloading.
String[] resources = (String[]) app.redeployResources.keySet().toArray(new String[0]);
for (int i = 0; i < resources.length; i++) {
File resource = new File(resources[i]);
if (log.isDebugEnabled())
log.debug("Checking context[" + app.name + "] redeploy resource " + resource);
if (resource.exists()) {
long lastModified = ((Long) app.redeployResources.get(resources[i])).longValue();
if ((!resource.isDirectory()) && resource.lastModified() > lastModified) {
// Undeploy application
if (log.isInfoEnabled())
log.info(sm.getString("hostConfig.undeploy", app.name));
ContainerBase context = (ContainerBase) host.findChild(app.name);
try {
host.removeChild(context);
} catch (Throwable t) {
log.warn(sm.getString
("hostConfig.context.remove", app.name), t);
}
try {
context.destroy();
} catch (Throwable t) {
log.warn(sm.getString
("hostConfig.context.destroy", app.name), t);
}
// Delete other redeploy resources
for (int j = i + 1; j < resources.length; j++) {
try {
File current = new File(resources[j]);
current = current.getCanonicalFile();
if ((current.getAbsolutePath().startsWith(appBase().getAbsolutePath()))
|| (current.getAbsolutePath().startsWith(configBase().getAbsolutePath()))) {
if (log.isDebugEnabled())
log.debug("Delete " + current);
ExpandWar.delete(current);
}
} catch (IOException e) {
log.warn(sm.getString
("hostConfig.canonicalizing", app.name), e);
}
}
deployed.remove(app.name);
return;
}
} else {
long lastModified = ((Long) app.redeployResources.get(resources[i])).longValue();
if (lastModified == 0L) {
continue;
}
// Undeploy application
if (log.isInfoEnabled())
log.info(sm.getString("hostConfig.undeploy", app.name));
ContainerBase context = (ContainerBase) host.findChild(app.name);
try {
host.removeChild(context);
} catch (Throwable t) {
log.warn(sm.getString
("hostConfig.context.remove", app.name), t);
}
try {
context.destroy();
} catch (Throwable t) {
log.warn(sm.getString
("hostConfig.context.destroy", app.name), t);
}
// Delete all redeploy resources
for (int j = i + 1; j < resources.length; j++) {
try {
File current = new File(resources[j]);
current = current.getCanonicalFile();
if ((current.getAbsolutePath().startsWith(appBase().getAbsolutePath()))
|| (current.getAbsolutePath().startsWith(configBase().getAbsolutePath()))) {
if (log.isDebugEnabled())
log.debug("Delete " + current);
ExpandWar.delete(current);
}
} catch (IOException e) {
log.warn(sm.getString
("hostConfig.canonicalizing", app.name), e);
}
}
// Delete reload resources as well (to remove any remaining .xml descriptor)
String[] resources2 = (String[]) app.reloadResources.keySet().toArray(new String[0]);
for (int j = 0; j < resources2.length; j++) {
try {
File current = new File(resources2[j]);
current = current.getCanonicalFile();
if ((current.getAbsolutePath().startsWith(appBase().getAbsolutePath()))
|| ((current.getAbsolutePath().startsWith(configBase().getAbsolutePath())
&& (current.getAbsolutePath().endsWith(".xml"))))) {
if (log.isDebugEnabled())
log.debug("Delete " + current);
ExpandWar.delete(current);
}
} catch (IOException e) {
log.warn(sm.getString
("hostConfig.canonicalizing", app.name), e);
}
}
deployed.remove(app.name);
return;
}
}
resources = (String[]) app.reloadResources.keySet().toArray(new String[0]);
for (int i = 0; i < resources.length; i++) {
File resource = new File(resources[i]);
if (log.isDebugEnabled())
log.debug("Checking context[" + app.name + "] reload resource " + resource);
long lastModified = ((Long) app.reloadResources.get(resources[i])).longValue();
if ((!resource.exists() && lastModified != 0L)
|| (resource.lastModified() != lastModified)) {
// Reload application
if(log.isInfoEnabled())
log.info(sm.getString("hostConfig.reload", app.name));
Container context = host.findChild(app.name);
try {
((Lifecycle) context).stop();
} catch (Exception e) {
log.warn(sm.getString
("hostConfig.context.restart", app.name), e);
}
// If the context was not started (for example an error
// in web.xml) we'll still get to try to start
try {
((Lifecycle) context).start();
} catch (Exception e) {
log.warn(sm.getString
("hostConfig.context.restart", app.name), e);
}
// Update times
app.reloadResources.put(resources[i], new Long(resource.lastModified()));
app.timestamp = System.currentTimeMillis();
return;
}
}
|
protected java.io.File | configBase()Return a File object representing the "configuration root" directory
for our associated Host.
if (configBase != null) {
return configBase;
}
File file = new File(System.getProperty("catalina.base"), "conf");
Container parent = host.getParent();
if ((parent != null) && (parent instanceof Engine)) {
file = new File(file, parent.getName());
}
file = new File(file, host.getName());
try {
configBase = file.getCanonicalFile();
} catch (IOException e) {
configBase = file;
}
return (configBase);
|
protected static org.apache.tomcat.util.digester.Digester | createDigester()Create the digester which will be used to parse context config files.
Digester digester = new Digester();
digester.setValidating(false);
// Add object creation rule
digester.addObjectCreate("Context", "org.apache.catalina.core.StandardContext",
"className");
// Set the properties on that object (it doesn't matter if extra
// properties are set)
digester.addSetProperties("Context");
return (digester);
|
protected void | deployApps()Deploy applications for any directories or WAR files that are found
in our "application root" directory.
File appBase = appBase();
File configBase = configBase();
// Deploy XML descriptors from configBase
deployDescriptors(configBase, configBase.list());
// Deploy WARs, and loop if additional descriptors are found
deployWARs(appBase, appBase.list());
// Deploy expanded folders
deployDirectories(appBase, appBase.list());
|
protected void | deployApps(java.lang.String name)Deploy applications for any directories or WAR files that are found
in our "application root" directory.
File appBase = appBase();
File configBase = configBase();
String baseName = getConfigFile(name);
String docBase = getConfigFile(name);
// Deploy XML descriptors from configBase
File xml = new File(configBase, baseName + ".xml");
if (xml.exists())
deployDescriptor(name, xml, baseName + ".xml");
// Deploy WARs, and loop if additional descriptors are found
File war = new File(appBase, docBase + ".war");
if (war.exists())
deployWAR(name, war, docBase + ".war");
// Deploy expanded folders
File dir = new File(appBase, docBase);
if (dir.exists())
deployDirectory(name, dir, docBase);
|
protected void | deployDescriptor(java.lang.String contextPath, java.io.File contextXml, java.lang.String file)
if (deploymentExists(contextPath)) {
return;
}
DeployedApplication deployedApp = new DeployedApplication(contextPath);
// Assume this is a configuration descriptor and deploy it
if(log.isDebugEnabled()) {
log.debug(sm.getString("hostConfig.deployDescriptor", file));
}
Context context = null;
try {
synchronized (digester) {
try {
context = (Context) digester.parse(contextXml);
if (context == null) {
log.error(sm.getString("hostConfig.deployDescriptor.error",
file));
return;
}
} finally {
digester.reset();
}
}
if (context instanceof Lifecycle) {
Class clazz = Class.forName(host.getConfigClass());
LifecycleListener listener =
(LifecycleListener) clazz.newInstance();
((Lifecycle) context).addLifecycleListener(listener);
}
context.setConfigFile(contextXml.getAbsolutePath());
context.setPath(contextPath);
// Add the associated docBase to the redeployed list if it's a WAR
boolean isWar = false;
boolean isExternal = false;
if (context.getDocBase() != null) {
File docBase = new File(context.getDocBase());
if (!docBase.isAbsolute()) {
docBase = new File(appBase(), context.getDocBase());
}
// If external docBase, register .xml as redeploy first
if (!docBase.getCanonicalPath().startsWith(appBase().getAbsolutePath())) {
isExternal = true;
deployedApp.redeployResources.put
(contextXml.getAbsolutePath(), new Long(contextXml.lastModified()));
deployedApp.redeployResources.put(docBase.getAbsolutePath(),
new Long(docBase.lastModified()));
if (docBase.getAbsolutePath().toLowerCase().endsWith(".war")) {
isWar = true;
}
} else {
log.warn(sm.getString("hostConfig.deployDescriptor.localDocBaseSpecified",
docBase));
// Ignore specified docBase
context.setDocBase(null);
}
}
host.addChild(context);
// Get paths for WAR and expanded WAR in appBase
String name = null;
String path = context.getPath();
if (path.equals("")) {
name = "ROOT";
} else {
if (path.startsWith("/")) {
name = path.substring(1);
} else {
name = path;
}
}
File expandedDocBase = new File(name);
File warDocBase = new File(name + ".war");
if (!expandedDocBase.isAbsolute()) {
expandedDocBase = new File(appBase(), name);
warDocBase = new File(appBase(), name + ".war");
}
// Add the eventual unpacked WAR and all the resources which will be
// watched inside it
if (isWar && unpackWARs) {
deployedApp.redeployResources.put(expandedDocBase.getAbsolutePath(),
new Long(expandedDocBase.lastModified()));
deployedApp.redeployResources.put
(contextXml.getAbsolutePath(), new Long(contextXml.lastModified()));
addWatchedResources(deployedApp, expandedDocBase.getAbsolutePath(), context);
} else {
// Find an existing matching war and expanded folder
if (warDocBase.exists()) {
deployedApp.redeployResources.put(warDocBase.getAbsolutePath(),
new Long(warDocBase.lastModified()));
}
if (expandedDocBase.exists()) {
deployedApp.redeployResources.put(expandedDocBase.getAbsolutePath(),
new Long(expandedDocBase.lastModified()));
addWatchedResources(deployedApp,
expandedDocBase.getAbsolutePath(), context);
} else {
addWatchedResources(deployedApp, null, context);
}
// Add the context XML to the list of files which should trigger a redeployment
if (!isExternal) {
deployedApp.redeployResources.put
(contextXml.getAbsolutePath(), new Long(contextXml.lastModified()));
}
}
} catch (Throwable t) {
log.error(sm.getString("hostConfig.deployDescriptor.error",
file), t);
}
if (context != null && host.findChild(context.getName()) != null) {
deployed.put(contextPath, deployedApp);
}
|
protected void | deployDescriptors(java.io.File configBase, java.lang.String[] files)Deploy XML context descriptors.
if (files == null)
return;
for (int i = 0; i < files.length; i++) {
if (files[i].equalsIgnoreCase("META-INF"))
continue;
if (files[i].equalsIgnoreCase("WEB-INF"))
continue;
File contextXml = new File(configBase, files[i]);
if (files[i].toLowerCase().endsWith(".xml")) {
// Calculate the context path and make sure it is unique
String nameTmp = files[i].substring(0, files[i].length() - 4);
String contextPath = "/" + nameTmp.replace('#", '/");
if (nameTmp.equals("ROOT")) {
contextPath = "";
}
if (isServiced(contextPath))
continue;
String file = files[i];
deployDescriptor(contextPath, contextXml, file);
}
}
|
protected void | deployDirectories(java.io.File appBase, java.lang.String[] files)Deploy directories.
if (files == null)
return;
for (int i = 0; i < files.length; i++) {
if (files[i].equalsIgnoreCase("META-INF"))
continue;
if (files[i].equalsIgnoreCase("WEB-INF"))
continue;
File dir = new File(appBase, files[i]);
if (dir.isDirectory()) {
// Calculate the context path and make sure it is unique
String contextPath = "/" + files[i];
if (files[i].equals("ROOT"))
contextPath = "";
if (isServiced(contextPath))
continue;
deployDirectory(contextPath, dir, files[i]);
}
}
|
protected void | deployDirectory(java.lang.String contextPath, java.io.File dir, java.lang.String file)
DeployedApplication deployedApp = new DeployedApplication(contextPath);
if (deploymentExists(contextPath))
return;
// Deploy the application in this directory
if( log.isDebugEnabled() )
log.debug(sm.getString("hostConfig.deployDir", file));
try {
Context context = (Context) Class.forName(contextClass).newInstance();
if (context instanceof Lifecycle) {
Class clazz = Class.forName(host.getConfigClass());
LifecycleListener listener =
(LifecycleListener) clazz.newInstance();
((Lifecycle) context).addLifecycleListener(listener);
}
context.setPath(contextPath);
context.setDocBase(file);
File configFile = new File(dir, Constants.ApplicationContextXml);
if (deployXML) {
context.setConfigFile(configFile.getAbsolutePath());
}
host.addChild(context);
deployedApp.redeployResources.put(dir.getAbsolutePath(),
new Long(dir.lastModified()));
if (deployXML) {
deployedApp.redeployResources.put(configFile.getAbsolutePath(),
new Long(configFile.lastModified()));
}
addWatchedResources(deployedApp, dir.getAbsolutePath(), context);
} catch (Throwable t) {
log.error(sm.getString("hostConfig.deployDir.error", file), t);
}
deployed.put(contextPath, deployedApp);
|
protected void | deployWAR(java.lang.String contextPath, java.io.File dir, java.lang.String file)
if (deploymentExists(contextPath))
return;
// Checking for a nested /META-INF/context.xml
JarFile jar = null;
JarEntry entry = null;
InputStream istream = null;
BufferedOutputStream ostream = null;
File xml = new File
(configBase, file.substring(0, file.lastIndexOf(".")) + ".xml");
if (deployXML && !xml.exists()) {
try {
jar = new JarFile(dir);
entry = jar.getJarEntry(Constants.ApplicationContextXml);
if (entry != null) {
istream = jar.getInputStream(entry);
configBase.mkdirs();
ostream =
new BufferedOutputStream
(new FileOutputStream(xml), 1024);
byte buffer[] = new byte[1024];
while (true) {
int n = istream.read(buffer);
if (n < 0) {
break;
}
ostream.write(buffer, 0, n);
}
ostream.flush();
ostream.close();
ostream = null;
istream.close();
istream = null;
entry = null;
jar.close();
jar = null;
}
} catch (Exception e) {
// Ignore and continue
if (ostream != null) {
try {
ostream.close();
} catch (Throwable t) {
;
}
ostream = null;
}
if (istream != null) {
try {
istream.close();
} catch (Throwable t) {
;
}
istream = null;
}
} finally {
entry = null;
if (jar != null) {
try {
jar.close();
} catch (Throwable t) {
;
}
jar = null;
}
}
}
DeployedApplication deployedApp = new DeployedApplication(contextPath);
// Deploy the application in this WAR file
if(log.isInfoEnabled())
log.info(sm.getString("hostConfig.deployJar", file));
// Populate redeploy resources with the WAR file
deployedApp.redeployResources.put
(dir.getAbsolutePath(), new Long(dir.lastModified()));
try {
Context context = (Context) Class.forName(contextClass).newInstance();
if (context instanceof Lifecycle) {
Class clazz = Class.forName(host.getConfigClass());
LifecycleListener listener =
(LifecycleListener) clazz.newInstance();
((Lifecycle) context).addLifecycleListener(listener);
}
context.setPath(contextPath);
context.setDocBase(file);
if (xml.exists()) {
context.setConfigFile(xml.getAbsolutePath());
deployedApp.redeployResources.put
(xml.getAbsolutePath(), new Long(xml.lastModified()));
}
host.addChild(context);
// If we're unpacking WARs, the docBase will be mutated after
// starting the context
if (unpackWARs && (context.getDocBase() != null)) {
String name = null;
String path = context.getPath();
if (path.equals("")) {
name = "ROOT";
} else {
if (path.startsWith("/")) {
name = path.substring(1);
} else {
name = path;
}
}
File docBase = new File(name);
if (!docBase.isAbsolute()) {
docBase = new File(appBase(), name);
}
deployedApp.redeployResources.put(docBase.getAbsolutePath(),
new Long(docBase.lastModified()));
addWatchedResources(deployedApp, docBase.getAbsolutePath(), context);
} else {
addWatchedResources(deployedApp, null, context);
}
} catch (Throwable t) {
log.error(sm.getString("hostConfig.deployJar.error", file), t);
}
deployed.put(contextPath, deployedApp);
|
protected void | deployWARs(java.io.File appBase, java.lang.String[] files)Deploy WAR files.
if (files == null)
return;
for (int i = 0; i < files.length; i++) {
if (files[i].equalsIgnoreCase("META-INF"))
continue;
if (files[i].equalsIgnoreCase("WEB-INF"))
continue;
File dir = new File(appBase, files[i]);
if (files[i].toLowerCase().endsWith(".war")) {
// Calculate the context path and make sure it is unique
String contextPath = "/" + files[i];
int period = contextPath.lastIndexOf(".");
if (period >= 0)
contextPath = contextPath.substring(0, period);
if (contextPath.equals("/ROOT"))
contextPath = "";
if (isServiced(contextPath))
continue;
String file = files[i];
deployWAR(contextPath, dir, file);
}
}
|
protected boolean | deploymentExists(java.lang.String contextPath)Check if a webapp is already deployed in this host.
return (deployed.containsKey(contextPath) || (host.findChild(contextPath) != null));
|
public java.lang.String | getConfigBaseName()Get the name of the configBase.
For use with JMX management.
return configBase().getAbsolutePath();
|
public java.lang.String | getConfigClass()Return the Context configuration class name.
// ------------------------------------------------------------- Properties
return (this.configClass);
|
protected java.lang.String | getConfigFile(java.lang.String path)Given a context path, get the config file name.
String basename = null;
if (path.equals("")) {
basename = "ROOT";
} else {
basename = path.substring(1).replace('/", '#");
}
return (basename);
|
public java.lang.String | getContextClass()Return the Context implementation class name.
return (this.contextClass);
|
public long | getDeploymentTime(java.lang.String name)Get the instant where an application was deployed.
DeployedApplication app = (DeployedApplication) deployed.get(name);
if (app == null) {
return 0L;
} else {
return app.timestamp;
}
|
protected java.lang.String | getDocBase(java.lang.String path)Given a context path, get the config file name.
String basename = null;
if (path.equals("")) {
basename = "ROOT";
} else {
basename = path.substring(1);
}
return (basename);
|
public boolean | getXmlNamespaceAware()Get the server.xml attribute's xmlNamespaceAware.
return xmlNamespaceAware;
|
public boolean | getXmlValidation()Get the server.xml attribute's xmlValidation.
return xmlValidation;
|
public boolean | isDeployXML()Return the deploy XML config file flag for this component.
return (this.deployXML);
|
public boolean | isDeployed(java.lang.String name)Has the specified application been deployed? Note applications defined
in server.xml will not have been deployed.
DeployedApplication app = (DeployedApplication) deployed.get(name);
if (app == null) {
return false;
} else {
return true;
}
|
public synchronized boolean | isServiced(java.lang.String name)Is application serviced ?
return (serviced.contains(name));
|
public boolean | isUnpackWARs()Return the unpack WARs flag.
return (this.unpackWARs);
|
public void | lifecycleEvent(org.apache.catalina.LifecycleEvent event)Process the START event for an associated Host.
if (event.getType().equals(Lifecycle.PERIODIC_EVENT))
check();
// Identify the host we are associated with
try {
host = (Host) event.getLifecycle();
if (host instanceof StandardHost) {
setDeployXML(((StandardHost) host).isDeployXML());
setUnpackWARs(((StandardHost) host).isUnpackWARs());
setXmlNamespaceAware(((StandardHost) host).getXmlNamespaceAware());
setXmlValidation(((StandardHost) host).getXmlValidation());
}
} catch (ClassCastException e) {
log.error(sm.getString("hostConfig.cce", event.getLifecycle()), e);
return;
}
// Process the event that has occurred
if (event.getType().equals(Lifecycle.START_EVENT))
start();
else if (event.getType().equals(Lifecycle.STOP_EVENT))
stop();
|
public void | manageApp(org.apache.catalina.Context context)Add a new Context to be managed by us.
Entry point for the admin webapp, and other JMX Context controlers.
String contextPath = context.getPath();
if (deployed.containsKey(contextPath))
return;
DeployedApplication deployedApp = new DeployedApplication(contextPath);
// Add the associated docBase to the redeployed list if it's a WAR
boolean isWar = false;
if (context.getDocBase() != null) {
File docBase = new File(context.getDocBase());
if (!docBase.isAbsolute()) {
docBase = new File(appBase(), context.getDocBase());
}
deployedApp.redeployResources.put(docBase.getAbsolutePath(),
new Long(docBase.lastModified()));
if (docBase.getAbsolutePath().toLowerCase().endsWith(".war")) {
isWar = true;
}
}
host.addChild(context);
// Add the eventual unpacked WAR and all the resources which will be
// watched inside it
if (isWar && unpackWARs) {
String name = null;
String path = context.getPath();
if (path.equals("")) {
name = "ROOT";
} else {
if (path.startsWith("/")) {
name = path.substring(1);
} else {
name = path;
}
}
File docBase = new File(name);
if (!docBase.isAbsolute()) {
docBase = new File(appBase(), name);
}
deployedApp.redeployResources.put(docBase.getAbsolutePath(),
new Long(docBase.lastModified()));
addWatchedResources(deployedApp, docBase.getAbsolutePath(), context);
} else {
addWatchedResources(deployedApp, null, context);
}
deployed.put(contextPath, deployedApp);
|
public synchronized void | removeServiced(java.lang.String name)Removed a serviced application from the list.
serviced.remove(name);
|
public void | setConfigClass(java.lang.String configClass)Set the Context configuration class name.
this.configClass = configClass;
|
public void | setContextClass(java.lang.String contextClass)Set the Context implementation class name.
this.contextClass = contextClass;
|
public void | setDeployXML(boolean deployXML)Set the deploy XML config file flag for this component.
this.deployXML= deployXML;
|
public void | setUnpackWARs(boolean unpackWARs)Set the unpack WARs flag.
this.unpackWARs = unpackWARs;
|
public void | setXmlNamespaceAware(boolean xmlNamespaceAware)Set the namespace aware feature of the XML parser used when
parsing xml instances.
this.xmlNamespaceAware=xmlNamespaceAware;
|
public void | setXmlValidation(boolean xmlValidation)Set the validation feature of the XML parser used when
parsing xml instances.
this.xmlValidation = xmlValidation;
|
public void | start()Process a "start" event for this Host.
if (log.isDebugEnabled())
log.debug(sm.getString("hostConfig.start"));
try {
ObjectName hostON = new ObjectName(host.getObjectName());
oname = new ObjectName
(hostON.getDomain() + ":type=Deployer,host=" + host.getName());
Registry.getRegistry(null, null).registerComponent
(this, oname, this.getClass().getName());
} catch (Exception e) {
log.error(sm.getString("hostConfig.jmx.register", oname), e);
}
if (host.getDeployOnStartup())
deployApps();
|
public void | stop()Process a "stop" event for this Host.
if (log.isDebugEnabled())
log.debug(sm.getString("hostConfig.stop"));
undeployApps();
if (oname != null) {
try {
Registry.getRegistry(null, null).unregisterComponent(oname);
} catch (Exception e) {
log.error(sm.getString("hostConfig.jmx.unregister", oname), e);
}
}
oname = null;
appBase = null;
configBase = null;
|
protected void | undeployApps()Undeploy all deployed applications.
if (log.isDebugEnabled())
log.debug(sm.getString("hostConfig.undeploying"));
// Soft undeploy all contexts we have deployed
DeployedApplication[] apps =
(DeployedApplication[]) deployed.values().toArray(new DeployedApplication[0]);
for (int i = 0; i < apps.length; i++) {
try {
host.removeChild(host.findChild(apps[i].name));
} catch (Throwable t) {
log.warn(sm.getString
("hostConfig.context.remove", apps[i].name), t);
}
}
deployed.clear();
|
public void | unmanageApp(java.lang.String contextPath)Remove a webapp from our control.
Entry point for the admin webapp, and other JMX Context controlers.
if(isServiced(contextPath)) {
deployed.remove(contextPath);
host.removeChild(host.findChild(contextPath));
}
|