Web Service (Quase lá!)

7 respostas
B

Galera,

Estou desenvolvendo um cliente j2se que consome os serviços de uma aplicação. Até aí tudo beleza, consigo consumir o serviço, mostrar o resultado na minha jtable, porém gostaria de atualizar esse resultado de 5 em 5 segundos, ou seja, de 5 em 5 segundos ele busca novamente o resultado e atualiza a jtable.

Estou tentando usar thread, porém gostaria de saber se existe outra alternativa. ESTOU UTILIZANDO JAX-WS.

Obrigado!!!

7 Respostas

danieldestro

Thread que executa de tempos em tempos, re-executando a chamada.

T

Um javax.swing.Timer ou java.util.Timer é adequado para seu caso. (Elas usam internamente uma thread. Tome cuidado para seu método run (no caso de java.util.Timer, onde você estende a classe TimerTask) ou seu método actionPerformed (no caso de javax.swing.Timer, onde você implementa a interface ActionListener) não deixar escapar nenhuma RuntimeException, porque senão a thread que eles usam internamente “morre” e o timer pára de ser executado periodicamente.

B
Um javax.swing.Timer ou java.util.Timer é adequado para seu caso....

Duas dúvidas:
Seria mais adequado eu usar Timer na minha classe que acessa o Web Service, ou no formulário que exibe o resultado?
Vc pode dar um exemplo do uso do javax.swing.Timer que eu não tô coseguindo.

T

Isso é conforme a filosofia de seu programa. Se você quer amarrar o timer na interface gráfica (ela solicita periodicamente os dados chamando a classe que efetua a chamada de web services) não está errado; é que não sei se você separou o “model” do “controller” (se você estiver usando o modelo MVC).
Se você estiver usando MVC não é nem a interface gráfica nem a classe que chama os web services que deve chamar o timer, mas alguma outra coisa.

B

Caro thingol,

Não estou no trabalho e não tem como eu testar meu projeto, pois o serviço está na rede interna. Porém, se eu entendi sua sugestão, o código ficaria assim, ou está faltando alguma coisa?
public class PrincipalForm extends javax.swing.JFrame 
{
        
    // Método Construtor
    public PrincipalForm()
    {
        initComponents();         
        this.setExtendedState(MAXIMIZED_BOTH); // Maximiza a Janela
        
        Timer timer;
        timer = new Timer (5000, new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
                // Tabela SituacaoAgente
                SituacaoAgenteTableModel tableSituacaoAgente = new SituacaoAgenteTableModel();
                SituacaoAgenteWS wsSituacaoAgente = new SituacaoAgenteWS();
                //TesteAssincrono wsSituacaoAgente = new TesteAssincrono();
                tableSituacaoAgente.mostraResultado(wsSituacaoAgente.getSituacaoAgente());
                jXTableSituacaoAgente.setModel(tableSituacaoAgente);        
                jXTableSituacaoAgente.updateUI(); // Atualiza a view da table
            }
        }); 
        timer.start();
}
...........................
...........................
...........................
}
B

Caro thingol,

Muito obrigado pela ajuda! Desse jeito aqui deu certo! Veleu!!!

B

Galera,

Como eu poderia melhorar a performance do sistema. Pois ele ficou meio lentão, o q já era de se esperar, pois o código do timer está no construtor do meu forimuário principal. Tem alguma sugestão?

Valeu!!!

Criado 4 de julho de 2007
Ultima resposta 5 de jul. de 2007
Respostas 7
Participantes 3