在上下文中获取@EJB
Getting @EJB in the context
如此处所讨论的那样 要获取有状态会话 Bean 的相同实例,我必须将其保存在相关的 HttpSession 中。它运行良好,但在 servlet 中我这样做了:
SessionCart cart = (SessionCart) request.getSession().getAttribute("cart");
if (cart==null){
cart = new SessionCart();}
属性 "cart" 是我保存初始化购物车的地方。问题是,如果之前未初始化购物车,则行 cart=new SessionCart();初始化一个与Context无关的bean,所以@PercistenceContext得到的entitymanager为null。我尝试使用注释
@EJB
private SessionCart cart;
但是这个无论如何都会创建一个新的会话购物车,不受我的控制(所以如果我有一个与用户相关的购物车,我会创建一个新的并丢弃它......这不是很好)。我的问题是:我可以创建一个新的有状态会话 Bean 而不使用注释 @EJB 并使其与上下文相关吗?所以我可以控制何时创建它
如果我没记错的话,你想懒惰地初始化你的bean。
要在运行时 control/create 您的 bean,您可以使用 Instance<Bean>
Java EE API
在你的情况下它看起来像这样:
@Inject
private Instance<SessionCart> sessionCartInstance;
if (cart == null) {
cart = sessionCartInstance.get();
}
如此处所讨论的那样
SessionCart cart = (SessionCart) request.getSession().getAttribute("cart");
if (cart==null){
cart = new SessionCart();}
属性 "cart" 是我保存初始化购物车的地方。问题是,如果之前未初始化购物车,则行 cart=new SessionCart();初始化一个与Context无关的bean,所以@PercistenceContext得到的entitymanager为null。我尝试使用注释
@EJB
private SessionCart cart;
但是这个无论如何都会创建一个新的会话购物车,不受我的控制(所以如果我有一个与用户相关的购物车,我会创建一个新的并丢弃它......这不是很好)。我的问题是:我可以创建一个新的有状态会话 Bean 而不使用注释 @EJB 并使其与上下文相关吗?所以我可以控制何时创建它
如果我没记错的话,你想懒惰地初始化你的bean。
要在运行时 control/create 您的 bean,您可以使用 Instance<Bean>
Java EE API
在你的情况下它看起来像这样:
@Inject
private Instance<SessionCart> sessionCartInstance;
if (cart == null) {
cart = sessionCartInstance.get();
}