Skip to content

Commit fcc1e8a

Browse files
committed
fix "weird" unwrap logic in the ConnectionProviders
1 parent 35ac059 commit fcc1e8a

File tree

5 files changed

+30
-37
lines changed

5 files changed

+30
-37
lines changed

hibernate-agroal/src/main/java/org/hibernate/agroal/internal/AgroalConnectionProvider.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import java.io.Serial;
88
import java.sql.Connection;
99
import java.sql.SQLException;
10-
import javax.sql.DataSource;
1110
import java.util.Map;
1211
import java.util.function.Consumer;
1312
import java.util.function.Function;
@@ -84,9 +83,9 @@ public class AgroalConnectionProvider implements ConnectionProvider, Configurabl
8483

8584
private static String extractIsolationAsString(Map<String, Object> properties) {
8685
final Integer isolation = ConnectionProviderInitiator.extractIsolation( properties );
87-
return isolation != null ?
86+
return isolation != null
8887
// Agroal resolves transaction isolation from the 'nice' name
89-
toIsolationNiceName( isolation )
88+
? toIsolationNiceName( isolation )
9089
: null;
9190
}
9291

@@ -116,9 +115,7 @@ public void configure(Map<String, Object> properties) throws HibernateException
116115
: String.valueOf( 10 );
117116
config.put( AgroalSettings.AGROAL_MAX_SIZE, maxSize );
118117
}
119-
final AgroalPropertiesReader agroalProperties =
120-
new AgroalPropertiesReader( CONFIG_PREFIX )
121-
.readProperties( config );
118+
final var agroalProperties = new AgroalPropertiesReader( CONFIG_PREFIX ).readProperties( config );
122119
agroalProperties.modify()
123120
.connectionPoolConfiguration( cp -> cp.connectionFactoryConfiguration( cf -> {
124121
copyProperty( properties, JdbcSettings.DRIVER, cf::connectionProviderClassName, identity() );
@@ -205,22 +202,22 @@ public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
205202

206203
@Override
207204
public boolean isUnwrappableAs(Class<?> unwrapType) {
208-
return ConnectionProvider.class.equals( unwrapType )
209-
|| AgroalConnectionProvider.class.isAssignableFrom( unwrapType )
210-
|| DataSource.class.isAssignableFrom( unwrapType );
205+
return unwrapType.isAssignableFrom( AgroalConnectionProvider.class )
206+
|| unwrapType.isAssignableFrom( AgroalDataSource.class );
211207
}
212208

213209
@Override
214210
@SuppressWarnings( "unchecked" )
215211
public <T> T unwrap(Class<T> unwrapType) {
216-
if ( ConnectionProvider.class.equals( unwrapType )
217-
|| AgroalConnectionProvider.class.isAssignableFrom( unwrapType ) ) {
212+
if ( unwrapType.isAssignableFrom( AgroalConnectionProvider.class ) ) {
218213
return (T) this;
219214
}
220-
if ( DataSource.class.isAssignableFrom( unwrapType ) ) {
215+
else if ( unwrapType.isAssignableFrom( AgroalDataSource.class ) ) {
221216
return (T) agroalDataSource;
222217
}
223-
throw new UnknownUnwrapTypeException( unwrapType );
218+
else {
219+
throw new UnknownUnwrapTypeException( unwrapType );
220+
}
224221
}
225222

226223
// --- Stoppable

hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0ConnectionProvider.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,19 +115,17 @@ public void closeConnection(Connection connection) throws SQLException {
115115

116116
@Override
117117
public boolean isUnwrappableAs(Class<?> unwrapType) {
118-
return ConnectionProvider.class.equals( unwrapType )
119-
|| C3P0ConnectionProvider.class.isAssignableFrom( unwrapType )
120-
|| DataSource.class.isAssignableFrom( unwrapType );
118+
return unwrapType.isAssignableFrom( C3P0ConnectionProvider.class )
119+
|| unwrapType.isAssignableFrom( DataSource.class );
121120
}
122121

123122
@Override
124123
@SuppressWarnings("unchecked")
125124
public <T> T unwrap(Class<T> unwrapType) {
126-
if ( ConnectionProvider.class.equals( unwrapType )
127-
|| C3P0ConnectionProvider.class.isAssignableFrom( unwrapType ) ) {
125+
if ( unwrapType.isAssignableFrom( C3P0ConnectionProvider.class ) ) {
128126
return (T) this;
129127
}
130-
else if ( DataSource.class.isAssignableFrom( unwrapType ) ) {
128+
else if ( unwrapType.isAssignableFrom( DataSource.class ) ) {
131129
return (T) dataSource;
132130
}
133131
else {

hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DatasourceConnectionProviderImpl.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
* @author Gavin King
4141
* @author Steve Ebersole
4242
*/
43-
public class DatasourceConnectionProviderImpl implements ConnectionProvider, Configurable, Stoppable {
43+
public class DatasourceConnectionProviderImpl
44+
implements ConnectionProvider, Configurable, Stoppable {
4445

4546
private DataSource dataSource;
4647
private String user;
@@ -67,19 +68,17 @@ public void setJndiService(JndiService jndiService) {
6768

6869
@Override
6970
public boolean isUnwrappableAs(Class<?> unwrapType) {
70-
return ConnectionProvider.class.equals( unwrapType )
71-
|| DatasourceConnectionProviderImpl.class.isAssignableFrom( unwrapType )
72-
|| DataSource.class.isAssignableFrom( unwrapType );
71+
return unwrapType.isAssignableFrom( DatasourceConnectionProviderImpl.class )
72+
|| unwrapType.isAssignableFrom( DataSource.class);
7373
}
7474

7575
@Override
7676
@SuppressWarnings("unchecked")
7777
public <T> T unwrap(Class<T> unwrapType) {
78-
if ( ConnectionProvider.class.equals( unwrapType )
79-
|| DatasourceConnectionProviderImpl.class.isAssignableFrom( unwrapType ) ) {
78+
if ( unwrapType.isAssignableFrom( DatasourceConnectionProviderImpl.class ) ) {
8079
return (T) this;
8180
}
82-
else if ( DataSource.class.isAssignableFrom( unwrapType ) ) {
81+
else if ( unwrapType.isAssignableFrom( DataSource.class) ) {
8382
return (T) getDataSource();
8483
}
8584
else {

hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -318,15 +318,13 @@ public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
318318

319319
@Override
320320
public boolean isUnwrappableAs(Class<?> unwrapType) {
321-
return ConnectionProvider.class.equals( unwrapType ) ||
322-
DriverManagerConnectionProviderImpl.class.isAssignableFrom( unwrapType );
321+
return unwrapType.isAssignableFrom( DriverManagerConnectionProviderImpl.class );
323322
}
324323

325324
@Override
326325
@SuppressWarnings( {"unchecked"})
327326
public <T> T unwrap(Class<T> unwrapType) {
328-
if ( ConnectionProvider.class.equals( unwrapType ) ||
329-
DriverManagerConnectionProviderImpl.class.isAssignableFrom( unwrapType ) ) {
327+
if ( unwrapType.isAssignableFrom( DriverManagerConnectionProviderImpl.class ) ) {
330328
return (T) this;
331329
}
332330
else {

hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/HikariCPConnectionProvider.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import java.io.Serial;
88
import java.sql.Connection;
99
import java.sql.SQLException;
10-
import javax.sql.DataSource;
1110
import java.util.Map;
1211

1312
import org.hibernate.HibernateException;
@@ -140,21 +139,23 @@ public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
140139

141140
@Override
142141
public boolean isUnwrappableAs(Class<?> unwrapType) {
143-
return ConnectionProvider.class.equals( unwrapType )
144-
|| HikariCPConnectionProvider.class.isAssignableFrom( unwrapType )
145-
|| DataSource.class.isAssignableFrom( unwrapType );
142+
return unwrapType.isAssignableFrom( HikariCPConnectionProvider.class )
143+
|| unwrapType.isAssignableFrom( HikariDataSource.class )
144+
|| unwrapType.isAssignableFrom( HikariConfig.class );
146145
}
147146

148147
@Override
149148
@SuppressWarnings("unchecked")
150149
public <T> T unwrap(Class<T> unwrapType) {
151-
if ( ConnectionProvider.class.equals( unwrapType )
152-
|| HikariCPConnectionProvider.class.isAssignableFrom( unwrapType ) ) {
150+
if ( unwrapType.isAssignableFrom( HikariCPConnectionProvider.class ) ) {
153151
return (T) this;
154152
}
155-
else if ( DataSource.class.isAssignableFrom( unwrapType ) ) {
153+
else if ( unwrapType.isAssignableFrom( HikariDataSource.class ) ) {
156154
return (T) hikariDataSource;
157155
}
156+
else if ( unwrapType.isAssignableFrom( HikariConfig.class ) ) {
157+
return (T) hikariConfig;
158+
}
158159
else {
159160
throw new UnknownUnwrapTypeException( unwrapType );
160161
}

0 commit comments

Comments
 (0)