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.
