JSF e thread-safety

5 respostas
tnaires

Olá

Tem um trecho do livro Core JSF que diz o seguinte:

Pergunto:

  1. Se meu managed bean contiver somente propriedades que correspondam aos campos da página correspondente, preciso me preocupar com isso?
  2. Alguém pode dar um exemplo de uma situação que exija que um bean com escopo de sessão seja thread-safe?
    Abraços

5 Respostas

tnaires
Vou ilustrar com um exemplo. Suponham o seguinde managed bean com escopo de sessão:
public class Bean {
    private String property1;
    private String property2;

    // getters e setters;
}
Um cliente, a partir da página correspondente, envia duas requisições simultâneas:

1) property1 = "A", property2 = "B";
2) property1 = "C", property2 = "D".

Teremos duas threads trabalhando com a mesma instância do bean, uma para cada requisição. Isso poderá causar algum tipo de efeito colateral, como mistura dos valores de propriedades de uma requisição com a outra?

Ilustrem para efeitos didáticos, por favor, um exemplo de qualquer problema que poderia acontecer com o fato de managed beans com escopo superior a request não serem thread-safe.

Abraços.

tnaires

Bom, tentei realizar uns testes simples abrindo duas janelas do mesmo navegador mas não consegui reproduzir uma eventual falha.

G

bom o caso que vc ilustrou, é chamado de dupla submissao (me corrijam se eu estiver errado), vc n conseguiu reprocusir o evento, pq é humanamente impossivel de faze-lo xD, so com ajuda de algum script ou algo do genero (n tem como vc clicar tao rapido q envie duas requisoes ao mesmo tempo). No jsf, deve existir alguma forma de tratar tal evento, que eu desconheço. Mas como uso richfaces, ele possui algumas formas de tratamento a esses eventos, da uma olhada na documentaçao do commandbutton por exemplo ( aqui).

Não sei se ajuda, mas qql coisa posta ai…

tnaires

guimoz:
bom o caso que vc ilustrou, é chamado de dupla submissao (me corrijam se eu estiver errado), vc n conseguiu reprocusir o evento, pq é humanamente impossivel de faze-lo xD, so com ajuda de algum script ou algo do genero (n tem como vc clicar tao rapido q envie duas requisoes ao mesmo tempo). No jsf, deve existir alguma forma de tratar tal evento, que eu desconheço. Mas como uso richfaces, ele possui algumas formas de tratamento a esses eventos, da uma olhada na documentaçao do commandbutton por exemplo ( aqui).

Não sei se ajuda, mas qql coisa posta ai…


Obrigado pela resposta. Sei que o que você quis dizer foi: “putz, esse cara ainda foi testar isso?” :XD: Quando li o trecho do livro que postei acima, percebi o mesmo que você. Mas como o autor alertou sobre esse risco, executei o teste mesmo assim para saber se em algum momento no ciclo de vida da requisição os dados poderiam se perder, por mais que o tempo entre uma submissão e outra não fosse tão pequeno.

Mauricio_Linhares

O problema mais comum é o de atualizações perdidas, onde você, em uma janela, faz uma atualização e em outra (aberta antes de enviar a primeira atualização) você atualiza mais uma vez, perdendo efetivametne o primeiro update.

Agora isso é bem incomum dentro de uma sessão do mesmo usuário.

Criado 19 de abril de 2009
Ultima resposta 22 de abr. de 2009
Respostas 5
Participantes 3