Estou com um problema muito estranho e ao mesmo tempo muito serio. Tem uma aplicação java web que utiliza jsf + primefaces + hibernate e spring, a um tempo venho percebi algo muito estranho, quando dois usuários ou mais acessão o sistema o mesmo se comporta como se os usuários estivessem na mesma sessão exemplo:
O usuário A e B estão logados criando um pedido de compra, esse pedido de compra contem uma lista de itens, quando o usuário A adiciona itens na sua lista os mesmos itens são exibidos na tela do usuário b.
O estranho e que o MangeBean estão com os annotation : @ManagedBean, @Controller e @RequestScoped
Na mesma classe eu utilizo o @Inject do pacote import javax.inject.Inject; para acessar as classes refrente a outra camada exemplo:
@ManagedBean @Controller @RequestScoped
public class PedidoDeCompraControle{ @Inject
private PedidoDeCompraService pedidoDeCompraService;
.
.
.
Realizei um teste debugando, através do eclipse, com dois usuários acessando ao mesmo tempo e percebi que os objetos instanciados pela aplicação contem o mesmo ?id? ou seja ele ta criando um único objeto para todos os usuários.
Alguém tem alguma ideia de como eu posso consertar isso?
Desde já agradeço.
Seu pedido de compra tem de ser SessionScoped. Também não garanto se o ViewScoped funciona. O problema que pode acontecer é de dois pedidos acessarem a mesma informação e ter problema de concorrência.
Obrigado pela ajuda, mas nesse caso os dados da view serão perdidos, me obrigando a setá-los novamente não view. E isso não impediria de um outro usuários acessar a mesma instância da view depois que eu recarregar os dados. Mas, mesmo assim, muito obrigado pela ajuda. o problema passa pela reutilização da instância da view, como se sua injeção usa-se o padrão singleton.
Sim. Em Spring o escopo padrão é Singleton. Se você quiser um escopo diferente é você quem tem de dizer. O problema que você está passando com isso seria no service então? Ao invés de ser no Controller?