I implemented a sample project that tests that a http whiteboard servlet
can have the same http session as a servlet that is part of a WAB.

See https://github.com/rhierlmeier/paxweb8-test

It is working with PAX-WEB 8 :)

Thank you

  Richard

Am Do., 14. Juli 2022 um 16:47 Uhr schrieb Grzegorz Grzybek <
[email protected]>:

>
>
> czw., 14 lip 2022 o 15:50 Richard Hierlmeier <[email protected]>
> napisał(a):
>
>> Great, thank you.
>>
>> but this works only with PAX-WEB8, correct?
>>
>
> Yes... Pax Web 7 and earlier is not implementing context selection
> properly.
> Actually https://github.com/ops4j/org.ops4j.pax.web/issues/1413 /
> https://ops4j1.jira.com/browse/PAXWEB-1123 was the main reason I decided
> to refactor Pax Web ;)
>
> regards
> Grzegorz Grzybek
>
>
>>
>> Richard
>>
>> Am Do., 14. Juli 2022 um 15:42 Uhr schrieb Grzegorz Grzybek <
>> [email protected]>:
>>
>>>
>>>
>>> czw., 14 lip 2022 o 15:34 Richard Hierlmeier <[email protected]>
>>> napisał(a):
>>>
>>>> The only requirement is that a servlet that is deployed via http
>>>> whiteboard has the same session as the servlet that is part of the WAB.
>>>>
>>>
>>> In order to whiteboard-register a servlet to the same context which is
>>> backing a WAB, you have to register the servlet pointing to relevant
>>> context. By default, the selector is:
>>>
>>> osgi.http.whiteboard.context.select = (osgi.http.whiteboard.context.name
>>> =default)
>>>
>>> You just have to register a servlet with:
>>>
>>> osgi.http.whiteboard.context.select =
>>> (osgi.http.whiteboard.context.path=/path)
>>>
>>> where "/path" is the same value as in Web-ContextPath header of the WAB.
>>>
>>> Check AbstractWabWhiteboardConflictIntegrationTest.java
>>> <https://github.com/ops4j/org.ops4j.pax.web/blob/web-8.0.6/pax-web-itest/pax-web-itest-container/pax-web-itest-container-common/src/main/java/org/ops4j/pax/web/itest/container/war/AbstractWabWhiteboardConflictIntegrationTest.java#L55-L69>[1]
>>> - it's a filter registration, but the principle is the same.
>>>
>>> regards
>>> Grzegorz Grzybek
>>> ===
>>> [1]:
>>> https://github.com/ops4j/org.ops4j.pax.web/blob/web-8.0.6/pax-web-itest/pax-web-itest-container/pax-web-itest-container-common/src/main/java/org/ops4j/pax/web/itest/container/war/AbstractWabWhiteboardConflictIntegrationTest.java#L55-L69
>>>
>>>
>>>>
>>>> Richard
>>>>
>>>> Am Do., 14. Juli 2022 um 15:13 Uhr schrieb Grzegorz Grzybek <
>>>> [email protected]>:
>>>>
>>>>> Hello
>>>>>
>>>>> czw., 14 lip 2022 o 15:05 Richard Hierlmeier <
>>>>> [email protected]> napisał(a):
>>>>>
>>>>>> How can I define the  ServletContextHelper for a WAB? I can not find
>>>>>> any hint in the R7 spec.
>>>>>>
>>>>>
>>>>> You ... can't. There's nothing at all about ServletContextHelper
>>>>> concept (Whiteboard) in chapter 128 (WABs).
>>>>>
>>>>> Pax Web 8 explicitly defines special class
>>>>> org.ops4j.pax.web.extender.war.internal.WebApplicationHelper, which 
>>>>> extends
>>>>> org.ops4j.pax.web.service.spi.context.DefaultServletContextHelper which
>>>>> extends org.osgi.service.http.context.ServletContextHelper.
>>>>>
>>>>> Such implementation is specially crafted to:
>>>>>  - provide org.osgi.service.http.context.ServletContextHelper
>>>>>  - handle WAR scenarios related to resource access
>>>>>
>>>>> It is then set inside
>>>>> org.ops4j.pax.web.service.spi.model.OsgiContextModel - a common "context"
>>>>> representation for HttpService, Whiteboard and WAB scenarios.
>>>>>
>>>>> Out of curiosity - do you have any special requirement that a WAB
>>>>> needs custom context?
>>>>>
>>>>> Mind that org.osgi.service.http.context.ServletContextHelper in
>>>>> Whiteboard has two responsibilities:
>>>>>  - security (WABs/WARs have better ways to deal with this)
>>>>>  - resource access (WABs/WARs have standard resource access methods
>>>>> defined in the Servlets specification itself)
>>>>>
>>>>> regards
>>>>> Grzegorz Grzybek
>>>>>
>>>>>
>>>>>>
>>>>>> Richard
>>>>>>
>>>>>> Am Mo., 27. Juni 2022 um 16:15 Uhr schrieb Grzegorz Grzybek <
>>>>>> [email protected]>:
>>>>>>
>>>>>>> Hi
>>>>>>>
>>>>>>>
>>>>>>> pon., 27 cze 2022 o 16:04 Richard Hierlmeier <
>>>>>>> [email protected]> napisał(a):
>>>>>>>
>>>>>>>> Hi  Grzegorz.
>>>>>>>>
>>>>>>>> thank you for clarification. Unfortunately I can not upgrade to
>>>>>>>> Karaf 4.4 the next time.
>>>>>>>> What would happen when I define the session cookie name in
>>>>>>>> jetty.xml and not in the wab?
>>>>>>>>
>>>>>>>
>>>>>>> To answer more precisely, I'd have to check your current
>>>>>>> configuration - what WAB are you deploying and what are the registration
>>>>>>> properties of the HttpWhiteboard servlet. Only then I could check (going
>>>>>>> back to Karaf 4.3.7) what may be the issue related to context
>>>>>>> configuration...
>>>>>>>
>>>>>>> regards
>>>>>>> Grzegorz Grzybek
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Richard
>>>>>>>>
>>>>>>>>
>>>>>>>> Am Mo., 27. Juni 2022 um 12:02 Uhr schrieb Grzegorz Grzybek <
>>>>>>>> [email protected]>:
>>>>>>>>
>>>>>>>>> Hello
>>>>>>>>>
>>>>>>>>> Unfortunately, only with Pax Web 8 (used in Karaf 4.4+) we've
>>>>>>>>> refactored the WAB/HttpService/Whiteboard inter operation. Pax Web 8 
>>>>>>>>> allows
>>>>>>>>> mixing web elements coming from different "origins" (whiteboard
>>>>>>>>> registration, direct registration using HttpService or
>>>>>>>>> web.xml/web-fragment.xml approach from WABs).
>>>>>>>>>
>>>>>>>>> So in Pax Web 8 you should be able to reconfigure the session
>>>>>>>>> cookie name and there servlets registered using Whiteboard targetting 
>>>>>>>>> the
>>>>>>>>> same context (as in WAB) should use the same session configuration.
>>>>>>>>>
>>>>>>>>> Also - Pax Web 8 implements correctly the session separation
>>>>>>>>> mentioned in
>>>>>>>>> https://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.http.whiteboard.html#service.http.whiteboard.servletcontext
>>>>>>>>> :
>>>>>>>>>
>>>>>>>>> Http Sessions are not shared amongst servlets registered with
>>>>>>>>>> different ServletContextHelpers. That is, HttpRequest.getSession 
>>>>>>>>>> calls must
>>>>>>>>>> provide different sessions per associated ServletContextHelper
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> So even if two whiteboard servlets are registered to the same
>>>>>>>>> target servlet context, but using different ServletContextHelper, 
>>>>>>>>> they'll
>>>>>>>>> use different session configuration.
>>>>>>>>>
>>>>>>>>> kind regards
>>>>>>>>> Grzegorz Grzybek
>>>>>>>>>
>>>>>>>>> pon., 27 cze 2022 o 11:33 Richard Hierlmeier <
>>>>>>>>> [email protected]> napisał(a):
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> My application runs in Karaf 4.3.7. I have a web application that
>>>>>>>>>> is deployed as wab application bundle (wab). This web application 
>>>>>>>>>> changes
>>>>>>>>>> the session cookie name in
>>>>>>>>>> javax.servlet.ServletContextListener#contextInitialized().
>>>>>>>>>>
>>>>>>>>>> In another bundle I have a servlet that is defined with
>>>>>>>>>> HttpWhiteBoard.
>>>>>>>>>> The servlets from the wab and the servlets from HttpWhiteBoard
>>>>>>>>>> have different http sessions (because they have different session 
>>>>>>>>>> cookie
>>>>>>>>>> names in the ServletContext).
>>>>>>>>>>
>>>>>>>>>> Is it possible to configure the session cookie for Servlets that
>>>>>>>>>> are deployed via HttpWhiteBoard?
>>>>>>>>>>
>>>>>>>>>> Regards
>>>>>>>>>>
>>>>>>>>>>   Richard
>>>>>>>>>>
>>>>>>>>>>

Reply via email to