Thread na aplicacao WEB

7 respostas
D

Boa tarde.

Sempre ouvi falar mal sobre utilizar thread nas aplicacoes Web, li alguns artigos, mas nao encontrei nada que realmente me mostre os reais problemas da sua utilizacao.

Gostaria de saber se alguem tem alguma referencia sobre o assunto, ou ate mesmo uma opiniao.
Estou utilizando WebSphere 6.1, e o unico Framework que estou utilizando e o Struts, toda camada de persistencia estamo utilizando jdbc, pois na empresa e proibido a utilizacao de outros framework`s.

http://www.ibm.com/developerworks/library/specification/j-commonj-sdowmt/index.html

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/welc6tech_asb.html

http://www.theserverside.com/discussions/thread.tss?thread_id=39033

http://www.coderanch.com/t/156993/Architect-Certification-SCEA/certification/Using-threads-J-EE-application#765710

grato pela atencao

7 Respostas

F

Minha opinião sobre sua dúvida.

Pare um pouquinho e reflita sobre o que acontece no web server quando ele recebe centenas de requisições ao “mesmo tempo”. É isso ai, loucura total na memória da máquina servidora, e uma das coisas que ajuda a chegar neste milagre são justamente as threads; vc não as vê porque são criadas pelo servidor. Se vc pensar um pouco mais a fundo vai perceber que os objetos criados por nós executados pelo web server são atrelados de alguma maneira aos objetos criados por ele e consequentimente administrados pelas threads também por ele criadas.
Se criar mais threads no servidor vc estará criando linhas de execução adjacentes podendo causar travamentos, vazamento de memória e um contexto complicado para se encontrar possiveis bugs.

Logo, a idéia de criar threads em um servidor de aplicação é bem perigosa e por isso bastante desencorajada.

O servidor de aplicação constroi em sua execução um ambiente de multiplas execuções bastante organizado e seguro oferecendo serviços ao desenvolvedor, logo, a boa pratica prega que se vc apenas utilizar os serviços oferecidos por ele vc estará longe de problemas por assim dizer.

Espero ter ajudado.

flws

M

Se você sabe o que está fazendo, não tem problema nenhum, esses artigos são o mais puro FUD e bullshitagem.

Várias aplicações web comuns fazem uso de threads em servidores web em java, não há nenhum mal em se fazer isso, o problema é quando quem cria as trehads não sabe exatamente o que está fazendo (tem gente que manda os objetos HttpRequest e HttpResponse pra uma thread criada, esquecendo que eles existem apenas durante a execução da requisição e podem não estar mais disponíveis ou válidos na thread).

G

Vou falar com conhecimento de causa.

Estou fazendo uma aplicação web que faz uso de Multi-Threads.

Apesar de não ser uma boa prática, em alguns casos é realmente necessário, mas isso depende muito dos seus requisitos.

Uma forma de tentar contornar isso é usando MDB que fazem o processamento que vc faria em cada thread.

O problema dos MDBs seria retornar essa resposta, mas é uma alternativa interessante e não ‘anti-spec’ para multithreading.

No meu caso em específico não funcionou(JMS vai fazer vc perder acesso a session e , no meu caso, a contextos do Seam) então usei MultiThreading mesmo.

Até agora não tive problemas, volta e meia o jboss(4.2.3) que estou usando dá alguma exception sem sentido quando uso as threads, mas de igual maneira retorna todas as minhas respostas como eu gostaria.

Minha dica é: Multithreading em ambiente Web só em último caso, primeiramente porque é anti-spec e segundo que as vezes dá medo das exceptions loucas que ocorrem. Até agora não tive problemas, mas vai saber, perigoso arriscar porque caso dê algo errado, vc estará por conta própria.

É isso ai, pense bem antes de se arriscar nisso

Abs

J

Alguma alternativa ao uso delas??

G

JMS

O processamento do JMS é assíncrono, mas há uma observação importante dessa abordagem: Perde-se os dados da sessão, por isso tudo q for precisar, é bom vc passar como parâmetro na mensagem, esqueça entidades com lazy loading aqui.

Qq duvida avise.

Abs

J

Estou tendo muitos problemas com thread, dá uns erros ou deixa de processar uns registros e ninguém sabe pq, a questão de sessão nós já sabíamos só ficou a duvida do pq esses erros “do nada”.

G

Fale mais desses erros. Em que situação ocorrem, suas consequências, as expcetions que são lançadas.

Volta e meia aparece um erro aqui, gostaria de saber se é o mesmo.

Abs

Criado 26 de maio de 2009
Ultima resposta 21 de out. de 2009
Respostas 7
Participantes 5