diff --git a/hibernate-core/src/main/java/org/hibernate/BaseSessionEventListener.java b/hibernate-core/src/main/java/org/hibernate/BaseSessionEventListener.java index a8fdcd1b336..6d0222d6094 100644 --- a/hibernate-core/src/main/java/org/hibernate/BaseSessionEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/BaseSessionEventListener.java @@ -5,97 +5,14 @@ package org.hibernate; /** - * A no-op implementation of SessionEventListener. Intended as a convenient base class for developing - * SessionEventListener implementations. + * A noop implementation of {@link SessionEventListener}. + * Intended as a convenient base class for developing + * {@code SessionEventListener} implementations. * * @author Steve Ebersole + * + * @deprecated Just implement {@link SessionEventListener} directly. */ +@Deprecated(since = "7", forRemoval = true) public class BaseSessionEventListener implements SessionEventListener { - @Override - public void transactionCompletion(boolean successful) { - } - - @Override - public void jdbcConnectionAcquisitionStart() { - } - - @Override - public void jdbcConnectionAcquisitionEnd() { - } - - @Override - public void jdbcConnectionReleaseStart() { - } - - @Override - public void jdbcConnectionReleaseEnd() { - } - - @Override - public void jdbcPrepareStatementStart() { - } - - @Override - public void jdbcPrepareStatementEnd() { - } - - @Override - public void jdbcExecuteStatementStart() { - } - - @Override - public void jdbcExecuteStatementEnd() { - } - - @Override - public void jdbcExecuteBatchStart() { - } - - @Override - public void jdbcExecuteBatchEnd() { - } - - @Override - public void cachePutStart() { - } - - @Override - public void cachePutEnd() { - } - - @Override - public void cacheGetStart() { - } - - @Override - public void cacheGetEnd(boolean hit) { - } - - @Override - public void flushStart() { - } - - @Override - public void flushEnd(int numberOfEntities, int numberOfCollections) { - } - - @Override - public void partialFlushStart() { - } - - @Override - public void partialFlushEnd(int numberOfEntities, int numberOfCollections) { - } - - @Override - public void dirtyCalculationStart() { - } - - @Override - public void dirtyCalculationEnd(boolean dirty) { - } - - @Override - public void end() { - } } diff --git a/hibernate-core/src/main/java/org/hibernate/SessionEventListener.java b/hibernate-core/src/main/java/org/hibernate/SessionEventListener.java index bbc4d4d0d32..b486d16ff93 100644 --- a/hibernate-core/src/main/java/org/hibernate/SessionEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/SessionEventListener.java @@ -15,8 +15,8 @@ * sessions may be registered using the configuration property * {@value org.hibernate.cfg.AvailableSettings#AUTO_SESSION_EVENTS_LISTENER}. * A new instance of the class will be created for each new session. - *

- * This an incubating API, subject to change. + * + * @apiNote This an incubating API, subject to change. * * @see org.hibernate.cfg.AvailableSettings#AUTO_SESSION_EVENTS_LISTENER * @see SessionBuilder#eventListeners(SessionEventListener...) diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java index fc19b9f69fc..a05a7bc8414 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java @@ -100,7 +100,6 @@ import static org.hibernate.cfg.AvailableSettings.JDBC_TIME_ZONE; import static org.hibernate.cfg.AvailableSettings.JPA_CALLBACKS_ENABLED; import static org.hibernate.cfg.AvailableSettings.JTA_TRACK_BY_THREAD; -import static org.hibernate.cfg.AvailableSettings.LOG_SESSION_METRICS; import static org.hibernate.cfg.AvailableSettings.MAX_FETCH_DEPTH; import static org.hibernate.cfg.AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER; import static org.hibernate.cfg.AvailableSettings.ORDER_INSERTS; @@ -357,8 +356,7 @@ public SessionFactoryOptionsBuilder(StandardServiceRegistry serviceRegistry, Boo ? null : strategySelector.selectStrategyImplementor( SessionEventListener.class, autoSessionEventsListenerName ); - final boolean logSessionMetrics = configurationService.getSetting( LOG_SESSION_METRICS, BOOLEAN, statisticsEnabled ); - this.baselineSessionEventsListenerBuilder = new BaselineSessionEventsListenerBuilder( logSessionMetrics, autoSessionEventsListener ); + this.baselineSessionEventsListenerBuilder = new BaselineSessionEventsListenerBuilder( autoSessionEventsListener ); this.customEntityDirtinessStrategy = strategySelector.resolveDefaultableStrategy( CustomEntityDirtinessStrategy.class, diff --git a/hibernate-core/src/main/java/org/hibernate/cache/spi/SecondLevelCacheLogger.java b/hibernate-core/src/main/java/org/hibernate/cache/spi/SecondLevelCacheLogger.java index 119c4910da0..f81c86476f5 100644 --- a/hibernate-core/src/main/java/org/hibernate/cache/spi/SecondLevelCacheLogger.java +++ b/hibernate-core/src/main/java/org/hibernate/cache/spi/SecondLevelCacheLogger.java @@ -84,6 +84,7 @@ public interface SecondLevelCacheLogger extends BasicLogger { " You can disable this warning by setting '%2$s' to '%3$s'.", id = NAMESPACE + 6 ) + @SuppressWarnings( "unused" ) // used by hibernate-jcache void missingCacheCreated(String regionName, String configurationPropertyToDisableKey, String configurationPropertyToDisableValue); @LogMessage(level = WARN) @@ -92,6 +93,7 @@ public interface SecondLevelCacheLogger extends BasicLogger { " Update your configuration to rename cache [%2$s] to [%1$s].", id = NAMESPACE + 7 ) + @SuppressWarnings( "unused" ) // used by hibernate-jcache void usingLegacyCacheName(String currentName, String legacyName); @LogMessage(level = WARN) @@ -100,6 +102,7 @@ public interface SecondLevelCacheLogger extends BasicLogger { " Make sure your cache implementation supports JTA transactions.", id = NAMESPACE + 8 ) + @SuppressWarnings( "unused" ) // used by hibernate-jcache void nonStandardSupportForAccessType(String key, String accessType, String regionName); } diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/PersistenceSettings.java b/hibernate-core/src/main/java/org/hibernate/cfg/PersistenceSettings.java index 6039dd56dc2..78a2f2e0a27 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/PersistenceSettings.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/PersistenceSettings.java @@ -134,7 +134,6 @@ public interface PersistenceSettings { * * @see #SCANNER * @see org.hibernate.boot.archive.scan.spi.Scanner - * @see org.hibernate.boot.archive.scan.spi.AbstractScannerImpl * @see org.hibernate.boot.MetadataBuilder#applyArchiveDescriptorFactory */ String SCANNER_ARCHIVE_INTERPRETER = "hibernate.archive.interpreter"; diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/SessionEventSettings.java b/hibernate-core/src/main/java/org/hibernate/cfg/SessionEventSettings.java index adad86ddf5d..19b575d8165 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/SessionEventSettings.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/SessionEventSettings.java @@ -13,18 +13,6 @@ */ public interface SessionEventSettings { - /** - * Controls whether {@linkplain org.hibernate.stat.SessionStatistics session metrics} - * should be {@linkplain org.hibernate.engine.internal.StatisticalLoggingSessionEventListener - * logged} for any session in which statistics are being collected. - *

- * By default, logging of session metrics is disabled unless {@link StatisticsSettings#GENERATE_STATISTICS} - * is enabled. - * - * @settingDefault Defined by {@link StatisticsSettings#GENERATE_STATISTICS} - */ - String LOG_SESSION_METRICS = "hibernate.session.events.log"; - /** * Defines a default {@link org.hibernate.SessionEventListener} to be applied to * newly-opened {@link org.hibernate.Session}s. @@ -75,4 +63,12 @@ public interface SessionEventSettings { * @since 5.2 */ String SESSION_SCOPED_INTERCEPTOR = "hibernate.session_factory.session_scoped_interceptor"; + + /** + * @deprecated This setting is now ignored. Enable the log category + * {@code org.hibernate.session.metrics} to automatically + * collect and log session-level metrics. + */ + @Deprecated(since = "7", forRemoval = true) + String LOG_SESSION_METRICS = "hibernate.session.events.log"; } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/StatisticalLoggingSessionEventListener.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/StatisticalLoggingSessionEventListener.java index 433ec03aed7..5a0b52bbb33 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/StatisticalLoggingSessionEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/StatisticalLoggingSessionEventListener.java @@ -4,17 +4,18 @@ */ package org.hibernate.engine.internal; -import org.hibernate.BaseSessionEventListener; +import org.hibernate.SessionEventListener; +import org.hibernate.internal.CoreMessageLogger; -import org.jboss.logging.Logger; +import static org.hibernate.internal.CoreLogging.messageLogger; /** - * @see org.hibernate.cfg.AvailableSettings#LOG_SESSION_METRICS + * Tracks and logs certain session-level metrics. * * @author Steve Ebersole */ -public class StatisticalLoggingSessionEventListener extends BaseSessionEventListener { - private static final Logger log = Logger.getLogger( StatisticalLoggingSessionEventListener.class ); +public class StatisticalLoggingSessionEventListener implements SessionEventListener { + private static final CoreMessageLogger log = messageLogger( "org.hibernate.session.metrics" ); /** * Used by SettingsFactory (in conjunction with stats being enabled) to determine whether to apply this listener @@ -22,7 +23,7 @@ public class StatisticalLoggingSessionEventListener extends BaseSessionEventList * @return {@code true} if logging is enabled for this listener. */ public static boolean isLoggingEnabled() { - return log.isInfoEnabled(); + return log.isDebugEnabled(); } // cumulative state ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -274,21 +275,8 @@ public void partialFlushEnd(int numberOfEntities, int numberOfCollections) { @Override public void end() { - if ( log.isInfoEnabled() ) { - log.infof( - "Session Metrics {\n" + - " %s nanoseconds spent acquiring %s JDBC connections;\n" + - " %s nanoseconds spent releasing %s JDBC connections;\n" + - " %s nanoseconds spent preparing %s JDBC statements;\n" + - " %s nanoseconds spent executing %s JDBC statements;\n" + - " %s nanoseconds spent executing %s JDBC batches;\n" + - " %s nanoseconds spent performing %s L2C puts;\n" + - " %s nanoseconds spent performing %s L2C hits;\n" + - " %s nanoseconds spent performing %s L2C misses;\n" + - " %s nanoseconds spent executing %s flushes (flushing a total of %s entities and %s collections);\n" + - " %s nanoseconds spent executing %s pre-partial-flushes;\n" + - " %s nanoseconds spent executing %s partial-flushes (flushing a total of %s entities and %s collections)\n" + - "}", + if ( isLoggingEnabled() ) { + log.sessionMetrics( jdbcConnectionAcquisitionTime, jdbcConnectionAcquisitionCount, jdbcConnectionReleaseTime, diff --git a/hibernate-core/src/main/java/org/hibernate/internal/BaselineSessionEventsListenerBuilder.java b/hibernate-core/src/main/java/org/hibernate/internal/BaselineSessionEventsListenerBuilder.java index d550c9b30e5..4e9507a9ebe 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/BaselineSessionEventsListenerBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/BaselineSessionEventsListenerBuilder.java @@ -19,21 +19,12 @@ public class BaselineSessionEventsListenerBuilder { private static final SessionEventListener[] EMPTY = new SessionEventListener[0]; - private final boolean logSessionMetrics; private final Class autoListener; - public BaselineSessionEventsListenerBuilder( - boolean logSessionMetrics, - Class autoListener) { - this.logSessionMetrics = logSessionMetrics; + public BaselineSessionEventsListenerBuilder(Class autoListener) { this.autoListener = autoListener; } - @SuppressWarnings("unused") - public boolean isLogSessionMetrics() { - return logSessionMetrics; - } - @SuppressWarnings("unused") public Class getAutoListener() { return autoListener; @@ -48,24 +39,26 @@ public List buildBaselineList() { } public SessionEventListener[] buildBaseline() { - final boolean addStats = logSessionMetrics && StatisticalLoggingSessionEventListener.isLoggingEnabled(); - final boolean addAutoListener = autoListener != null; final SessionEventListener[] arr; - if ( addStats && addAutoListener ) { - arr = new SessionEventListener[2]; - arr[0] = buildStatsListener(); - arr[1] = buildAutoListener( autoListener ); + if ( autoListener != null ) { + if ( StatisticalLoggingSessionEventListener.isLoggingEnabled() ) { + arr = new SessionEventListener[2]; + arr[0] = buildStatsListener(); + arr[1] = buildAutoListener( autoListener ); + } + else { + arr = new SessionEventListener[1]; + arr[0] = buildAutoListener( autoListener ); + } } - else if ( !addStats && addAutoListener ) { - arr = new SessionEventListener[1]; - arr[0] = buildAutoListener( autoListener ); - } - else if ( addStats && !addAutoListener ) { - arr = new SessionEventListener[1]; - arr[0] = buildStatsListener(); - } - else {//if ( !addStats && !addAutoListener ) - arr = EMPTY; + else { + if ( StatisticalLoggingSessionEventListener.isLoggingEnabled() ) { + arr = new SessionEventListener[1]; + arr[0] = buildStatsListener(); + } + else { + arr = EMPTY; + } } return arr; } @@ -76,7 +69,7 @@ private static SessionEventListener buildAutoListener(final Class