| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2009 09:32:43
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Estou debugando uma aplicação que faz vários acessos ao banco de dados e num determinado momento recebo estes erros:
A aplicação continua rodando, mesmo depois do erro, só que mais lenta e com alguns bugs e depois de um tempo recebo este erro:
Vendo o código vi que em toda operação que é feita no banco ele o programa abre e fecha uma conexão com o mesmo. As conexões sao feitas através do tomcat ele que gerencia o pool.
O problema pode estar ai? Quando o programa abre e fecha as conexões quando faz uma operação no banco?
|
www.bau-de-dev.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2009 10:05:43
|
Pedrosa
JWizard
![[Avatar]](/images/avatar/2b763288faedb7707c0748abe015ab6c.jpg)
Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline
|
Veja se a aplicação esta usando algum Data Source mesmo, se sua conexão estiver sendo feita na mão pode estar abrindo o bico mesmo, poste a forma que vc esta usando sua conexão.
This message was edited 1 time. Last update was at 05/01/2009 10:06:21
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2009 10:13:20
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Sim a conexão é feita através de um datasource.
E a conexão é obtida através de uma classe factory. Dentro da classe factory tem um atributo estático que é instanciado uma única vez e ai só ficar retornando as conexões, abaixo segue a parte do código que faz estas tarefa:
E na DAO a chamada para executar uma determinada tarefa no banco é feita assim:
Sendo que são chamados vários métodos parecidos com este código acima e a aplicação ainda é multi-thread, pq ela precisa ser rápida para atualizar os dados e retornar os mesmo.
Teria alguma forma de resolver este erro?
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2009 10:46:44
|
Pedrosa
JWizard
![[Avatar]](/images/avatar/2b763288faedb7707c0748abe015ab6c.jpg)
Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline
|
Crie um método closeConnection mais ou menos assim:
E nos seus DAOS chame em um bloco finaly forçando fechar a conexão
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2009 11:06:49
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Blz, eu fiz o método mas não entendi como isso iria resolver o meu problema.....
Poderia dar uma explicação, por favor?
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2009 11:12:52
|
Pedrosa
JWizard
![[Avatar]](/images/avatar/2b763288faedb7707c0748abe015ab6c.jpg)
Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline
|
Esse finaly força a fechar as conexoes que podem estar penduradas na sua aplicação, além disso é possível aumentar o numero de conexoes permitidas no poll, veja se esta definido alguma coisa em maxactive:
http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2009 11:26:20
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Quando é feita a chamada na "mão", sem usar o método, como eu estava fazendo antes não funciona?
E context.xml está configurado desta maneira, coloquei estes valores altos, para teste e para tentar acabar com os erros:
E outra coisa eu tenho métodos que retornam alguns dados do banco, e por causa disso eu uso o bloco try/cath fora do método, qual seria a melhor opçção deixar o bloco dentro do métdo ou chamar um throws no método?
This message was edited 1 time. Last update was at 05/01/2009 12:06:31
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2009 12:17:44
|
Pedrosa
JWizard
![[Avatar]](/images/avatar/2b763288faedb7707c0748abe015ab6c.jpg)
Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline
|
Prefiro deixar dentro do proprio metodo nesse caso especifico.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/01/2009 09:39:32
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Comecei a fazer os testes com o código atualizado e agora só recebo este erro:
FATAL: sorry, too many clients already
This message was edited 2 times. Last update was at 08/01/2009 09:45:18
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/01/2009 14:47:32
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Consegui resolver este erro:
O erro era q o banco estava configurado para ter só 100 conexões, ai aumentei o mesmo para 500 conexões, sendo que apareceu outro erro, q este:
E eu já coloquei o código para forçar a matar a conexão alguém sabe alguam solução ou já passou por isso?
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/01/2009 17:47:24
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Descobri o porque do erro
A aplicação possui várias threads e estas threads se conectam no banco e executam querys, com isso mata o pool de conexões, gostaria de saber se tem como contornar este erro configurando sõ o context.xml ou se existe alguma outra maneira de deixar a conexão em cache?
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/07/2010 08:57:53
|
port8500dwl
Entusiasta Java
Membro desde: 30/08/2007 23:19:04
Mensagens: 22
Offline
|
Tenta setar estas configurações, dependendo da aplicação será necessário ajustar alguns parametros.
Mais no meu caso o que nada resolvia, os parametros abaixo atenderam.
<Resource name="nomeDaDataSource" auth="Container"
type="javax.sql.DataSource"
minActive="1"
removeAbandoned="false"
removeAbandonedTimeout="300"
logAbandoned="false"
validationQuery="select 1 from dual"
initialSize="8"
maxActive="100"
maxIdle="30"
maxWait="10000"
testOnBorrow="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="10000"
minEvictableIdleTimeMillis="60000"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
username="usuario" password="senha" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@xx.xxx.xx.xxx:1521:dataBase" />
Jedi_FeniX wrote:Estou debugando uma aplicação que faz vários acessos ao banco de dados e num determinado momento recebo estes erros:
A aplicação continua rodando, mesmo depois do erro, só que mais lenta e com alguns bugs e depois de um tempo recebo este erro:
Vendo o código vi que em toda operação que é feita no banco ele o programa abre e fecha uma conexão com o mesmo. As conexões sao feitas através do tomcat ele que gerencia o pool.
O problema pode estar ai? Quando o programa abre e fecha as conexões quando faz uma operação no banco?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/11/2010 09:51:51
|
hbarden
Smalltalk
![[Avatar]](/images/avatar/795a93859445fdab608cbe258ba468a0.jpg)
Membro desde: 19/11/2010 09:23:00
Mensagens: 3
Offline
|
Olá,
Estou com o mesmo problema...
"Cannot get a connection, pool error Timeout waiting for idle object "
Funcionou com estas configurações?
|
|
|
 |
|
|