olá a todos. estou precisando fazer um grafico que se atualize automaticamente de tempos em tempos mediante uma consulta do banco… Gostaria de saber se ja fez alguma coisa do tipo…
Esse gráfico tem que ficar em um monitor rodando direto…
olá a todos. estou precisando fazer um grafico que se atualize automaticamente de tempos em tempos mediante uma consulta do banco… Gostaria de saber se ja fez alguma coisa do tipo…
Esse gráfico tem que ficar em um monitor rodando direto…
Você terá que utilizar de Javascript (fazer um contador e realizar uma chamada) e Ajax (chamada).
Internet você acha tutorial sobre Ajax. [=
Caso você utilize JSF você pode utilizar o Primefaces. [=
olá a todos. estou precisando fazer um grafico que se atualize automaticamente de tempos em tempos mediante uma consulta do banco… Gostaria de saber se ja fez alguma coisa do tipo…Esse gráfico tem que ficar em um monitor rodando direto…
O temporizador vc pode fazer com window.setInterval em javascrit puro.O ajax pode ser feito em javascrit puro mas o melhor é usar jquery.
Você pode ter objetos contruídos na inicilização do servidor, que são atualizados com informações para o gráfico a partir de um timer(aconselho o uso do Quartz para agendamento de tarefa-JOB).
Com esses objetos sendo atualizados de tempos em tempos no servidor, basta configurar o client-side para que o mesmo “colete” as informações via AJAX, também de tempos em tempos, para isso basta utilizar novamente um timer(aconselho a usar a função setInterval do javascript).
Agora para apresentar os gráficos, eu te aconselho o uso do Google Chart API, pois ele gera diversos gráficos bonitos e simples de se utilizar.
<script type="text/javascript" >
//dar refresh de 1 em 1 segundo no servidor
setInterval(refreshImg, 1000);
function refreshImg(){
document.getElementById('image').src = 'ChartPage?acao=gerarGraficoRefresh&dataTime='+new Date().getTime();
}
</script>
<IMG BORDER="0" id="image" />
e no servidor vc usa alguma api como o jfreechart pra gerar a imagem
falow
Você pode ter objetos contruídos na inicilização do servidor, que são atualizados com informações para o gráfico a partir de um timer(aconselho o uso do Quartz para agendamento de tarefa-JOB).Com esses objetos sendo atualizados de tempos em tempos no servidor, basta configurar o client-side para que o mesmo “colete” as informações via AJAX, também de tempos em tempos, para isso basta utilizar novamente um timer(aconselho a usar a função setInterval do javascript).
Porque duplo timer ? Isso pode levar a coisas engraçadas porque tem que haver algum sincronismo entre o cara que escreve e o cara que lê as informações. Não ha necessidade disto. Um único timer é suficiente.
[/quote]
Agora para apresentar os gráficos, eu te aconselho o uso do Google Chart API, pois ele gera diversos gráficos bonitos e simples de se utilizar.[/quote]
Sim, é bom que use uma API cliente side e que o servidor apenas passe os dados. Usar o jfreechart ou coisa do tipo do lado do servidor, além de pesado, obriga o servidor a ter o AWT o que em alguns servidores linux não é default (perfira sistemas servidor headless).
Você pode ter objetos contruídos na inicilização do servidor, que são atualizados com informações para o gráfico a partir de um timer(aconselho o uso do Quartz para agendamento de tarefa-JOB).Com esses objetos sendo atualizados de tempos em tempos no servidor, basta configurar o client-side para que o mesmo “colete” as informações via AJAX, também de tempos em tempos, para isso basta utilizar novamente um timer(aconselho a usar a função setInterval do javascript).
Porque duplo timer ? Isso pode levar a coisas engraçadas porque tem que haver algum sincronismo entre o cara que escreve e o cara que lê as informações. Não ha necessidade disto. Um único timer é suficiente.
Agora para apresentar os gráficos, eu te aconselho o uso do Google Chart API, pois ele gera diversos gráficos bonitos e simples de se utilizar.
Sim, é bom que use uma API cliente side e que o servidor apenas passe os dados. Usar o jfreechart ou coisa do tipo do lado do servidor, além de pesado, obriga o servidor a ter o AWT o que em alguns servidores linux não é default (perfira sistemas servidor headless).
Ok, entendi o que você quis dizer, e já pensei deste modo no começo também, porém imagine o seguinte caso em que o client-side possuí um unico timer como vc disse, então a cada 5 minutos(por exemplo) o cliente faz uma requisição ao servidor ao qual retorna dados para a montagem/atualização de um gráfico, até ai tudo bem, agora imagine 100 pessoas com a mesma página aberta com timings diferentes, o servidor vai ficar sobrecarregado de requests pois em cada um se faz a busca pelos dados e os retorna para o cliente.
Por isso eu dei a idéia de se criar objetos na inicialização do servidor que os mesmo são carregados pelo próprio servidor de tempo em tempo e quando alguem faz o request o servidor simplesmente serializa algum desses objetos, dependendo de qual request, e o retorna para o cliente, sem sobrecarregar o banco de dados, porque afinal independente de quantos clientes fizerem request, somente o servidor estará alimentando os objetos a cada X segundos.
Ok, entendi o que você quis dizer, e já pensei deste modo no começo também, porém imagine o seguinte caso em que o client-side possuí um unico timer como vc disse, então a cada 5 minutos(por exemplo) o cliente faz uma requisição ao servidor ao qual retorna dados para a montagem/atualização de um gráfico, até ai tudo bem, agora imagine 100 pessoas com a mesma página aberta com timings diferentes, o servidor vai ficar sobrecarregado de requests pois em cada um se faz a busca pelos dados e os retorna para o cliente.Por isso eu dei a idéia de se criar objetos na inicialização do servidor que os mesmo são carregados pelo próprio servidor de tempo em tempo e quando alguem faz o request o servidor simplesmente serializa algum desses objetos, dependendo de qual request, e o retorna para o cliente, sem sobrecarregar o banco de dados, porque afinal independente de quantos clientes fizerem request, somente o servidor estará alimentando os objetos a cada X segundos.
Agora imagine que quando chega um request o servidor ainda não produzio a imagem. E agora? devolve a imagem antiga? espera pela nova ? Se devolve a antiga isto significa que irão pessar pelo menos 10 minutos entre as imagens que não é o que se pretente. Se espera pela nova , é um problema de concorrencia. O que vc pensou é um padrão produtor-consumidor com timers. Isto não é um bom padrão.
Se o servidor não consegue servir 100 pessoas simultaneamente, jogue fora. O servidor tem que conseguir servir as informaçoes rápidamente.
Vc pdoeria apelar para cache ( por exemplo guardando a info no escopo de aplicação) mas isso só é possivel se a informação não depende do session (do usuário).
Por outro lado ainda, só é preciso otimizar o que não funciona. Portanto é bom começar pelo mais simples e ir evoluindo conforme a necessidade.
Ok, entendi o que você quis dizer, e já pensei deste modo no começo também, porém imagine o seguinte caso em que o client-side possuí um unico timer como vc disse, então a cada 5 minutos(por exemplo) o cliente faz uma requisição ao servidor ao qual retorna dados para a montagem/atualização de um gráfico, até ai tudo bem, agora imagine 100 pessoas com a mesma página aberta com timings diferentes, o servidor vai ficar sobrecarregado de requests pois em cada um se faz a busca pelos dados e os retorna para o cliente.Por isso eu dei a idéia de se criar objetos na inicialização do servidor que os mesmo são carregados pelo próprio servidor de tempo em tempo e quando alguem faz o request o servidor simplesmente serializa algum desses objetos, dependendo de qual request, e o retorna para o cliente, sem sobrecarregar o banco de dados, porque afinal independente de quantos clientes fizerem request, somente o servidor estará alimentando os objetos a cada X segundos.
Agora imagine que quando chega um request o servidor ainda não produzio a imagem. E agora? devolve a imagem antiga? espera pela nova ? Se devolve a antiga isto significa que irão pessar pelo menos 10 minutos entre as imagens que não é o que se pretente. Se espera pela nova , é um problema de concorrencia. O que vc pensou é um padrão produtor-consumidor com timers. Isto não é um bom padrão.
Se o servidor não consegue servir 100 pessoas simultaneamente, jogue fora. O servidor tem que conseguir servir as informaçoes rápidamente.
Vc pdoeria apelar para cache ( por exemplo guardando a info no escopo de aplicação) mas isso só é possivel se a informação não depende do session (do usuário).
Por outro lado ainda, só é preciso otimizar o que não funciona. Portanto é bom começar pelo mais simples e ir evoluindo conforme a necessidade.
Mas onde que eu disse que usaria “imagem”, imagino que você esteja se referindo ao JFreeChart…
O servidor somente envia para o cliente dados serializados em json, xml, csv, tanto faz…o client que pega os dados e monta um gráfico, como puder.
Agora quanto aos dados estarem “novos” ou não, isso não interessa, desde que tenha o timing configurado corretamente.