Galera estou tentando desenvolver uma aplicacao web com vraptor + hibernate e agora estou tentando implementar uma solucao para o multi schema…
precisava de um exemplo de alguem que ja implementou desde ja agradeco…Vlw
Criar Multi-Tenancy por schema com hibernate 4
H
3 Respostas
M
precisava de um exemplo de alguem que ja implementou desde ja agradeco…Vlw
Também estou precisando desse exemplo. Nem a documentação do hibernate ajuda muito…
H
Pesquisei um pouco aki e consegui implementar uma gambiarra com hibernate 4 vou postar o codigo depois pra vcs me ajudarem a melhorar!!!
H
import org.hibernate.MultiTenancyStrategy;
import org.hibernate.SessionFactory;
import org.hibernate.cache.internal.NoCachingRegionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.service.jdbc.connections.spi.MultiTenantConnectionProvider;
import com.ServicoMultiTenant;
public class FabricaConexoes {
private ServiceRegistry serviceRegistry;
private SessionFactory sessionFactory;
private ServicoMultiTenant multiTenant;
public FabricaConexoes() {
Configuration cfg = new Configuration();
cfg.setProperty( Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA.toString() );
cfg.setProperty( Environment.CACHE_REGION_FACTORY, NoCachingRegionFactory.class.getName() );
cfg.configure();
// Até aki eu configuro o hibernate para usar multitenant
multiTenant = new ServicoMultiTenant(cfg);
//aki eu passo a configuracao para uma classe de servico que criara conexoes
//multitenant por Schema
serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties())
.addService(MultiTenantConnectionProvider.class, multiTenant).buildServiceRegistry();
//Metodo addService(); eu passo como parameto a interface multitenant e minha classe que
//implementa multitenant
this.sessionFactory = cfg.buildSessionFactory(serviceRegistry);
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.jdbc.connections.spi.MultiTenantConnectionProvider;
public class ServicoMultiTenant implements MultiTenantConnectionProvider {
Configuration cfg;
public ServicoMultiTenant(Configuration cfg) {
this.cfg = cfg;
}
@Override
public boolean isUnwrappableAs(Class arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public <T> T unwrap(Class<T> arg0) {
// TODO Auto-generated method stub
return null;
}
//metodo que configura uma conexao default para o hibernate
@Override
public Connection getAnyConnection() throws SQLException {
String url = cfg.getProperty("connection.url");
String usuario = cfg.getProperty("connection.username");
String senha = cfg.getProperty("connection.password");
return DriverManager.getConnection(url, usuario , senha);
}
//metodo que configura conexao para o schema especifico
@Override
public Connection getConnection(String tenant) throws SQLException {
String url = congfiguraUrl(cfg.getProperty("connection.url"),tenant);
String usuario = cfg.getProperty("connection.username");
String senha = cfg.getProperty("connection.password");
return DriverManager.getConnection(url, usuario , senha);
}
@Override
public void releaseAnyConnection(Connection arg0) throws SQLException {
}
@Override
public void releaseConnection(String arg0, Connection arg1)
throws SQLException {
// TODO Auto-generated method stub
}
@Override
public boolean supportsAggressiveRelease() {
// TODO Auto-generated method stub
return false;
}
private String congfiguraUrl (String url , String schema) {
StringBuilder novaUrl = new StringBuilder(url);
char[] x = novaUrl.toString().toCharArray();
int subS = 0;
for (int i = x.length - 1; i >= 0; i--) {
if(x[i] == '/') {
break;
}
subS = i;
}
for (int i = novaUrl.length()-1; i>= subS; i--) {
novaUrl.deleteCharAt(i);
}
return novaUrl.append(schema).toString();
}
}
Ta ai minha gambiarra para multitenant
Criado 6 de março de 2013
Ultima resposta 7 de mar. de 2013
Respostas 3
Participantes 2