Hi śr., 11 sty 2023 o 22:22 Jochen Walz <[email protected]> napisał(a):
> ... and with the custom ServletContextHelper, it works. Thanks for the > hint! > I'm glad Pax Web 8 is prepared for such scenarios ;) regards Grzegorz Grzybek > > 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 >>>>> >>>>
