1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

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();  
    }  
}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags hibernate java vraptor ou faça a sua própria pergunta.