Top Description Methods
org.hibernate.engine.jdbc.connections.spi

public Interface MultiTenantConnectionProvider<T>

extends Service, Wrapped
Known Direct Implementers
org.hibernate.engine.jdbc.connections.spi.AbstractDataSourceBasedMultiTenantConnectionProviderImpl, org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider
Type Parameters
<T>
The tenant identifier type
Imports
java.sql.Connection, .SQLException, org.hibernate.service.Service, org.hibernate.service.spi.Wrapped

A specialized Connection provider contract used when the application is using multi-tenancy support requiring tenant-aware connections.

A MultiTenantConnectionProvider may be selected using the configuration property hibernate.multi_tenant_connection_provider.

An application usually implements its own custom MultiTenantConnectionProvider by subclassing AbstractMultiTenantConnectionProvider.

Author
Steve Ebersole
See Also
AbstractMultiTenantConnectionProvider, org.hibernate.cfg.AvailableSettings#MULTI_TENANT_CONNECTION_PROVIDER

Method Summary

Modifier and TypeMethod and Description
public Connection

Returns:

The database metadata.
getAnyConnection
()

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).

public Connection

Returns:

The obtained JDBC connection
getConnection
(T
The identifier of the tenant for which to get a connection
tenantIdentifier
)

Obtains a connection for use according to the underlying strategy of this provider.

public void
releaseAnyConnection(Connection
The JDBC connection to release
connection
)

Release a connection obtained from getAnyConnection

public void
releaseConnection(T
The identifier of the tenant.
tenantIdentifier
,
Connection
The JDBC connection to release
connection
)

Release a connection from Hibernate use.

public boolean

Returns:

true if aggressive releasing is supported; false otherwise.
supportsAggressiveRelease
()

Does this connection provider support aggressive release of JDBC connections and later re-acquisition of those connections if needed?

Inherited from org.hibernate.service.spi.Wrapped:
isUnwrappableAsunwrap

Method Detail

getAnyConnectionback to summary
public Connection getAnyConnection() throws SQLException

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).

Returns:Connection

The database metadata.

Exceptions
SQLException:
Indicates a problem opening a connection
getConnectionback to summary
public Connection getConnection(T tenantIdentifier) throws SQLException

Obtains a connection for use according to the underlying strategy of this provider.

Parameters
tenantIdentifier:T

The identifier of the tenant for which to get a connection

Returns:Connection

The obtained JDBC connection

Exceptions
SQLException:
Indicates a problem opening a connection
HibernateException:
Indicates a problem otherwise obtaining a connection.
releaseAnyConnectionback to summary
public void releaseAnyConnection(Connection connection) throws SQLException

Release a connection obtained from getAnyConnection

Parameters
connection:Connection

The JDBC connection to release

Exceptions
SQLException:
Indicates a problem closing the connection
releaseConnectionback to summary
public void releaseConnection(T tenantIdentifier, Connection connection) throws SQLException

Release a connection from Hibernate use.

Parameters
tenantIdentifier:T

The identifier of the tenant.

connection:Connection

The JDBC connection to release

Exceptions
SQLException:
Indicates a problem closing the connection
HibernateException:
Indicates a problem otherwise releasing a connection.
supportsAggressiveReleaseback to summary
public boolean supportsAggressiveRelease()

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 org.hibernate.ConnectionReleaseMode#AFTER_STATEMENT to aggressively release JDBC connections. However, the configured ConnectionProvider 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.

Returns:boolean

true if aggressive releasing is supported; false otherwise.