[firebase-br] Reconexão

Gladiston Santana gladiston em vidy.com.br
Qui Fev 26 13:30:51 -03 2015


A capacidade de resiliência de uma conexão em servidores remotos é na maior
parte igual entre todos.
Mas você tem que estabelecer a diferença entre *perda* de conexão e conexão
*terminada*.
Perda de conexão é algo físico, ocorre abruptamente em qualquer lugar, se
não for recuperada e isso não depende do seu programa, mas do protocolo de
rede então o servidor queima essa conexão dando rollback em tudo que estava
pendente alí. Isso é igual a todos os servidores RDBMS.
Conexão terminada está associado a métodos de programação que finalizaram a
sessão por alguma razão que não envolve nenhum problema com o hardware.
O IBO sabe quando a conexão é terminada e  programaticamente voce pode
estabeceler uma nova conexão, mas o problema é que você tem de saber o que
se estava fazendo para recuperar-se da situação. Imagina que isso aconteceu
quando um loop populava uma lista de clientes, então o código que refaz a
conexão tem de ser sensivel ao contexto, você vai saber onde uma perda de
conexão vai ocorrer? pouco provável, então o mais sensato é seu codigo que
usa momentos de acesso a dados ser sensivel a perda da conexão e chamar
metodos de recuperação. Ou seja, não basta ter um evento OnDisconect, suas
leituras ao banco tem que usar uma especie de try...except e contornar o
erro.

Programadores que usam objetos visuais colocam seus componentes de conexão
a banco de dados num datamodulo e os forms recebem apenas os datasources,
toda conexão/reconexão é avaliada num unico lugar, isto é, no datamodulo.
Com isso, diminuem a chance de problemas.
Eu uso uma abordagem diferente, prefiro que cada form tenha sua própria
conexão e resiliência, faço isso componetizando ou criando classes.
Também há a possibilidade de programar usando datasnap, este sim, resolve
seu problema com resiliencia do começo ao fim. Tudo foi cacheado, e
trabalha-se offline o tempo todo até encontrar um .apply

inte+


Em 23 de fevereiro de 2015 18:44, <firebase em dominioinf.com.br> escreveu:

> Bom dia Gladiston,
>
> Obrigado pela resposta.
>
> Sobre o commitaction não é o problema.
>
> O problema é com a reconexão. O sistema fica com varios datasets abertos e
> são muitos.
> Quando ocorre uma queda de conexão, o sistema tenta reconectar e consegue,
> o problema
> é que quando o IBODatabase fecha, ele fecha todos os datasets que estão
> ligados a ele,
> e como não faço ideia de quantos sao e como estao abertos (suas instruções
> sql), eu tenho que reiniciar o sistema
> e abri-lo novamente, para todos os datasets se reorganizarem.
>
> Isso não ocorre no mysql por exemplo. Quando a conexão cai, usando o zeos
> com zconection.reconect o sistema reconecta
> e todos os datasets que estavam abertos, permanecem abertos, e o sistema
> refaz a ultima operação sem problema
> nenhum.
>
> Gostaria de saber se existe algo parecido no IBO.



Mais detalhes sobre a lista de discussão lista