That call to registerResources in [1 
<https://github.com/ops4j/org.ops4j.pax.web/blob/web-3.2.9/pax-web-extender-whiteboard/src/main/java/org/ops4j/pax/web/extender/whiteboard/internal/element/ResourceWebElement.java#L56-L57>]
 
is part of the org.osgi.service.http.HttpService interface.

  I noticed the servlet name (at least the one listed with the http:list 
command) is set here [2 
<https://github.com/ops4j/org.ops4j.pax.web/blob/web-3.2.9/pax-web-jetty/src/main/java/org/ops4j/pax/web/service/jetty/internal/JettyServerImpl.java#L219>]
 
(for Jetty).
  So I tried to modify that model name. [3 
<https://github.com/ops4j/org.ops4j.pax.web/blob/web-3.2.9/pax-web-runtime/src/main/java/org/ops4j/pax/web/service/internal/HttpServiceStarted.java#L253-L254>]
 
seemed a good place to try.

  I changed it to:

String modelName = "bundle:" + contextModel.getBundle().getBundleId();
if(!"/".equals(name)) {
 modelName += name;
}
final ResourceModel model = new ResourceModel(contextModel, servlet, alias, 
modelName );


  Now http:list show all the expected servlets and the resources are served 
from different bundles with the same internal resource paths.
  They also get correctly undeployed when stopping the bundles.

  But I can't be sure of any side-effects.

  (tested in tag web-3.2.9, but the code is still the same in the master
 branch)

-- Nelson --

[1] 
https://github.com/ops4j/org.ops4j.pax.web/blob/web-3.2.9/pax-web-extender-whiteboard/src/main/java/org/ops4j/pax/web/extender/whiteboard/internal/element/ResourceWebElement.java#L56-L57
[2] 
https://github.com/ops4j/org.ops4j.pax.web/blob/web-3.2.9/pax-web-jetty/src/main/java/org/ops4j/pax/web/service/jetty/internal/JettyServerImpl.java#L219
[3] 
https://github.com/ops4j/org.ops4j.pax.web/blob/web-3.2.9/pax-web-runtime/src/main/java/org/ops4j/pax/web/service/internal/HttpServiceStarted.java#L253-L254

On Thursday, February 23, 2017 at 9:14:01 PM UTC, Nick Baker wrote:
>
> Hello All,
>
> We're experiencing an issue with bundles supplying Resource mappings. It 
> appears that the internal path within the bundle is used as the servlet 
> name [1]. Unfortunately, our teams love standards and conventions so 
> they're using a "web" folder for all bundles supplying Resources. This was 
> discovered on 3.1.4 but I've verified that the situation still exists in 
> master.
>
> PAX-Web appropriately doesn't allow multiple servlets of the same name so 
> we're loosing some resources upon startup of Karaf. The short-term solution 
> for us was to ensure that each internal bundle path is unique. A better 
> solution would be to modify PAX to create a composite key of bundle-id + 
> path when creating the resource Servlet names. 
>
> [1] 
> https://github.com/ops4j/org.ops4j.pax.web/blob/master/pax-web-extender-whiteboard/src/main/java/org/ops4j/pax/web/extender/whiteboard/internal/element/ResourceWebElement.java#L57-L57
>
> -Nick Baker
>

-- 
-- 
------------------
OPS4J - http://www.ops4j.org - [email protected]

--- 
You received this message because you are subscribed to the Google Groups 
"OPS4J" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to