Falha na autenticação - Queda do servidor de banco
7 respostas
T
torkuat
Olá,
Gostaria de saber se alguém já passou pelo mesmo problema. A autenticação no banco de dados na minha aplicação é feita logo no início da execução. O usuário loga e a conexão com o banco é estabelecida. O problema é que, depois de um tempo, se o banco cair e voltar durante a execução do meu programa, ocorre um problema de autenticação no hibernate. Gostaria de saber se há alguma configuração ou solução para este problema (queda e volta do banco).
caso a conexao caia, seria bom que vc deslogasse o usuario e o levasse para a tela de login (inicial) da aplicação
aeciovc
qual o erro?
é mysql?
T
torkuat
É Microsoft Sql Server.
A mensagem exata do erro eu não tenho agora, posso postar amanhã. Mas a mensagem do hibernate é relacionada à autenticação para se conectar ao banco.
Valeu! Amanhã posto a frase exata.
AGAraujo
Boa tarde…
pela descrição do cenário o problema pode estar na sua forma de iniciar a conexão e construção de uma tolerancia a falha.
Veja se entendi o que você está fazendo:
inicia sua aplicação
conecta-se ao banco de dados
sua aplicacao continua aberta
reconectar banco de dados
erro lançado
Enquanto isto o banco de dados cai e retoma.
Se for isto, sua aplicação deve estar com uma conexão aberta e você deve estar tentando abrir uma noxa conexão, sendo que por esta ser singleton e não ter percebido a queda do SGBD, tentará estabelecer a mesma conexão, causando a falha (já ocorreu isto com um integrante da minha equipe).
Isto ocorre pq o SGBD não avisa nada de queba a Aplicação, é necessário você verificar (inclusive, se o período de tempo seja bem curto, fazendo reestabelecer a conexão antes de operar novamente).
Se entendi errado envia o erro e explica melhor para poder ajudá-lo.
T
torkuat
É exatamente esse o cenário…
Não existe alguma opção de configuração do hibernate para ele se reconectar automaticamente?
E no seu caso, como foi feita a verificação da queda do banco?
Grato.
AGAraujo
Nos livros que eu li não vi nada sobre reconexão automatica. O que você pode fazer é utilizar um controle por timeout quando o problema no servidor não é critico. Não lembro agora quais as variaveis de conf. do hibernate para isto mas existe.
No nosso caso, utilizavamos um proxy que sempre ao buscar uma sessão verificava se existia conexão e caso não houvesse reconectavamos por exceção.
Talvez não pareça uma solução muito elegante e até acredito que exista outras maneiras pois o Glassfish, Spring e Hibernate são muito poderosos. Mas é dificil encontrar uma boa literatura e as vezes quando encontramos ja estamos em apuros e fica mais dificil ler. É um erro, eu sei, mas é a realidade também.
Vou ver se dou uma lida melhor e se você não encontrar nada eu posto aqui a solução mais elegante.
E
edstito
Olá Pessoal,
Estou com o mesmo problema descrito. Alguém conseguiu resolver? Já fiz várias tentativas e até agora nada! Vi muita gente dizendo que com o C3P0 resolvia, mas configurei aqui e nada.