Versão atual:

multitenancy varios bancos + vraptor

Boa noite..

Preciso implementar um aplicativo web, utilizando vraptor, que deve acessar bancos distintos dependendo da empresa selecionada: Andei lendo sobre esta nova opção no H4, alguem teria um tutorial ou exemplo, mostrando como implementar isto já que não tive muito sucesso

Agradeço.

Resolução: Consegui resolver utilizando um criadordeSessione, e uma Classe TenantSessionFactory, cria controla as esession factories.. segue o codigo das 3 classes:

@RequestScoped  
@Component  
public class CriadorDeSession implements ComponentFactory<Session> {  

        private Session session;  
        private TenantSessionFactories tenantSessionFactories;
        private Tenant tenant;  

        public CriadorDeSession(TenantSessionFactories tenantSessionFactories, Tenant tenant) {  
            this.tenantSessionFactories = tenantSessionFactories;
            this.tenant = tenant;  
        }  

        @PostConstruct  
        public void abre() {  
            this.session = this.tenantSessionFactories.abre(this.tenant);  
        }  

        public Session getInstance() {  
            return this.session;  
        }  

        @PreDestroy  
        public void fecha() {  
            this.session.close();  
        }  
}
@Component  
public class Tenant {  

    private UsersLoggedIn usersLoggedIn;  

    public Tenant(UsersLoggedIn usersLoggedIn) {
        this.usersLoggedIn = usersLoggedIn;
    }
    public String getTenantName() {  
        if ((this.usersLoggedIn.getUser() == null) ||
           (this.usersLoggedIn.getEmpresa() == null)) {  
            return new String("empresapadrao");  
        } else {  
            return this.usersLoggedIn.getEmpresa();  
        }  
    }  
}

@ApplicationScoped  
@Component  
public class TenantSessionFactories {  

    private Map<String, SessionFactory> conexoes = new HashMap<String, SessionFactory>();  

    public TenantSessionFactories() {  
    }  

    public Session abre(Tenant tenant) {  
        SessionFactory conexao = this.conexoes.get(tenant.getTenantName());   
        if (conexao == null) {  
            Configuration configuration = new Configuration();  

            configuration.configure("hibernate.cfg.xml");  
            configuration.setProperty("hibernate.connection.url", "jdbc:postgresql://localhost:5432/"+tenant.getTenantName());

            conexao = configuration.buildSessionFactory();  
            this.conexoes.put(tenant.getTenantName(), conexao);  
        }  

        return conexao.openSession();  
    }  
}

Versões(2):

Ver a versão formatada

multitenancy varios bancos + vraptor

Comentário

new question