Problema @Stateful - EJB 3

2 respostas
P

Galera, sou iniciante nos estudos sobre EJB e estou com o seguinte problema referente ao @Stateful já que ele é para guardar estado entre as requisições, mas, cada cliente é dono de uma instância: Crio uma instância do meu Bean (classe CarrinhoBean) dentro da minha servlet e chamo o método adicionaProduto normalmente através do meu JSP. Tudo é executado perfeitamente, mas a bronca esta quando abro um novo browser e chamo o método novamente, o estado é guardado, mas, os produtos são misturados entre as requisições. Por exemplo: abri o browser(cliente 1) e adicionei o produto 1 em seguida como o mesmo browser adicionei o produto 2 quando exibe o carrinho os dois produtos estão armazenados na minha coleção, até ai ok. quando abro um novo browser (cliente 2) e adiciono o produto 3 e solicito a exibição do carrinho aparecem todos os prpdutos que adicionei no (cliente 1) e também os que adicionei no (cliente 2).
Já que os beans @stateful são para guarda o estado e também para que cada instancia seja unica, por que é que quando exibo o carrinho depois de ter aberto o segundo browser (cliente 2) são mostrado todos os produtos adicionados???

agradeço.

2 Respostas

RenanRosa

pnneto3:
Galera, sou iniciante nos estudos sobre EJB e estou com o seguinte problema referente ao @Stateful já que ele é para guardar estado entre as requisições, mas, cada cliente é dono de uma instância: Crio uma instância do meu Bean (classe CarrinhoBean) dentro da minha servlet e chamo o método adicionaProduto normalmente através do meu JSP. Tudo é executado perfeitamente, mas a bronca esta quando abro um novo browser e chamo o método novamente, o estado é guardado, mas, os produtos são misturados entre as requisições. Por exemplo: abri o browser(cliente 1) e adicionei o produto 1 em seguida como o mesmo browser adicionei o produto 2 quando exibe o carrinho os dois produtos estão armazenados na minha coleção, até ai ok. quando abro um novo browser (cliente 2) e adiciono o produto 3 e solicito a exibição do carrinho aparecem todos os prpdutos que adicionei no (cliente 1) e também os que adicionei no (cliente 2).
Já que os beans @stateful são para guarda o estado e também para que cada instancia seja unica, por que é que quando exibo o carrinho depois de ter aberto o segundo browser (cliente 2) são mostrado todos os produtos adicionados???

agradeço.

o @Stateful guarda informações pro “resto da vida” (enquanto o servidor rodar)
utilize o stateless

gilmaslima

RenanRosa:
pnneto3:
Galera, sou iniciante nos estudos sobre EJB e estou com o seguinte problema referente ao @Stateful já que ele é para guardar estado entre as requisições, mas, cada cliente é dono de uma instância: Crio uma instância do meu Bean (classe CarrinhoBean) dentro da minha servlet e chamo o método adicionaProduto normalmente através do meu JSP. Tudo é executado perfeitamente, mas a bronca esta quando abro um novo browser e chamo o método novamente, o estado é guardado, mas, os produtos são misturados entre as requisições. Por exemplo: abri o browser(cliente 1) e adicionei o produto 1 em seguida como o mesmo browser adicionei o produto 2 quando exibe o carrinho os dois produtos estão armazenados na minha coleção, até ai ok. quando abro um novo browser (cliente 2) e adiciono o produto 3 e solicito a exibição do carrinho aparecem todos os prpdutos que adicionei no (cliente 1) e também os que adicionei no (cliente 2).
Já que os beans @stateful são para guarda o estado e também para que cada instancia seja unica, por que é que quando exibo o carrinho depois de ter aberto o segundo browser (cliente 2) são mostrado todos os produtos adicionados???

agradeço.

o @Stateful guarda informações pro “resto da vida” (enquanto o servidor rodar)
utilize o stateless

Segundo sua descrição vc precisa usar o Stateful mesmo proque você precisa guardar os estados, o Stateful tem passivação, então você não vai perder os dados e também e gerado um id para cada cliente(stub) então não era pra estar misturando as informações.

Posta seu código.

abraços!

Criado 3 de junho de 2011
Ultima resposta 3 de jun. de 2011
Respostas 2
Participantes 3