想要在两个servlet中使用相同的EJB,但它们似乎使用不同的EJB,即使EJB被标记为@Stateful?

时间:2013-01-30 12:34:50

标签: java-ee servlets ejb ejb-3.1

我有一个有状态的EJB充当购物车。我有两个servlet,其中一个用于将产品添加到购物车。另一个用于检索购物车信息,即。购物车中的产品和数量。

购物车在请求之间保持其状态,就像AddToCartServlet一样。然而,当使用ShoppingCartInfoServlet时,即使购物车中有多个产品,购物车中的产品列表也是0。因此,当我在ShoppingCartInfoServlet中时,似乎我没有获得相同的EJB。当然它应该是与我注释为@Stateful一样的EJB?

@Stateful
public class ShoppingCart {
    List<Product> products;

    ...
}

public class AddToCartServlet extends HttpServlet {
    @EJB
    ShoppingCart shoppingCart;

    ...
}

public class ShoppingCartInfoServlet extends HttpServlet {
    @EJB
    ShoppingCart shoppingCart;

    ...
}

1 个答案:

答案 0 :(得分:3)

有状态意味着同一个客户端(在这种情况下是servlet)将通过多个方法调用继续与同一个实例进行通信。

另一个客户端(Servlet)将获得它自己的实例。您必须将bean存储在http会话中才能实现所需。

Using a Stateful Session Bean to track an user's session