我是ejbs和cdi的新手。据我所知,有状态的ejb将数据存储在实例变量中,并在请求完成后销毁有状态的ejb。
我最近参加了面试,面试官问我在网上购物应用程序中会使用哪种ejb。
如果我必须在没有ejbs的情况下执行此操作,我会创建一个HttpSession,然后在会话中添加用户兴趣,然后向他显示另一个页面以继续或进行付款或退出。
如果我想使用有状态的ejbs完成相同的操作,我不明白我为什么要使用有状态的ejbs,它的意义是什么?因为一旦请求完成,ejb就会被销毁,用户兴趣/购物车细节也会被销毁。
其次我无法理解的是cdi,假设我将服务类注入到我的servlet中,因为只有一个服务类实例才会发生注入。当两个以上的请求到来时,有状态ejb的实例变量会被破坏。所以我想当我使用有状态的ejbs时,我必须使用@RequestScoped注释。我是对的吗?
答案 0 :(得分:3)
有状态会话bean将允许您存储与http会话相同的状态。使用http会话的优点我可以想到:
要在servlet中保存对有状态EJB的引用,您应该将@SessionScoped与@Inject一起使用,如answer
所示