| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/01/2009 20:19:16
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Dando uma pesquisada no fórum vi que não é aconselhável usar threads dentro de aplicações web.
Na minha aplicação eu uso threads e ela roda no tomcat6, sendo que um determinado momento quando a aplicação começa a trabalhar realmente, o tomcat sai do ar.
Isso pode está acontecendo por causa das threads?
E outra coisa eu preciso fazer várias requisições sockets ao mesmo tempo, por isso o uso de threads, como poderia fazer isso sem threads? Tirar a parte da aplicação que usa threads e deixar rodando como um serviço do linux?
|
www.bau-de-dev.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/01/2009 21:12:36
|
Arnaldo Caetano
Debugger
Membro desde: 24/01/2009 10:36:07
Mensagens: 64
Localização: São Paulo
Offline
|
Sugiro a utilização do Spring Framework, ele possui classes para definição de Tarefas Temporizadas, Agendamento de tarefas, e muitos outros recursos que tornam o Tomcat um bom ambiente para rodar uma aplicação que vai além dos request/response de aplicações web!
|
Arnaldo Caetano
java.aquitemnovidades.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 09:19:14
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Sabe se no Spring eu consigo fazer tipo um serviço.... por exemplo quando um arquivo for "populado" e um tabela também disparar uma thread?
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 09:50:01
|
Arnaldo Caetano
Debugger
Membro desde: 24/01/2009 10:36:07
Mensagens: 64
Localização: São Paulo
Offline
|
Dê uma olhada na nesta documentação:
http://static.springframework.org/spring/docs/2.5.x/reference/scheduling.html#scheduling-task-executor
No projeto em que estou trabalhando, existe um serviço que é disparado por um Scheduler do Spring para sincronização de alterações de dados de cadastro entre servidores.
As alterações são informadas em uma tabela e o serviço temporizado (que é executado em uma thread) faz um pooling para verificar se existe dados para envio.
Criar um scheduler para enfileirar as tarefas de atualizações de arquivo e tabela pode ser melhor do que criar diversas threads manualmente. Threads consomem bastante recursos do sistema operacional e devem ser bem planejadas.
O pool de threads do Spring permite que a execução destas tarefas em thread sejam melhor dimensionadas.
|
Arnaldo Caetano
java.aquitemnovidades.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 10:01:47
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Sabe se eu consigo ter um desempenho bom com este framework, porque eu tenho que ficar "olhando" a tablea a cada 1ms, ou seja, assim que chegar algum dado ele tem que ser enviado via socket.
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 10:08:31
|
Arnaldo Caetano
Debugger
Membro desde: 24/01/2009 10:36:07
Mensagens: 64
Localização: São Paulo
Offline
|
1 ms é tempo-real praticamente...
quantos registros você teria por segundo...
|
Arnaldo Caetano
java.aquitemnovidades.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 10:12:16
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Isso depende do dia e sendo que o retorno de dados é configuárvel, por exemplo se chegarem 1000 registros naquele momento eu só posso trazer 200 e enviá-los.
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 10:16:29
|
Arnaldo Caetano
Debugger
Membro desde: 24/01/2009 10:36:07
Mensagens: 64
Localização: São Paulo
Offline
|
Acredito que o Scheduler vai atender o seu propósito, mas se o processamento dos dados demorar segundos, a próxima chamada só ocorrerá quando a chamada em execução for finalizada.
|
Arnaldo Caetano
java.aquitemnovidades.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 11:16:05
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
O problema é este, por isso eu estava usando um loop inifinito para isso, com duas threads. Porque não pode esperar acabar um para fazer outro.
Por exemplo, a aplicação foi no banco e pegou 200 linhas as 200 viram threads e são enviadas por sockets, se 80 forem processadas no mesmo instante, então, a aplicação vai no banco e pega mais 80.
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 12:29:31
|
Arnaldo Caetano
Debugger
Membro desde: 24/01/2009 10:36:07
Mensagens: 64
Localização: São Paulo
Offline
|
Usa um esquema de fila do JMS, apesar de você criar 200 threads, não significa que estas estarão sendo processadas simultaneamente. No fim as mensagens serão enfileiradas mesmo. Você pode colocar uma mensagem na fila e o JMS se encarrega de processar todas. Mensagens assíncronas!
This message was edited 1 time. Last update was at 29/01/2009 12:30:02
|
Arnaldo Caetano
java.aquitemnovidades.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 12:36:10
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Poderia explicar como funciona o JMS? Ou tem algum artigo que possa indicar?
Para que eu possa ver se atende as exigências.
|
www.bau-de-dev.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 12:57:22
|
Arnaldo Caetano
Debugger
Membro desde: 24/01/2009 10:36:07
Mensagens: 64
Localização: São Paulo
Offline
|
Tem o tutorial da SUN
http://java.sun.com/products/jms/tutorial/index.html
JMS - Java Messaging Service
Na documentação do Spring também tem alguma coisa sobre o assunto.
Uma implementação de JMS e Enterprise Integration Patterns (http://www.enterpriseintegrationpatterns.com/) é o ActiveMQ da Apache (http://activemq.apache.org/)
Sugiro uma consulta no ActiveMQ. Ele integra fácil com Spring.
|
Arnaldo Caetano
java.aquitemnovidades.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2009 13:37:37
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline
|
Muito obrigado vou ler sobre o assunto e sobre o ApacheMQ.
Aproveitando... estava pensando em usar o pool de conexões do tomcat, você sabe se o pool de conexões chegar no máximo de conexões o que acontece? A aplicação fica esperando até conseguir uma conexão?
Você conhece alguma ferramenta web de profiling boa, sem ser o probe? Ou você tem algum artigo ou documentação de como interprestar as informações que o probe tem?
|
www.bau-de-dev.com |
|
|
 |
|
|