Ajuda com Threads em projeto web  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Leonardo Gloria
JavaTeenager
[Avatar]

Membro desde: 02/02/2009 08:49:41
Mensagens: 155
Localização: Niterói, Rio de Janeiro
Offline

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


--
[]s!
Leonardo Gloria

Sun Certified Java Programmer.
Oracle / Sun Certified Web Component Developer
Maratonista de Programação.. (Caveira)
---------------------------------------------
"... My Brother of Sword! I would rather fight beside you than any army of thousand. Let no man forget how menacing we are, we are LIONS! Do you know what's that, waiting, beyond that beach? Immortality! Take it! It's yours!" Achilles
bruno.fantin
JavaChild
[Avatar]

Membro desde: 26/01/2009 14:12:13
Mensagens: 148
Offline

Já pensou em usar MDB para isso?
[WWW]
Leonardo Gloria
JavaTeenager
[Avatar]

Membro desde: 02/02/2009 08:49:41
Mensagens: 155
Localização: Niterói, Rio de Janeiro
Offline

MDB = ?

[]s!
Leonardo Gloria

--
[]s!
Leonardo Gloria

Sun Certified Java Programmer.
Oracle / Sun Certified Web Component Developer
Maratonista de Programação.. (Caveira)
---------------------------------------------
"... My Brother of Sword! I would rather fight beside you than any army of thousand. Let no man forget how menacing we are, we are LIONS! Do you know what's that, waiting, beyond that beach? Immortality! Take it! It's yours!" Achilles
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

Thread-daemon???

Qual o problema em usar uma Thread convencional? Voce quer saber como criar uma thread em Java? É isso?
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

bruno.fantin wrote:Já pensou em usar MDB para isso?


Esta sugerindo que ele use um AppServer com suporte a EJB só pra processar algo em background?
Rubem Azenha
GUJ Master
[Avatar]

Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline

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.



Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
[WWW]
eduardoac
JavaChild
[Avatar]

Membro desde: 09/06/2007 18:07:55
Mensagens: 111
Localização: São Paulo
Offline

Leonardo, boa tarde!

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.

SCJA - Sun Certified Java Associate

JAVA Developer
(Java, a principal ilha da Indonésia)
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

Rubem Azenha wrote:Não é uma boa prática criar Threads em aplicações web.


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.

This message was edited 1 time. Last update was at 17/12/2009 19:10:20

mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

eduardoac wrote:Leonardo, boa tarde!

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.


Porque vc acha que se trata de um webservice?
eduardoac
JavaChild
[Avatar]

Membro desde: 09/06/2007 18:07:55
Mensagens: 111
Localização: São Paulo
Offline

mochuara wrote:
eduardoac wrote:Leonardo, boa tarde!

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.


Porque vc acha que se trata de um webservice?


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...").

Abraços!

SCJA - Sun Certified Java Associate

JAVA Developer
(Java, a principal ilha da Indonésia)
jgbt
GUJ Master
[Avatar]

Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline

Bom,
acho que vc pode utilizar threads sem problemas.

Mas se vc optar por JMS e não usa um app server, sugiro o HornetQ, bem simples e facil de usar.
http://www.jboss.org/hornetq

[]´s

João Bier
Desenvolvedor Java
[Email]
Leonardo Gloria
JavaTeenager
[Avatar]

Membro desde: 02/02/2009 08:49:41
Mensagens: 155
Localização: Niterói, Rio de Janeiro
Offline

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í!

--
[]s!
Leonardo Gloria

Sun Certified Java Programmer.
Oracle / Sun Certified Web Component Developer
Maratonista de Programação.. (Caveira)
---------------------------------------------
"... My Brother of Sword! I would rather fight beside you than any army of thousand. Let no man forget how menacing we are, we are LIONS! Do you know what's that, waiting, beyond that beach? Immortality! Take it! It's yours!" Achilles
Leonardo Gloria
JavaTeenager
[Avatar]

Membro desde: 02/02/2009 08:49:41
Mensagens: 155
Localização: Niterói, Rio de Janeiro
Offline

Fala galera, to batendo cabeça ainda...
Vou postar um pedaço do código pra vcs terem uma ideia.. Doque eu não estou conseguindo executar.


Oq eu preciso é que o método run seja executado depois que o Vraptor direcione para executa.jsp.. Não estou conseguindo fazer isso nem com macumba...

[]s!
Leonardo Gloria

--
[]s!
Leonardo Gloria

Sun Certified Java Programmer.
Oracle / Sun Certified Web Component Developer
Maratonista de Programação.. (Caveira)
---------------------------------------------
"... My Brother of Sword! I would rather fight beside you than any army of thousand. Let no man forget how menacing we are, we are LIONS! Do you know what's that, waiting, beyond that beach? Immortality! Take it! It's yours!" Achilles
marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

Como está o trecho que faz o redirecionamento?

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[Email] [WWW] [MSN]
furutani
JWizard
[Avatar]

Membro desde: 11/10/2003 23:58:51
Mensagens: 2995
Localização: Iacri-SP e São Paulo-SP
Offline

Para executar algo em background, como envio de emails em massa, uso a java.util.TimerTask.
Oq eu preciso é que o método run seja executado depois que o Vraptor direcione para executa.jsp.. Não estou conseguindo fazer isso nem com macumba...

Esse redirecionamento não é possivel, pois a thread que atendeu a requisição do browser já se foi, além de na thread vc não ter mais o response .

Até mais,
Roberto Jundi Furutani


Sun Certified Business Component Developer 1.3
Sun Certified Web Component Developer
Sun Certified Java Programmer
SAP Certified Development Associate - ABAP with SAP NetWeaver 7.0

[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team