Hibernate: acessar 3 bancos difirentes, escolhido na tela de login pelo usuário

2 respostas
donny

Boa tarde pessoal,

Tenho uma aplicação web com uma tela de login que, além do usuário e senha, o usuário também deverá informar que banco de dados quer acessar. Até agora não tive sucesso em implementar essa solução. Segue abaixo os meus arquivos de configurações:

Conexao.java

package br.com.empresa.config;

import br.com.empresa.web.util.ControleMB;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.stereotype.Component;

@Component("dataSource")
public class Conexao extends DriverManagerDataSource {
    static {
        try {
            System.getProperties().load(Conexao.class.getResourceAsStream("/config.properties"));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public Conexao() {
        this.setDriverClassName(System.getProperty("DriverClassName"));
        this.setUrl(System.getProperty(ControleMB.AMBIENTE + ".Url"));
        this.setUsername(System.getProperty(ControleMB.AMBIENTE + ".Username"));
        this.setPassword(System.getProperty(ControleMB.AMBIENTE + ".Password"));
    }
}

config.properties

DriverClassName=oracle.jdbc.driver.OracleDriver
prod.Url=jdbc:oracle:thin:@localhost:1521:banco1
prod.Username=
prod.Password=
prod.temp=
homolog.Url=jdbc:oracle:thin:@localhost:1521:banco2
homolog.Username=
homolog.Password=
homolog.temp=c:/
homologDMZ.Url=jdbc:oracle:thin:@localhost:1521:banco3
homologDMZ.Username=
homologDMZ.Password=
homologDMZ.temp=c:/

login.jsf

<h:form>
            <p:dialog header="Área restrita"
                      modal="true"
                      closable="false"
                      position="center"
                      widgetVar="modalLogin"
                      minWidth="300"
                      width="300"
                      showEffect="slide"
                      draggable="false"
                      resizable="false"
                      visible="true" >
                    <p:messages id="mensagens" showDetail="true" showSummary="false" />
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Login" />
                        <h:inputText value="#{controleMB.login}" required="true" requiredMessage="Informe o seu login." size="24"/>
                        <h:outputLabel value="Senha" />
                        <h:inputSecret value="#{controleMB.senha}" required="true" requiredMessage="Informe a sua senha." size="24"/>
                        <h:outputLabel value="Banco" />
                        <h:inputText value="#{controleMB.bancoDados}" required="true" requiredMessage="Informe a sua senha." size="24"/>

                    </h:panelGrid>   
                    <br></br> 
                    &lt;center&gt;              
                    &lt;h:commandButton value="Login" action="#{controleMB.logar}"/&gt;                   
					&lt;/center&gt;
            &lt;/p:dialog&gt;
        &lt;/h:form&gt;

ControleMB.java

package br.com.empresa.web.util;

import br.com.empresa.enumeration.Ambiente;
import br.com.empresa.modelo.Usuario;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

@Controller
@ManagedBean
@Scope("view")
public class ControleMB implements java.io.Serializable {

    private static final long serialVersionUID = -8527390698587628781L;
    private String login;
    private String senha;
    public static final String AMBIENTE = Ambiente.Homologacao.getDescricao();
    private SessionInfo sessionInfo;
    private String bancoDados;
    private StringBuilder erro = new StringBuilder();

    public ControleMB() {
    }

    public String logar() {
        String retorno = "";
        FacesContext contexto = FacesContext.getCurrentInstance();
        if (login != null && senha != null ) {
            if (validaUsuario(getLogin(), getSenha())) {
                HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
                sessao.setAttribute("login", login);
                sessao.setAttribute("senha", Util.SHA1(senha));
                retorno = "sucesso";
                Usuario usuario = new Usuario();
                usuario.setUsuario(login.toUpperCase());
                sessao.setAttribute("usuario", usuario);
                sessionInfo.setUsuarioLogado(usuario);
            } else {
                //Util.addMessageError("Usuário ou senha inválido!");
            	Util.addMessageError(this.erro.toString());
                retorno = "sair";
            }
        } else {
            Util.addMessageInfo("Preencher todos os campos!");
        }
        return retorno;
    }

    private boolean validaUsuario(String usuario, String senha) {
        Connection con = null;
        try {
            Class.forName(System.getProperty("DriverClassName"));
            con = DriverManager.getConnection(System.getProperty(ControleMB.AMBIENTE + ".Url"), usuario, senha);
            con.createStatement();
            con.close();
            return true;
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        } finally {
            try {
                if (con != null && !con.isClosed()) {
                    con.close();
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
                this.erro.append("Erro ao fechar conexão: " + ex.getMessage());
            }
        }
    }    
    
    public String sair() {
        FacesContext contexto = FacesContext.getCurrentInstance();
        HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
        sessao.invalidate();
        login = null;
        senha = null;
        return "sair";
    }

    public String obterSessao() {
        return "sessao";
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

	public String getBancoDados() {
		return bancoDados;
	}

	public void setBancoDados(String bancoDados) {
		this.bancoDados = bancoDados;
	}
    
    public StringBuilder getErro() {
		return erro;
	}

	public void setErro(StringBuilder erro) {
		this.erro = erro;
	}

	public SessionInfo getSessionInfo() {
        return sessionInfo;
    }

    @Autowired
    public void setSessionInfo(SessionInfo sessionInfo) {
        this.sessionInfo = sessionInfo;
    }
}

2 Respostas

diogoprosoft

O interessante seria vc manipular o arquivo config.properties mantendo somente ele e escrevendo ele via seleção do banco, entendeu?

donny

Sim, vou testar da forma que vc falou.

Criado 16 de maio de 2011
Ultima resposta 17 de mai. de 2011
Respostas 2
Participantes 2