Fala Galera, seguinte, tenho um projeto web em que o usuário envia um arquivo e após isso é executado um processamento nesse arquivo.
Problema: O usuário deve esperar apenas o tempo de upload do arquivo, ou seja, o processamento deveria ser executado em Background. Eu sei que da pra fazer isso com o conceito de Thread-deamon, más to meio perdido pra comecar…
…:Eu estou usando o Vraptor, e no meu controller tem uma lógica chamada execute() que faz o processamento (Chamando uma Stored Procedure), essa lógica ou só o miolo dela que eu quero executar em Background…
Alguem tem alguma idéia?
Desde já agradeço.
[]s!
Leonardo Gloria
IMHO, se você estiver rodando a tua aplicação num AppServe completo (JBoss, Glassfish, Weblogic, etc), vale a pena utilizar JMS para processamentos assincronos. Não é uma boa prática criar Threads em aplicações web.
JMS é uma coisa que talvez dê um pouco de dor de cabeça pra configuração inicial, entendimento, etc, mas depois fica fácil adicionar novas filas de processamento assincrono. Eu recomendo.
Se estiver num Tomcat ou Jetty da vida, eu acho que não vale a pena instalar um serviço de fila só para um processamento assincrono, de repente vale a pena criar uma Thread mesmo.
Como já foi dito, se estiver usando um servidor de aplicações completo, pode se usar JMS para chamadas assincronas ou (usei recentemente) uma chamada para um Web Services assíncrono (Oneway). No caso do Web Services assíncrono, sei que o servidor BEA WebLogic consegue trabalhar, não sei outros, acredito que sim.
E como é Web Services, talvez até o Apache Tomcat consiga implementar chamadas assíncronas. Por favor, faça um teste, no meu caso esta funcionando e como no sistema existem várias chamadas para Web Services, apenas criei mais uma.
Obs: Não usei JMS nesse sistema porque não tinhamos muito tempo para configurar o servidor, além de regras da empresa cliente.
De onde vc tirou isso? Que eu saiba essa é uma restrição imposta por servidores de aplicação mas aplicações web?
Claro que voce não deve criar uma thread por requisição porque estaria colocando sua aplicação web numa situação de vunerabilidade a usuários que poderiam consumir todos os recursos do servidor fazendo um flood de conexoes, mas criar uma thread numa aplicação web ser considerado anti-pattern, nunca ouvi falar disso.
Como já foi dito, se estiver usando um servidor de aplicações completo, pode se usar JMS para chamadas assincronas ou (usei recentemente) uma chamada para um Web Services assíncrono (Oneway). No caso do Web Services assíncrono, sei que o servidor BEA WebLogic consegue trabalhar, não sei outros, acredito que sim.
E como é Web Services, talvez até o Apache Tomcat consiga implementar chamadas assíncronas. Por favor, faça um teste, no meu caso esta funcionando e como no sistema existem várias chamadas para Web Services, apenas criei mais uma.
Obs: Não usei JMS nesse sistema porque não tinhamos muito tempo para configurar o servidor, além de regras da empresa cliente.
Como já foi dito, se estiver usando um servidor de aplicações completo, pode se usar JMS para chamadas assincronas ou (usei recentemente) uma chamada para um Web Services assíncrono (Oneway). No caso do Web Services assíncrono, sei que o servidor BEA WebLogic consegue trabalhar, não sei outros, acredito que sim.
E como é Web Services, talvez até o Apache Tomcat consiga implementar chamadas assíncronas. Por favor, faça um teste, no meu caso esta funcionando e como no sistema existem várias chamadas para Web Services, apenas criei mais uma.
Obs: Não usei JMS nesse sistema porque não tinhamos muito tempo para configurar o servidor, além de regras da empresa cliente.
Abraços.[/quote]
Porque vc acha que se trata de um webservice?[/quote]
Oi, você me intepretou mal.
Não disse que a aplicação de nosso colega é Web Services, e sim, se ele escolhesse Web Services Assíncrono poderia rodar até com o Tomcat mesmo (“E como é Web Services, talvez até o Apache Tomcat consiga…”).
Fala Galera, desculpa a demora.
Obrigado a todos, eu acho q vo ter q usar Threads mesmo, o servidor é o velho e bom tomcat, por isso n rola de usar EJB’s. Eu vo dar uma estudada nisso, qualquer dúvida eu posto aí!