Class AbstractMultiTenantConnectionProvider<T>
java.lang.Object
org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider<T>
- All Implemented Interfaces:
Serializable
,MultiTenantConnectionProvider<T>
,Service
,Wrapped
public abstract class AbstractMultiTenantConnectionProvider<T>
extends Object
implements MultiTenantConnectionProvider<T>
Basic support for
MultiTenantConnectionProvider
implementations using
an individual ConnectionProvider
instance per tenant behind the scenes.
This class is meant to be subclassed to implement application-specific requirements.
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionAllows access to the database metadata of the underlying database(s) in situations where we do not have a tenant id (like startup processing, for example).protected abstract ConnectionProvider
getConnection
(T tenantIdentifier) Obtains a connection for use according to the underlying strategy of this provider.boolean
isUnwrappableAs
(Class<?> unwrapType) Can this wrapped service be unwrapped as the indicated type?void
releaseAnyConnection
(Connection connection) Release a connection obtained fromMultiTenantConnectionProvider.getAnyConnection()
void
releaseConnection
(T tenantIdentifier, Connection connection) Release a connection from Hibernate use.protected abstract ConnectionProvider
selectConnectionProvider
(T tenantIdentifier) boolean
Does this connection provider support aggressive release of JDBC connections and later re-acquisition of those connections if needed?<T> T
Unproxy the service proxyMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider
getDatabaseConnectionInfo
-
Constructor Details
-
AbstractMultiTenantConnectionProvider
public AbstractMultiTenantConnectionProvider()
-
-
Method Details
-
getAnyConnectionProvider
-
selectConnectionProvider
-
getAnyConnection
Description copied from interface:MultiTenantConnectionProvider
Allows access to the database metadata of the underlying database(s) in situations where we do not have a tenant id (like startup processing, for example).- Specified by:
getAnyConnection
in interfaceMultiTenantConnectionProvider<T>
- Returns:
- The database metadata.
- Throws:
SQLException
- Indicates a problem opening a connection
-
releaseAnyConnection
Description copied from interface:MultiTenantConnectionProvider
Release a connection obtained fromMultiTenantConnectionProvider.getAnyConnection()
- Specified by:
releaseAnyConnection
in interfaceMultiTenantConnectionProvider<T>
- Parameters:
connection
- The JDBC connection to release- Throws:
SQLException
- Indicates a problem closing the connection
-
getConnection
Description copied from interface:MultiTenantConnectionProvider
Obtains a connection for use according to the underlying strategy of this provider.- Specified by:
getConnection
in interfaceMultiTenantConnectionProvider<T>
- Parameters:
tenantIdentifier
- The identifier of the tenant for which to get a connection- Returns:
- The obtained JDBC connection
- Throws:
SQLException
- Indicates a problem opening a connection
-
releaseConnection
Description copied from interface:MultiTenantConnectionProvider
Release a connection from Hibernate use.- Specified by:
releaseConnection
in interfaceMultiTenantConnectionProvider<T>
- Parameters:
tenantIdentifier
- The identifier of the tenant.connection
- The JDBC connection to release- Throws:
SQLException
- Indicates a problem closing the connection
-
supportsAggressiveRelease
public boolean supportsAggressiveRelease()Description copied from interface:MultiTenantConnectionProvider
Does this connection provider support aggressive release of JDBC connections and later re-acquisition of those connections if needed?This is used in conjunction with
ConnectionReleaseMode.AFTER_STATEMENT
to aggressively release JDBC connections. However, the configuredConnectionProvider
must support re-acquisition of the same underlying connection for that semantic to work.Typically, this is only true in managed environments where a container tracks connections by transaction or thread.
Note that JTA semantic depends on the fact that the underlying connection provider does support aggressive release.
- Specified by:
supportsAggressiveRelease
in interfaceMultiTenantConnectionProvider<T>
- Returns:
true
if aggressive releasing is supported;false
otherwise.
-
isUnwrappableAs
Description copied from interface:Wrapped
Can this wrapped service be unwrapped as the indicated type?- Specified by:
isUnwrappableAs
in interfaceWrapped
- Parameters:
unwrapType
- The type to check.- Returns:
- True/false.
-
unwrap
Description copied from interface:Wrapped
Unproxy the service proxy
-