Skip to content

Commit acaf88e

Browse files
committed
fix "weird" unwrap logic in the ConnectionProviders
1 parent 9a32930 commit acaf88e

File tree

5 files changed

+30
-35
lines changed

5 files changed

+30
-35
lines changed

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ public class AgroalConnectionProvider implements ConnectionProvider, Configurabl
8484

8585
private static String extractIsolationAsString(Map<String, Object> properties) {
8686
final Integer isolation = ConnectionProviderInitiator.extractIsolation( properties );
87-
return isolation != null ?
87+
return isolation != null
8888
// Agroal resolves transaction isolation from the 'nice' name
89-
toIsolationNiceName( isolation )
89+
? toIsolationNiceName( isolation )
9090
: null;
9191
}
9292

@@ -116,9 +116,7 @@ public void configure(Map<String, Object> properties) throws HibernateException
116116
: String.valueOf( 10 );
117117
config.put( AgroalSettings.AGROAL_MAX_SIZE, maxSize );
118118
}
119-
final AgroalPropertiesReader agroalProperties =
120-
new AgroalPropertiesReader( CONFIG_PREFIX )
121-
.readProperties( config );
119+
final var agroalProperties = new AgroalPropertiesReader( CONFIG_PREFIX ).readProperties( config );
122120
agroalProperties.modify()
123121
.connectionPoolConfiguration( cp -> cp.connectionFactoryConfiguration( cf -> {
124122
copyProperty( properties, JdbcSettings.DRIVER, cf::connectionProviderClassName, identity() );
@@ -205,22 +203,22 @@ public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
205203

206204
@Override
207205
public boolean isUnwrappableAs(Class<?> unwrapType) {
208-
return ConnectionProvider.class.equals( unwrapType )
209-
|| AgroalConnectionProvider.class.isAssignableFrom( unwrapType )
210-
|| DataSource.class.isAssignableFrom( unwrapType );
206+
return unwrapType.isAssignableFrom( AgroalConnectionProvider.class )
207+
|| unwrapType.isAssignableFrom( AgroalDataSource.class );
211208
}
212209

213210
@Override
214211
@SuppressWarnings( "unchecked" )
215212
public <T> T unwrap(Class<T> unwrapType) {
216-
if ( ConnectionProvider.class.equals( unwrapType )
217-
|| AgroalConnectionProvider.class.isAssignableFrom( unwrapType ) ) {
213+
if ( unwrapType.isAssignableFrom( AgroalConnectionProvider.class ) ) {
218214
return (T) this;
219215
}
220-
if ( DataSource.class.isAssignableFrom( unwrapType ) ) {
216+
else if ( unwrapType.isAssignableFrom( AgroalDataSource.class ) ) {
221217
return (T) agroalDataSource;
222218
}
223-
throw new UnknownUnwrapTypeException( unwrapType );
219+
else {
220+
throw new UnknownUnwrapTypeException( unwrapType );
221+
}
224222
}
225223

226224
// --- 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 & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,21 +140,23 @@ public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
140140

141141
@Override
142142
public boolean isUnwrappableAs(Class<?> unwrapType) {
143-
return ConnectionProvider.class.equals( unwrapType )
144-
|| HikariCPConnectionProvider.class.isAssignableFrom( unwrapType )
145-
|| DataSource.class.isAssignableFrom( unwrapType );
143+
return unwrapType.isAssignableFrom( HikariCPConnectionProvider.class )
144+
|| unwrapType.isAssignableFrom( HikariDataSource.class )
145+
|| unwrapType.isAssignableFrom( HikariConfig.class );
146146
}
147147

148148
@Override
149149
@SuppressWarnings("unchecked")
150150
public <T> T unwrap(Class<T> unwrapType) {
151-
if ( ConnectionProvider.class.equals( unwrapType )
152-
|| HikariCPConnectionProvider.class.isAssignableFrom( unwrapType ) ) {
151+
if ( unwrapType.isAssignableFrom( HikariCPConnectionProvider.class ) ) {
153152
return (T) this;
154153
}
155-
else if ( DataSource.class.isAssignableFrom( unwrapType ) ) {
154+
else if ( unwrapType.isAssignableFrom( HikariDataSource.class ) ) {
156155
return (T) hikariDataSource;
157156
}
157+
else if ( unwrapType.isAssignableFrom( HikariConfig.class ) ) {
158+
return (T) hikariConfig;
159+
}
158160
else {
159161
throw new UnknownUnwrapTypeException( unwrapType );
160162
}

0 commit comments

Comments
 (0)