Caros colegas do SouJava,
Primeiramente quero elogiar o excelente nivel das perguntas e
respostas.
E nitido o interesse em responder de forma correta e transparente todas
as questoes colocadas. Parabens a todos que colaboram.
Agora, tenho uma questao e ficarei grato se alguem puder me
ajudar a resolver este pepino.
O problema e um pouco dificil de esplicar mas me esforcarei em ser
claro.
Trata-se de um erro que o oracle retorna a partir de um certo tempo de
navegacao
pela minha aplicacao. ( Erro de ORA-01000 - Numero maximo de cursores
ultrapassado.)
E uma aplicacao em 3 camadas que acessa o banco de dados oracle.
Applets
clientes instanciam um objeto remoto via RMI e este objeto central faz
as devidas consultas
insercoes e updates no banco de dados, dependendo do metodo chamado e
responde
para os clientes retornado vetores dinamicos com os dados solicitados
no caso de
consultas ou com lista mensagens no caso dos metodos de persistencia.
Este objeto central faz uma unica coneccao com o banco e atraves da
mesma responte
a todas a solicitacoes dos clientes. Todos os metodos de update deste
objeto central sao sincronizados e portanto nao podem ser disparados em
paralelo. Os metodos de consulta
nao sao sincronizados.
Cada metodo do objeto remoto instancia seus proprios objetos Statement
e ResultSet
para fazer as consultas e manutencoes devidas no banco e eles sao
imediatamente fechados
no final de cada metodo atraves do metodo close().
Inicialmente atribui o problema do estouro do numero maximo de cursores
a problemas
do Oracle ou do driver JDBC-ODBC. Sustitui o driver ODBC por JDBC/Thin
da Oracle
e o problema continuou.
Escrevi entao uma mini aplicacao que pudesse reproduzir o problema para
enviar a
Oracle para analise. E um loop que executa sucessivamente uma serie de
quaries
no banco, usando o mesmo esquema de uma unica coneccao, criacao e
fechamento
dos objetos Statements e ResultsSets a cada iteracao do loop.
Estranhamente
esta mini app rodou a noite inteira sem acusar qualquer problema.
A unica diferenca em relacao ao sistema real e que no sistema as
chamadas
aos metodos nao e feita atraves de loop local e sim atraves de chamadas
a
metodos do objeto remoto via RMI.
Em sintese a questao e:
Na mini app que que exige uma carga muito superior da coneccao com o
banco
o problema nao ocorreu e na aplicacao ele ocorre sempre. Porque?
Desculpem-me a extensao do texto, atenciosamente,
Helio Rugani Brandao
Arquitetura de Sistemas e Tratamento da Informacao -
Telemar-MG - Tel.: 229-3243
mailto:[EMAIL PROTECTED]
--------------------------- LISTA SOUJAVA ---------------------------
http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
[para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
---------------------------------------------------------------------