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

public Interface MultiTenantConnectionProvider

extends Service, Wrapped
Known Direct Implementers
org.hibernate.engine.jdbc.connections.spi.AbstractDataSourceBasedMultiTenantConnectionProviderImpl, org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider
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.
Author
Steve Ebersole

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
(String
The identifier of the tenant for which to get a connection
tenantIdentifier
)

Obtains a connection for Hibernate 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(String
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 re-acquisition of those connections (if need be) later?

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(String tenantIdentifier) throws SQLException

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

Parameters
tenantIdentifier:String

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(String tenantIdentifier, Connection connection) throws SQLException

Release a connection from Hibernate use.

Parameters
tenantIdentifier:String

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 re-acquisition of those connections (if need be) later?

This is used in conjunction with org.hibernate.cfg.Environment#RELEASE_CONNECTIONS 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.