Mesma conexão no POOL

Olá… Depois de ficar batendo no connection is closed em minha aplicação descobri que o problema é que ele não desconecta de certa forma
errado e sim a conexão que mesmo para sessões diferentes pega sempre a mesma conexão…
Ai o primeiro que desconecta da erro… Gostaria de saber se alguem sabe como resolver isso…
tipo preciso que cada sessão pegue uma conexão diferente do pool…
pois depois que utiliza a conexão a aplicação esta devolvendo normalmente para o pool… Segue erro abaixo:

nesse esquema fiz para saber qual conexão foi pega no momento…

SESSÃO 1

PEGA A CONEXÃO org.apache.commons.dbcp.PoolableConnection@5eb489

SELECT    SELECT    TESTE.CPAGARCENTRAL.flag_data_balanco,TESTE.CPAGARCENTRAL.data_vencimento,
TESTE.CPAGARCENTRAL.valor,TESTE.CPAGARCENTRAL.historico,TESTE.CPAGARCENTRAL.id_parametriza_usu,
TESTE.CPAGARCENTRAL.id_pessoa_usu,TESTE.CATEGORIA_CONTA_PAGAR.categoria_conta_pagar,
TESTE.SUB_CATEGORIACPAGAR.sub_categoria WHERE TESTE.CPAGARCENTRAL.id_categoria_conta_pagar=TESTE.CATEGORIA_CONTA_PAGAR.id_categoria_conta_pagar  AND TESTE.CPAGARCENTRAL.id_cpagarcentral=45 AND TESTE.CPAGARCENTRAL.id_sub_categoriacpagar=TESTE.SUB_CATEGORIACPAGAR.id_sub_categoriacpagar  AND TESTE.CPAGARCENTRAL.id_parametriza_usu=2 AND TESTE.CPAGARCENTRAL.flag_sempre_balanco= 'NAO'
SELECT    TESTE.CPAGARCENTRAL.flag_data_balanco,TESTE.CPAGARCENTRAL.data_vencimento,TESTE.CPAGARCENTRAL.valor,
TESTE.CPAGARCENTRAL.historico,TESTE.CPAGARCENTRAL.id_parametriza_usu,TESTE.CPAGARCENTRAL.id_pessoa_usu,
TESTE.CATEGORIA_CONTA_PAGAR.categoria_conta_pagar,TESTE.SUB_CATEGORIACPAGAR.sub_categoria WHERE TESTE.CPAGARCENTRAL.id_categoria_conta_pagar=TESTE.CATEGORIA_CONTA_PAGAR.id_categoria_conta_pagar  AND TESTE.CPAGARCENTRAL.id_cpagarcentral=47 AND TESTE.CPAGARCENTRAL.id_sub_categoriacpagar=TESTE.SUB_CATEGORIACPAGAR.id_sub_categoriacpagar  AND TESTE.CPAGARCENTRAL.id_parametriza_usu=2 AND TESTE.CPAGARCENTRAL.flag_sempre_balanco= 'NAO'

SESSÃO 2

PEGA A CONEXÃO (SÓ QUE A MESMA QUE JA FOI PEGA NA SESSÃO 1)org.apache.commons.dbcp.PoolableConnection@5eb489

FEZ O SELECT E DESCONECTA

