[hibernate-dev] v6 and load-event

Steve Ebersole steve at hibernate.org
Fri Jun 5 15:45:23 EDT 2020


Load event handling does not have "anything" parameters.  Am I
understanding you correctly?

On Fri, Jun 5, 2020, 11:42 AM Gail Badner <gbadner at redhat.com> wrote:

> Hi Steve,
>
> Sorry, I have not read the entire thread carefully, so please disregard if
> not relevant.
>
> Would this provide functionality like what we discussed for an
> OperationContext?
>
> https://hibernate.atlassian.net/browse/HHH-10478
>
> Thanks,
> Gail
>
> On Fri, May 29, 2020 at 4:21 AM Steve Ebersole <steve at hibernate.org>
> wrote:
>
>> If/when it comes to needing that, I kind of like that continuation design.
>> But I agree, Yoann is right - let's leave it off until needed or until we
>> have specific requirements.
>>
>> Thanks everyone!
>>
>> On Fri, May 29, 2020 at 2:19 AM Sanne Grinovero <sanne at hibernate.org>
>> wrote:
>>
>> > On Fri, 29 May 2020 at 07:22, Yoann Rodiere <yoann at hibernate.org>
>> wrote:
>> > >
>> > > +1 not to add surround capability initially. Sounds better to start
>> > simple and make things more complex when we actually need it :)
>> >
>> > Right. I didn't mean to raise additional requirements without having
>> > investigated those tracing libraries - what I meant really is just to
>> > raise awareness that we'll likely need to evolve it further when it
>> > comes to finally implement such things.
>> >
>> > >
>> > > Yoann Rodière
>> > > Hibernate Team
>> > > yoann at hibernate.org
>> > >
>> > >
>> > > On Fri, 29 May 2020 at 07:25, Sanne Grinovero <sanne at hibernate.org>
>> > wrote:
>> > >>
>> > >> Yes, I agree.
>> > >>
>> > >> On Thu, 28 May 2020, 22:11 Steve Ebersole, <steve at hibernate.org>
>> wrote:
>> > >>>
>> > >>> Wanted to clarify -
>> > >>>
>> > >>> Regarding incremental addition of "surround listeners", so long as
>> we
>> > are all in agreement that this simply means there will be absolutely no
>> > surround capability ***initially*** then I am fine with that.
>> > >>>
>> > >>> On Thu, May 28, 2020 at 4:10 PM Steve Ebersole <steve at hibernate.org
>> >
>> > wrote:
>> > >>>>
>> > >>>> Hm, the dynamic enable/disable stuff should be easy to handle, no?
>> > Depends on what specific library you are thinking of and exactly how
>> that
>> > detail gets propagated to us.  At the end of the day, its really as
>> simple
>> > as protecting the creation of some of these objects with `if
>> > (enabled)`-type checks.
>> > >>>>
>> > >>>> But again, if you have specific details in mind we can take a look.
>> > >>>>
>> > >>>> Also, I think it is not at all a good idea to even plan for
>> > "different types of events".  In fact I'm fine with getting rid of
>> > LoadEvent completely from that contract and simply directly passing the
>> > information that is likely useful.  I mean at the end of the day a
>> listener
>> > for load events is going to be interested in the same set of
>> information.
>> > Yes, some will not need all of that information but that's not really a
>> > concern IMO.  Especially if we inline the parameters and completely
>> avoid
>> > the event object instantiation
>> > >>>>
>> > >>>> Regarding incremental addition of "surround listeners", so long as
>> we
>> > are all in agreement that this simply means there will be absolutely no
>> > surround capability then I am fine with that.
>> > >>>>
>> > >>>>
>> > >>>> On Thu, May 28, 2020 at 3:55 PM Sanne Grinovero <
>> sanne at hibernate.org>
>> > wrote:
>> > >>>>>
>> > >>>>> On Thu, 28 May 2020 at 21:27, Steve Ebersole <steve at hibernate.org
>> >
>> > wrote:
>> > >>>>> >
>> > >>>>> > Any thoughts on this "continuation" approach?
>> > >>>>>
>> > >>>>> I love the pattern! Maybe we'll need also some ability to not
>> capture
>> > >>>>> the state for events which don't have any?
>> > >>>>>
>> > >>>>> I wonder if that implies we'll need two different event contracts:
>> > one
>> > >>>>> for the listeners which need state and one for those which don't;
>> but
>> > >>>>> I'm not eager to overcomplicate this.
>> > >>>>>
>> > >>>>> > Or maybe its just not important (yet) to handle "surround"
>> > handling?
>> > >>>>>
>> > >>>>> I'm confident that integration with tracing libraries would be
>> very
>> > >>>>> useful and interesting to have - but indeed not having time to
>> > >>>>> research it properly I'm a bit afraid that it might need further
>> > >>>>> changes to reach excellent performance.
>> > >>>>>
>> > >>>>> For example one thing I remember is that with some libraries
>> you're
>> > >>>>> supposed to have the option to enable/disable the profiling
>> options
>> > >>>>> dynamically, and since there's an expectation of no overhead when
>> > it's
>> > >>>>> disabled this would need to imply having a way for the overhead of
>> > >>>>> allocating space for the captured state to "vanish": this might
>> be a
>> > >>>>> bit more complicated, or need to be able to take advantage of JIT
>> > >>>>> optimisations.
>> > >>>>>
>> > >>>>> So if we end up thinking that such event APIs need to be different
>> > >>>>> depending on the need for state, perhaps indeed it's better to
>> > >>>>> postpone the design of those with state to when someone has time
>> to
>> > >>>>> research an optimal integration with a tracing library. It might
>> not
>> > >>>>> be too hard, I just haven't explored it myself yet.
>> > >>>>>
>> > >>>>> Maybe let's do this incrementally, considering the "continuation"
>> > >>>>> approach a next step?
>> > >>>>>
>> > >>>>> Thanks,
>> > >>>>> Sanne
>> > >>>>>
>> > >>>>> >
>> > >>>>> > On Wed, May 27, 2020 at 9:27 AM Steve Ebersole <
>> > steve at hibernate.org> wrote:
>> > >>>>> >>
>> > >>>>> >> Inline...
>> > >>>>> >>
>> > >>>>> >> On Wed, May 27, 2020 at 8:10 AM Sanne Grinovero <
>> > sanne at hibernate.org> wrote:
>> > >>>>> >>>
>> > >>>>> >>> At high level I agree, just have 3 more thoughts:
>> > >>>>> >>>
>> > >>>>> >>> # Regarding the "swap" of information between listeners -
>> could
>> > that
>> > >>>>> >>> even work? I might have misunderstood something, but wouldn't
>> we
>> > >>>>> >>> require listeners to run in some specific order for such
>> > swapping to
>> > >>>>> >>> work?
>> > >>>>> >>
>> > >>>>> >>
>> > >>>>> >> This is why we allow control over the ordering of the
>> registered
>> > listeners.  And yes, that is and was a hokey solution.  Nothing changes
>> > there really if that is why you are using load listener.
>> > >>>>> >>
>> > >>>>> >>
>> > >>>>> >>>
>> > >>>>> >>> # The "surround advice" you mention for e.g. timing seems very
>> > >>>>> >>> interesting, especially as I'd love us to be able to integrate
>> > with
>> > >>>>> >>> tracing libraries - but these would need to be able to
>> co-relate
>> > the
>> > >>>>> >>> pre-load event with some post-load event. How would that work?
>> > I'd
>> > >>>>> >>> expect these to need having a single listener implementation
>> > which
>> > >>>>> >>> implements both PreLoadEventListener and
>> PostLoadEventListener,
>> > but
>> > >>>>> >>> also they'll likely need some capability to store some
>> > information
>> > >>>>> >>> contextual to the "event".
>> > >>>>> >>
>> > >>>>> >>
>> > >>>>> >> I was just thinking through this one as well.  My initial
>> thought
>> > was exactly what you proposed - some combination of pre/post listener
>> with
>> > some ability to store state between.  But that gets ugly.
>> > >>>>> >>
>> > >>>>> >> Another option I thought about is easier to illustrate, but
>> > basically works on the principle of "continuation" many surround advice
>> > solutions are based on:
>> > https://gist.github.com/sebersole/142765fe2417492061e92726e7cb6bd8
>> > >>>>> >>
>> > >>>>> >> I kept the name LoadEventListener there, but since it changes
>> the
>> > contract anyway I'd probably rename this to something like
>> > SurroundLoadEventListener
>> > >>>>> >>
>> > >>>>> >>
>> > >>>>> >>>
>> > >>>>> >>> # To clarify on my previous comment regarding why I'd consider
>> > having
>> > >>>>> >>> an actual Event class more maintainable:
>> > >>>>> >>> Sure we won't have inline classes widely used for a while,
>> but I
>> > >>>>> >>> prefer planning for the long term - also we could start using
>> > them
>> > >>>>> >>> very soon via multi-release jars, which would simply imply
>> that
>> > users
>> > >>>>> >>> on newer JDKs would see more benefits than other users.
>> > >>>>> >>> But especially, such event instances are passed over and over
>> > across
>> > >>>>> >>> many methods; so in terms of maintenance and readability, such
>> > methods
>> > >>>>> >>> would need to pass many parameters rather than one: the
>> example
>> > made
>> > >>>>> >>> above is oversimplifying our use.  Also while I understand
>> it's
>> > >>>>> >>> unlikely, having a "cheap" event objects makes it easier to
>> > change the
>> > >>>>> >>> exact types being passed on.
>> > >>>>> >>> BTW stack space is cheap but forcing many references to be
>> > passed when
>> > >>>>> >>> one single reference could do might also have some performance
>> > >>>>> >>> implications since these are passed many times - I've never
>> > tested
>> > >>>>> >>> this scientifically though :)   Inline objects would
>> typically be
>> > >>>>> >>> allocated on the stack as well, but they don't force the JVM
>> to
>> > do so.
>> > >>>>> >>>
>> > >>>>> >>>
>> > >>>>> >>> Also while I said that it's unlikely we want to change those
>> > types,
>> > >>>>> >>> the very coming of inline types might actually encourage us to
>> > make
>> > >>>>> >>> changes in this area, even though these events have been
>> stable
>> > for
>> > >>>>> >>> years; for example "String entityName" seems like an excellent
>> > >>>>> >>> candidate to become "EntityName typeIdentifier" - and then
>> allow
>> > us to
>> > >>>>> >>> improve the persister maps, which have been a bottleneck in
>> the
>> > past.
>> > >>>>> >>> So sure we could remove them and just pass parameters, we'd
>> just
>> > need
>> > >>>>> >>> to change more code if such a situation arises - I'm just
>> > highliting
>> > >>>>> >>> the drawbacks for our consideration, not recommending against
>> it
>> > :)
>> > >>>>> >>
>> > >>>>> >>
>> > >>>>> >> Maybe its simply a difference of wording, but to me none of
>> this
>> > validates how keeping an event class is more maintainable.  If you want
>> to
>> > say that eventually the overhead of having an actual event class will be
>> > less, ok, but that's different.
>> > >>>>> >>
>> > >>>>> >> For sure though we'd have lots of uses for in-line value types
>> > throughout the code base.  Just not sure this really an argument for
>> > keeping the event impl in-and-of-itself.
>> > >>>>> >>
>> >
>> _______________________________________________
>> hibernate-dev mailing list
>> hibernate-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>
>


More information about the hibernate-dev mailing list