[hibernate-dev] SessionEventsListener feature (HHH-8654)

Gunnar Morling gunnar at hibernate.org
Mon Dec 23 05:37:13 EST 2013


Am 23.12.2013 10:55 schrieb "Emmanuel Bernard" <emmanuel at hibernate.org>:
>
> Sanne, I wonder if that could be used as a way to get rid of the weak
> identity hash map we have in Hibernate Search. (I think we got rid of
> all ThreadLocal already).
>
> Steve, do you think I could (ab)use these as Session level cache? I
> think OGM could benefit from such feature in a couple of situations.
> That would require that from an eventsource, I could reach the list of
> listeners to access the state I suppose.

In the OGM case, could such caching facility not be implemented within
OgmSession? This seems a bit less abusive.

>
> Emmanuel
>
> On Wed 2013-11-13 15:16, Steve Ebersole wrote:
> > I wanted to highlight a new feature in 4.3 as it came about from
> > performance testing efforts.  Its a way to hopefully help track down
> > potential performance problems in applications that use Hibernate. In
> > this way it is similar to statistics, but it operates per-Session
> > (though certainly custom impls could role the metrics up to a SF level).
> >
> > It revolves around the SessionEventsListener[1] interface which
> > essentially defines a number of start/end pairs for the interesting
> > events (for example starting to prepare a JDBC statement and ending that
> > preparation).
> >
> > Multiple SessionEventsListener instances can be associated with the
> > Session simultaneously.  You can add them programatically to a Session
> > using Session#addEventsListeners(SessionEventsListener...) method.  They
> > can also be added to the Session up-front via the
> > SessionFactory#withOptions API for building Sessions.
> >
> > Additionally there are 2 settings that allow SessionEventsListener impls
> > to be applied to all Sessions created:
> >
> > * 'hibernate.session.events.auto' allows you to name any arbitrary
> > SessionEventsListener class to apply to all Sessions.
> > * 'hibernate.session.events.log' refers to a particular built-in
> > implementation of SessionEventsListener that applies some timings across
> > the start/end pairs
> > (org.hibernate.engine.internal.LoggingSessionEventsListener).  In fact
> > this listener is added by default if (a) stats are enabled and (b) the
> > log level (currently INFO) of LoggingSessionEventsListener is enabled.
> > Below[2] is some sample output of LoggingSessionEventsListener.
> >
> > There is also a org.hibernate.EmptySessionEventsListener (no-op) class
> > to help develop custom ones.
> >
> > Anyway, as much as anything I wanted to point it out so people can try
> > it out and to get feedback.  I think the API covers most of the
> > interesting events.  If you feel there are any missing, lets discuss
> > here or on a Jira issue.
> >
> >
> > [1] https://gist.github.com/sebersole/7438250
> >
> > [2]
> > 14:40:20,017  INFO LoggingSessionEventsListener:275 - Session Metrics {
> >      9762 nanoseconds spent acquiring 1 JDBC connections;
> >      0 nanoseconds spent releasing 0 JDBC connections;
> >      1020726 nanoseconds spent preparing 4 JDBC statements;
> >      1442351 nanoseconds spent executing 4 JDBC statements;
> >      0 nanoseconds spent executing 0 JDBC batches;
> >      0 nanoseconds spent executing 0 L2C puts;
> >      0 nanoseconds spent executing 0 L2C hits;
> >      0 nanoseconds spent executing 0 L2C misses;
> >      2766689 nanoseconds spent executing 1 flushes (flushing a total of
> > 3 entities and 1 collections);
> >      1096552384585007 nanoseconds spent executing 2 partial-flushes
> > (flushing a total of 3 entities and 3 collections)
> > }
> > _______________________________________________
> > hibernate-dev mailing list
> > hibernate-dev at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
> _______________________________________________
> 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