Skip to content

Commit c0a94fc

Browse files
committed
work on the new session builder infrastructure
some stuff was not quite complete
1 parent f057c80 commit c0a94fc

19 files changed

+355
-192
lines changed

hibernate-core/src/main/java/org/hibernate/engine/creation/internal/AbstractCommonBuilder.java

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
import org.hibernate.ConnectionReleaseMode;
1010
import org.hibernate.Interceptor;
1111
import org.hibernate.engine.creation.CommonBuilder;
12-
import org.hibernate.internal.SessionFactoryImpl;
12+
import org.hibernate.engine.spi.SessionFactoryImplementor;
13+
import org.hibernate.internal.EmptyInterceptor;
1314
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
1415
import org.hibernate.resource.jdbc.spi.StatementInspector;
1516

@@ -22,7 +23,7 @@
2223
* @author Steve Ebersole
2324
*/
2425
public abstract class AbstractCommonBuilder<T extends CommonBuilder> implements CommonBuilder {
25-
protected final SessionFactoryImpl sessionFactory;
26+
protected final SessionFactoryImplementor sessionFactory;
2627

2728
protected StatementInspector statementInspector;
2829
protected Interceptor interceptor;
@@ -33,14 +34,46 @@ public abstract class AbstractCommonBuilder<T extends CommonBuilder> implements
3334
protected boolean readOnly;
3435
protected CacheMode cacheMode;
3536

36-
public AbstractCommonBuilder(SessionFactoryImpl sessionFactory) {
37-
this.sessionFactory = sessionFactory;
38-
39-
final var options = sessionFactory.getSessionFactoryOptions();
37+
public AbstractCommonBuilder(SessionFactoryImplementor factory) {
38+
sessionFactory = factory;
39+
final var options = factory.getSessionFactoryOptions();
4040
statementInspector = options.getStatementInspector();
4141
cacheMode = options.getInitialSessionCacheMode();
42-
tenantIdentifier = sessionFactory.resolveTenantIdentifier();
4342
connectionHandlingMode = options.getPhysicalConnectionHandlingMode();
43+
tenantIdentifier = factory.resolveTenantIdentifier();
44+
}
45+
46+
Interceptor configuredInterceptor() {
47+
// If we were explicitly asked for no interceptor, always return null.
48+
if ( explicitNoInterceptor ) {
49+
return null;
50+
}
51+
52+
// NOTE: DO NOT return EmptyInterceptor.INSTANCE from here as a "default for the Session".
53+
// We "filter" that one out here. The interceptor returned here should represent the
54+
// explicitly configured Interceptor (if there is one). Return null from here instead;
55+
// Session will handle it.
56+
57+
if ( interceptor != null && interceptor != EmptyInterceptor.INSTANCE ) {
58+
return interceptor;
59+
}
60+
61+
final var options = sessionFactory.getSessionFactoryOptions();
62+
63+
// prefer the SessionFactory-scoped interceptor, prefer that to any Session-scoped interceptor prototype
64+
final var optionsInterceptor = options.getInterceptor();
65+
if ( optionsInterceptor != null && optionsInterceptor != EmptyInterceptor.INSTANCE ) {
66+
return optionsInterceptor;
67+
}
68+
69+
// then check the Session-scoped interceptor prototype
70+
final var statelessInterceptorImplementorSupplier =
71+
options.getStatelessInterceptorImplementorSupplier();
72+
if ( statelessInterceptorImplementorSupplier != null ) {
73+
return statelessInterceptorImplementorSupplier.get();
74+
}
75+
76+
return null;
4477
}
4578

4679
protected abstract T getThis();

hibernate-core/src/main/java/org/hibernate/internal/CommonSharedSessionCreationOptions.java renamed to hibernate-core/src/main/java/org/hibernate/engine/creation/internal/CommonSharedSessionCreationOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: Apache-2.0
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.internal;
5+
package org.hibernate.engine.creation.internal;
66

77
import org.hibernate.CacheMode;
88
import org.hibernate.Interceptor;

hibernate-core/src/main/java/org/hibernate/engine/creation/internal/SessionBuilderImpl.java

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
import org.hibernate.Interceptor;
1010
import org.hibernate.SessionEventListener;
1111
import org.hibernate.engine.creation.spi.SessionBuilderImplementor;
12+
import org.hibernate.engine.spi.SessionFactoryImplementor;
13+
import org.hibernate.engine.spi.SessionImplementor;
1214
import org.hibernate.internal.CoreLogging;
13-
import org.hibernate.internal.SessionFactoryImpl;
14-
import org.hibernate.internal.SessionImpl;
1515
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
1616
import org.hibernate.resource.jdbc.spi.StatementInspector;
1717
import org.jboss.logging.Logger;
@@ -28,17 +28,19 @@
2828
*
2929
* @author Steve Ebersole
3030
*/
31-
public class SessionBuilderImpl
31+
public abstract class SessionBuilderImpl
3232
extends AbstractCommonBuilder<SessionBuilderImplementor>
3333
implements SessionBuilderImplementor, SessionCreationOptions {
34-
private static final Logger log = CoreLogging.logger( SessionBuilderImpl.class );
34+
35+
private static final Logger LOG = CoreLogging.logger( SessionBuilderImpl.class );
3536

3637
private boolean autoJoinTransactions = true;
37-
private FlushMode flushMode;
3838
private boolean autoClose;
3939
private boolean autoClear;
4040
private boolean identifierRollback;
4141
private TimeZone jdbcTimeZone;
42+
private FlushMode flushMode;
43+
4244
private final int defaultBatchFetchSize;
4345
private final boolean subselectFetchEnabled;
4446

@@ -47,21 +49,15 @@ public class SessionBuilderImpl
4749
// Only initialize of the builder is overriding the default.
4850
private List<SessionEventListener> listeners;
4951

50-
public SessionBuilderImpl(SessionFactoryImpl sessionFactory) {
52+
public SessionBuilderImpl(SessionFactoryImplementor sessionFactory) {
5153
super( sessionFactory );
52-
53-
// set up default builder values...
54+
// set up default builder values
5455
final var options = sessionFactory.getSessionFactoryOptions();
55-
statementInspector = options.getStatementInspector();
56-
connectionHandlingMode = options.getPhysicalConnectionHandlingMode();
5756
autoClose = options.isAutoCloseSessionEnabled();
58-
defaultBatchFetchSize = options.getDefaultBatchFetchSize();
59-
subselectFetchEnabled = options.isSubselectFetchEnabled();
6057
identifierRollback = options.isIdentifierRollbackEnabled();
61-
cacheMode = options.getInitialSessionCacheMode();
62-
63-
tenantIdentifier = sessionFactory.resolveTenantIdentifier();
6458
jdbcTimeZone = options.getJdbcTimeZone();
59+
defaultBatchFetchSize = options.getDefaultBatchFetchSize();
60+
subselectFetchEnabled = options.isSubselectFetchEnabled();
6561
}
6662

6763
@Override
@@ -110,8 +106,7 @@ public Connection getConnection() {
110106

111107
@Override
112108
public Interceptor getInterceptor() {
113-
return SessionFactoryImpl.configuredInterceptor( interceptor, explicitNoInterceptor,
114-
sessionFactory.getSessionFactoryOptions() );
109+
return configuredInterceptor();
115110
}
116111

117112
@Override
@@ -157,19 +152,21 @@ public TimeZone getJdbcTimeZone() {
157152
}
158153

159154
@Override
160-
public List<SessionEventListener> getCustomSessionEventListener() {
155+
public List<SessionEventListener> getCustomSessionEventListeners() {
161156
return listeners;
162157
}
163158

164159
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
165160
// SessionBuilder
166161

167162
@Override
168-
public SessionImpl openSession() {
169-
log.tracef( "Opening Hibernate Session. tenant=%s", tenantIdentifier );
170-
return new SessionImpl( sessionFactory, this );
163+
public SessionImplementor openSession() {
164+
LOG.tracef( "Opening Hibernate Session [tenant=%s]", tenantIdentifier );
165+
return createSession();
171166
}
172167

168+
protected abstract SessionImplementor createSession();
169+
173170
@Override
174171
@Deprecated
175172
public SessionBuilderImplementor statementInspector(StatementInspector statementInspector) {
@@ -250,6 +247,4 @@ public SessionBuilderImplementor jdbcTimeZone(TimeZone timeZone) {
250247
jdbcTimeZone = timeZone;
251248
return this;
252249
}
253-
254-
255250
}

hibernate-core/src/main/java/org/hibernate/engine/creation/internal/SessionCreationOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,5 @@ public interface SessionCreationOptions {
6262
* @return the full list of SessionEventListener if this was customized,
6363
* or null if this Session is being created with the default list.
6464
*/
65-
List<SessionEventListener> getCustomSessionEventListener();
65+
List<SessionEventListener> getCustomSessionEventListeners();
6666
}

hibernate-core/src/main/java/org/hibernate/internal/SessionCreationOptionsAdaptor.java renamed to hibernate-core/src/main/java/org/hibernate/engine/creation/internal/SessionCreationOptionsAdaptor.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
package org.hibernate.internal;
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.engine.creation.internal;
26

37
import org.hibernate.CacheMode;
48
import org.hibernate.FlushMode;
59
import org.hibernate.Interceptor;
610
import org.hibernate.SessionEventListener;
711
import org.hibernate.Transaction;
8-
import org.hibernate.engine.creation.internal.SessionCreationOptions;
9-
import org.hibernate.engine.creation.internal.SharedSessionCreationOptions;
1012
import org.hibernate.engine.internal.TransactionCompletionCallbacksImpl;
1113
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
1214
import org.hibernate.engine.spi.SessionFactoryImplementor;
@@ -117,7 +119,7 @@ public TimeZone getJdbcTimeZone() {
117119
}
118120

119121
@Override
120-
public List<SessionEventListener> getCustomSessionEventListener() {
122+
public List<SessionEventListener> getCustomSessionEventListeners() {
121123
return null;
122124
}
123125

0 commit comments

Comments
 (0)