Tenho um método q preenche uma lista a partir do retorno de uma procedure.
O método e a procedure funciona. O problema é que tem horas que funciona e tem horas que o seguinte erro é mostrado: [color=red]I/O Error: Connection reset[/color]
beans.xml
[code]
[/code]
classe:
[code]private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
Bom: muito provavelmente o que está ocorrendo é o seguinte: sua aplicação está mantendo uma instância da conexão aberta tempo demais.
Então o servidor de banco de dados por detectar a inatividade da mesma, acaba pro fecha-la, mas sua aplicação ainda não sabe disto.
Quando envia o próximo comando para o banco de dados, este já resetou a conexão e o estado desta, o que gera este erro aí.
A solução para o seu problema é simples: ao invés de usar a conexão do tipo DriverManager, que mantém uma só, use um pool. Os pools normalmente fazem chamadas do tipo “ping” para o banco de dados de tal modo a manter a conexão aberta no servidor, o que minimiza bastante a ocorrência do erro que você está tendo. Aliás, use somente pools, este negócio de usar o DriverManagerDataSource só funciona bem mesmo em ambiente de testes automatizados (e testes que duram pouco e não reaproveitam a conexão)
[quote=kicolobo]Bom: muito provavelmente o que está ocorrendo é o seguinte: sua aplicação está mantendo uma instância da conexão aberta tempo demais.
Então o servidor de banco de dados por detectar a inatividade da mesma, acaba pro fecha-la, mas sua aplicação ainda não sabe disto.
Quando envia o próximo comando para o banco de dados, este já resetou a conexão e o estado desta, o que gera este erro aí.
A solução para o seu problema é simples: ao invés de usar a conexão do tipo DriverManager, que mantém uma só, use um pool. Os pools normalmente fazem chamadas do tipo “ping” para o banco de dados de tal modo a manter a conexão aberta no servidor, o que minimiza bastante a ocorrência do erro que você está tendo. Aliás, use somente pools, este negócio de usar o DriverManagerDataSource só funciona bem mesmo em ambiente de testes automatizados (e testes que duram pouco e não reaproveitam a conexão) :)[/quote]