10
10
import java .util .Map ;
11
11
12
12
import org .hibernate .HibernateException ;
13
- import org .hibernate .engine .jdbc .connections .internal .DriverManagerConnectionProviderImpl ;
14
13
import org .hibernate .engine .jdbc .connections .spi .AbstractMultiTenantConnectionProvider ;
15
14
import org .hibernate .engine .jdbc .connections .spi .ConnectionProvider ;
16
15
import org .hibernate .search .util .common .impl .Closer ;
17
16
import org .hibernate .service .spi .Stoppable ;
18
17
19
18
import org .hibernate .testing .env .ConnectionProviderBuilder ;
20
19
20
+ import org .jboss .logging .Logger ;
21
+
21
22
public class H2LazyMultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider
22
23
implements Stoppable {
23
24
25
+ private static final Logger log = Logger .getLogger ( H2LazyMultiTenantConnectionProvider .class .getName () );
26
+
24
27
private final String [] tenantIds ;
25
- private final Map <String , DriverManagerConnectionProviderImpl > delegates = new HashMap <>();
28
+ private final Map <String , ConnectionProvider > delegates = new HashMap <>();
26
29
27
30
public H2LazyMultiTenantConnectionProvider (String [] tenantIds ) {
28
31
this .tenantIds = tenantIds ;
@@ -31,7 +34,15 @@ public H2LazyMultiTenantConnectionProvider(String[] tenantIds) {
31
34
@ Override
32
35
public void stop () {
33
36
try ( Closer <RuntimeException > closer = new Closer <>() ) {
34
- closer .pushAll ( DriverManagerConnectionProviderImpl ::stop , delegates .values () );
37
+ for ( ConnectionProvider connectionProvider : delegates .values () ) {
38
+ if ( connectionProvider instanceof Stoppable ) {
39
+ closer .push ( Stoppable ::stop , ( (Stoppable ) connectionProvider ) );
40
+ }
41
+ else {
42
+ log .warn ( "Connection provider " + connectionProvider
43
+ + " does not implement Stoppable. This provider will not be stopped." );
44
+ }
45
+ }
35
46
}
36
47
}
37
48
@@ -43,20 +54,19 @@ protected ConnectionProvider getAnyConnectionProvider() {
43
54
44
55
@ Override
45
56
public ConnectionProvider selectConnectionProvider (String tenantIdentifier ) {
46
- DriverManagerConnectionProviderImpl connectionProviderImpl = getOrCreateDelegates ().get ( tenantIdentifier );
57
+ ConnectionProvider connectionProviderImpl = getOrCreateDelegates ().get ( tenantIdentifier );
47
58
if ( connectionProviderImpl == null ) {
48
59
throw new HibernateException ( "Unknown tenant identifier" );
49
60
}
50
61
return connectionProviderImpl ;
51
62
}
52
63
53
- private Map <String , DriverManagerConnectionProviderImpl > getOrCreateDelegates () {
64
+ private Map <String , ConnectionProvider > getOrCreateDelegates () {
54
65
if ( !delegates .isEmpty () ) {
55
66
return delegates ;
56
67
}
57
68
for ( String tenantId : tenantIds ) {
58
- DriverManagerConnectionProviderImpl connectionProvider =
59
- ConnectionProviderBuilder .buildConnectionProvider ( tenantId );
69
+ ConnectionProvider connectionProvider = ConnectionProviderBuilder .buildConnectionProvider ( tenantId );
60
70
delegates .put ( tenantId , connectionProvider );
61
71
}
62
72
return delegates ;
0 commit comments