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 forMultiTenantConnectionProviderimplementations using individualConnectionProviderinstances per tenant behind the scenes.This class is meant to be subclassed to implement application-specific requirements.
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description AbstractMultiTenantConnectionProvider()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description ConnectiongetAnyConnection()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).protected abstract ConnectionProvidergetAnyConnectionProvider()ConnectiongetConnection(T tenantIdentifier)Obtains a connection for use according to the underlying strategy of this provider.booleanisUnwrappableAs(Class<?> unwrapType)Can this wrapped service be unwrapped as the indicated type?voidreleaseAnyConnection(Connection connection)Release a connection obtained fromMultiTenantConnectionProvider.getAnyConnection()voidreleaseConnection(T tenantIdentifier, Connection connection)Release a connection from Hibernate use.protected abstract ConnectionProviderselectConnectionProvider(T tenantIdentifier)booleansupportsAggressiveRelease()Does this connection provider support aggressive release of JDBC connections and later re-acquisition of those connections if needed?<T> Tunwrap(Class<T> unwrapType)Unproxy the service proxy-
Methods 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
-
-
-
-
Method Detail
-
getAnyConnectionProvider
protected abstract ConnectionProvider getAnyConnectionProvider()
-
selectConnectionProvider
protected abstract ConnectionProvider selectConnectionProvider(T tenantIdentifier)
-
getAnyConnection
public Connection getAnyConnection() throws SQLException
Description copied from interface:MultiTenantConnectionProviderAllows 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:
getAnyConnectionin interfaceMultiTenantConnectionProvider<T>- Returns:
- The database metadata.
- Throws:
SQLException- Indicates a problem opening a connection
-
releaseAnyConnection
public void releaseAnyConnection(Connection connection) throws SQLException
Description copied from interface:MultiTenantConnectionProviderRelease a connection obtained fromMultiTenantConnectionProvider.getAnyConnection()- Specified by:
releaseAnyConnectionin interfaceMultiTenantConnectionProvider<T>- Parameters:
connection- The JDBC connection to release- Throws:
SQLException- Indicates a problem closing the connection
-
getConnection
public Connection getConnection(T tenantIdentifier) throws SQLException
Description copied from interface:MultiTenantConnectionProviderObtains a connection for use according to the underlying strategy of this provider.- Specified by:
getConnectionin 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
public void releaseConnection(T tenantIdentifier, Connection connection) throws SQLException
Description copied from interface:MultiTenantConnectionProviderRelease a connection from Hibernate use.- Specified by:
releaseConnectionin 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:MultiTenantConnectionProviderDoes 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_STATEMENTto aggressively release JDBC connections. However, the configuredConnectionProvidermust 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:
supportsAggressiveReleasein interfaceMultiTenantConnectionProvider<T>- Returns:
trueif aggressive releasing is supported;falseotherwise.
-
isUnwrappableAs
public boolean isUnwrappableAs(Class<?> unwrapType)
Description copied from interface:WrappedCan this wrapped service be unwrapped as the indicated type?- Specified by:
isUnwrappableAsin interfaceWrapped- Parameters:
unwrapType- The type to check.- Returns:
- True/false.
-
-