Otimizar metodos em Servlets?

2 respostas
thiagorani

E ae pessoal,

To precisando implementar uma thread dentro de um servlet para fazer o processamento de um metodo, pois esse metodo possui um processamento demorado fazendo com que a performace do sistema caia bruscamente!
Meu servlet ja implementa SingleThreadModel, fazendo uma fila de acesso ao servlet! Como otimizar isso?
Alguem tem alguma idea?

[]´s

2 Respostas

claudio

Opa, calma-la amigo!

:slight_smile:

Vc nao deve criar threads dentro de servlets, uma vez que em um ambiente em cluster seria impossivel garantir que o estado das app seriam o mesmo, logo isso nao eh recomendado.

Se na sua app existir um cenario onde alguma operacao pode ser assincrona, ou seja, nao se necessita da resposta imediatamente, seria aconselhavel que vc montasse sua arquitetura usando JMS e MOM (Message Oriented Middleware):

A coisa funcionaria assim:

  1. a requisicao chega na Servlet e a Servlet coloca uma mensagem em uma fila JMS, dentro dessa mensagem tem um objeto que identifica a operacacao a ser efetuada. Depois disso a Servlet direciona para um jsp informando que a requisicao foi efetuada.

2.a) se vc estiver usando ejb 2.0 podera usar o MDBs, eles funcionam como listeners, quando uma mensagem cai na fila que o mdb ta escutando ele processa a mensagem!

2.b) se vc nao estiver usando ejb 2.0 ou se nao estiver usando ejb vc pode utilizar o pattern j2ee service activator, com ele vc pode criar um classe java normal para trabalhar como listener, quando uma mensagem cai na fila que um objeto dessa classe esta escutando, ele processa a mensagem, e pode chamar ejbs ou fazer consultas no db.
http://java.sun.com/blueprints/corej2eepatterns/Patterns/ServiceActivator.html

Abraco,

Paulo_Silveira

Thiago, SingleThreadModel eh uma faca na garganta do servlet container. 99% das vezes vc nao precisa sincronizar TODA a servlet, soh pedacos cruciais.

Outra coisa, o servlet container, variando de implementacao pra implementacao, eh ele quem decide se vai ou nao instanciar outra servlet para o SinglethreadModel. Pode ser que um cliente fique esperando HORAS, mas eh pq o ServletContainer achou que aquela quantidade de isntancias ja era razoavel.

No servlet 2.4, SingleThreadModel esta deprecated. Ja era hora.

Criado 24 de abril de 2003
Ultima resposta 24 de abr. de 2003
Respostas 2
Participantes 3