[hibernate-dev] SessionEventsListener feature (HHH-8654)
Sanne Grinovero
sanne at hibernate.org
Thu Nov 14 07:20:09 EST 2013
On 14 November 2013 11:36, Gunnar Morling <gunnar at hibernate.org> wrote:
> Hi,
>
> This sounds very promising.
>
> Regarding the suggested type names, I'd personally prefer SessionEventListener
> (without the plural "s") and something like BaseSessionEventListener
> instead of EmptySessionEventsListener, as "empty" implies a specific
> behavior which a sub-class would not satisfy when overriding methods.
+1
+1
Sanne
>
> --Gunnar
>
>
>
>
> 2013/11/13 Steve Ebersole <steve at hibernate.org>
>
>> 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