I added a draft in 
https://github.com/apache/sling-org-apache-sling-engine/pull/35/files#.
Feel free to have a look and take over if you deem that useful.
Haven’t tested it yet…

Konrad

> On 26. May 2023, at 17:32, Konrad Windszus <[email protected]> wrote:
> 
> I think this can be implemented with the HttpServiceRuntime.getRuntimeDRO[1] 
> which should return all registered event listeners [2] through its 
> ServletContextDTO (also the ServletRequestListener registered by 
> ModelAdapterFactory).
> The question is though when to call the according events, as the synthetic 
> SlingHttpServletRequest has no explicit close method.
> This probably needs to be done by the SlingProcessor which needs to 
> distinguish between requests created by the servlet container and these 
> virtual requests.
> Don’t know how to distinguish those properly to check that, maybe by 
> evaluating the requests getServletContext() return value to check if this is 
> a fake context or a real one…
> 
> Konrad
> 
> [1] 
> https://docs.osgi.org/javadoc/r6/cmpn/org/osgi/service/http/runtime/HttpServiceRuntime.html#getRuntimeDTO()
> [2] 
> https://docs.osgi.org/javadoc/r6/cmpn/org/osgi/service/http/runtime/dto/ListenerDTO.html
> 
>> On 26. May 2023, at 16:41, Jörg Hoh <[email protected]> wrote:
>> 
>> Hi,
>> 
>> In AEM we have for quite some time "fake" implementations of
>> SlingHttpServletRequest and SlingHttpServletResponse, which are used as
>> parameters for the SlingProcessor to render content.
>> 
>> We came across issues when SlingModels are involved in the rendering
>> process. We found that this approach can create memory leaks when OSGI
>> services are injected into sling models, and these are created during the
>> rendering process of such a "fake request". The problem is that the
>> unregistering of these OSGI references is triggered by a
>> ServletRequestEvent which the ModelAdapterFactory receives as it registers
>> as a ServletRequestListener. But these fake classes do not implement these
>> methods at all.
>> 
>> Checking the sling equivalents in [1] I don't see them implementing these
>> functionality as well, thus they show the same problem. Would there be some
>> interest to have this functionality implemented in Sling? (I am not an
>> expert in the servlet spec, so don't expect anything soon from my side...)
>> 
>> 
>> Jörg
>> 
>> 
>> [1]
>> https://github.com/apache/sling-org-apache-sling-api/tree/master/src/main/java/org/apache/sling/api/request/builder
>> 
>> 
>> 
>> -- 
>> Cheers,
>> Jörg Hoh,
>> 
>> https://cqdump.joerghoh.de
>> Twitter: @joerghoh
> 

Reply via email to