Dwr + annotation = instabilidade

Meus cumprimentos “javista” a todos…
Caros colegas to como um prob aki de atualizaçao de tabela dinamica (ajax frame dwr + annotation).

Dah seguinte forma:

tenho uma janela (mostrada abaixo) que de tempos em tempos (20000 msegundos ) suas duas tabelas sao atualizas buscando dados nao banco no servidor da aplicacao.

O codigo tah meu instavel, ora funciona ora nao. As vezes aparece empenho e ligacao corretos (ultimas inserçoes no banco) outra vez aparece empenho correto e ligacao erradas e vice versa.

Li algo ai na net sobre atualiazar via servidor mais nao entendi muito nem funcionou aki. Vi sobre polling, Comet e outros metodos apresantado mais nao obtive sucesso (referencia: http://directwebremoting.org/dwr).
O q parece eh que o dwr armazena lixo nas consultas e nao consegue exibir os dados corretos. Com o passar do tempo que a aplicaçao estah rodando o probabilidade de erro aumenta e os problemas começam a aparecer. Serah q existe uma metodo do dwr q limpa todos as referencia aos objetos da pagina?? sei lah!!!

Alguem tem um help ai ou alguma ideia do q poderia estar causando essa instabidade… ahhh se alguem souber de um exemplo ai de atualizar via server bem simples passa o link, please…


<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
      <!--<meta http-equiv="refresh" content="40">-->
      --<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title><bean:message key="janela.principal.title"></bean:message></title>
      <script type='text/javascript' src='/not/dwr/interface/Empenho.js'></script>
      <script type='text/javascript' src='/not/dwr/interface/Ligacao.js'></script>
      <script type='text/javascript' src='/not/dwr/engine.js'></script>
      <script type='text/javascript' src='/not/dwr/util.js'></script>
      <script type="text/javascript" >
         setTimeout("montaGrids",20000);
         function montaGrids()
         {
             DWRUtil.useLoadingMessage();
             carregaListEmpenho();
             carregaListLigacao();
             
         }
         function carregaListEmpenho()
         {
            Empenho.consultarTodos('EmpenhoForm',montaGridEmpenho);
         }
         function carregaListLigacao()
         {
            Ligacao.consultarTodos('LigacaoForm',montaGridLigacao);
         }
         function montaGridLigacao(list)
         {
            DWRUtil.removeAllRows('gridLigacao');
            var cellFuncs =
            [
             
              function(data)
              {
                 return data.hora_fato
              },
              function(data)
              {
                 return data.hora_ligacao;
              },
              function(data)
              {
                  return '<input id="inputLigacao" type="button" style="color:#FF0000" value="' + data.codigo + ' " onclick="chamaLigacao(this);"/>';
              },
              function(data)
              {
                 return '<input type="checkbox" name="cxNaoGeraBmo" value="GerarBmo" />';
              }
             
            ];
            DWRUtil.addRows('gridLigacao',list,cellFuncs,{ escapeHtml:false } );
              
         }  
         function montaGridEmpenho(list)
         {
            DWRUtil.removeAllRows('gridEmpenho');
            var cellFuncs =
            [
              function(data)
              {
                 return data.nomeAgente;
              },
              function(data)
              {
                 return data.numViatura;
              },
              function(data)
              {
                 return '<input id="inputEmpenho" type="button" value="'+ data.num_bmo + '" onclick="chamaEmpenho(this);"/>';
              }
            ];
            DWRUtil.addRows('gridEmpenho',list, cellFuncs, { escapeHtml:false } );
         }
         function fone(e)
         {
              var input = e.srcElement || e.target;
              value = input.value;
              value = value.replace(/\D/g,'').split('');
              var vL = value.length;
              for(var i=0;i < vL;i++)
              {
                      if(i == 0)
                      {
                       value[i] = '(' + value[i];
                       //value = abre + value;
                      } 
                      if(i == 2) 
                      {
                        //value = fecha + value;
                           value[i] = ')' + value[i];
                      }  
                      if (i ==5)
                      {    
                        //value = value + separador;
                        value[i] += '-';
                      }
               }
               input.value = value.join('');
         }
         function chamaEmpenho(input)  
         { 
             var empenho = input.value;
             var form = document.forms[0];
             form.action = 'MostraEmpenho.do?input=' + empenho + ''; 
             form.submit(); 
         } 
         function chamaLigacao(input)  
         { 
             var ligacao = input.value;
             var form = document.forms[0];
             if(form.cxNaoGeraBmo.checked)
             {
                form.action = '.do?input=' + ligacao + ''; 
             }
             else
             {
                form.action = 'MostraLigacao.do?input=' + ligacao + ''; 
             }   
             form.submit(); 
         }
         function chamaBusca()
         {
             var form = document.forms[1];
             var value = form.txtBusca.value;
             Empenho.consultarEmpenho(value,submeterBusca);
         }
         function submeterBusca(empenho)
         {
             if(empenho == null)
               alert('Empenho não existe.');
             else
             {
                var form = document.forms[1];
                var value = form.txtBusca.value;
                form.txtBusca.value = '';
                form.action = 'BuscaEmpenho.do?input=' + value + ''; 
                form.submit();
             } 
         }
         function chamaAltera()
         {
             var form = document.forms[1];
             var value = form.txtAltera.value;
             Empenho.consultarEmpenho(value,submeterAltera);
             
         }
         function submeterAltera(empenho)
         {
             if(empenho == null)
               alert('Empenho não existe.');
             else
             {
                var form = document.forms[1];
                var value = form.txtAltera.value;
                form.txtAltera.value='';
                form.action = 'AlterarBmo.do?input=' + value + ''; 
                form.submit();
             }
         }
         function Mascara(e)
          {
                 
                    var input = e.srcElement || e.target;
                    value = input.value;
                   
                    value = value.replace(/\D/g,'').split('');
                    vL = value.length;
                   
                    input.value = value.join('');
                   
          }
         
         function getDate()
           {
              
                Todays = new Date();
                TheDate = Todays.getDate() +"/"+ (Todays.getMonth()+1) + "/" +  Todays.getFullYear();
                 DWRUtil.setValue('txtData',TheDate);
           }
           function formatTime(e)
           {
           
            // pega elemento do evento
            var input = e.srcElement || e.target;
            // pega valor
               value = input.value;
           
            // tira os caracters invalidos e quebra string em partes N:1
            value = value.replace(/\D/g,'').split('');
           
            // pega tamanho
            vL = value.length;
            for(var i = 0; i < vL; i++)
            {
               // se for 1
                 if(i==1)
                 {
                    value[i] += ':';
                 }
              }
           
              // junta tudo e coloca como valor
              input.value = value.join('');
           }
           function getHora()
           {
                var hoje = new Date();
                var hora = hoje.getHours();
                var minuto = hoje.getMinutes();
                var HoraTrans = ""+ hora +":" + minuto;
                DWRUtil.setValue('txtHoraTrans',HoraTrans);
               
           }
           
          
          
     </script>
    </head>
    <body onload="montaGrids();" bgcolor="#6699FF">
     <OBJECT ID="Player" widht="300" height="250" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">
       <PARAM name="URL" value="phone.wma">
       <PARAM name="uiMode" value="invisible">
     </OBJECT>
     <table border="0" align="center">
       <thead>
          <tr>
               <form name="formPrincipal" action="" method="POST" target="_blank">
               <th>
                    <fieldset style="width: 20%;" >
                         &lt;legend align="center"&gt;<b>&lt;bean:message key="janela.principal.empenho"&gt;&lt;/bean:message&gt;</b>&lt;/legend&gt;
                         &lt;table border="1" align="center"&gt;
                              &lt;tr&gt;
                                   &lt;td&gt;<b>  Agente  </b>&lt;/td&gt;
                                   &lt;td&gt;<b>  Viatura </b>&lt;/td&gt;
                                   &lt;td&gt;<b>    Bmo   </b>&lt;/td&gt;
                              &lt;/tr&gt;
                              &lt;tbody id="gridEmpenho"&gt; &lt;/tbody&gt;
                         &lt;/table&gt;
                    &lt;/fieldset&gt;
               &lt;/th&gt;
               &lt;th&gt;
                   &lt;fieldset style="width: 20%;"&gt;
                        &lt;legend align="center"&gt;<b>&lt;bean:message key="janela.principal.ligacao"&gt;&lt;/bean:message&gt;</b>&lt;/legend&gt;
                        &lt;table border="1" align="center"&gt;
                             &lt;tr&gt;
                                  &lt;td&gt;<b>  Hora Fato   </b>&lt;/td&gt;
                                  &lt;td&gt;<b> Hora Ligação </b>&lt;/td&gt;
                                  &lt;td&gt;<b>   Ligação    </b>&lt;/td&gt;
                                  &lt;td&gt;<b>   Gerar Bmo    </b>&lt;/td&gt;
                             &lt;/tr&gt;
                             &lt;tbody id="gridLigacao"&gt;&lt;/tbody&gt;
                        &lt;/table&gt;
                   &lt;/fieldset&gt;
               &lt;/th&gt;
            &lt;/form&gt;  
          &lt;/tr&gt;
       &lt;/thead&gt;
    &lt;/table&gt;
    &lt;form name="formBusca" action="" method="POST" target="_blank"&gt;
        &lt;table border="0" align="center"&gt;
            &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td&gt;<b>&lt;bean:message key="janela.principal.busca"&gt;&lt;/bean:message&gt;</b>&lt;/td&gt;
                        &lt;td&gt;&lt;input type="text" name="txtBusca" value="" onkeyup="Mascara(event);" maxlength="5" size="10" /&gt;&lt;/td&gt;
                        &lt;td&gt;&lt;input type="button" value="Ok" onclick="chamaBusca();"name="bntBuscar" /&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                       &lt;td&gt;<b>&lt;bean:message key="janela.principal.altera"&gt;&lt;/bean:message&gt;</b>&lt;/td&gt;
                       &lt;td&gt;&lt;input type="text" name="txtAltera" value="" maxlength="5" onkeyup="Mascara(event);" size="10" /&gt;&lt;/td&gt;
                        &lt;td&gt;&lt;input type="button"  value="Ok" onclick="chamaAltera();"name="bntAlterar" /&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                         &lt;td&gt;
                             &lt;input type="button" value="Empenhar" onclick="window.open('pages/EmpenharViaRadio.jsp','Radio')" name="bntEmpenhar" /&gt; 
                         &lt;/td&gt;
                    &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/form&gt;
  &lt;/body&gt;
&lt;/html&gt;

Agradecido …
Ateh
Carlos Martins

vixiiiiii ninguem …

mais uma questao??? esse problema de atualizaçao nao pode ser a instancia do banco que ainda nao mudou apos a inserçao?? Se for, quando os dados for buscado a aplicaçao nao enxergarah a nova instancia (com a nova inserçao) ?? o q acham ?? se for alguem tem uma ideia como posso contornar isso ??

help me please !"!!