fix bug 330098 The AppProvider was not indexing the ContextHandler that was deployed well enough
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@2544 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
parent
f0c09c1d56
commit
1ab88841c8
|
@ -17,6 +17,7 @@ package org.eclipse.jetty.osgi.boot;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FilenameFilter;
|
import java.io.FilenameFilter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.eclipse.jetty.deploy.App;
|
import org.eclipse.jetty.deploy.App;
|
||||||
import org.eclipse.jetty.deploy.AppProvider;
|
import org.eclipse.jetty.deploy.AppProvider;
|
||||||
|
@ -90,6 +91,29 @@ public class OSGiAppProvider extends ScanningAppProvider implements AppProvider
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reading the display name of a webapp is really not sufficient for indexing the various
|
||||||
|
* deployed ContextHandlers.
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String getContextHandlerAppName(ContextHandler context) {
|
||||||
|
String appName = context.getDisplayName();
|
||||||
|
if (appName == null || appName.length() == 0 || getDeployedApps().containsKey(appName)) {
|
||||||
|
if (context instanceof WebAppContext)
|
||||||
|
{
|
||||||
|
appName = ((WebAppContext)context).getContextPath();
|
||||||
|
if (getDeployedApps().containsKey(appName)) {
|
||||||
|
appName = "noDisplayName"+context.getClass().getSimpleName()+context.hashCode();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
appName = "noDisplayName"+context.getClass().getSimpleName()+context.hashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return appName;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default OSGiAppProvider consutructed when none are defined in the
|
* Default OSGiAppProvider consutructed when none are defined in the
|
||||||
* jetty.xml configuration.
|
* jetty.xml configuration.
|
||||||
|
@ -168,7 +192,8 @@ public class OSGiAppProvider extends ScanningAppProvider implements AppProvider
|
||||||
|
|
||||||
// wrap context as an App
|
// wrap context as an App
|
||||||
App app = new App(getDeploymentManager(),this,originId,context);
|
App app = new App(getDeploymentManager(),this,originId,context);
|
||||||
getDeployedApps().put(context.getDisplayName(),app);
|
String appName = getContextHandlerAppName(context);
|
||||||
|
getDeployedApps().put(appName,app);
|
||||||
getDeploymentManager().addApp(app);
|
getDeploymentManager().addApp(app);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,7 +224,23 @@ public class OSGiAppProvider extends ScanningAppProvider implements AppProvider
|
||||||
|
|
||||||
public void removeContext(ContextHandler context) throws Exception
|
public void removeContext(ContextHandler context) throws Exception
|
||||||
{
|
{
|
||||||
|
String appName = getContextHandlerAppName(context);
|
||||||
App app = getDeployedApps().remove(context.getDisplayName());
|
App app = getDeployedApps().remove(context.getDisplayName());
|
||||||
|
if (app == null) {
|
||||||
|
//try harder to undeploy this context handler.
|
||||||
|
//see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=330098
|
||||||
|
appName = null;
|
||||||
|
for (Entry<String,App> deployedApp : getDeployedApps().entrySet()) {
|
||||||
|
if (deployedApp.getValue().getContextHandler() == context) {
|
||||||
|
app = deployedApp.getValue();
|
||||||
|
appName = deployedApp.getKey();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (appName != null) {
|
||||||
|
getDeployedApps().remove(appName);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (app != null)
|
if (app != null)
|
||||||
{
|
{
|
||||||
getDeploymentManager().removeApp(app);
|
getDeploymentManager().removeApp(app);
|
||||||
|
|
Loading…
Reference in New Issue