For my part, I'm testing multiTenacy DATABASE.
I have 2 datasources (1 DB each / commons-dbcp), 2 org.hibernate.service.jdbc.connections.internal.Da tasourceConnection ProviderImpl pointing to each datasource.
I have a custom MultiTenantConnectionProvider
Code:
import org.hibernate.service.jdbc.connections.spi.AbstractMultiTenantConnectionProvider;
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
public class MultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider {
@Override
public ConnectionProvider getAnyConnectionProvider() {
return MultiTenantConnectionHolder.getAnyConnectionProvider();
//return MultiTenantConnectionHolder.getConnectionProvider("aidoomobile");
}
@Override
public ConnectionProvider selectConnectionProvider(String tenantIdentifier) {
return MultiTenantConnectionHolder.getConnectionProvider(tenantIdentifier);
}
}
And hibernate properties
Code:
hibernate.multiTenancy=DATABASE
hibernate.tenant_identifier_resolver=com.my.custom.MultiTenantIdentifierResolver
hibernate.multi_tenant_connection_provider=com.my.custom.MultiTenantConnectionProvider
which currently doesn't work at startup :'( because the org.springframework.orm.hibernate4.LocalSessionFac toryBean afterPropertiesSet seems to try something with the ConnectionProvider which fails...
Code:
Caused by: org.hibernate.HibernateException: Provider is closed!
at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)
at org.hibernate.service.jdbc.connections.spi.AbstractMultiTenantConnectionProvider.getAnyConnection(AbstractMultiTenantConnectionProvider.java:40)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$MultiTenantConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:260)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117)
This is a little bit strange, but I let you know if I find something working.