Hello It's all loosely coupled - a "servlet registration" knows the LDAP filter (by default "osgi.http.whiteboard.context.select=( osgi.http.whiteboard.context.name=default)") for it's contexts. And each time the new context is registered, the web elements with matching filter are being re-registered.
The fact that you're overriding an "OSGi Context" (ServletContextHelper) within the same context path "/" means that the servlet context is restarted (because there's higher-ranked OsgiServletContext), but the servlet should be simply kept in existing "/" ServletContext. I know - lots of contexts. Today I was checking few other https://github.com/ops4j/org.ops4j.pax.web/issues, but I remember about your scenario - I should have an explanation tomorrow. regards Grzegorz Grzybek pon., 19 wrz 2022 o 19:42 [email protected] <[email protected]> napisał(a): > Still trying to get a test case but I do believe it is a threading issue > ... What I find strange is the servlet that disappears gets registered like > this > > [paxweb-config-1-thread-1] INFO > org.ops4j.pax.web.service.internal.HttpServiceEnabled - Registering > ServletModel{id=ServletModel-4,name='com.candatag.k8s.zoo.servlet.ReadyProbe',urlPatterns=[/osgi/started],contexts=[{WB,OCM-2,default,/}]} > Receiving Batch{"Registration of > ServletModel{id=ServletModel-4,name='com.candatag.k8s.zoo.servlet.ReadyProbe',urlPatterns=[/osgi/started],contexts=[{WB,OCM-2,default,/}]}", > size=1} > Adding servlet > ServletModel{id=ServletModel-4,name='com.candatag.k8s.zoo.servlet.ReadyProbe',urlPatterns=[/osgi/started],contexts=[{WB,OCM-2,default,/}]} > > Now what is ODD is that OCM-2 is not registered yet! It follows in the > logs > > Receiving Batch{"Registration of > OsgiContextModel{WB,id=OCM-2,name='default',path='/',bundle=com.candatag.web.util,ref={org.osgi.service.http.context.ServletContextHelper}={ > service.id=39, osgi.http.whiteboard.context.name=default, > service.bundleid=17, service.scope=bundle, service.ranking=2147483647, > component.name=com.candatag.web.util.zoo.impl.NoSecurityContextImpl, > osgi.http.whiteboard.context.path=/, component.id=1}}", size=1} > > So how does the servlet know that this new default context is coming? In > my test harness I see the servlet unregistering and then registering again > when the context changes... > > It looks like we are half pregnant, somebody knows the context is there > but it is in an unregistered state so the servlet modal does not get > attached. > > Dave > > > > > On Sunday, September 18, 2022 at 8:50:28 AM UTC-5 [email protected] > wrote: > >> My other question would be if you are "Unregistering " the default >> context should it still show up in the >> HttpServiceRuntime.getRuntimeDTO().servletContextDTOs ? It does now >> >> Dave >> >> >> On Sunday, September 18, 2022 at 8:43:33 AM UTC-5 [email protected] >> wrote: >> >>> It will be a little tricky to send my whole project in , let me see what >>> I can do , however I have reviewed the test cases in the link provided and >>> it looks like you are not covering my case ... >>> >>> I do not see a test where ... >>> >>> Register the default handler -> HttpContext defaultContext = wc. >>> createDefaultHttpContext(); , not sure if this also creates a >>> ServletContextHelper >>> wrapper as well >>> >>> Then create a servlet that attaches to it , but do not call the servlet >>> , just check it is added >>> >>> Register the default override with a high service ranking . >>> >>> See if this happens >>> org.ops4j.pax.web.service.spi.servlet.OsgiServletContext - Unegistering >>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-1,name='default',path='/' >>> org.ops4j.pax.web.service.spi.servlet.OsgiServletContext - Registering >>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-2,name='default',path='/', >>> >>> And then see if the servlet is in the new context ... >>> >>> The override testcases seem to all create the override first before the >>> first servlet is registered OR you are changing the path in the default >>> context ... >>> >>> Dave >>> >>> >>> >>> On Sun, Sep 18, 2022 at 8:06 AM Grzegorz Grzybek <[email protected]> >>> wrote: >>> >>>> Hello >>>> >>>> Actually, the initial reason of entire Pax Web 8 refactoring was the >>>> context handling - ability to register one servlet into multiple contexts >>>> and multiple servlets into one context. >>>> There are really lot of integration tests that show exactly this. >>>> >>>> I'd have to see your example and check what's the problem there - you >>>> seem to correctly override "default" whiteboard context with "/" path and >>>> higher ranking, so it should work. >>>> >>>> >>>> https://github.com/ops4j/org.ops4j.pax.web/tree/web-8.0.9/samples/samples-whiteboard/whiteboard-ds >>>> is and example of SCR registration of multiple web elements and contexts. >>>> >>>> This integration test ( >>>> https://github.com/ops4j/org.ops4j.pax.web/blob/web-8.0.9/pax-web-itest/pax-web-itest-server/src/test/java/org/ops4j/pax/web/itest/server/whiteboard/WhiteboardAndHttpServiceTest.java#L198) >>>> - overridenDefaultContextsWithWhiteboardServlet() shows how "default" >>>> + "/" context is overriden. >>>> >>>> Could you please share your project? It can be attached to an issue in >>>> https://github.com/ops4j/org.ops4j.pax.web/issues >>>> >>>> kind regards >>>> Grzegorz Grzybek >>>> >>>> niedz., 18 wrz 2022 o 14:16 Dave Smith <[email protected]> >>>> napisał(a): >>>> >>>>> What is the correct way to override the default servlet context? I am >>>>> doing this... >>>>> >>>>> @Component(service = ServletContextHelper.class,property = { >>>>> Constants.SERVICE_RANKING+":Integer="+Integer.MAX_VALUE}) >>>>> @HttpWhiteboardContext(name = "default",path = "/") >>>>> public class NoSecurityContextImpl extends ServletContextHelper >>>>> { >>>>> >>>>> What I am seeing is if a servlet is registered BEFORE the new default >>>>> context it just seems to disappear, anything after gets put in the new >>>>> default. When I call HttpServiceRuntime.servletDTOs I see the original >>>>> default context with no servlets attached to it and my overridden one with >>>>> the servlets that were registered after. >>>>> failedServletDTOs,failedServletContextDTOs are empty. If I remove my >>>>> override the servlets appear. >>>>> >>>>> What is weird is it looks like the servlet is getting put into the >>>>> right context if I read the log correctly ... >>>>> >>>>> Registering >>>>> ServletModel{id=ServletModel-4,name='com.candatag.k8s.zoo.servlet.ReadyProbe',urlPatterns=[/osgi/started],contexts=[{WB,OCM-2,default,/}]} >>>>> >>>>> INFO org.ops4j.pax.web.service.spi.servlet.OsgiServletContext - >>>>> Unegistering >>>>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-1,name='default',path='/',bundle=org.ops4j.pax.web.pax-web-extender-whiteboard,context=(supplier)}} >>>>> as OSGi service for "/" context path >>>>> >>>>> Registering >>>>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-2,name='default',path='/',bundle=com.candatag.web.util,ref={org.osgi.service.http.context.ServletContextHelper}={ >>>>> service.id=57, osgi.http.whiteboard.context.name=default, >>>>> service.bundleid=19, service.scope=bundle, service.ranking=2147483647 >>>>> <(214)%20748-3647>, >>>>> component.name=com.candatag.web.util.zoo.impl.NoSecurityContextImpl, >>>>> osgi.http.whiteboard.context.path=/, component.id=22}}} as OSGi >>>>> service for "/" context path >>>>> >>>>> Dave >>>>> >>>>> >>>>> >>>>> -- >>>>> -- >>>>> ------------------ >>>>> 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]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/ops4j/CA%2BFCLu2SbiSKmN7W3-ZQqHLYCA67vF104UCVWtU77-63tcarUA%40mail.gmail.com >>>>> <https://groups.google.com/d/msgid/ops4j/CA%2BFCLu2SbiSKmN7W3-ZQqHLYCA67vF104UCVWtU77-63tcarUA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >>>> -- >>>> ------------------ >>>> 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]. >>>> >>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/ops4j/CAAdXmhrMU6_5ABFc0oxevK%2BjuZVhOzxdK0cqvyTz6pCWZAM7Yg%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/ops4j/CAAdXmhrMU6_5ABFc0oxevK%2BjuZVhOzxdK0cqvyTz6pCWZAM7Yg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- > -- > ------------------ > 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]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ops4j/e972d47a-f8b3-4dec-9ba1-94549e29a250n%40googlegroups.com > <https://groups.google.com/d/msgid/ops4j/e972d47a-f8b3-4dec-9ba1-94549e29a250n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- -- ------------------ 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]. To view this discussion on the web visit https://groups.google.com/d/msgid/ops4j/CAAdXmhqzknu%3DwfrL5d-hWbHe%2BGa%2Bazbx6Yg__OTuC683B8VbMA%40mail.gmail.com.
