... and with the custom ServletContextHelper, it works. Thanks for the hint!

Regards
Jochen


Am 11. Januar 2023 14:47:42 MEZ schrieb Grzegorz Grzybek <[email protected]>:
>Hmm
>
>In Pax Web 8+, all resource access methods from resource servlets
>(JettyResourceServlet, TomcatResourceServlet, UndertowResourceServlet) are
>handled by javax.servlet.ServletContext#getResource() call - whether it's
>WAB, HttpService or Whiteboard.
>
>In WAB, this is delegated to
>org.ops4j.pax.web.extender.war.internal.WebApplicationHelper#getResource()
>and org.osgi.framework.Bundle#findEntries() - but if not found,
>META-INF/resources are checked (including fragments).
>Mind that org.osgi.framework.Bundle#findEntries() method considers
>fragments as well.
>
>In Whiteboard, however by default (see
>https://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.http.whiteboard.html#d0e119637)
>org.osgi.framework.Bundle#getEntry() method is used (not
>Bundle#findEntries()), which *doesn't check fragments*. See default
>implementation of org.osgi.service.http.context.ServletContextHelper.
>
>This is confusing and unintuitive.
>
>However you could register your own
>org.osgi.service.http.context.ServletContextHelper with changed
>org.osgi.service.http.context.ServletContextHelper#getResource() method
>that uses Bundle#findEntries() instead of Bundle#getEntry() - it should
>work ;)
>
>regards
>Grzegorz Grzybek
>
>śr., 11 sty 2023 o 14:31 Jochen Walz <[email protected]>
>napisał(a):
>
>> Hello Grzegorz,
>>
>> The WAB approach works - even with the HTML files located under the
>> bundle's root directory.
>>
>> For the whiteboard approach: I only have one resource service class in my
>> "main" help bundle, i.e., the host bundle, no additional services in the
>> fragment bundles. Of course, using the same resource pattern multiple times
>> would create a conflict. My assumption was, since the resource service can
>> serve the HTML files from the host bundle, it will also use the files from
>> the fragment bundles, because they share the same class loader. Obviously,
>> this assumption was wrong.
>>
>> So, I searched for an example where somebody has solved that, e.g., by
>> searching for resources in all attached fragment bundles and make them
>> available to the resource servlet. Possibly in the activate method of the
>> resource service. In a similar way as the pax-web-extender-war does it, but
>> of course much simpler, because there is no need to look  for Web
>> applications, only few folders with resource files.
>>
>> If such example doesn't exist, I either must try myself, or just accept a
>> bit of "overweight" and continue using WAB.
>>
>> Regards
>> Jochen
>>
>> Am 11. Januar 2023 12:28:35 MEZ schrieb Grzegorz Grzybek <
>> [email protected]>:
>>>
>>> Hello
>>>
>>> With Pax Web 8, fragment bundles attached to WAB are searched for
>>> "META-INF/resources/" resource - each such resource is added to WAB
>>> resource path. See for example
>>> https://github.com/ops4j/org.ops4j.pax.web/tree/web-8.0.15/samples/samples-war/war-required/src/main/resources/META-INF
>>>
>>> samples/samples-war/war-required and samples/samples-war/war-requiring
>>> are _wired_ using Require-Bundle relationship, but normal fragment should
>>> also work.
>>>
>>> Mind that "META-INF/resources" is the recommended approach, specified in
>>> Servlet API specification and handled fully in Pax Web 8+.
>>>
>>> Whiteboard is not an implementation of Web Application specification and
>>> while bundles can register Whiteboard services into the same target web
>>> context, it's not possible that two bundles register resources for the same
>>> mapping to create kind of _overlay_.
>>>
>>> regards
>>> Grzegorz Grzybek
>>>
>>> śr., 11 sty 2023 o 11:03 Jochen Walz <[email protected]>
>>> napisał(a):
>>>
>>>> Hi,
>>>>
>>>> With Karaf 4.3.6 / Pax Web 7.3.23, I had used a WAB to provide some HTML
>>>> files for online help, and - depending on the parts of my application which
>>>> are installed - fragment bundles with additional help files. The war
>>>> feature handled that correctly.
>>>>
>>>> With Karaf 4.4.2, I wanted to switch to using the
>>>> pax-web-http-whiteboard, providing a resource service in my main help
>>>> bundle with appropriate settings for HTTP_WHITEBOARD_RESOURCE_PATTERN and
>>>> HTTP_WHITEBOARD_RESOURCE_PREFIX. Looks bit more lightweight than a WAB.
>>>>
>>>> The HTML files from my main help bundle are served correctly, but not
>>>> the ones from the fragment bundles.
>>>>
>>>> So: does somebody know an (easy) way to make resources in fragment
>>>> bundles visible for the resource service, assumed that all fragments are
>>>> already installed when the bundle with the resource service is started?
>>>> Possibly some example exists somewhere. Or would that lead so far that it
>>>> is by far easier to just keep the WAB approach with the pax-web-war 
>>>> feature?
>>>>
>>>> Thanks & Regards,
>>>> Jochen
>>>>
>>>

Reply via email to