Dúvida com beans de sessão

0 respostas
N

Olá pessoal,

Tenho uma dúvida à respeito dos beans de sessão. Melhor dizendo, sobre os estados de um bean de sessão. Segundo a teoria um bean de sessão stateless não mantém um estado de comunicação entre o cliente e o servidor e os valores das variáveis de instâncias são perdidos logo após a invocação do método. Até aí td bem.

Porém criei uma aplicação de teste para um carrinho de compras, onde informo um item em uma página jsp, a qual encaminha os dados para um servlet e este invoca um método no bean de sessão stateless que crei. para adicionar os itens à um ArrayList. Porém, o objeto ArrayList retorna os itens anteriores que tinha informado na página jsp. Segue o código fonte para ficar mais claro:

Bean de Sessão:

<blockquote>

@Stateless

public class PrimeiraBean implements PrimeiraLocal {

private ArrayList itens = new ArrayList();

private int qtdePedidos;
//adiciona itens ao carrinho de compras
public void addItem(String id) {
qtdePedidos+=1;
itens.add(id);
}

//retorna a qtde de elementos no carrinho
public int getQtdePedidos(){
return this.qtdePedidos;
}

//retorna o ArrayList contendo os itens do carrinho
public ArrayList getItens(){
return this.itens;
}
}</blockquote>

Servlet:

<blockquote>

public class AcessaEJB extends HttpServlet {

@EJB

private PrimeiraLocal primeiraBean;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");

try {
primeiraBean.addItem(request.getParameter("cbItens"));
System.out.println(primeiraBean.getQtdePedidos());
ArrayList itens = primeiraBean.getItens();
request.setAttribute("Itens", itens);
request.getRequestDispatcher("index.jsp").forward(request, response);
} finally {

}
}</blockquote>

E também o valor da qtde de pedidos é acumulada à cada chamada do bean de sessão.

Pela teoria o objeto ArrayList e a variável inteira não deveriam ser “destruídos” após o bean de sessão stateless finalizar?

Fico no aguardo de uma resposta. Desde já, agradeço.

Criado 11 de outubro de 2009
Respostas 0
Participantes 1