Problema injeção de dependencia

7 respostas
C

Boa Tarde Pessoal!

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  agradeço.

7 Respostas

rafadelnero

Não tenho certeza, mas tenta usar a anotação @ViewScoped.

Arthur_F_Ferreira

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.

C

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.

Arthur_F_Ferreira

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?

C

No Controller. É nele que eu instancio os objetos e passo para as classes abaixo para persistência e/ou consulta…

rafadelnero

Tenta usar o padrão prototype na configuração do seu applicationContext.Você já deve ter tentado mas se caso não…

C

O escopo da visão está prototype, conforme abaixo:

@Component

@Scope(prototype)

public class PedidoDeCompraVisao extends ManutencaoVisao{
Criado 28 de janeiro de 2013
Ultima resposta 28 de jan. de 2013
Respostas 7
Participantes 3