Hibernate e Oracle: exceeded maximum connect time!

4 respostas
Z

Oi pessoal tudo bem?
Estou com um problema usando Hibernate com Oracle o erro é “exceeded maximum connect time, you are being logged off”, o usuario que eu estou usando aqui pra logar no banco tem um tempo maximo de 15 minutos depois disso a sessão é derrubada processando uma consulta ou não. Eu queria fazer algo pra solucionar isso tipo ao terminar uma sessão ele crie outra ou toda vez que o hibernate for executar um select ele conecte com uma nova sessão ao terminar ele derrube essa sessão.
Já fiz diversas coisas mas não consigo, uma vez que o hibernate logo no oracle eu não consigo encerrar a atual sesão e criar outra, detalhe os select são executados em Thread separadas.

Usei essa propriedade abaixo para que cada select terminado ele libera a sessão mas sem sucesso também.

after_statement

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?> false oracle.jdbc.driver.OracleDriver user ***** jdbc:oracle:thin:@localhost:1064:banco org.hibernate.dialect.Oracle10gDialect true true after_statement

Por favor alguém me de uma luz pra esse problema.

4 Respostas

G

O problema de derrubar com 15 minutos é que o pool de conexões abre um X de conexões e deixa-as abertas “por todo o sempre”. Ou seja, em um pool você não fica conectando o desconectado. O pool fica conectado o tempo todo, e cada vez que a app solicita uma conexão, ele retorna uma dessas conexões que já estão abertas.

Você realmente precisa derrubar o usuário apos esses minutos? Caso sim você precisa então configurar o pool para testar cada conexão antes de entregar a conexão. Lembrnado que isso há um maior custo de perfornance.

Z

garcia-jj:
O problema de derrubar com 15 minutos é que o pool de conexões abre um X de conexões e deixa-as abertas “por todo o sempre”. Ou seja, em um pool você não fica conectando o desconectado. O pool fica conectado o tempo todo, e cada vez que a app solicita uma conexão, ele retorna uma dessas conexões que já estão abertas.

Você realmente precisa derrubar o usuário apos esses minutos? Caso sim você precisa então configurar o pool para testar cada conexão antes de entregar a conexão. Lembrnado que isso há um maior custo de perfornance.

Não tem problema a performance ficar ruim ou lento, como eu faço isso?

G

Isso depende do seu ambiente. Você deve procurar a documentação da implementação de pooling que você usa. Se você está usando um servidor de aplicação, certamente na interface admin dele há essa opção.

Z

Entendi esqueci de comentar eu não estou usando um pool, o hibernate não conecta via JNDI, os parametros para logar no banco está no arquivo:

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?> false oracle.jdbc.driver.OracleDriver user ***** jdbc:oracle:thin:@localhost:1064:banco org.hibernate.dialect.Oracle10gDialect true true after_statement

E agora?

Criado 7 de outubro de 2009
Ultima resposta 7 de out. de 2009
Respostas 4
Participantes 2