Skip to content

Commit 8e6b576

Browse files
committed
deprecate SPI operation which exposed internal BaselineSessionEventsListenerBuilder
also, we can replace BaselineSessionEventsListenerBuilder with a package-private static Helper method, so mark it for removal.
1 parent e88284c commit 8e6b576

File tree

5 files changed

+75
-51
lines changed

5 files changed

+75
-51
lines changed

hibernate-core/src/main/java/org/hibernate/boot/spi/SessionFactoryOptions.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.hibernate.Interceptor;
1919
import org.hibernate.Internal;
2020
import org.hibernate.LockOptions;
21+
import org.hibernate.SessionEventListener;
2122
import org.hibernate.SessionFactoryObserver;
2223
import org.hibernate.TimeZoneStorageStrategy;
2324
import org.hibernate.annotations.CacheLayout;
@@ -165,8 +166,23 @@ default boolean isAllowRefreshDetachedEntity() {
165166
*/
166167
SessionFactoryObserver[] getSessionFactoryObservers();
167168

169+
/**
170+
* @deprecated This operation is a layer-breaker, exposing an
171+
* internal type. It will be removed. Use
172+
* {@link #buildSessionEventListeners()} instead.
173+
*/
174+
@Deprecated(since = "7.0", forRemoval = true)
168175
BaselineSessionEventsListenerBuilder getBaselineSessionEventsListenerBuilder();
169176

177+
/**
178+
* Build an array of baseline {@link SessionEventListener}s.
179+
*
180+
* @since 7.0
181+
*/
182+
default SessionEventListener[] buildSessionEventListeners() {
183+
return getBaselineSessionEventsListenerBuilder().buildBaseline();
184+
}
185+
170186
/**
171187
* Should generated identifiers be reset after entity removal?
172188
*
@@ -647,12 +663,19 @@ default JavaType<Object> getDefaultTenantIdentifierJavaType() {
647663
*/
648664
CacheMode getInitialSessionCacheMode();
649665

666+
/**
667+
* @see org.hibernate.jpa.HibernateHints#HINT_FLUSH_MODE
668+
*/
650669
FlushMode getInitialSessionFlushMode();
651670

671+
/**
672+
* @see org.hibernate.cfg.AvailableSettings#JAKARTA_LOCK_TIMEOUT
673+
* @see org.hibernate.cfg.AvailableSettings#JAKARTA_LOCK_SCOPE
674+
*/
652675
LockOptions getDefaultLockOptions();
653676

654677
/**
655-
* Default session properties
678+
* Default properties for brand-new sessions
656679
*/
657680
Map<String, Object> getDefaultSessionProperties();
658681
}

hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -296,14 +296,9 @@ private static Object getTenantId( SessionFactoryOptions factoryOptions, Session
296296
private static SessionEventListenerManager createSessionEventsManager(
297297
SessionFactoryOptions factoryOptions, SessionCreationOptions options) {
298298
final List<SessionEventListener> customListeners = options.getCustomSessionEventListener();
299-
if ( customListeners == null ) {
300-
final SessionEventListener[] baseline =
301-
factoryOptions.getBaselineSessionEventsListenerBuilder().buildBaseline();
302-
return new SessionEventListenerManagerImpl( baseline );
303-
}
304-
else {
305-
return new SessionEventListenerManagerImpl( customListeners );
306-
}
299+
return customListeners == null
300+
? new SessionEventListenerManagerImpl( factoryOptions.buildSessionEventListeners() )
301+
: new SessionEventListenerManagerImpl( customListeners );
307302
}
308303

309304
/**
@@ -1641,9 +1636,7 @@ private void readObject(ObjectInputStream ois) throws IOException, ClassNotFound
16411636
jdbcServices = factory.getJdbcServices();
16421637

16431638
//TODO: this isn't quite right, see createSessionEventsManager()
1644-
final SessionEventListener[] baseline =
1645-
factoryOptions.getBaselineSessionEventsListenerBuilder()
1646-
.buildBaseline();
1639+
final SessionEventListener[] baseline = factoryOptions.buildSessionEventListeners();
16471640
sessionEventsManager = new SessionEventListenerManagerImpl( baseline );
16481641

16491642
jdbcSessionContext = createJdbcSessionContext( (StatementInspector) ois.readObject() );

hibernate-core/src/main/java/org/hibernate/internal/BaselineSessionEventsListenerBuilder.java

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,24 @@
55
package org.hibernate.internal;
66

77
import java.util.ArrayList;
8-
import java.util.Collections;
98
import java.util.List;
109

1110
import org.hibernate.HibernateException;
1211
import org.hibernate.SessionEventListener;
1312
import org.hibernate.engine.internal.StatisticalLoggingSessionEventListener;
1413

14+
import static java.util.Collections.addAll;
15+
1516
/**
1617
* @author Steve Ebersole
18+
*
19+
* @apiNote Due to a mistake, this internal class was exposed via the layer-breaking operation
20+
* {@link org.hibernate.boot.spi.SessionFactoryOptions#getBaselineSessionEventsListenerBuilder()}.
21+
* Clients should avoid direct use of this class.
22+
*
23+
* @deprecated This class is no longer needed and will be removed.
1724
*/
25+
@Deprecated(since = "7.0", forRemoval = true)
1826
public class BaselineSessionEventsListenerBuilder {
1927

2028
private static final SessionEventListener[] EMPTY = new SessionEventListener[0];
@@ -32,38 +40,28 @@ public Class<? extends SessionEventListener> getAutoListener() {
3240

3341
public List<SessionEventListener> buildBaselineList() {
3442
final SessionEventListener[] sessionEventListeners = buildBaseline();
35-
//Capacity: needs to hold at least all elements from the baseline, but also expect to add a little more later.
36-
ArrayList<SessionEventListener> list = new ArrayList<>( sessionEventListeners.length + 3 );
37-
Collections.addAll( list, sessionEventListeners );
43+
// Capacity: needs to hold at least all elements from the baseline,
44+
// but also expect to add a little more later.
45+
final List<SessionEventListener> list =
46+
new ArrayList<>( sessionEventListeners.length + 3 );
47+
addAll( list, sessionEventListeners );
3848
return list;
3949
}
4050

4151
public SessionEventListener[] buildBaseline() {
42-
final SessionEventListener[] arr;
43-
if ( autoListener != null ) {
44-
if ( StatisticalLoggingSessionEventListener.isLoggingEnabled() ) {
45-
arr = new SessionEventListener[2];
46-
arr[0] = buildStatsListener();
47-
arr[1] = buildAutoListener( autoListener );
48-
}
49-
else {
50-
arr = new SessionEventListener[1];
51-
arr[0] = buildAutoListener( autoListener );
52-
}
52+
if ( StatisticalLoggingSessionEventListener.isLoggingEnabled() ) {
53+
return autoListener == null
54+
? new SessionEventListener[] { statsListener() }
55+
: new SessionEventListener[] { statsListener(), autoListener() };
5356
}
5457
else {
55-
if ( StatisticalLoggingSessionEventListener.isLoggingEnabled() ) {
56-
arr = new SessionEventListener[1];
57-
arr[0] = buildStatsListener();
58-
}
59-
else {
60-
arr = EMPTY;
61-
}
58+
return autoListener == null
59+
? EMPTY
60+
: new SessionEventListener[] { autoListener() };
6261
}
63-
return arr;
6462
}
6563

66-
private static SessionEventListener buildAutoListener(final Class<? extends SessionEventListener> autoListener) {
64+
private SessionEventListener autoListener() {
6765
try {
6866
return autoListener.newInstance();
6967
}
@@ -75,7 +73,7 @@ private static SessionEventListener buildAutoListener(final Class<? extends Sess
7573
}
7674
}
7775

78-
private static SessionEventListener buildStatsListener() {
76+
private static SessionEventListener statsListener() {
7977
return new StatisticalLoggingSessionEventListener();
8078
}
8179

hibernate-core/src/main/java/org/hibernate/internal/SessionFactoryImpl.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
import org.hibernate.graph.spi.RootGraphImplementor;
7979
import org.hibernate.integrator.spi.Integrator;
8080
import org.hibernate.integrator.spi.IntegratorService;
81+
import org.hibernate.internal.util.collections.ArrayHelper;
8182
import org.hibernate.jpa.internal.ExceptionMapperLegacyJpaImpl;
8283
import org.hibernate.jpa.internal.PersistenceUnitUtilImpl;
8384
import org.hibernate.mapping.Collection;
@@ -133,6 +134,7 @@
133134
import jakarta.persistence.TypedQueryReference;
134135

135136
import static jakarta.persistence.SynchronizationType.SYNCHRONIZED;
137+
import static java.util.Collections.addAll;
136138
import static java.util.Collections.emptySet;
137139
import static java.util.Collections.unmodifiableSet;
138140
import static org.hibernate.cfg.AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS;
@@ -1323,11 +1325,12 @@ public SessionBuilderImpl tenantIdentifier(Object tenantIdentifier) {
13231325
@Override
13241326
public SessionBuilderImpl eventListeners(SessionEventListener... listeners) {
13251327
if ( this.listeners == null ) {
1326-
this.listeners = sessionFactory.getSessionFactoryOptions()
1327-
.getBaselineSessionEventsListenerBuilder()
1328-
.buildBaselineList();
1328+
final var baselineListeners =
1329+
sessionFactory.getSessionFactoryOptions().buildSessionEventListeners();
1330+
this.listeners = new ArrayList<>( baselineListeners.length + listeners.length );
1331+
addAll( this.listeners, baselineListeners );
13291332
}
1330-
Collections.addAll( this.listeners, listeners );
1333+
addAll( this.listeners, listeners );
13311334
return this;
13321335
}
13331336

@@ -1360,8 +1363,7 @@ public StatelessSessionBuilderImpl(SessionFactoryImpl sessionFactory) {
13601363
this.sessionFactory = sessionFactory;
13611364
this.statementInspector = sessionFactory.getSessionFactoryOptions().getStatementInspector();
13621365

1363-
final CurrentTenantIdentifierResolver<Object> tenantIdentifierResolver =
1364-
sessionFactory.getCurrentTenantIdentifierResolver();
1366+
final var tenantIdentifierResolver = sessionFactory.getCurrentTenantIdentifierResolver();
13651367
if ( tenantIdentifierResolver != null ) {
13661368
tenantIdentifier = tenantIdentifierResolver.resolveCurrentTenantIdentifier();
13671369
}

hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -345,14 +345,18 @@ protected void applyLockOptionsHint(SelectionQuery<?> query) {
345345
query.setLockMode( getLockMode( lockOptionsForRead.getLockMode() ) );
346346
}
347347

348-
final Object specQueryTimeout = LegacySpecHelper.getInteger(
348+
final Object specQueryTimeout = getHintedQueryTimeout();
349+
if ( specQueryTimeout != null ) {
350+
query.setHint( HINT_SPEC_QUERY_TIMEOUT, specQueryTimeout );
351+
}
352+
}
353+
354+
private Object getHintedQueryTimeout() {
355+
return LegacySpecHelper.getInteger(
349356
HINT_SPEC_QUERY_TIMEOUT,
350357
HINT_JAVAEE_QUERY_TIMEOUT,
351358
this::getSessionProperty
352359
);
353-
if ( specQueryTimeout != null ) {
354-
query.setHint( HINT_SPEC_QUERY_TIMEOUT, specQueryTimeout );
355-
}
356360
}
357361

358362
protected void applyQuerySettingsAndHints(Query<?> query) {
@@ -361,16 +365,20 @@ protected void applyQuerySettingsAndHints(Query<?> query) {
361365
}
362366

363367
private void applyLockTimeoutHint(Query<?> query) {
364-
final Integer specLockTimeout = LegacySpecHelper.getInteger(
368+
final Integer specLockTimeout = getHintedLockTimeout();
369+
if ( specLockTimeout != null ) {
370+
query.setHint( HINT_SPEC_LOCK_TIMEOUT, specLockTimeout );
371+
}
372+
}
373+
374+
private Integer getHintedLockTimeout() {
375+
return LegacySpecHelper.getInteger(
365376
HINT_SPEC_LOCK_TIMEOUT,
366377
HINT_JAVAEE_LOCK_TIMEOUT,
367378
this::getSessionProperty,
368379
// treat WAIT_FOREVER the same as null
369380
value -> !Integer.valueOf( LockOptions.WAIT_FOREVER ).equals( value )
370381
);
371-
if ( specLockTimeout != null ) {
372-
query.setHint( HINT_SPEC_LOCK_TIMEOUT, specLockTimeout );
373-
}
374382
}
375383

376384
private Object getSessionProperty(String propertyName) {

0 commit comments

Comments
 (0)