Estou com um problema.
Toda vez que o servidor de dados é desligado (por um pique de luz, por exemplo) é necessário restartar o tomcat.
Pois a aplicação não consegue conectar o BD quando ele é restabelecido.
Existe alguma forma de restartar o tomcat automaticamente quando o servidor de BD é religado?
Em algum ponto do sistema ou de alguma framework, voce deve estar fazendo cache da conexão.
Tudo bem ao fazer cache, mas este cache deveria verificar se a conexao ainda está valida.
Se não estiver, o cache deveria ser limpado e novamente recarregado.
Não é um problema do tomcat, mas sim da app.
[quote=CarvalR2]Em algum ponto do sistema ou de alguma framework, voce deve estar fazendo cache da conexão.
Tudo bem ao fazer cache, mas este cache deveria verificar se a conexao ainda está valida.
Se não estiver, o cache deveria ser limpado e novamente recarregado.
Não é um problema do tomcat, mas sim da app.[/quote]
Olá CarvalR2 ,
Estou utilizando hibernate, como posso verificar este problema na app?
Sou iniciante, não tenho muita experiência com o hibernate.
[quote=cnunes][quote=CarvalR2]Em algum ponto do sistema ou de alguma framework, voce deve estar fazendo cache da conexão.
Tudo bem ao fazer cache, mas este cache deveria verificar se a conexao ainda está valida.
Se não estiver, o cache deveria ser limpado e novamente recarregado.
Não é um problema do tomcat, mas sim da app.[/quote]
Olá CarvalR2 ,
Estou utilizando hibernate, como posso verificar este problema na app?
Sou iniciante, não tenho muita experiência com o hibernate.
Fiquei meio perdida, pois não estou utilizando nenhum pool de conexões.
Pelo o que o CarvalR2 falou, tenho que verificar se a conexão é válida, e se não for devo reconectar.
Mas não tenho muita experiência, ainda não consegui me localizar em qual passo devo fazer esta verificação.
Segue abaixo minha classe HibernateSessionFactory, se alguém puder ajudar, agradeço.
Fiquei meio perdida, pois não estou utilizando nenhum pool de conexões.
Pelo o que o CarvalR2 falou, tenho que verificar se a conexão é válida, e se não for devo reconectar.
Mas não tenho muita experiência, ainda não consegui me localizar em qual passo devo fazer esta verificação.
Segue abaixo minha classe HibernateSessionFactory, se alguém puder ajudar, agradeço.
Realmente o BD pode ser re-startado a qualquer momento. Então em qualquer operação de banco de dados, você teria que antes validar a conexão.
Esta validação é simplesmente fazer um select no banco de dados. Exemplo: select 1
Não conheço outra forma.
Mas a cada select, update, insert, antes você teria que rodar este select de validação.
No caso de dar erro, você teria que refazer a session factory.
Mas ao invés de rodar este select 1, a sua propria operacao serve como teste de validação. Então você tem que capturar a exceção certa e caso ela aconteça, refazer a session factory… exemplo:
try {
s.insert(obj);
} catch (SQLException e ou HibernateException ) {
se codigo de erro dentro da exceção é igual a xxx, então refaz a session factory
}
Realmente o BD pode ser re-startado a qualquer momento. Então em qualquer operação de banco de dados, você teria que antes validar a conexão.
Esta validação é simplesmente fazer um select no banco de dados. Exemplo: select 1
Não conheço outra forma.
Mas a cada select, update, insert, antes você teria que rodar este select de validação.
No caso de dar erro, você teria que refazer a session factory.
Mas ao invés de rodar este select 1, a sua propria operacao serve como teste de validação. Então você tem que capturar a exceção certa e caso ela aconteça, refazer a session factory… exemplo:
try {
s.insert(obj);
} catch (SQLException e ou HibernateException ) {
se codigo de erro dentro da exceção é igual a xxx, então refaz a session factory
}[/quote]
Resolvido!!!
Capturei a exceção “org.hibernate.exception.JDBCConnectionException” e refiz a session factory.