SELECT TESTE.DADOS_ORCAMENTO_ON_LINE.placa,TESTE.DADOS_ORCAMENTO_ON_LINE.data_entrega,
TESTE.DADOS_ORCAMENTO_ON_LINE.hora_entrega,TESTE.DADOS_ORCAMENTO_ON_LINE.km_inicial,
TESTE.DADOS_ORCAMENTO_ON_LINE.data_sistema,TESTE.DADOS_ORCAMENTO_ON_LINE.hora_sistema,
TESTE.DADOS_ORCAMENTO_ON_LINE.cliente,TESTE.DADOS_ORCAMENTO_ON_LINE.tel_fixo,TESTE.DADOS_ORCAMENTO_ON_LINE.tel_cel,
TESTE.MARCA_VEICULO.marca_veiculo,TESTE.DADOS_ORCAMENTO_ON_LINE.id_dados_orcamento_on_line,
TESTE.DADOS_ORCAMENTO_ON_LINE.id_portas,TESTE.DADOS_ORCAMENTO_ON_LINE.id_tipos_veiculos, TESTE.DADOS_ORCAMENTO_ON_LINE.data_agendada, TESTE.DADOS_ORCAMENTO_ON_LINE.confirma_faturamento, TESTE.DADOS_ORCAMENTO_ON_LINE.hora_agendada, TESTE.VEICULOS.veiculo,TESTE.TIPOS_VEICULOS.descricao, TESTE.ANO.ano, TESTE.COR.cor, TESTE.CLASSIFICACAO.classificacao, TESTE.RESPOSTA_ENQUETE.RESPOSTA_ENQUETE, TESTE.PARAMETRIZA.codigo_loja, TESTE.PORTAS.portas  FROM TESTE.DADOS_ORCAMENTO_ON_LINE,TESTE.COR,TESTE.VEICULOS,TESTE.ANO,TESTE.RESPOSTA_ENQUETE,
TESTE.CLASSIFICACAO,TESTE.TIPOS_VEICULOS,TESTE.PORTAS WHERE TESTE.DADOS_ORCAMENTO_ON_LINE.PLACA ='AKL0853' AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_parametriza_usu = TESTE.PARAMETRIZA.id_parametriza AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_cor = TESTE.COR.id_cor AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_portas = TESTE.PORTAS.id_portas AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_ano = TESTE.ANO.id_ano AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_marca_veiculo = TESTE.MARCA_VEICULO.id_marca_veiculo AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_tipos_veiculos = TESTE.TIPOS_VEICULOS.id_tipos_veiculos AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_classificacao = TESTE.CLASSIFICACAO.id_classificacao AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_resposta_enquete = TESTE.RESPOSTA_ENQUETE.id_resposta_enquete AND TESTE.DADOS_ORCAMENTO_ON_LINE.id_veiculos = TESTE.VEICULOS.id_veiculos

DESCONECTA

org.apache.commons.dbcp.PoolableConnection@5eb489

AI DA O ERRO :

java.sql.SQLException: Connection is closed.
	at org.apache.commons.dbcp.DelegatingConnection.checkOpen(DelegatingConnection.java:245)
	at org.apache.commons.dbcp.DelegatingConnection.createStatement(DelegatingConnection.java:170)
	at util.DAO.inserirRegistro(DAO.java:445)

Desde ja agradeço…

Fabio Mauricio
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - AnjoSupremo[/color][/size] :joia:

Opa,

Bem teu problema se resolve com:

DataSource ds = // obtenha aqui teu dataSource return ds.getConnection() ;

Isto retornará uma conexão do pool de conexões, ou seja, quando você fechar esta conexão volta a estar disponível para ser utilizada novamente.

:okok:

Olá … Obrigado pela resposta… Mais ja estou utilizando assim…

[code] public String conectar()throws NamingException
{
String retVal = "";
try
{
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/teste");

			  if (ds != null) {
				fconn = ds.getConnection(); 
			  }

		}
		catch(NamingException e)
		{
			retVal = e.toString();
		}
		catch(SQLException e)
		{
			retVal = e.toString();
		}
		return retVal;
	}[/code]

O que pode estar errado??? Valeu

Fabio Mauricio

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - marcossousa[/color][/size] :joia:

Opa,

Bem acho que tua classe pode estar implementando o padrão Singleton, pelo código que você passou, neste caso sugiro então que não feche as conexões, feche apenas os preparedStatements, e resultsets. Mas cuidado, isto pode complicar bastante e dar uns famosos timeouts quando aumenta o número de usuários no sistema se não tiver um controle muito bem organizado disso aí.

O que você acha desta idéia:

[code]public String conectar() throws NamingException
{
Connection conn = null;
try
{
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/teste");

          if (ds != null) { 
           conn = ds.getConnection(); 
          } 

     } 
     catch(NamingException e) 
     { 
        e.printTrackTrace(); 
     } 
     catch(SQLException e) 
     { 
        e.printTrackTrace(); 
     } 
     return conn; 
  }[/code]

Neste caso você terá que fechar a conexão ao final de cada operação.

:okok:

Olá Marcos…

Eu ja tentei fazer esse primeiro esquema que vc falou… mais ai o erro que dá e “limite de conexões excedidos para não usuarios”… Quanto ao 2 metodo eu tenho que ver porque eu utilizo tudo dentro de um DAO (inserção/alteração/consulta e exclusão) e meu connection “fconn” esta declarado pra toda a classe… Eu vi nas minhas pesquisas que eu teria que fazer um controle sobre as conexões pra que cada sessão pega-se a sua … Isso procede???

Obrigado…

Fabio Mauricio