That was very helpful, thank you. Since requests would be (eventually)
garbage collected by the JVM, I feel that a reference/queue-only approach
could be sufficient for all types of cleanup. Sure, the servlet listener
method could improve the timing of when the cleanup executes, but I imagine
it is not necessary (unless something, somewhere in the servlet framework
plumbing is caching request objects and reusing them...which I hope not).

I appreciate the insights!

//Paul


On Wed, Jul 26, 2023 at 10:50 AM Carsten Ziegeler <cziege...@apache.org>
wrote:

> A while back we had a similar discussion. Now I think this distinction
> between real and fake requests could be completely removed, simplifying
> the models impl a lot - if we enhance the contract for servlet listeners
> being also called by Sling Engine for internal requests (which often use
> those fake request objects).
>
> Regards
> Carsten
>
> On 26.07.2023 17:29, Dirk Rudolph wrote:
> > Hey Paul,
> >
> > afaik the marker attribute it used to distinguish between real and
> > synthetic request objects.
> >
> > The ServletRequestListner implementation of the ModelAdapterFactory is
> > only called for requests created by the servlet container.
> >
> > There are use cases that do not have access to a request object and
> > create a synthetic instance to adapt it to a Sling Model (directly or
> > indirectly), for example using the SlingHttpServletRequestBuilder [1].
> > In this case requestDestroyed is never called with that request object
> > and hence the cleanup mechanism needs to fall back to the one used for
> > non-Request adaptables.
> >
> > Best regards,
> > Dirk
> >
> > [1]:
> https://sling.apache.org/apidocs/sling12/org/apache/sling/api/request/builder/SlingHttpServletRequestBuilder.html
> >
> > On Wed, 19 Jul 2023 at 22:11, Paul Bjorkstrand
> > <paul.bjorkstr...@gmail.com> wrote:
> >>
> >> I'm looking into a potential refactor of the Sling Models Impl to make
> the
> >> code easier to manage, but also with an eye to enhancing the
> functionality
> >> in some ways that are hard to do with the way the code is currently
> >> structured  Examples of such improvements: support other "container
> types"
> >> in a generic fashion (Optional, WeakReference, and all
> Collections/arrays)
> >> and implement a java.lang.invoke.MethodHandle based injection system.
> One
> >> area I have almost no knowledge about is the cleanup side with the
> disposal
> >> registry, and its related functionality.
> >>
> >> As I have been reading through the code, I immediately noticed that
> there
> >> are two paths that are taken, depending on a couple factors, most
> notably
> >> whether the adaptable is a request or not. At first glance, it seems
> that
> >> this decision is a necessary difference between request adapted models
> or
> >> resource adapted models. Digging in deeper, I believe this is not the
> case,
> >> and it is just a performance/reliability improvement. This makes it not
> >> necessary to rely on PhantomReference for request adapted models, since
> >> there is a servlet request listener that notifies creation and cleanup
> of
> >> the requests. This seems to be confirmed after reading [1].
> >>
> >> What I don't quite understand is the purpose of REQUEST_MARKER_ATTRIBUTE
> >> [2] [3] [4] [5]. What does that do, and why is it needed? Any help
> >> understanding this is appreciated!
> >>
> >> [1]: https://issues.apache.org/jira/browse/SLING-5668
> >> [2]:
> >>
> https://github.com/apache/sling-org-apache-sling-models-impl/blob/master/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java#L106C33-L106C58
> >> [3]:
> >>
> https://github.com/apache/sling-org-apache-sling-models-impl/blob/master/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java#L688
> >> [4]:
> >>
> https://github.com/apache/sling-org-apache-sling-models-impl/blob/master/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java#L774
> >> [5]:
> >>
> https://github.com/apache/sling-org-apache-sling-models-impl/blob/master/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java#L1392
> >>
> >> // Paul
>
> --
> Carsten Ziegeler
> Adobe
> cziege...@apache.org
>

Reply via email to