add the originId to make sure that the app deployer works well.

git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@2036 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
Hugues Malphettes 2010-06-22 04:41:18 +00:00
parent f1588ced32
commit 9b39c2f374
2 changed files with 35 additions and 17 deletions

View File

@ -25,6 +25,7 @@ import org.eclipse.jetty.deploy.providers.ContextProvider;
import org.eclipse.jetty.deploy.providers.ScanningAppProvider; import org.eclipse.jetty.deploy.providers.ScanningAppProvider;
import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.util.resource.Resource; import org.eclipse.jetty.util.resource.Resource;
import org.osgi.framework.Bundle;
/** /**
* AppProvider for OSGi. Supports the configuration of ContextHandlers and * AppProvider for OSGi. Supports the configuration of ContextHandlers and
@ -109,7 +110,7 @@ public class OSGiAppProvider extends ScanningAppProvider implements AppProvider
this(); this();
setMonitoredDir(Resource.newResource(contextsDir.toURI())); setMonitoredDir(Resource.newResource(contextsDir.toURI()));
} }
/** /**
* Returns the ContextHandler that was created by WebappRegistractionHelper * Returns the ContextHandler that was created by WebappRegistractionHelper
* *
@ -138,19 +139,35 @@ public class OSGiAppProvider extends ScanningAppProvider implements AppProvider
super.setDeploymentManager(deploymentManager); super.setDeploymentManager(deploymentManager);
} }
private static String getOriginId(Bundle contributor, String pathInBundle)
{
return contributor.getSymbolicName() + "-" + contributor.getVersion().toString() +
(pathInBundle.startsWith("/") ? pathInBundle : "/" + pathInBundle);
}
/** /**
* @param context * @param context
* @throws Exception * @throws Exception
*/ */
public void addContext(ContextHandler context) throws Exception public void addContext(Bundle contributor, String pathInBundle, ContextHandler context) throws Exception
{
addContext(getOriginId(contributor, pathInBundle), context);
}
/**
* @param context
* @throws Exception
*/
public void addContext(String originId, ContextHandler context) throws Exception
{ {
// TODO apply configuration specific to this provider // TODO apply configuration specific to this provider
// wrap context as an App // wrap context as an App
App app = new App(getDeploymentManager(),this,context.getDisplayName(),context); App app = new App(getDeploymentManager(),this,originId,context);
getDeployedApps().put(context.getDisplayName(),app); getDeployedApps().put(context.getDisplayName(),app);
getDeploymentManager().addApp(app); getDeploymentManager().addApp(app);
} }
/** /**
* Called by the scanner of the context files directory. If we find the * Called by the scanner of the context files directory. If we find the

View File

@ -551,7 +551,7 @@ public class WebappRegistrationHelper
throw new IllegalArgumentException("Unable to locate " + webappFolderPath + " inside " throw new IllegalArgumentException("Unable to locate " + webappFolderPath + " inside "
+ (bundleInstall != null?bundleInstall.getAbsolutePath():"unlocated bundle '" + bundle.getSymbolicName() + "'")); + (bundleInstall != null?bundleInstall.getAbsolutePath():"unlocated bundle '" + bundle.getSymbolicName() + "'"));
} }
return registerWebapplication(bundle,webapp,contextPath,extraClasspath,bundleInstall,webXmlPath,defaultWebXmlPath); return registerWebapplication(bundle,webappFolderPath,webapp,contextPath,extraClasspath,bundleInstall,webXmlPath,defaultWebXmlPath);
} }
/** /**
@ -568,7 +568,7 @@ public class WebappRegistrationHelper
* @return The contexthandler created and started * @return The contexthandler created and started
* @throws Exception * @throws Exception
*/ */
public ContextHandler registerWebapplication(Bundle contributor, File webapp, String contextPath, String extraClasspath, File bundleInstall, public ContextHandler registerWebapplication(Bundle contributor, String pathInBundleToWebApp, File webapp, String contextPath, String extraClasspath, File bundleInstall,
String webXmlPath, String defaultWebXmlPath) throws Exception String webXmlPath, String defaultWebXmlPath) throws Exception
{ {
@ -639,8 +639,7 @@ public class WebappRegistrationHelper
// through the webapp classloader. // through the webapp classloader.
oldServerClasses = context.getServerClasses(); oldServerClasses = context.getServerClasses();
context.setServerClasses(null); context.setServerClasses(null);
_provider.addContext(context); _provider.addContext(contributor,pathInBundleToWebApp,context);
return context; return context;
} }
finally finally
@ -715,14 +714,15 @@ public class WebappRegistrationHelper
File prodContextFile = new File(contextsHome,contributor.getSymbolicName() + "/" + contextFileRelativePath); File prodContextFile = new File(contextsHome,contributor.getSymbolicName() + "/" + contextFileRelativePath);
if (prodContextFile.exists()) if (prodContextFile.exists())
{ {
return registerContext(contributor,prodContextFile,extraClasspath,overrideBundleInstallLocation); return registerContext(contributor,contextFileRelativePath,prodContextFile,extraClasspath,overrideBundleInstallLocation);
} }
} }
File contextFile = overrideBundleInstallLocation != null?new File(overrideBundleInstallLocation,contextFileRelativePath):new File( File contextFile = overrideBundleInstallLocation != null?new File(overrideBundleInstallLocation,contextFileRelativePath):new File(
BUNDLE_FILE_LOCATOR_HELPER.getBundleInstallLocation(contributor),contextFileRelativePath); BUNDLE_FILE_LOCATOR_HELPER.getBundleInstallLocation(contributor),contextFileRelativePath);
if (contextFile.exists()) if (contextFile.exists())
{ {
return registerContext(contributor,contextFile,extraClasspath,overrideBundleInstallLocation); return registerContext(contributor,contextFileRelativePath,contextFile,extraClasspath,overrideBundleInstallLocation);
} }
else else
{ {
@ -734,12 +734,14 @@ public class WebappRegistrationHelper
{ {
contextFileRelativePath = "/" + contextFileRelativePath; contextFileRelativePath = "/" + contextFileRelativePath;
} }
if (overrideBundleInstallLocation == null)
File overrideBundleInstallLocationF = overrideBundleInstallLocation != null ? Resource.newResource(overrideBundleInstallLocation).getFile() : null;
if (overrideBundleInstallLocationF == null)
{ {
URL contextURL = contributor.getEntry(contextFileRelativePath); URL contextURL = contributor.getEntry(contextFileRelativePath);
if (contextURL != null) if (contextURL != null)
{ {
return registerContext(contributor,contextURL.openStream(),extraClasspath,overrideBundleInstallLocation); return registerContext(contributor,contextFileRelativePath,contextURL.openStream(),extraClasspath,overrideBundleInstallLocation);
} }
} }
else else
@ -749,7 +751,7 @@ public class WebappRegistrationHelper
{ {
zipFile = new JarFile(overrideBundleInstallLocation); zipFile = new JarFile(overrideBundleInstallLocation);
ZipEntry entry = zipFile.getEntry(contextFileRelativePath.substring(1)); ZipEntry entry = zipFile.getEntry(contextFileRelativePath.substring(1));
return registerContext(contributor,zipFile.getInputStream(entry),extraClasspath,overrideBundleInstallLocation); return registerContext(contributor,contextFileRelativePath,zipFile.getInputStream(entry),extraClasspath,overrideBundleInstallLocation);
} }
catch (Throwable t) catch (Throwable t)
{ {
@ -782,13 +784,13 @@ public class WebappRegistrationHelper
* @param classInBundle * @param classInBundle
* @throws Exception * @throws Exception
*/ */
private ContextHandler registerContext(Bundle contributor, File contextFile, String extraClasspath, String overrideBundleInstallLocation) throws Exception private ContextHandler registerContext(Bundle contributor, String pathInBundle, File contextFile, String extraClasspath, String overrideBundleInstallLocation) throws Exception
{ {
InputStream contextFileInputStream = null; InputStream contextFileInputStream = null;
try try
{ {
contextFileInputStream = new BufferedInputStream(new FileInputStream(contextFile)); contextFileInputStream = new BufferedInputStream(new FileInputStream(contextFile));
return registerContext(contributor,contextFileInputStream,extraClasspath,overrideBundleInstallLocation); return registerContext(contributor, pathInBundle, contextFileInputStream,extraClasspath,overrideBundleInstallLocation);
} }
finally finally
{ {
@ -810,7 +812,7 @@ public class WebappRegistrationHelper
* happen. * happen.
* @throws Exception * @throws Exception
*/ */
private ContextHandler registerContext(Bundle contributor, InputStream contextFileInputStream, String extraClasspath, String overrideBundleInstallLocation) private ContextHandler registerContext(Bundle contributor, String pathInsideBundle, InputStream contextFileInputStream, String extraClasspath, String overrideBundleInstallLocation)
throws Exception throws Exception
{ {
ClassLoader contextCl = Thread.currentThread().getContextClassLoader(); ClassLoader contextCl = Thread.currentThread().getContextClassLoader();
@ -846,8 +848,7 @@ public class WebappRegistrationHelper
oldServerClasses = webAppContext.getServerClasses(); oldServerClasses = webAppContext.getServerClasses();
webAppContext.setServerClasses(null); webAppContext.setServerClasses(null);
} }
_provider.addContext(contributor, pathInsideBundle, context);
_provider.addContext(context);
return context; return context;
} }
finally finally