org.hibernate.service.jdbc.connections.spi
Class AbstractMultiTenantConnectionProvider

java.lang.Object
  extended by org.hibernate.service.jdbc.connections.spi.AbstractMultiTenantConnectionProvider
All Implemented Interfaces:
Serializable, MultiTenantConnectionProvider, Service, Wrapped

public abstract class AbstractMultiTenantConnectionProvider
extends Object
implements MultiTenantConnectionProvider

Basic support for MultiTenantConnectionProvider implementations using individual ConnectionProvider instances per tenant behind the scenes.

See Also:
Serialized Form

Constructor Summary
AbstractMultiTenantConnectionProvider()
           
 
Method Summary
 Connection 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).
protected abstract  ConnectionProvider getAnyConnectionProvider()
           
 Connection getConnection(String tenantIdentifier)
          Obtains a connection for Hibernate 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 from MultiTenantConnectionProvider.getAnyConnection()
 void releaseConnection(String tenantIdentifier, Connection connection)
          Release a connection from Hibernate use.
protected abstract  ConnectionProvider selectConnectionProvider(String tenantIdentifier)
           
 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 AvailableSettings.RELEASE_CONNECTIONS to aggressively release JDBC connections.

<T> T
unwrap(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
 

Constructor Detail

AbstractMultiTenantConnectionProvider

public AbstractMultiTenantConnectionProvider()
Method Detail

getAnyConnectionProvider

protected abstract ConnectionProvider getAnyConnectionProvider()

selectConnectionProvider

protected abstract ConnectionProvider selectConnectionProvider(String tenantIdentifier)

getAnyConnection

public Connection getAnyConnection()
                            throws SQLException
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 interface MultiTenantConnectionProvider
Returns:
The database metadata.
Throws:
SQLException - Indicates a problem opening a connection

releaseAnyConnection

public void releaseAnyConnection(Connection connection)
                          throws SQLException
Description copied from interface: MultiTenantConnectionProvider
Release a connection obtained from MultiTenantConnectionProvider.getAnyConnection()

Specified by:
releaseAnyConnection in interface MultiTenantConnectionProvider
Parameters:
connection - The JDBC connection to release
Throws:
SQLException - Indicates a problem closing the connection

getConnection

public Connection getConnection(String tenantIdentifier)
                         throws SQLException
Description copied from interface: MultiTenantConnectionProvider
Obtains a connection for Hibernate use according to the underlying strategy of this provider.

Specified by:
getConnection in interface MultiTenantConnectionProvider
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(String tenantIdentifier,
                              Connection connection)
                       throws SQLException
Description copied from interface: MultiTenantConnectionProvider
Release a connection from Hibernate use.

Specified by:
releaseConnection in interface MultiTenantConnectionProvider
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 re-acquisition of those connections (if need be) later?

This is used in conjunction with AvailableSettings.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.

Specified by:
supportsAggressiveRelease in interface MultiTenantConnectionProvider
Returns:
true if aggressive releasing is supported; false otherwise.

isUnwrappableAs

public boolean isUnwrappableAs(Class unwrapType)
Description copied from interface: Wrapped
Can this wrapped service be unwrapped as the indicated type?

Specified by:
isUnwrappableAs in interface Wrapped
Parameters:
unwrapType - The type to check.
Returns:
True/false.

unwrap

public <T> T unwrap(Class<T> unwrapType)
Description copied from interface: Wrapped
Unproxy the service proxy

Specified by:
unwrap in interface Wrapped
Parameters:
unwrapType - The java type as which to unwrap this instance.
Returns:
The unwrapped reference


Copyright © 2001-2012 Red Hat, Inc. All Rights Reserved.