|
10 | 10 | import org.hibernate.dialect.pagination.LimitHandler;
|
11 | 11 | import org.hibernate.dialect.pagination.LimitHelper;
|
12 | 12 | import org.hibernate.dialect.pagination.NoopLimitHandler;
|
13 |
| -import org.hibernate.engine.spi.*; |
| 13 | +import org.hibernate.engine.spi.PersistenceContext; |
| 14 | +import org.hibernate.engine.spi.QueryParameters; |
| 15 | +import org.hibernate.engine.spi.RowSelection; |
| 16 | +import org.hibernate.engine.spi.SessionFactoryImplementor; |
| 17 | +import org.hibernate.engine.spi.SharedSessionContractImplementor; |
14 | 18 | import org.hibernate.loader.spi.AfterLoadAction;
|
15 | 19 | import org.hibernate.reactive.adaptor.impl.QueryParametersAdaptor;
|
16 | 20 | import org.hibernate.reactive.engine.impl.ReactivePersistenceContextAdapter;
|
17 | 21 | import org.hibernate.reactive.pool.impl.Parameters;
|
18 |
| -import org.hibernate.reactive.session.ReactiveConnectionSupplier; |
| 22 | +import org.hibernate.reactive.session.ReactiveQueryExecutor; |
19 | 23 | import org.hibernate.transform.ResultTransformer;
|
20 | 24 |
|
21 | 25 | import java.sql.ResultSet;
|
@@ -124,7 +128,12 @@ else if ( LimitHelper.useLimit( limitHandler, queryParameters.getRowSelection()
|
124 | 128 | sql = parameters().processLimit( sql, parameterArray, LimitHelper.hasFirstRow( queryParameters.getRowSelection() ) );
|
125 | 129 | }
|
126 | 130 |
|
127 |
| - return ((ReactiveConnectionSupplier) session).getReactiveConnection() |
| 131 | + //N.B. performance trap: always try to cast to ReactiveQueryExecutor even when only needing a ReactiveConnectionSupplier |
| 132 | + //as we otherwise trigger a strong scalability issue. |
| 133 | + //See also: |
| 134 | + // - https://bugs.openjdk.org/browse/JDK-8180450 |
| 135 | + // - https://github.com/hibernate/hibernate-reactive/issues/1399 |
| 136 | + return ((ReactiveQueryExecutor) session).getReactiveConnection() |
128 | 137 | .selectJdbc( sql, parameterArray );
|
129 | 138 | }
|
130 | 139 |
|
|
0 commit comments