Criar Multi-Tenancy por schema com hibernate 4

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

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…

Pesquisei um pouco aki e consegui implementar uma gambiarra com hibernate 4 vou postar o codigo depois pra vcs me ajudarem a melhorar!!!

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;
	}

	
	
	

}

[code]

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();
}

}[/code]

Ta ai minha gambiarra para multitenant