Objetos inválidos em Connection Pools...  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
nicholas.bittencourt
JavaTeenager
[Avatar]

Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline

Existe um problema que vejo já ha alguns anos no uso de connection pools mas nunca me atrapalho. Agora, com um sistema grande entrando em produção isso se tornou completamente impeditivo em relação ao uso do sistema e liberação de novas versões.
Tenho uma aplicação que faz uso de uma stored procedure no Oracle. A procedure está contida numa package e a chamada é feita sem complexidade e não retorna valor algum para a app. Acontece que sempre que eu coloco uma nova versão da package em produção a mesma se torna inválida para o pool, mesmo estando correta no SGBD. Como trabalho com um pool de conexões, hoje tenho a package inválida já há 4 dias sem o Application Server renovar as conexões do pool. E o pior, não existe uma forma de realizar isso manualmente exceto reiniciando o AppServer.
Alguém já viu esse problema ocorrer? Sabe como resolver de forma "programática"?

O trace segue abaixo:


--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br

We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer
[WWW] [MSN]
victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

nicholas.bittencourt wrote:Existe um problema que vejo já ha alguns anos no uso de connection pools mas nunca me atrapalho. Agora, com um sistema grande entrando em produção isso se tornou completamente impeditivo em relação ao uso do sistema e liberação de novas versões.
Tenho uma aplicação que faz uso de uma stored procedure no Oracle. A procedure está contida numa package e a chamada é feita sem complexidade e não retorna valor algum para a app. Acontece que sempre que eu coloco uma nova versão da package em produção a mesma se torna inválida para o pool, mesmo estando correta no SGBD. Como trabalho com um pool de conexões, hoje tenho a package inválida já há 4 dias sem o Application Server renovar as conexões do pool. E o pior, não existe uma forma de realizar isso manualmente exceto reiniciando o AppServer.
Alguém já viu esse problema ocorrer? Sabe como resolver de forma "programática"?

O trace segue abaixo:



Já peguei um caso assim. O que fizemos foi fazer um método para testar a conexão que fazia "select sysdate from dual".
Daí quando o pool vai fornecer uma conexão, ele chama este método. Se der SQLException, a conexão é ruim e é descartada. Então o pool pega outra conexão e faz o teste novamente e assim sucessivamente até ele conseguir ou desistir (depois de 20 tentativas sem sucesso seguidas ele desiste).

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
nicholas.bittencourt
JavaTeenager
[Avatar]

Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline

Victor,

O problema nem é tanto a conexão estar inválida pois o pool faz essa verificação antes de "entregar" a mesma ao sistema. Um select from dual funciona perfeitamente! Acontece que somente o objeto PCK* é visto como inválido pela conexão pois o mesmo foi recompilado com a conexão aberta. O que eu gostaria de fazer é dizer ao pool que essa sessão deve ser descartada e criada uma nova.

--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br

We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer
[WWW] [MSN]
victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

Bem, isso é doloroso e muito feio, mas seria o caso de em todos os lugares onde você tem um catch SQLException, verificar se o código é 4063, 6508 ou 6512 e se for lançar um PacoteInvalidoException.

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
nicholas.bittencourt
JavaTeenager
[Avatar]

Membro desde: 17/01/2007 00:17:42
Mensagens: 161
Localização: Niterói, RJ, Brasil
Offline

Mas nao fui eu quem implementou o Connection Pool... Ele veio com o Application Server!!

--
Nicholas Dacal A. Bittencourt
http://goronah.blog.br

We also realized that solving everyone?s problems was too big of a challenge for the first release. It would be better to build a product that a lot of people love, than one that everyone tolerates (...) - Paul Buchheit, Gmail Engineer
[WWW] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team